/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package de.cismet.cismap.commons.gui.piccolo.eventlistener;
import java.awt.Color;
import java.awt.Cursor;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import de.cismet.cismap.commons.features.SearchFeature;
import de.cismet.cismap.commons.gui.MappingComponent;
import static de.cismet.cismap.commons.gui.piccolo.eventlistener.AbstractCreateSearchGeometryListener.PROPERTY_HOLD_GEOMETRIES;
import static de.cismet.cismap.commons.gui.piccolo.eventlistener.AbstractCreateSearchGeometryListener.PROPERTY_LAST_FEATURE;
import static de.cismet.cismap.commons.gui.piccolo.eventlistener.AbstractCreateSearchGeometryListener.PROPERTY_MODE;
import static de.cismet.cismap.commons.gui.piccolo.eventlistener.AbstractCreateSearchGeometryListener.PROPERTY_NUM_OF_ELLIPSE_EDGES;
import static de.cismet.cismap.commons.gui.piccolo.eventlistener.AbstractCreateSearchGeometryListener.PROPERTY_SEARCH_COLOR;
import static de.cismet.cismap.commons.gui.piccolo.eventlistener.AbstractCreateSearchGeometryListener.PROPERTY_SEARCH_TRANSPARENCY;
/**
* DOCUMENT ME!
*
* @author jruiz
* @version $Revision$, $Date$
*/
public abstract class MetaSearchFollowingCreateSearchGeometryListener extends AbstractCreateSearchGeometryListener
implements PropertyChangeListener {
//~ Static fields/initializers ---------------------------------------------
public static final String ACTION_SEARCH_STARTED = "ACTION_SEARCH_STARTED";
//~ Instance fields --------------------------------------------------------
private final MetaSearchCreateSearchGeometryListener metaSearchListener;
//~ Constructors -----------------------------------------------------------
/**
* Creates a new MetaSearchFollowingCreateSearchGeometryListener object.
*
* @param mappingComponent DOCUMENT ME!
* @param listenerName DOCUMENT ME!
*/
public MetaSearchFollowingCreateSearchGeometryListener(final MappingComponent mappingComponent,
final String listenerName) {
super(mappingComponent, listenerName);
metaSearchListener = (MetaSearchCreateSearchGeometryListener)mappingComponent.getInputListener(
MappingComponent.CREATE_SEARCH_POLYGON);
metaSearchListener.addPropertyChangeListener(this);
mappingComponent.addCustomInputListener(listenerName, this);
mappingComponent.putCursor(listenerName, new Cursor(Cursor.CROSSHAIR_CURSOR));
setMode(metaSearchListener.getMode());
setLastFeature(metaSearchListener.getLastSearchFeature());
setNumOfEllipseEdges(metaSearchListener.getNumOfEllipseEdges());
setHoldGeometries(metaSearchListener.isHoldingGeometries());
setSearchColor(metaSearchListener.getSearchColor());
setSearchTransparency(metaSearchListener.getSearchTransparency());
}
//~ Methods ----------------------------------------------------------------
@Override
public void propertyChange(final PropertyChangeEvent evt) {
final String propertyName = evt.getPropertyName();
final Object newValue = evt.getNewValue();
if (MappingComponent.PROPERTY_MAP_INTERACTION_MODE.equals(propertyName)) {
if (getInputListenerName().equals(newValue)) {
generateAndShowPointerAnnotation();
}
} else if (PROPERTY_LAST_FEATURE.equals(propertyName)) {
super.setLastFeature((SearchFeature)newValue);
} else if (PROPERTY_MODE.equals(propertyName)) {
super.setMode(newValue.toString());
} else if (PROPERTY_HOLD_GEOMETRIES.equals(propertyName) && (newValue instanceof Boolean)) {
super.setHoldGeometries((Boolean)newValue);
} else if (PROPERTY_NUM_OF_ELLIPSE_EDGES.equals(propertyName) && (newValue instanceof Integer)) {
super.setNumOfEllipseEdges((Integer)newValue);
} else if (PROPERTY_SEARCH_COLOR.equals(propertyName) && (newValue instanceof Color)) {
super.setSearchColor((Color)newValue);
} else if (PROPERTY_SEARCH_TRANSPARENCY.equals(propertyName) && (newValue instanceof Float)) {
super.setSearchTransparency((Float)newValue);
}
}
@Override
public final void setMode(final String newValue) throws IllegalArgumentException {
super.setMode(newValue);
metaSearchListener.setMode(newValue);
}
@Override
public final void setLastFeature(final SearchFeature newValue) {
super.setLastFeature(newValue);
metaSearchListener.setLastFeature(newValue);
}
@Override
public final void setNumOfEllipseEdges(final int newValue) {
super.setNumOfEllipseEdges(newValue);
metaSearchListener.setNumOfEllipseEdges(newValue);
}
@Override
public final void setHoldGeometries(final boolean newValue) {
super.setHoldGeometries(newValue);
metaSearchListener.setHoldGeometries(newValue);
}
@Override
public final void setSearchColor(final Color newValue) {
super.setSearchColor(newValue);
metaSearchListener.setSearchColor(newValue);
}
@Override
public final void setSearchTransparency(final float newValue) {
super.setSearchTransparency(newValue);
metaSearchListener.setSearchTransparency(newValue);
}
@Override
protected boolean performSearch(final SearchFeature searchFeature) {
final PropertyChangeSupport propertyChangeSupport = getPropertyChangeSupport();
setLastFeature(searchFeature);
propertyChangeSupport.firePropertyChange(ACTION_SEARCH_STARTED, null, searchFeature.getGeometry());
return true;
}
}