package com.ximple.eofms.filter; import java.util.LinkedList; import javax.swing.event.EventListenerList; import org.geotools.feature.Feature; import com.ximple.io.dgn7.Element; public class ElementDispatcher implements CreateFeatureTypeEventListener { private LinkedList rules; private boolean useLongName = false; // Create the listener list protected EventListenerList listenerList = new EventListenerList(); public ElementDispatcher() { rules = new LinkedList(); } public LinkedList getRules() { return rules; } public void addRule(ElementDispatchableFilter rule) { rule.setUseLongName(useLongName); rule.addCreateFeatureTypeEventListener(this); rules.add(rule); } public boolean isUseLongName() { return useLongName; } public void setUseLongName(boolean useLongName) { if (this.useLongName != useLongName) { this.useLongName = useLongName; for (ElementDispatchableFilter filter : rules) { filter.setUseLongName(useLongName); } } } public Feature execute(Element element, boolean useTransform) { for (ElementDispatchableFilter rule : rules) { if (rule.isDispatchable(element)) { return rule.execute(element, useTransform); } } return null; } public void addCreateFeatureTypeEventListener(CreateFeatureTypeEventListener listener) { listenerList.add(CreateFeatureTypeEventListener.class, listener); } public void removeCreateFeatureTypeEventListener(CreateFeatureTypeEventListener listener) { listenerList.remove(CreateFeatureTypeEventListener.class, listener); } protected void fireFeatureTypeEvent(FeatureTypeEvent evt) { Object[] listeners = listenerList.getListenerList(); for (int i = 0; i < listeners.length; i += 2) { if (listeners[i] == CreateFeatureTypeEventListener.class) { ((CreateFeatureTypeEventListener) listeners[i + 1]).createFeatureTypeOccurred(evt); } } } public void createFeatureTypeOccurred(FeatureTypeEvent evt) { fireFeatureTypeEvent(evt); } }