blob: 4e711e0172ed31024ec487e51a619421de04dc0f [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.tools.ant.taskdefs.optional.junit;
import java.util.Arrays;
import java.util.Collections;
import java.util.Enumeration;
import java.util.NoSuchElementException;
/**
* A couple of methods related to enumerations that might be useful.
* This class should probably disappear once the required JDK is set to 1.2
* instead of 1.1.
*
*/
@Deprecated
public final class Enumerations {
private Enumerations() {
}
/**
* creates an enumeration from an array of objects.
* @param <T> object type
* @param array the array of object to enumerate.
* @return the enumeration over the array of objects.
* @deprecated use Collections.enumeration(Arrays.asList(array))
*/
@Deprecated
@SafeVarargs
public static <T> Enumeration<T> fromArray(T... array) {
return Collections.enumeration(Arrays.asList(array));
}
/**
* creates an enumeration from an array of enumeration. The created enumeration
* will sequentially enumerate over all elements of each enumeration and skip
* <code>null</code> enumeration elements in the array.
* @param <T> object type
* @param enums the array of enumerations.
* @return the enumeration over the array of enumerations.
* @deprecated use Stream.concat(Collections.list(one).stream(), Collections.list(two).stream())
* .collect(Collectors.collectingAndThen(Collectors.toList(), Collections::enumeration))
*/
@Deprecated
@SafeVarargs
public static <T> Enumeration<T> fromCompound(Enumeration<? extends T>... enums) {
return new CompoundEnumeration<>(enums);
}
}
/**
* Convenient enumeration over an array of enumeration. For example:
* <pre>
* Enumeration e1 = v1.elements();
* while (e1.hasMoreElements()) {
* // do something
* }
* Enumeration e2 = v2.elements();
* while (e2.hasMoreElements()) {
* // do the same thing
* }
* </pre>
* can be written as:
* <pre>
* Enumeration[] enums = { v1.elements(), v2.elements() };
* Enumeration e = Enumerations.fromCompound(enums);
* while (e.hasMoreElements()) {
* // do something
* }
* </pre>
* Note that the enumeration will skip null elements in the array. The following is
* thus possible:
* <pre>
* Enumeration[] enums = { v1.elements(), null, v2.elements() }; // a null enumeration in the array
* Enumeration e = Enumerations.fromCompound(enums);
* while (e.hasMoreElements()) {
* // do something
* }
* </pre>
*/
@Deprecated
class CompoundEnumeration<T> implements Enumeration<T> {
/** enumeration array */
private Enumeration<? extends T>[] enumArray;
/** index in the enums array */
private int index = 0;
@SafeVarargs
public CompoundEnumeration(Enumeration<? extends T>... enumarray) {
this.enumArray = enumarray;
}
/**
* Tests if this enumeration contains more elements.
*
* @return <code>true</code> if and only if this enumeration object
* contains at least one more element to provide;
* <code>false</code> otherwise.
*/
@Override
public boolean hasMoreElements() {
while (index < enumArray.length) {
if (enumArray[index] != null && enumArray[index].hasMoreElements()) {
return true;
}
index++;
}
return false;
}
/**
* Returns the next element of this enumeration if this enumeration
* object has at least one more element to provide.
*
* @return the next element of this enumeration.
* @throws NoSuchElementException if no more elements exist.
*/
@Override
public T nextElement() throws NoSuchElementException {
if (hasMoreElements()) {
return enumArray[index].nextElement();
}
throw new NoSuchElementException();
}
}