package org.xpect.xtext.lib.setup.workspace; import java.io.IOException; import java.util.List; import org.eclipse.core.resources.IContainer; import org.eclipse.core.runtime.CoreException; import org.xpect.xtext.lib.setup.FileSetupContext; import com.google.common.collect.Lists; public class Container<C extends IContainer> extends Resource<C> { private final List<IResourceFactory<?, ? super C>> memberFactories = Lists.newArrayList(); public void add(IResourceFactory<?, ? super C> factory) { this.memberFactories.add(factory); } protected void createMembers(FileSetupContext ctx, C container, Workspace.Instance instance) throws IOException, CoreException { for (IResourceFactory<?, ? super C> factory : memberFactories) factory.create(ctx, container, instance); } public List<IResourceFactory<?, ? super C>> getMemberFactories() { return memberFactories; } @SuppressWarnings("unchecked") public <T extends IResourceFactory<?, ?>> List<T> getMembers(Class<T> type) { List<T> result = Lists.newArrayList(); for (IResourceFactory<?, ? super C> member : memberFactories) if (type.isInstance(member)) result.add((T) member); return result; } @SuppressWarnings("unchecked") public <T extends IResourceFactory<?, ?>> T getMember(Class<T> type) { for (IResourceFactory<?, ? super C> member : memberFactories) if (type.isInstance(member)) return (T) member; return null; } }