/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ package de.cismet.cismap.commons.gui.piccolo.eventlistener; import edu.umd.cs.piccolo.PNode; import org.apache.log4j.Logger; import java.awt.HeadlessException; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.MissingResourceException; import javax.swing.JOptionPane; import de.cismet.cismap.commons.features.SearchFeature; import de.cismet.cismap.commons.gui.MappingComponent; import de.cismet.cismap.commons.interaction.CismapBroker; import de.cismet.cismap.commons.interaction.events.MapSearchEvent; import de.cismet.tools.gui.StaticSwingTools; /** * DOCUMENT ME! * * @author jruiz * @version $Revision$, $Date$ */ public class MetaSearchCreateSearchGeometryListener extends AbstractCreateSearchGeometryListener implements PropertyChangeListener { //~ Static fields/initializers --------------------------------------------- private static final Logger LOG = Logger.getLogger(MetaSearchCreateSearchGeometryListener.class); //~ Instance fields -------------------------------------------------------- private MetaSearchFacade metaSearch; //~ Constructors ----------------------------------------------------------- /** * Creates a new MetaSearchCreateSearchGeometryListener object. * * @param mc DOCUMENT ME! */ public MetaSearchCreateSearchGeometryListener(final MappingComponent mc) { super(mc, MappingComponent.CREATE_SEARCH_POLYGON); } /** * Creates a new MetaSearchCreateSearchGeometryListener object. * * @param mc DOCUMENT ME! * @param metaSearch DOCUMENT ME! */ public MetaSearchCreateSearchGeometryListener(final MappingComponent mc, final MetaSearchFacade metaSearch) { this(mc); setMetaSearch(metaSearch); } //~ Methods ---------------------------------------------------------------- /** * DOCUMENT ME! * * @param metaSearch DOCUMENT ME! */ public final void setMetaSearch(final MetaSearchFacade metaSearch) { this.metaSearch = metaSearch; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ private boolean isSearchTopicsSelected() { boolean result = false; if (metaSearch != null) { result = metaSearch.hasSelectedSearchTopics(); } return result; } /** * DOCUMENT ME! * * @throws HeadlessException DOCUMENT ME! * @throws MissingResourceException DOCUMENT ME! */ private void notifyUserAboutMissingSearchTopics() throws HeadlessException, MissingResourceException { if (!isSearchTopicsSelected()) { if ((metaSearch != null) && metaSearch.hasSearchTopics()) { JOptionPane.showMessageDialog( StaticSwingTools.getParentFrame(CismapBroker.getInstance().getMappingComponent()), org.openide.util.NbBundle.getMessage( MetaSearchCreateSearchGeometryListener.class, "CreateSearchGeometryListener.mousePressed(PInputEvent).JOptionPane().noSearchTopicsChosen"), // NOI18N org.openide.util.NbBundle.getMessage( MetaSearchCreateSearchGeometryListener.class, "CreateSearchGeometryListener.mousePressed(PInputEvent).JOptionPane().noSearchTopicsChosen.title"), // NOI18N JOptionPane.ERROR_MESSAGE); } else { JOptionPane.showMessageDialog( StaticSwingTools.getParentFrame(CismapBroker.getInstance().getMappingComponent()), org.openide.util.NbBundle.getMessage( MetaSearchCreateSearchGeometryListener.class, "CreateSearchGeometryListener.mousePressed(PInputEvent).JOptionPane().notInitialized"), // NOI18N org.openide.util.NbBundle.getMessage( MetaSearchCreateSearchGeometryListener.class, "CreateSearchGeometryListener.mousePressed(PInputEvent).JOptionPane().notInitialized.title"), // NOI18N JOptionPane.ERROR_MESSAGE); } } } @Override public void propertyChange(final PropertyChangeEvent evt) { if ((metaSearch != null) && metaSearch.isSearchTopicSelectedEvent(evt.getPropertyName())) { generateAndShowPointerAnnotation(); } } @Override protected boolean performSearch(final SearchFeature searchFeature) { if (!isSearchTopicsSelected()) { // finishGeometry is called before mousePressed. finishGeometry is not called if the user displayed the // last search feature. These conditions ensure that there is only one notification in any case. // if (searchFeature.equals(getLastSearchFeature())) { notifyUserAboutMissingSearchTopics(); return false; // } } final MapSearchEvent mse = new MapSearchEvent(); mse.setGeometry(searchFeature.getGeometry()); CismapBroker.getInstance().fireMapSearchInited(mse); return true; } @Override protected PNode getPointerAnnotation() { if (metaSearch == null) { return null; } return metaSearch.generatePointerAnnotationForSelectedSearchTopics(); } }