package org.eclipse.uml2.diagram.common.links; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.uml2.diagram.common.genapi.IUpdaterLinkDescriptor; import org.eclipse.uml2.diagram.common.preferences.UMLPreferencesConstants; public class InterfaceLinkManager { private boolean ourHideProvidedInterfaceLinks; private boolean ourHideRequiredInterfaceLinks; private boolean ourHideInterfaceRealizationLinks; private boolean ourHideUsageLinks; private final List<ILinkFilter> myLinkManagers; private final ILinkDetector myLinkDetector; public InterfaceLinkManager(Collection<IUpdaterLinkDescriptor> linkDescriptors, IPreferenceStore store, ILinkDetector linkDetector) { myLinkDetector = linkDetector; myLinkManagers = new ArrayList<ILinkFilter>(5); refreshOptions(store); buildTable(linkDescriptors); } public Collection<IUpdaterLinkDescriptor> getFilteredLinkDescriptors() { Collection<IUpdaterLinkDescriptor> result = new ArrayList<IUpdaterLinkDescriptor>(); for (ILinkFilter manager : myLinkManagers) { result.addAll(manager.getFilteredLinks()); } return result; } private void initFilters() { if (!ourHideProvidedInterfaceLinks) { myLinkManagers.add(new ProvidedInterfaceLinkFilter(myLinkDetector)); } if (!ourHideRequiredInterfaceLinks) { myLinkManagers.add(new RequiredInterfaceLinkFilter(myLinkDetector)); } if (!ourHideInterfaceRealizationLinks) { myLinkManagers.add(new InterfaceRealizationLinkFilter(myLinkDetector)); } if (!ourHideUsageLinks) { myLinkManagers.add(new UsageLinkFilter(myLinkDetector)); } myLinkManagers.add(new DefaultLinkFilter(myLinkDetector)); } private void refreshOptions(IPreferenceStore store) { ourHideProvidedInterfaceLinks = store.getBoolean(UMLPreferencesConstants.PREF_MANAGE_LINKS_HIDE_PROVIDED_INTERFACE_LINKS); ourHideRequiredInterfaceLinks = store.getBoolean(UMLPreferencesConstants.PREF_MANAGE_LINKS_HIDE_REQUIRED_INTERFACE_LINKS); ourHideInterfaceRealizationLinks = store.getBoolean(UMLPreferencesConstants.PREF_MANAGE_LINKS_HIDE_INTERFACE_REALIZATION_LINKS); ourHideUsageLinks = store.getBoolean(UMLPreferencesConstants.PREF_MANAGE_LINKS_HIDE_USAGE_LINKS); } private void buildTable(Collection<IUpdaterLinkDescriptor> linkDescriptors) { initFilters(); for (IUpdaterLinkDescriptor next : linkDescriptors) { for (ILinkFilter manager : myLinkManagers) { manager.visit(next); } } } }