/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ package de.cismet.cismap.commons.interaction; import com.vividsolutions.jts.geom.Coordinate; import edu.umd.cs.piccolox.event.PNotificationCenter; import edu.umd.cs.piccolox.event.PSelectionEventHandler; import java.awt.geom.Point2D; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Properties; import java.util.Vector; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.prefs.BackingStoreException; import java.util.prefs.Preferences; import javax.swing.SwingWorker; import de.cismet.cismap.commons.BoundingBox; import de.cismet.cismap.commons.Crs; import de.cismet.cismap.commons.MappingModelListener; import de.cismet.cismap.commons.features.Feature; import de.cismet.cismap.commons.features.FeatureCollectionListener; import de.cismet.cismap.commons.featureservice.style.BasicFeatureStyleDialogFactory; import de.cismet.cismap.commons.gui.MappingComponent; import de.cismet.cismap.commons.gui.layerwidget.LayerWidget; import de.cismet.cismap.commons.gui.piccolo.PFeature; import de.cismet.cismap.commons.gui.piccolo.eventlistener.MeasurementListener; import de.cismet.cismap.commons.gui.piccolo.eventlistener.MetaSearchFacade; import de.cismet.cismap.commons.gui.piccolo.eventlistener.PrintTemplateFeature; import de.cismet.cismap.commons.gui.piccolo.eventlistener.SimpleMoveListener; import de.cismet.cismap.commons.interaction.events.ActiveLayerEvent; import de.cismet.cismap.commons.interaction.events.CapabilityEvent; import de.cismet.cismap.commons.interaction.events.CrsChangedEvent; import de.cismet.cismap.commons.interaction.events.MapClickedEvent; import de.cismet.cismap.commons.interaction.events.MapDnDEvent; import de.cismet.cismap.commons.interaction.events.MapSearchEvent; import de.cismet.cismap.commons.interaction.events.StatusEvent; import de.cismet.cismap.commons.security.AbstractCredentialsProvider; import de.cismet.tools.CurrentStackTrace; import de.cismet.tools.StaticDecimalTools; import de.cismet.tools.gui.historybutton.HistoryModelListener; /** * DOCUMENT ME! * * @author thorsten.hell@cismet.de * @version $Revision$, $Date$ */ public class CismapBroker { //~ Static fields/initializers --------------------------------------------- private static final String FS = System.getProperty("file.separator"); // NOI18N private static final String USER_HOME_DIRECTORY = System.getProperty("user.home"); // NOI18N private static final String SERVERALIAS_FILE_NAME = "serverAliases.properties"; // NOI18N private static final String DEFAULT_CISMAP_FOLDER = ".cismap"; // NOI18N private static final String DEFAULT_ALIAS_FILE_PATH = "appLib" + FS + SERVERALIAS_FILE_NAME; // NOI18N private static CismapBroker instance = null; //~ Instance fields -------------------------------------------------------- PFeature oldPfeature = null; private final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(this.getClass()); private Properties userProperties = new Properties(); private Properties defaultProperties; private String cismapFolderPath = USER_HOME_DIRECTORY + FS + DEFAULT_CISMAP_FOLDER; private File defaultAliasFile; private File userAliasFile; private Vector<CapabilityListener> capabilityListeners = new Vector<CapabilityListener>(); private Vector<MappingModelListener> mappingModelListeners = new Vector<MappingModelListener>(); private Vector<StatusListener> statusListeners = new Vector<StatusListener>(); private Vector<HistoryModelListener> historyModelListeners = new Vector<HistoryModelListener>(); private Vector<ActiveLayerListener> activeLayerListeners = new Vector<ActiveLayerListener>(); private Vector<MapClickListener> mapClickListeners = new Vector<MapClickListener>(); private Vector<MapSearchListener> mapSearchListeners = new Vector<MapSearchListener>(); private Vector<MapDnDListener> mapDnDListeners = new Vector<MapDnDListener>(); private Vector<FeatureCollectionListener> featureCollectionListeners = new Vector<FeatureCollectionListener>(); private Vector<MapBoundsListener> mapBoundsListeners = new Vector<MapBoundsListener>(); private Vector<CrsChangeListener> crsChangeListeners = new Vector<CrsChangeListener>(); // private Hashtable<WMSCapabilities, GUICredentialsProvider> httpCredentialsForCapabilities = new // Hashtable<WMSCapabilities, GUICredentialsProvider>(); private Crs srs; private String preferredRasterFormat; private String preferredTransparentPref; private String preferredBGColor; private String preferredExceptionsFormat; private MappingComponent mappingComponent = null; private LayerWidget layerWidget = null; private BoundingBox initialBoundingBox; private ExecutorService execService = null; private boolean serverAliasesInited = false; private String defaultCrs = "EPSG:31466"; private int DefaultCrsAlias = -1; private MetaSearchFacade metaSearch; private boolean useInternalDb = false; private boolean checkForOverlappingGeometriesAfterFeatureRotation = true; private String featureStylingComponentKey = BasicFeatureStyleDialogFactory.KEY; private Point2D snappingVetoPoint; private PFeature snappingVetoFeature; private Float minOpacityToStayEnabled = null; private boolean multiFeaturePopupMenuEnabled = false; //~ Constructors ----------------------------------------------------------- /** * Creates a new CismapBroker object. */ private CismapBroker() { execService = Executors.newCachedThreadPool(); } //~ Methods ---------------------------------------------------------------- /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public static CismapBroker getInstance() { if (instance == null) { instance = new CismapBroker(); } return instance; } /** * DOCUMENT ME! * * @param cl DOCUMENT ME! */ public void addCapabilityListener(final CapabilityListener cl) { capabilityListeners.add(cl); } /** * DOCUMENT ME! * * @param cl DOCUMENT ME! */ public void removeCapabilityListener(final CapabilityListener cl) { capabilityListeners.remove(cl); } /** * DOCUMENT ME! * * @param ml DOCUMENT ME! */ public void addMappingModelListener(final MappingModelListener ml) { mappingModelListeners.add(ml); } /** * DOCUMENT ME! * * @param ml DOCUMENT ME! */ public void removeMappingModelListener(final MappingModelListener ml) { mappingModelListeners.remove(ml); } /** * DOCUMENT ME! * * @param sl DOCUMENT ME! */ public void addStatusListener(final StatusListener sl) { statusListeners.add(sl); } /** * DOCUMENT ME! * * @param sl DOCUMENT ME! */ public void removeStatusListener(final StatusListener sl) { statusListeners.remove(sl); } /** * DOCUMENT ME! * * @param hml DOCUMENT ME! */ public void addHistoryModelListener(final HistoryModelListener hml) { historyModelListeners.add(hml); } /** * DOCUMENT ME! * * @param hml DOCUMENT ME! */ public void removeHistoryModelListener(final HistoryModelListener hml) { historyModelListeners.remove(hml); } /** * DOCUMENT ME! * * @param all DOCUMENT ME! */ public void addActiveLayerListener(final ActiveLayerListener all) { activeLayerListeners.add(all); } /** * DOCUMENT ME! * * @param all DOCUMENT ME! */ public void removeActiveLayerListener(final ActiveLayerListener all) { activeLayerListeners.remove(all); } /** * DOCUMENT ME! * * @param mcl DOCUMENT ME! */ public void addMapClickListener(final MapClickListener mcl) { mapClickListeners.add(mcl); } /** * DOCUMENT ME! * * @param mcl DOCUMENT ME! */ public void removeMapClickListener(final MapClickListener mcl) { mapClickListeners.remove(mcl); } /** * DOCUMENT ME! * * @param msl DOCUMENT ME! */ public void addMapSearchListener(final MapSearchListener msl) { mapSearchListeners.add(msl); } /** * DOCUMENT ME! * * @param msl DOCUMENT ME! */ public void removeMapSearchListener(final MapSearchListener msl) { mapSearchListeners.remove(msl); } /** * DOCUMENT ME! * * @param mdl DOCUMENT ME! */ public void addMapDnDListener(final MapDnDListener mdl) { mapDnDListeners.add(mdl); } /** * DOCUMENT ME! * * @param mdl DOCUMENT ME! */ public void removeMapDnDListener(final MapDnDListener mdl) { mapDnDListeners.remove(mdl); } /** * DOCUMENT ME! * * @param fcl DOCUMENT ME! */ public void addFeatureCollectionListener(final FeatureCollectionListener fcl) { featureCollectionListeners.add(fcl); } /** * DOCUMENT ME! * * @param fcl DOCUMENT ME! */ public void removeFeatureCollectionListener(final FeatureCollectionListener fcl) { featureCollectionListeners.remove(fcl); } /** * DOCUMENT ME! * * @param mbl DOCUMENT ME! */ public void addMapBoundsListener(final MapBoundsListener mbl) { mapBoundsListeners.add(mbl); } /** * DOCUMENT ME! * * @param mbl DOCUMENT ME! */ public void removeFMapBoundsListener(final MapBoundsListener mbl) { mapBoundsListeners.remove(mbl); } /** * DOCUMENT ME! * * @param mbl DOCUMENT ME! */ public void addCrsChangeListener(final CrsChangeListener mbl) { crsChangeListeners.add(mbl); } /** * DOCUMENT ME! * * @param mbl DOCUMENT ME! */ public void removeCrsChangeListener(final CrsChangeListener mbl) { crsChangeListeners.remove(mbl); } /** * DOCUMENT ME! * * @param ce DOCUMENT ME! */ public void fireCapabilityServerChanged(final CapabilityEvent ce) { for (final Iterator<CapabilityListener> it = capabilityListeners.iterator(); it.hasNext();) { final CapabilityListener listener = it.next(); listener.serverChanged(ce); } } /** * DOCUMENT ME! * * @param ce DOCUMENT ME! */ public void fireCapabilityLayerChanged(final CapabilityEvent ce) { for (final Iterator<CapabilityListener> it = capabilityListeners.iterator(); it.hasNext();) { final CapabilityListener listener = it.next(); listener.layerChanged(ce); } } /** * DOCUMENT ME! * * @param ale DOCUMENT ME! */ public void fireLayerAdded(final ActiveLayerEvent ale) { for (final Iterator<ActiveLayerListener> it = activeLayerListeners.iterator(); it.hasNext();) { it.next().layerAdded(ale); } } /** * DOCUMENT ME! * * @param ale DOCUMENT ME! */ public void fireLayerRemoved(final ActiveLayerEvent ale) { for (final Iterator<ActiveLayerListener> it = activeLayerListeners.iterator(); it.hasNext();) { it.next().layerRemoved(ale); } } /** * DOCUMENT ME! * * @param ale DOCUMENT ME! */ public void fireLayerPositionChanged(final ActiveLayerEvent ale) { for (final Iterator<ActiveLayerListener> it = activeLayerListeners.iterator(); it.hasNext();) { it.next().layerPositionChanged(ale); } } /** * DOCUMENT ME! * * @param ale DOCUMENT ME! */ public void fireLayerVisibilityChanged(final ActiveLayerEvent ale) { for (final Iterator<ActiveLayerListener> it = activeLayerListeners.iterator(); it.hasNext();) { it.next().layerVisibilityChanged(ale); } } /** * DOCUMENT ME! * * @param ale DOCUMENT ME! */ public void fireLayerAvailabilityChanged(final ActiveLayerEvent ale) { for (final Iterator<ActiveLayerListener> it = activeLayerListeners.iterator(); it.hasNext();) { it.next().layerAvailabilityChanged(ale); } } /** * DOCUMENT ME! * * @param ale DOCUMENT ME! */ public void fireLayerInformationStatusChanged(final ActiveLayerEvent ale) { for (final Iterator<ActiveLayerListener> it = activeLayerListeners.iterator(); it.hasNext();) { it.next().layerInformationStatusChanged(ale); } } /** * DOCUMENT ME! * * @param ale DOCUMENT ME! */ public void fireLayerSelectionChanged(final ActiveLayerEvent ale) { for (final Iterator<ActiveLayerListener> it = activeLayerListeners.iterator(); it.hasNext();) { it.next().layerSelectionChanged(ale); } } /** * DOCUMENT ME! * * @param se DOCUMENT ME! */ public void fireStatusValueChanged(final StatusEvent se) { for (final Iterator<StatusListener> it = statusListeners.iterator(); it.hasNext();) { it.next().statusValueChanged(se); } } /** * DOCUMENT ME! * * @param mce DOCUMENT ME! */ public void fireClickOnMap(final MapClickedEvent mce) { for (final Iterator<MapClickListener> it = mapClickListeners.iterator(); it.hasNext();) { it.next().clickedOnMap(mce); } } /** * DOCUMENT ME! * * @param mse DOCUMENT ME! */ public void fireMapSearchInited(final MapSearchEvent mse) { for (final Iterator<MapSearchListener> it = mapSearchListeners.iterator(); it.hasNext();) { it.next().mapSearchStarted(mse); } } /** * DOCUMENT ME! * * @param mde DOCUMENT ME! */ public void fireDropOnMap(final MapDnDEvent mde) { for (final Iterator<MapDnDListener> it = mapDnDListeners.iterator(); it.hasNext();) { it.next().dropOnMap(mde); } } /** * DOCUMENT ME! * * @param mde DOCUMENT ME! */ public void fireDragOverMap(final MapDnDEvent mde) { for (final Iterator<MapDnDListener> it = mapDnDListeners.iterator(); it.hasNext();) { it.next().dragOverMap(mde); } } /** * public void fireFeatureCollectionChanged(MappingModelEvent mme) { for (Iterator<FeatureCollectionListener> it = * featureCollectionListeners.iterator(); it.hasNext();) { it.next().featureCollectionChanged(mme); } } public void * fireFeatureSelectionChanged(MappingModelEvent mme) { for (Iterator<FeatureCollectionListener> it = * featureCollectionListeners.iterator(); it.hasNext();) { it.next().selectionChanged(mme); } }. */ public void fireMapBoundsChanged() { for (final Iterator<MapBoundsListener> it = mapBoundsListeners.iterator(); it.hasNext();) { it.next().shownMapBoundsChanged(); } } /** * DOCUMENT ME! * * @param event DOCUMENT ME! */ public void fireCrsChanged(final CrsChangedEvent event) { for (final Iterator<CrsChangeListener> it = crsChangeListeners.iterator(); it.hasNext();) { it.next().crsChanged(event); } } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public Vector<MapClickListener> getMapClickListeners() { return mapClickListeners; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public Crs getSrs() { if (srs == null) { if ((mappingComponent == null) || mappingComponent.isLocked()) { // the getSrs() method is called before the mapping component has configured it. // So a dummy will be returned. This should not happen after the startup phase. final Crs crs = new Crs("dummy", "dummy", "EPSG:31466", true, false); return crs; } else { log.error("srs is not set. Use EPSG:31466 ", new CurrentStackTrace()); final Crs crs = new Crs("EPSG:31466", "EPSG:31466", "EPSG:31466", true, false); return crs; } } return srs; } /** * DOCUMENT ME! * * @param srs DOCUMENT ME! */ public void setSrs(final Crs srs) { if ((this.srs == null) || !this.srs.equals(srs)) { final StatusEvent event = new StatusEvent(StatusEvent.CRS, srs); final CrsChangedEvent ce = new CrsChangedEvent(this.srs, srs); this.srs = srs; fireCrsChanged(ce); fireStatusValueChanged(event); } } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public String getPreferredRasterFormat() { return preferredRasterFormat; } /** * DOCUMENT ME! * * @param preferredRasterFormat DOCUMENT ME! */ public void setPreferredRasterFormat(final String preferredRasterFormat) { this.preferredRasterFormat = preferredRasterFormat; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public String getPreferredTransparentPref() { return preferredTransparentPref; } /** * DOCUMENT ME! * * @param preferredTransparentPref DOCUMENT ME! */ public void setPreferredTransparentPref(final String preferredTransparentPref) { this.preferredTransparentPref = preferredTransparentPref; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public String getPreferredBGColor() { return preferredBGColor; } /** * DOCUMENT ME! * * @param preferredBGColor DOCUMENT ME! */ public void setPreferredBGColor(final String preferredBGColor) { this.preferredBGColor = preferredBGColor; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public String getPreferredExceptionsFormat() { return preferredExceptionsFormat; } /** * DOCUMENT ME! * * @param preferredExceptionsFormat DOCUMENT ME! */ public void setPreferredExceptionsFormat(final String preferredExceptionsFormat) { this.preferredExceptionsFormat = preferredExceptionsFormat; } /** * public MappingComponent getMappingComponent() { return mappingComponent; }. * * @param mappingComponent DOCUMENT ME! */ public void setMappingComponent(final MappingComponent mappingComponent) { this.mappingComponent = mappingComponent; PNotificationCenter.defaultCenter() .addListener( this, "coordinatesChanged", // NOI18N SimpleMoveListener.COORDINATES_CHANGED, mappingComponent.getInputListener(MappingComponent.MOTION)); PNotificationCenter.defaultCenter() .addListener( this, "lengthChanged", // NOI18N MeasurementListener.LENGTH_CHANGED, mappingComponent.getInputListener(MappingComponent.MEASUREMENT)); PNotificationCenter.defaultCenter() .addListener( this, "selectionChanged", // NOI18N PSelectionEventHandler.SELECTION_CHANGED_NOTIFICATION, mappingComponent.getInputListener(MappingComponent.SELECT)); } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public MetaSearchFacade getMetaSearch() { return metaSearch; } /** * DOCUMENT ME! * * @param metaSearch DOCUMENT ME! */ public void setMetaSearch(final MetaSearchFacade metaSearch) { this.metaSearch = metaSearch; } /** * DOCUMENT ME! * * @param notification DOCUMENT ME! */ public void coordinatesChanged(final edu.umd.cs.piccolox.event.PNotification notification) { final Object o = notification.getObject(); if (o instanceof SimpleMoveListener) { final double x = ((SimpleMoveListener)o).getXCoord(); final double y = ((SimpleMoveListener)o).getYCoord(); fireStatusValueChanged(new StatusEvent( StatusEvent.COORDINATE_STRING, new Coordinate(x, y))); final PFeature pf = ((SimpleMoveListener)o).getUnderlyingPFeature(); if (pf != oldPfeature) { fireStatusValueChanged(new StatusEvent(StatusEvent.OBJECT_INFOS, pf)); oldPfeature = pf; } } } /** * DOCUMENT ME! * * @param notification DOCUMENT ME! */ public void lengthChanged(final edu.umd.cs.piccolox.event.PNotification notification) { final Object o = notification.getObject(); if (o instanceof MeasurementListener) { final double length = ((MeasurementListener)o).getMeasuredLength(); fireStatusValueChanged(new StatusEvent( StatusEvent.MEASUREMENT_INFOS, StaticDecimalTools.round("0.00", length) + " m")); // NOI18N } } /** * DOCUMENT ME! * * @param notification DOCUMENT ME! */ public void selectionChanged(final edu.umd.cs.piccolox.event.PNotification notification) { } /** * public LayerWidget getLayerWidget() { return layerWidget; } public void setLayerWidget(LayerWidget layerWidget) { * this.layerWidget = layerWidget; } public BoundingBox getInitialBoundingBox() { return initialBoundingBox; } * public void setInitialBoundingBox(BoundingBox initialBoundingBox) { this.initialBoundingBox = initialBoundingBox; * }. * * @return DOCUMENT ME! */ public MappingComponent getMappingComponent() { return mappingComponent; } /** * DOCUMENT ME! */ private void initAliases() { if (log.isDebugEnabled()) { log.debug("initializing server aliases property"); // NOI18N } try { userAliasFile = new File(getCismapFolderPath() + FS + SERVERALIAS_FILE_NAME); final File cismapFolder = new File(getCismapFolderPath()); if (!cismapFolder.exists()) { cismapFolder.mkdir(); } if (userAliasFile.exists()) { final FileInputStream in = new FileInputStream(userAliasFile); userProperties.load(in); in.close(); } else { userAliasFile.createNewFile(); } defaultAliasFile = new File(DEFAULT_ALIAS_FILE_PATH); defaultProperties = new Properties(userProperties); if (defaultAliasFile.exists()) { final FileInputStream in = new FileInputStream(defaultAliasFile); defaultProperties.load(in); in.close(); } } catch (IOException ex) { log.error("Error during reading the server aliases from file", ex); // NOI18N } serverAliasesInited = true; } /** * DOCUMENT ME! */ public void cleanUpSystemRegistry() { final Preferences appPrefs = Preferences.userNodeForPackage(AbstractCredentialsProvider.class); try { if (log.isDebugEnabled()) { log.debug("Try to delete preferences of the password dialog"); // NOI18N } appPrefs.removeNode(); if (log.isDebugEnabled()) { log.debug("deletion of the preferences successfully"); // NOI18N } } catch (BackingStoreException ex) { if (log.isDebugEnabled()) { log.debug("Error during the deletion of the preferences"); // NOI18N } ex.printStackTrace(); } } /** * DOCUMENT ME! */ public void writePropertyFile() { if (log.isDebugEnabled()) { log.debug("writing server Aliases to File"); // NOI18N } if (!serverAliasesInited) { initAliases(); } try { if (userAliasFile.exists()) { final FileOutputStream out = new FileOutputStream(userAliasFile); userProperties.store(out, "Server Aliases URL <---> Alias"); // NOI18N } } catch (IOException ex) { log.error("Error during writing the server aliases to file", ex); // NOI18N } if (log.isDebugEnabled()) { log.debug("Server Aliases wrote to File"); // NOI18N } } /** * DOCUMENT ME! * * @param key DOCUMENT ME! * @param value DOCUMENT ME! */ public void addProperty(final String key, final String value) { if (!serverAliasesInited) { initAliases(); } userProperties.setProperty(key, value); if (log.isDebugEnabled()) { log.debug("Server alias added key: " + key + " value: " + value); // NOI18N } } /** * DOCUMENT ME! * * @param key DOCUMENT ME! * * @return DOCUMENT ME! */ public String getProperty(final String key) { if (!serverAliasesInited) { initAliases(); } return defaultProperties.getProperty(key); } /** * DOCUMENT ME! * * @param workerThread DOCUMENT ME! */ public void execute(final SwingWorker workerThread) { try { execService.submit(workerThread); if (log.isDebugEnabled()) { log.debug("SwingWorker submitted to Threadpool"); // NOI18N } } catch (Exception ex) { log.fatal("SwingWorker Error", ex); // NOI18N } } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public String getCismapFolderPath() { return cismapFolderPath; } /** * DOCUMENT ME! * * @param cismapFolderPath DOCUMENT ME! */ public void setCismapFolderPath(final String cismapFolderPath) { try { final File cismapFolder = new File(cismapFolderPath); if (!cismapFolder.exists()) { cismapFolder.mkdir(); } } catch (Exception e) { log.fatal("Error during the creation of " + cismapFolderPath, e); // NOI18N } this.cismapFolderPath = cismapFolderPath; } /** * DOCUMENT ME! * * @return the defaultCrs */ public String getDefaultCrs() { return defaultCrs; } /** * DOCUMENT ME! * * @param defaultCrs the defaultCrs to set */ public void setDefaultCrs(final String defaultCrs) { this.defaultCrs = defaultCrs; } /** * DOCUMENT ME! * * @return the DefaultCrsAlias */ public int getDefaultCrsAlias() { return DefaultCrsAlias; } /** * DOCUMENT ME! * * @param DefaultCrsAlias the DefaultCrsAlias to set */ public void setDefaultCrsAlias(final int DefaultCrsAlias) { this.DefaultCrsAlias = DefaultCrsAlias; } /** * DOCUMENT ME! * * @param code DOCUMENT ME! * * @return DOCUMENT ME! */ public Crs crsFromCode(final String code) { Crs result = null; if ((code == null) || code.isEmpty()) { if (log.isDebugEnabled()) { log.debug("The given code is null or empty. Can't find a Crs object without a code."); } return result; } if (mappingComponent == null) { if (log.isDebugEnabled()) { log.debug( "CismapBroker didn't provide a mapping component. So it's impossible to retrieve the crs list."); } return result; } final List<Crs> crsList = mappingComponent.getCrsList(); if ((crsList == null) || crsList.isEmpty()) { if (log.isDebugEnabled()) { log.debug( "The crs list of the mapping component is empty. So it's impossible to find a matching Crs object."); } return result; } final String matchCode; if (!code.toUpperCase().startsWith("EPSG:")) { matchCode = "EPSG:".concat(code); } else { matchCode = code; } for (final Crs crs : crsList) { if ((crs != null) && (crs.getCode() != null) && crs.getCode().equalsIgnoreCase(matchCode)) { result = crs; } } if (result == null) { if (log.isDebugEnabled()) { log.debug("Couldn't find a crs for code '" + code + "' in crs list '" + crsList + "'."); } } return result; } /** * DOCUMENT ME! * * @return the useInternalDb */ public boolean isUseInternalDb() { return useInternalDb; } /** * DOCUMENT ME! * * @param useInternalDb the useInternalDb to set */ public void setUseInternalDb(final boolean useInternalDb) { this.useInternalDb = useInternalDb; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public boolean isCheckForOverlappingGeometriesAfterFeatureRotation() { return checkForOverlappingGeometriesAfterFeatureRotation; } /** * DOCUMENT ME! * * @param checkForOverlappingGeometriesAfterFeatureRotation DOCUMENT ME! */ public void setCheckForOverlappingGeometriesAfterFeatureRotation( final boolean checkForOverlappingGeometriesAfterFeatureRotation) { this.checkForOverlappingGeometriesAfterFeatureRotation = checkForOverlappingGeometriesAfterFeatureRotation; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public String getFeatureStylingComponentKey() { return featureStylingComponentKey; } /** * DOCUMENT ME! * * @param featureStylingComponentKey DOCUMENT ME! */ public void setFeatureStylingComponentKey(final String featureStylingComponentKey) { this.featureStylingComponentKey = featureStylingComponentKey; } /** * DOCUMENT ME! * * @return the snappingVetoPoint */ public Point2D getSnappingVetoPoint() { return snappingVetoPoint; } /** * DOCUMENT ME! * * @param snappingVetoPoint the snappingVetoPoint to set */ public void setSnappingVetoPoint(final Point2D snappingVetoPoint) { this.snappingVetoPoint = snappingVetoPoint; } /** * DOCUMENT ME! * * @return the snappingVetoFeature */ public PFeature getSnappingVetoFeature() { return snappingVetoFeature; } /** * DOCUMENT ME! * * @param snappingVetoFeature the snappingVetoFeature to set */ public void setSnappingVetoFeature(final PFeature snappingVetoFeature) { this.snappingVetoFeature = snappingVetoFeature; } /** * DOCUMENT ME! * * @return the minOpacityToStayEnabled */ public Float getMinOpacityToStayEnabled() { return minOpacityToStayEnabled; } /** * DOCUMENT ME! * * @param minOpacityToStayEnabled the minOpacityToStayEnabled to set */ public void setMinOpacityToStayEnabled(final Float minOpacityToStayEnabled) { this.minOpacityToStayEnabled = minOpacityToStayEnabled; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public boolean isMultiFeaturePopupMenuEnabled() { return multiFeaturePopupMenuEnabled; } /** * DOCUMENT ME! * * @param multiFeaturePopupMenuEnabled DOCUMENT ME! */ public void setMultiFeaturePopupMenuEnabled(final boolean multiFeaturePopupMenuEnabled) { this.multiFeaturePopupMenuEnabled = multiFeaturePopupMenuEnabled; } }