Collections Data Structure Java

/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 *
 * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
 *
 * The contents of this file are subject to the terms of either the GNU
 * General Public License Version 2 only ("GPL") or the Common
 * Development and Distribution License("CDDL") (collectively, the
 * "License"). You may not use this file except in compliance with the
 * License. You can obtain a copy of the License at
 * http://www.netbeans.org/cddl-gplv2.html
 * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
 * specific language governing permissions and limitations under the
 * License.  When distributing the software, include this License Header
 * Notice in each file and include the License file at
 * nbbuild/licenses/CDDL-GPL-2-CP.  Sun designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Sun in the GPL Version 2 section of the License file that
 * accompanied this code. If applicable, add the following below the
 * License Header, with the fields enclosed by brackets [] replaced by
 * your own identifying information:
 * "Portions Copyrighted [year] [name of copyright owner]"
 *
 * Contributor(s):
 *
 * The Original Software is NetBeans. The Initial Developer of the Original
 * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
 * Microsystems, Inc. All Rights Reserved.
 *
 * If you wish your version of this file to be governed by only the CDDL
 * or only the GPL Version 2, indicate your decision by adding
 * "[Contributor] elects to include this software in this distribution
 * under the [CDDL or GPL Version 2] license." If you do not indicate a
 * single choice of license, a recipient has the option to distribute
 * your version of this file under either the CDDL, the GPL Version 2 or
 * to extend the choice of license to its licensees as provided above.
 * However, if you add GPL Version 2 code and therefore, elected the GPL
 * Version 2 license, then the option applies only if the new code is
 * made subject to such option by the copyright holder.
 */
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.NoSuchElementException;
/**
 * @since 4.37
 * @author Jaroslav Tulach
 */
public class Utils {
  /**
   * Concatenates the content of two enumerations into one.
   * Until the
   * end of en1 is reached its elements are being served.
   * As soon as the en1 has no more elements, the content
   * of en2 is being returned.
   *
   * @param en1 first enumeration
   * @param en2 second enumeration
   * @return enumeration
   */
  public static  Enumeration concat(Enumeration en1, Enumeration en2) {
      ArrayList> two = new ArrayList>();
      two.add(en1);
      two.add(en2);
      return new SeqEn(Collections.enumeration(two));
  }
}
class SeqEn extends Object implements Enumeration {
  /** enumeration of Enumerations */
  private Enumeration> en;
  /** current enumeration */
  private Enumeration current;
  /** is {@link #current} up-to-date and has more elements?
  * The combination current == null and
  * checked == true means there are no more elements
  * in this enumeration.
  */
  private boolean checked = false;
  /** Constructs new enumeration from already existing. The elements
  * of en should be also enumerations. The resulting
  * enumeration contains elements of such enumerations.
  *
  * @param en enumeration of Enumerations that should be sequenced
  */
  public SeqEn(Enumeration> en) {
      this.en = en;
  }
  /** Ensures that current enumeration is set. If there aren't more
  * elements in the Enumerations, sets the field current to null.
  */
  private void ensureCurrent() {
      while ((current == null) || !current.hasMoreElements()) {
          if (en.hasMoreElements()) {
              current = en.nextElement();
          } else {
              // no next valid enumeration
              current = null;
              return;
          }
      }
  }
  /** @return true if we have more elements */
  public boolean hasMoreElements() {
      if (!checked) {
          ensureCurrent();
          checked = true;
      }
      return current != null;
  }
  /** @return next element
  * @exception NoSuchElementException if there is no next element
  */
  public T nextElement() {
      if (!checked) {
          ensureCurrent();
      }
      if (current != null) {
          checked = false;
          return current.nextElement();
      } else {
          checked = true;
          throw new java.util.NoSuchElementException();
      }
  }
}