package org.eclipse.incquery.runtime.patternregistry; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import org.eclipse.incquery.patternlanguage.patternLanguage.Pattern; import org.eclipse.incquery.runtime.patternregistry.listeners.IPatternRegistryListener; public enum PatternRegistry { INSTANCE; private final List<IPatternRegistryListener> listeners = new ArrayList<IPatternRegistryListener>(); private final List<PatternInfo> patternInfos = new ArrayList<PatternInfo>(); private final Map<String, PatternInfo> idToPatternInfoMap = new HashMap<String, PatternInfo>(); public List<PatternInfo> getAllPatternInfosInAspect() { return Collections.unmodifiableList(patternInfos); } public PatternInfo addPatternToRegistry(Pattern pattern) { // Returns the PatterInfo if it is already registered String id = PatternRegistryUtil.getUniquePatternIdentifier(pattern); if (idToPatternInfoMap.containsKey(id)) { return idToPatternInfoMap.get(id); } // Registers new pattern PatternInfo patternInfo = new PatternInfo(pattern); patternInfos.add(patternInfo); idToPatternInfoMap.put(id, patternInfo); for (IPatternRegistryListener patternRegistryListener : listeners) { patternRegistryListener.patternAdded(patternInfo); } return patternInfo; } // public void removePatternFromRegistry(Pattern pattern) { // patterns.remove(PatternRegistryUtil.getUniquePatternIdentifier(pattern)); // for (IPatternRegistryListener patternRegistryListener : listeners) { // patternRegistryListener.patternRemoved(pattern); // } // } // // public boolean isPatternContainedInRegistry(Pattern pattern) { // return patterns.containsKey(PatternRegistryUtil.getUniquePatternIdentifier(pattern)); // } public void registerListener(IPatternRegistryListener patternRegistryListener) { listeners.add(patternRegistryListener); } public void unregisterListener(IPatternRegistryListener patternRegistryListener) { listeners.remove(patternRegistryListener); } }