jtulach@102: package org.apidesign.javabeans.with; jtulach@102: jtulach@102: import java.util.ArrayList; jtulach@102: import java.util.List; jtulach@102: jtulach@102: public abstract class AbstractHighlightsContainer implements HighlightsContainer { jtulach@102: private List listeners = new ArrayList(); jtulach@102: jtulach@102: protected AbstractHighlightsContainer() { jtulach@102: } jtulach@102: jtulach@102: public abstract HighlightsSequence getHighlights(int startOffset, int endOffset); jtulach@102: jtulach@102: public final void addHighlightsChangeListener(HighlightsChangeListener listener) { jtulach@102: synchronized (listeners) { jtulach@102: listeners.add(listener); jtulach@102: } jtulach@102: } jtulach@102: jtulach@102: public final void removeHighlightsChangeListener(HighlightsChangeListener listener) { jtulach@102: synchronized (listeners) { jtulach@102: listeners.remove(listener); jtulach@102: } jtulach@102: } jtulach@102: jtulach@102: protected final void fireHighlightsChange(int changeStartOffset, int changeEndOffset) { jtulach@102: List targets; jtulach@102: jtulach@102: synchronized (listeners) { jtulach@102: targets = new ArrayList(listeners); jtulach@102: } jtulach@102: jtulach@102: if (targets.size() > 0) { jtulach@102: HighlightsChangeEvent evt = new HighlightsChangeEvent(this, changeStartOffset, changeEndOffset); jtulach@102: jtulach@102: for (HighlightsChangeListener l : targets) { jtulach@102: l.highlightChanged(evt); jtulach@102: } jtulach@102: } jtulach@102: } jtulach@102: }