package com.yoursway.ide.application.view.impl; import static com.google.common.collect.Iterables.filter; import static com.google.common.collect.Lists.newArrayList; import java.util.Collection; import com.google.common.base.Predicate; import com.yoursway.ide.application.view.ViewDefinition; import com.yoursway.ide.application.view.ViewDefinitionFactory; import com.yoursway.utils.UniqueId; public class ViewDefinitionFactoryImpl implements ViewDefinitionFactory { private final Collection<ViewDefinitionImpl> viewDefinitions = newArrayList(); public Collection<? extends ViewDefinition> filterByArea(final ViewArea area) { return newArrayList(filter(viewDefinitions, new Predicate<ViewDefinitionImpl>() { public boolean apply(ViewDefinitionImpl t) { return t.area() == area; } })); } // public ViewDefinition findOneByRole(final ViewSiteRole role) { // Collection<? extends ViewDefinition> result = filterByArea(role); // if (result.isEmpty()) // return null; // if (result.size() > 1) // throw new AssertionError("Should not have allowed registering multiple views with role " + role); // return result.iterator().next(); // } public ViewDefinition defineView(UniqueId uniqueId, ViewArea area) { if (!area.areMultipleContributionsAllowed() && !filterByArea(area).isEmpty()) throw new IllegalStateException("Cannot register multiple views in area " + area); ViewDefinitionImpl result = new ViewDefinitionImpl(uniqueId, area); viewDefinitions.add(result); return result; } }