package org.archstudio.testadt.core; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import org.archstudio.archlight.ArchlightTest; import org.archstudio.testadt.ArchlightTestADTEvent; import org.archstudio.testadt.ArchlightTestADTListener; import org.archstudio.testadt.IArchlightTestADT; public class ArchlightTestADT implements IArchlightTestADT { protected List<ArchlightTest> testList; public ArchlightTestADT() { testList = new ArrayList<ArchlightTest>(); } @Override public synchronized List<? extends ArchlightTest> getAllTests() { return Collections.unmodifiableList(new ArrayList<ArchlightTest>(testList)); } @Override public synchronized List<? extends ArchlightTest> getAllTests(String toolID) { List<ArchlightTest> matchingList = new ArrayList<ArchlightTest>(); for (ArchlightTest test : testList) { if (test.getToolID() != null && test.getToolID().equals(toolID)) { matchingList.add(test); } } return Collections.unmodifiableList(matchingList); } @Override public synchronized ArchlightTest getTest(String testUID) { for (ArchlightTest test : testList) { if (test.getUID() != null && test.getUID().equals(testUID)) { return test; } } return null; } @Override public synchronized void addTests(Collection<? extends ArchlightTest> tests) { testList.addAll(tests); fireTestsAdded(tests); } @Override public synchronized void removeTests(Collection<? extends ArchlightTest> tests) { testList.removeAll(tests); fireTestsRemoved(tests); } protected List<ArchlightTestADTListener> listeners = new CopyOnWriteArrayList<ArchlightTestADTListener>(); public void addArchlightTestADTListener(ArchlightTestADTListener l) { listeners.add(l); } public void removeArchlightTestADTListener(ArchlightTestADTListener l) { listeners.remove(l); } protected void fireTestsAdded(Collection<? extends ArchlightTest> tests) { fireEvent(ArchlightTestADTEvent.EventType.TESTS_ADDED, tests); } protected void fireTestsRemoved(Collection<? extends ArchlightTest> tests) { fireEvent(ArchlightTestADTEvent.EventType.TESTS_REMOVED, tests); } protected void fireEvent(ArchlightTestADTEvent.EventType type, Collection<? extends ArchlightTest> tests) { ArchlightTestADTEvent evt = new ArchlightTestADTEvent(type, tests); for (ArchlightTestADTListener l : listeners) { l.testADTChanged(evt); } } }