001: package com.vividsolutions.jump.workbench.ui.plugin.datastore;
002:
003: import java.util.Arrays;
004: import java.util.Collection;
005: import java.util.HashSet;
006: import java.util.Iterator;
007:
008: import javax.swing.JInternalFrame;
009: import javax.swing.event.InternalFrameAdapter;
010: import javax.swing.event.InternalFrameEvent;
011:
012: import com.vividsolutions.jump.workbench.model.CategoryEvent;
013: import com.vividsolutions.jump.workbench.model.FeatureEvent;
014: import com.vividsolutions.jump.workbench.model.Layer;
015: import com.vividsolutions.jump.workbench.model.LayerEvent;
016: import com.vividsolutions.jump.workbench.model.LayerListener;
017: import com.vividsolutions.jump.workbench.model.LayerManager;
018: import com.vividsolutions.jump.workbench.model.LayerManagerProxy;
019: import com.vividsolutions.jump.workbench.plugin.AbstractPlugIn;
020: import com.vividsolutions.jump.workbench.plugin.PlugInContext;
021: import com.vividsolutions.jump.workbench.ui.GUIUtil;
022: import com.vividsolutions.jump.workbench.ui.LayerNameRenderer;
023: import com.vividsolutions.jump.workbench.ui.renderer.LayerRenderer;
024: import com.vividsolutions.jump.workbench.ui.renderer.RenderingManager;
025:
026: public class InstallDatastoreLayerRendererHintsPlugIn extends
027: AbstractPlugIn {
028: public void initialize(PlugInContext context) throws Exception {
029: for (Iterator i = Arrays.asList(
030: context.getWorkbenchFrame().getDesktopPane()
031: .getAllFrames()).iterator(); i.hasNext();) {
032: JInternalFrame internalFrame = (JInternalFrame) i.next();
033: installDatastoreLayerRendererHintsIfNecessary(internalFrame);
034: }
035: GUIUtil.addInternalFrameListener(context.getWorkbenchFrame()
036: .getDesktopPane(), new InternalFrameAdapter() {
037: public void internalFrameActivated(InternalFrameEvent e) {
038: installDatastoreLayerRendererHintsIfNecessary(e
039: .getInternalFrame());
040: }
041: });
042: }
043:
044: private Collection installedLayerManagers = new HashSet();
045:
046: private static final String INSTALLED_KEY = InstallDatastoreLayerRendererHintsPlugIn.class
047: .getName()
048: + " - INSTALLED";
049:
050: private void installDatastoreLayerRendererHintsIfNecessary(
051: JInternalFrame internalFrame) {
052: if (!(internalFrame instanceof LayerManagerProxy)) {
053: return;
054: }
055: installDatastoreLayerRendererHintsIfNecessary(((LayerManagerProxy) internalFrame)
056: .getLayerManager());
057: }
058:
059: private void installDatastoreLayerRendererHintsIfNecessary(
060: LayerManager layerManager) {
061: if (installedLayerManagers.contains(layerManager)) {
062: return;
063: }
064: layerManager.addLayerListener(new LayerListener() {
065:
066: public void featuresChanged(FeatureEvent e) {
067: }
068:
069: public void layerChanged(LayerEvent e) {
070: if (!(e.getLayerable() instanceof Layer)) {
071: return;
072: }
073: if (((Layer) e.getLayerable()).getDataSourceQuery() == null) {
074: return;
075: }
076: if (!(((Layer) e.getLayerable()).getDataSourceQuery()
077: .getDataSource() instanceof DataStoreDataSource)) {
078: return;
079: }
080: if (((Layer) e.getLayerable()).getBlackboard().get(
081: INSTALLED_KEY, false)) {
082: return;
083: }
084: // CachedDynamicFeatureCollection#size is not up to
085: // date (it is cached), so force image caching to always
086: // be used, as its use depends on #size.
087: // [Jon Aquino 2005-03-16]
088: ((Layer) e.getLayerable()).getBlackboard().put(
089: LayerRenderer.ALWAYS_USE_IMAGE_CACHING_KEY,
090: true);
091: ((Layer) e.getLayerable())
092: .getBlackboard()
093: .put(
094: RenderingManager.USE_MULTI_RENDERING_THREAD_QUEUE_KEY,
095: true);
096: ((Layer) e.getLayerable()).getBlackboard()
097: .put(LayerNameRenderer.USE_CLOCK_ANIMATION_KEY,
098: true);
099: ((Layer) e.getLayerable()).getBlackboard().put(
100: INSTALLED_KEY, true);
101: // Get here *after* the first paint, so repaint.
102: // [Jon Aquino 2005-03-16]
103: ((Layer) e.getLayerable()).fireAppearanceChanged();
104: }
105:
106: public void categoryChanged(CategoryEvent e) {
107: }
108: });
109: installedLayerManagers.add(layerManager);
110: }
111: }
|