/* * Copyright 2008 the original author or authors. * * Licensed 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 * * http://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.wamblee.system.core; import java.lang.reflect.Array; import java.util.Arrays; import java.util.Collections; import java.util.Iterator; import java.util.List; /** * A set of interfaces that cannot be changed with useful added functionality. * * @author Erik Brakkee * * @param */ public class ReadOnlyNamedInterfaces implements Iterable { private Class _type; private List _interfaces; public ReadOnlyNamedInterfaces(Class aType, List aInterfaces) { _type = aType; _interfaces = Collections.unmodifiableList(aInterfaces); } /** * @return Number of interfaces. */ public int size() { return _interfaces.size(); } /** * Gets the interface at a given index. * @param aIndex Index of the interface to return. * @return Interface. */ public T get(int aIndex) { return _interfaces.get(aIndex); } /** * Gets the interface with a specific name. * @param aName Interface name. * @return Interface. */ public T get(String aName) { for (T intf: _interfaces) { if ( intf.getName().equals(aName)) { return intf; } } return null; } @Override public Iterator iterator() { return _interfaces.iterator(); } /** * Converts the interfaces to an array. * @return List of interfaces in an array. */ public T[] toArray() { T[] storage = (T[])Array.newInstance(_type, _interfaces.size()); return _interfaces.toArray(storage); } }