/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ package de.cismet.cismap.commons.gui.layerwidget; import com.vividsolutions.jts.geom.Geometry; import org.jdom.Element; import java.awt.EventQueue; import java.awt.Image; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.SystemFlavorMap; import java.awt.dnd.DnDConstants; import java.awt.dnd.DragGestureListener; import java.awt.dnd.DragSource; import java.awt.dnd.DragSourceListener; import java.awt.dnd.DropTarget; import java.awt.dnd.DropTargetListener; import java.awt.event.ComponentEvent; import java.awt.event.ComponentListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.*; import java.util.Iterator; import java.util.List; import javax.swing.DefaultListSelectionModel; import javax.swing.JPanel; import javax.swing.JToolTip; import javax.swing.SwingWorker; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.TreePath; import de.cismet.cismap.commons.*; import de.cismet.cismap.commons.featureservice.JDBCFeatureService; import de.cismet.cismap.commons.featureservice.ShapeFileFeatureService; import de.cismet.cismap.commons.featureservice.WebFeatureService; import de.cismet.cismap.commons.featureservice.factory.JDBCFeatureFactory; import de.cismet.cismap.commons.featureservice.factory.ShapeFeatureFactory; import de.cismet.cismap.commons.gui.MappingComponent; import de.cismet.cismap.commons.gui.capabilitywidget.CapabilityWidget; import de.cismet.cismap.commons.interaction.CismapBroker; import de.cismet.cismap.commons.interaction.events.ActiveLayerEvent; import de.cismet.cismap.commons.preferences.CapabilityLink; import de.cismet.cismap.commons.raster.wms.SlidableWMSServiceLayerGroup; import de.cismet.cismap.commons.raster.wms.WMSServiceLayer; import de.cismet.cismap.commons.raster.wms.simple.SimpleWMS; import de.cismet.cismap.commons.rasterservice.ImageRasterService; import de.cismet.cismap.commons.rasterservice.MapService; import de.cismet.cismap.commons.wms.capabilities.*; import de.cismet.tools.configuration.Configurable; import de.cismet.tools.configuration.NoWriteError; import de.cismet.tools.gui.StaticSwingTools; import de.cismet.tools.gui.imagetooltip.ImageToolTip; import de.cismet.tools.gui.treetable.JTreeTable; import de.cismet.tools.gui.treetable.TreeTableCellEditor; import de.cismet.tools.gui.treetable.TreeTableModel; /** * DOCUMENT ME! * * @author thorsten.hell@cismet.de * @version $Revision$, $Date$ */ public class LayerWidget extends JPanel implements DropTargetListener, Configurable { //~ Static fields/initializers --------------------------------------------- private static DataFlavor uriListFlavor; static { try { uriListFlavor = new DataFlavor("text/uri-list;class=java.lang.String"); // NOI18N } catch (ClassNotFoundException e) { // can't happen e.printStackTrace(); } } //~ Instance fields -------------------------------------------------------- private final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(this.getClass()); private DragSource dragSource; private DragGestureListener dgListener; private DragSourceListener dsListener; private ActiveLayerModel activeLayerModel = new ActiveLayerModel(); private JTreeTable treeTable; private int acceptableActions = DnDConstants.ACTION_COPY_OR_MOVE; private Image errorImage; private MappingComponent mapC = null; // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton cmdDisable; private javax.swing.JButton cmdDown; private javax.swing.JButton cmdMakeInvisible; private javax.swing.JButton cmdRefreshSingleLayer; private javax.swing.JButton cmdRemove; private javax.swing.JButton cmdTreeCollapse; private javax.swing.JButton cmdUp; private javax.swing.JButton cmdZoomToFullExtent; private javax.swing.JPanel jPanel1; private javax.swing.JToolBar jToolBar1; private javax.swing.JScrollPane scpMain; // End of variables declaration//GEN-END:variables //~ Constructors ----------------------------------------------------------- /** * Creates new form LayerWidget. * * @param mapC DOCUMENT ME! */ public LayerWidget(final MappingComponent mapC) { hackDragAndDropDataFlavors(); initComponents(); this.mapC = mapC; log.info("LayerWidget: " + activeLayerModel); // NOI18N final DropTarget dt = new DropTarget(this, acceptableActions, this); treeTable = new JTreeTable(activeLayerModel) { @Override public JToolTip createToolTip() { if (log.isDebugEnabled()) { log.debug("Tooltip"); // NOI18N } if (getErrorImage() != null) { return new ImageToolTip(getErrorImage()); } else { return super.createToolTip(); } } }; treeTable.setAutoCreateColumnsFromModel(true); treeTable.setShowGrid(true); treeTable.getTableHeader().setReorderingAllowed(true); treeTable.getTree().setShowsRootHandles(true); treeTable.getTree().setRootVisible(false); treeTable.getTree().setCellRenderer(new ActiveLayerTreeCellRenderer()); final ActiveLayerTableCellEditor cellEditor = new ActiveLayerTableCellEditor(); // treeTable.getTree().setCellEditor(cellEditor); // treeTable.getTree().setEditable(true); final TreeTableCellEditor treeTableCellEditor = new TreeTableCellEditor(treeTable, treeTable.getTree()); treeTableCellEditor.setClickCountToStart(2); treeTable.setDefaultEditor(TreeTableModel.class, treeTableCellEditor); treeTable.getColumnModel().getColumn(0).setMaxWidth(20); treeTable.getColumnModel().getColumn(3).setMaxWidth(50); treeTable.getColumnModel().getColumn(5).setMaxWidth(50); treeTable.getColumnModel().getColumn(0).setCellEditor(cellEditor); treeTable.getColumnModel().getColumn(2).setCellEditor(cellEditor); treeTable.getColumnModel().getColumn(3).setCellEditor(cellEditor); treeTable.getColumnModel().getColumn(4).setCellEditor(cellEditor); treeTable.getColumnModel().getColumn(5).setCellEditor(cellEditor); final ActiveLayerTableCellRenderer tableCellRenderer = new ActiveLayerTableCellRenderer(); treeTable.getColumnModel().getColumn(0).setCellRenderer(tableCellRenderer); treeTable.getColumnModel().getColumn(2).setCellRenderer(tableCellRenderer); treeTable.getColumnModel().getColumn(3).setCellRenderer(tableCellRenderer); treeTable.getColumnModel().getColumn(4).setCellRenderer(tableCellRenderer); treeTable.getColumnModel().getColumn(5).setCellRenderer(tableCellRenderer); // treeTable.setShowHorizontaLines(true); treeTable.setSelectionMode(DefaultListSelectionModel.MULTIPLE_INTERVAL_SELECTION); scpMain.setViewportView(treeTable); treeTable.getTree().getSelectionModel().addTreeSelectionListener(new TreeSelectionListener() { @Override public void valueChanged(final TreeSelectionEvent e) { if (treeTable.getTree().getSelectionPath() != null) { if (log.isDebugEnabled()) { log.debug("ActiveLayerWidget: selectionChanged()\n" + e); // NOI18N } try { final ActiveLayerEvent ale = new ActiveLayerEvent(); ale.setLayer(treeTable.getTree().getSelectionPath().getLastPathComponent()); if (ale.getLayer() instanceof WMSServiceLayer) { ale.setCapabilities(((WMSServiceLayer)ale.getLayer()).getWmsCapabilities()); } CismapBroker.getInstance().fireLayerSelectionChanged(ale); } catch (Exception ex) { log.error("error while changing the selected layer", ex); // NOI18N } } } }); treeTable.addKeyListener(new KeyListener() { @Override public void keyTyped(final KeyEvent e) { } @Override public void keyPressed(final KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_DELETE) { cmdRemoveActionPerformed(null); e.consume(); } } @Override public void keyReleased(final KeyEvent e) { } }); treeTable.setGridColor(this.getBackground()); addComponentListener(new ComponentListener() { @Override public void componentHidden(final ComponentEvent e) { } @Override public void componentMoved(final ComponentEvent e) { } @Override public void componentResized(final ComponentEvent e) { // treeTable.repaint(); } @Override public void componentShown(final ComponentEvent e) { } }); activeLayerModel.addMappingModelListener(new MappingModelListener() { @Override public void mapServiceLayerStructureChanged(final MappingModelEvent mme) { treeTable.getColumnModel().getColumn(3).getCellEditor().stopCellEditing(); } @Override public void mapServiceAdded(final MapService mapService) { treeTable.getColumnModel().getColumn(3).getCellEditor().stopCellEditing(); } @Override public void mapServiceRemoved(final MapService mapService) { treeTable.getColumnModel().getColumn(3).getCellEditor().stopCellEditing(); } }); } //~ Methods ---------------------------------------------------------------- /** * This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The * content of this method is always regenerated by the Form Editor. */ // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { scpMain = new javax.swing.JScrollPane(); jPanel1 = new javax.swing.JPanel(); jToolBar1 = new javax.swing.JToolBar(); cmdTreeCollapse = new javax.swing.JButton(); cmdRefreshSingleLayer = new javax.swing.JButton(); cmdDown = new javax.swing.JButton(); cmdUp = new javax.swing.JButton(); cmdZoomToFullExtent = new javax.swing.JButton(); cmdDisable = new javax.swing.JButton(); cmdRemove = new javax.swing.JButton(); cmdMakeInvisible = new javax.swing.JButton(); setBorder(javax.swing.BorderFactory.createCompoundBorder( javax.swing.BorderFactory.createEtchedBorder(), javax.swing.BorderFactory.createEmptyBorder(4, 4, 4, 4))); setPreferredSize(new java.awt.Dimension(211, 114)); setLayout(new java.awt.BorderLayout()); scpMain.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); scpMain.setViewportBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); add(scpMain, java.awt.BorderLayout.CENTER); jPanel1.setLayout(new java.awt.BorderLayout()); jToolBar1.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); jToolBar1.setRollover(true); cmdTreeCollapse.setIcon(new javax.swing.ImageIcon( getClass().getResource("/de/cismet/cismap/commons/gui/layerwidget/res/collapseTree.png"))); // NOI18N cmdTreeCollapse.setToolTipText(org.openide.util.NbBundle.getMessage( LayerWidget.class, "LayerWidget.cmdTreeCollapse.toolTipText")); // NOI18N cmdTreeCollapse.setMargin(new java.awt.Insets(2, 1, 2, 1)); cmdTreeCollapse.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(final java.awt.event.ActionEvent evt) { cmdTreeCollapseActionPerformed(evt); } }); jToolBar1.add(cmdTreeCollapse); cmdRefreshSingleLayer.setIcon(new javax.swing.ImageIcon( getClass().getResource("/de/cismet/cismap/commons/gui/layerwidget/res/refresh.png"))); // NOI18N cmdRefreshSingleLayer.setToolTipText(org.openide.util.NbBundle.getMessage( LayerWidget.class, "LayerWidget.cmdRefreshSingleLayer.toolTipText")); // NOI18N cmdRefreshSingleLayer.setMargin(new java.awt.Insets(2, 1, 2, 1)); cmdRefreshSingleLayer.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(final java.awt.event.ActionEvent evt) { cmdRefreshSingleLayerActionPerformed(evt); } }); jToolBar1.add(cmdRefreshSingleLayer); cmdDown.setIcon(new javax.swing.ImageIcon( getClass().getResource("/de/cismet/cismap/commons/gui/layerwidget/res/down.png"))); // NOI18N cmdDown.setToolTipText(org.openide.util.NbBundle.getMessage( LayerWidget.class, "LayerWidget.cmdDown.toolTipText")); // NOI18N cmdDown.setMargin(new java.awt.Insets(2, 1, 2, 1)); cmdDown.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(final java.awt.event.ActionEvent evt) { cmdDownActionPerformed(evt); } }); jToolBar1.add(cmdDown); cmdUp.setIcon(new javax.swing.ImageIcon( getClass().getResource("/de/cismet/cismap/commons/gui/layerwidget/res/up.png"))); // NOI18N cmdUp.setToolTipText(org.openide.util.NbBundle.getMessage(LayerWidget.class, "LayerWidget.cmdUp.toolTipText")); // NOI18N cmdUp.setMargin(new java.awt.Insets(2, 1, 2, 1)); cmdUp.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(final java.awt.event.ActionEvent evt) { cmdUpActionPerformed(evt); } }); jToolBar1.add(cmdUp); cmdZoomToFullExtent.setIcon(new javax.swing.ImageIcon( getClass().getResource("/de/cismet/cismap/commons/gui/layerwidget/res/layerZoom.png"))); // NOI18N cmdZoomToFullExtent.setToolTipText(org.openide.util.NbBundle.getMessage( LayerWidget.class, "LayerWidget.cmdZoomToFullExtent.toolTipText")); // NOI18N cmdZoomToFullExtent.setMargin(new java.awt.Insets(2, 1, 2, 1)); cmdZoomToFullExtent.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(final java.awt.event.ActionEvent evt) { cmdZoomToFullExtentActionPerformed(evt); } }); jToolBar1.add(cmdZoomToFullExtent); cmdDisable.setIcon(new javax.swing.ImageIcon( getClass().getResource("/de/cismet/cismap/commons/gui/layerwidget/res/disable.png"))); // NOI18N cmdDisable.setToolTipText(org.openide.util.NbBundle.getMessage( LayerWidget.class, "LayerWidget.cmdDisable.toolTipText")); // NOI18N cmdDisable.setMargin(new java.awt.Insets(2, 1, 2, 1)); cmdDisable.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(final java.awt.event.ActionEvent evt) { cmdDisableActionPerformed(evt); } }); jToolBar1.add(cmdDisable); cmdRemove.setIcon(new javax.swing.ImageIcon( getClass().getResource("/de/cismet/cismap/commons/gui/layerwidget/res/removeLayer.png"))); // NOI18N cmdRemove.setToolTipText(org.openide.util.NbBundle.getMessage( LayerWidget.class, "LayerWidget.cmdRemove.toolTipText")); // NOI18N cmdRemove.setMargin(new java.awt.Insets(2, 1, 2, 1)); cmdRemove.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(final java.awt.event.ActionEvent evt) { cmdRemoveActionPerformed(evt); } }); jToolBar1.add(cmdRemove); cmdMakeInvisible.setIcon(new javax.swing.ImageIcon( getClass().getResource("/de/cismet/cismap/commons/gui/layerwidget/res/layerDLinvisible.png"))); // NOI18N cmdMakeInvisible.setToolTipText(org.openide.util.NbBundle.getMessage( LayerWidget.class, "LayerWidget.cmdMakeInvisible.toolTipText")); // NOI18N cmdMakeInvisible.setMargin(new java.awt.Insets(2, 1, 2, 1)); cmdMakeInvisible.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(final java.awt.event.ActionEvent evt) { cmdMakeInvisibleActionPerformed(evt); } }); jToolBar1.add(cmdMakeInvisible); jPanel1.add(jToolBar1, java.awt.BorderLayout.CENTER); add(jPanel1, java.awt.BorderLayout.NORTH); } // </editor-fold>//GEN-END:initComponents /** * DOCUMENT ME! */ public void removeAllLayers() { activeLayerModel.removeAllLayers(); } /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void cmdRefreshSingleLayerActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_cmdRefreshSingleLayerActionPerformed final TreePath[] tps = treeTable.getTree().getSelectionPaths(); final SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { if (tps != null) { for (final TreePath tp : tps) { if ((tp != null) && (tp.getLastPathComponent() instanceof RetrievalServiceLayer)) { ((MapService)tp.getLastPathComponent()).setBoundingBox( mapC.getCurrentBoundingBoxFromCamera()); ((RetrievalServiceLayer)tp.getLastPathComponent()).retrieve(true); } else if ((tp != null) && (tp.getParentPath().getLastPathComponent() instanceof RetrievalServiceLayer)) { ((RetrievalServiceLayer)tp.getParentPath().getLastPathComponent()).retrieve(true); } } } return null; } @Override protected void done() { treeTable.getTree().setSelectionPaths(tps); StaticSwingTools.jTableScrollToVisible(treeTable, treeTable.getSelectedRow(), 0); treeTable.getTree().setSelectionPaths(tps); } }; worker.execute(); } //GEN-LAST:event_cmdRefreshSingleLayerActionPerformed /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void cmdDownActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_cmdDownActionPerformed final TreePath[] tps = treeTable.getTree().getSelectionPaths(); if (tps != null) { Arrays.sort(tps, new Comparator<TreePath>() { @Override public int compare(final TreePath o1, final TreePath o2) { final Integer pos = activeLayerModel.getLayerPosition(o1); return pos.compareTo(activeLayerModel.getLayerPosition(o2)); } }); for (final TreePath tp : tps) { if (tp != null) { activeLayerModel.moveLayerDown(tp); } if (EventQueue.isDispatchThread()) { log.warn("InvokeLater in EDT"); } // NOI18N } } EventQueue.invokeLater(new Runnable() { @Override public void run() { treeTable.getTree().setSelectionPaths(tps); StaticSwingTools.jTableScrollToVisible(treeTable, treeTable.getSelectedRow(), 0); } }); } //GEN-LAST:event_cmdDownActionPerformed /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void cmdUpActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_cmdUpActionPerformed final TreePath[] tps = treeTable.getTree().getSelectionPaths(); if (tps != null) { Arrays.sort(tps, new Comparator<TreePath>() { @Override public int compare(final TreePath o1, final TreePath o2) { final Integer pos = activeLayerModel.getLayerPosition(o1); return pos.compareTo(activeLayerModel.getLayerPosition(o2)) * -1; } }); for (final TreePath tp : tps) { if (tp != null) { activeLayerModel.moveLayerUp(tp); } if (EventQueue.isDispatchThread()) { log.warn("InvokeLater in EDT"); } // NOI18N } } EventQueue.invokeLater(new Runnable() { @Override public void run() { treeTable.getTree().setSelectionPaths(tps); StaticSwingTools.jTableScrollToVisible(treeTable, treeTable.getSelectedRow(), 0); } }); } //GEN-LAST:event_cmdUpActionPerformed /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void cmdMakeInvisibleActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_cmdMakeInvisibleActionPerformed final TreePath[] tps = treeTable.getTree().getSelectionPaths(); if (tps != null) { for (final TreePath tp : tps) { if (tp != null) { activeLayerModel.handleVisibility(tp); } } } if (EventQueue.isDispatchThread()) { log.warn("InvokeLater in EDT"); } // NOI18N EventQueue.invokeLater(new Runnable() { @Override public void run() { treeTable.getTree().setSelectionPaths(tps); } }); } //GEN-LAST:event_cmdMakeInvisibleActionPerformed /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void cmdDisableActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_cmdDisableActionPerformed final TreePath[] tps = treeTable.getTree().getSelectionPaths(); if (tps != null) { for (final TreePath tp : tps) { if (tp != null) { activeLayerModel.disableLayer(tp); } if (EventQueue.isDispatchThread()) { log.warn("InvokeLater in EDT"); } // NOI18N } } EventQueue.invokeLater(new Runnable() { @Override public void run() { treeTable.getTree().setSelectionPaths(tps); } }); } //GEN-LAST:event_cmdDisableActionPerformed /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void cmdTreeCollapseActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_cmdTreeCollapseActionPerformed // StaticSwingTools.jTreeCollapseAllNodes(treeTable.getTree()); // int sel = treeTable.getSelectionModel().getMinSelectionIndex(); // if (treeTable.getRowCount() > 0) { // treeTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION); // treeTable.getSelectionModel().setSelectionInterval(0, treeTable.getRowCount() - 1); // if (sel == -1) { // treeTable.getSelectionModel().setSelectionInterval(0, 0); // } else { // treeTable.getSelectionModel().setSelectionInterval(sel, sel); // } // treeTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // } treeTable.getColumnModel().getColumn(3).getCellEditor().stopCellEditing(); } //GEN-LAST:event_cmdTreeCollapseActionPerformed /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void cmdRemoveActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_cmdRemoveActionPerformed try { final TreePath[] tps = treeTable.getTree().getSelectionPaths(); if (tps != null) { int row = -1; for (final TreePath tp : tps) { row = treeTable.getSelectedRow(); if (tp != null) { activeLayerModel.removeLayer(tp); } } final int lastSelectedRow = row; final Runnable r = new Runnable() { @Override public void run() { int selectedRow = lastSelectedRow; if (selectedRow >= treeTable.getRowCount()) { selectedRow = treeTable.getRowCount() - 1; } if (selectedRow != -1) { treeTable.getSelectionModel().setSelectionInterval(selectedRow, selectedRow); } } }; // do invoke later in EDT is required, because the selection should be adopted // after the layer is removed EventQueue.invokeLater(r); } } catch (final Exception e) { log.error("Error during removal of layer", e); } } //GEN-LAST:event_cmdRemoveActionPerformed /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void cmdZoomToFullExtentActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_cmdZoomToFullExtentActionPerformed final TreePath[] tps = treeTable.getTree().getSelectionPaths(); final SwingWorker<Geometry, Geometry> worker = new SwingWorker<Geometry, Geometry>() { @Override protected Geometry doInBackground() throws Exception { Geometry geom = null; for (final TreePath path : tps) { Geometry g = null; RetrievalServiceLayer rsl = null; if ((path != null) && (path.getLastPathComponent() instanceof RetrievalServiceLayer)) { rsl = (RetrievalServiceLayer)path.getLastPathComponent(); } else if ((path != null) && (path.getParentPath().getLastPathComponent() instanceof RetrievalServiceLayer)) { rsl = (RetrievalServiceLayer)path.getParentPath().getLastPathComponent(); } if (rsl != null) { if (rsl instanceof WMSServiceLayer) { final Layer l = ((WMSServiceLayer)rsl).getLayerInformation(); Envelope envelope = null; if (l != null) { envelope = CapabilityWidget.getEnvelopeForWmsLayer(l); } else { final WMSCapabilities caps = ((WMSServiceLayer)rsl).getWmsCapabilities(); if (caps != null) { envelope = CapabilityWidget.getEnvelopeForWmsCaps(caps); } } if (envelope != null) { g = CapabilityWidget.createGeometryFromEnvelope(envelope); } } else if (rsl instanceof WebFeatureService) { final WebFeatureService l = ((WebFeatureService)rsl); final Envelope envelope = CapabilityWidget.getEnvelopeFromFeatureType(l.getFeature()); if (envelope != null) { g = CapabilityWidget.createGeometryFromEnvelope(envelope); } } else if (rsl instanceof SlidableWMSServiceLayerGroup) { final Layer l = ((SlidableWMSServiceLayerGroup)rsl).getLayerInformation(); if (l != null) { final Envelope envelope = CapabilityWidget.getEnvelopeForWmsLayer(l); if (envelope != null) { g = CapabilityWidget.createGeometryFromEnvelope(envelope); } } } else if (rsl instanceof SimpleWMS) { final SimpleWMS wms = ((SimpleWMS)rsl); final Layer l = wms.getLayerInformation(); if (l != null) { final Envelope envelope = CapabilityWidget.getEnvelopeForWmsLayer(l); if (envelope != null) { g = CapabilityWidget.createGeometryFromEnvelope(envelope); } } } else if (rsl instanceof ShapeFileFeatureService) { final ShapeFileFeatureService sffs = (ShapeFileFeatureService)rsl; g = ((ShapeFeatureFactory)sffs.getFeatureFactory()).getEnvelope(); } else if (rsl instanceof JDBCFeatureService) { final JDBCFeatureService sffs = (JDBCFeatureService)rsl; g = ((JDBCFeatureFactory)sffs.getFeatureFactory()).getEnvelope(); } } if (g != null) { if (geom == null) { geom = g.getEnvelope(); geom.setSRID(g.getSRID()); } else { if (geom.getSRID() != g.getSRID()) { g = CrsTransformer.transformToGivenCrs( g, CrsTransformer.createCrsFromSrid(geom.getSRID())); } final Geometry ge = g.getEnvelope(); ge.setSRID(geom.getSRID()); geom = geom.union(g); } } } return geom; } @Override protected void done() { try { final Geometry geom = get(); CismapBroker.getInstance() .getMappingComponent() .gotoBoundingBoxWithHistory(new XBoundingBox(geom)); } catch (Exception e) { log.error("Error while zooming to extend", e); } } }; worker.execute(); } //GEN-LAST:event_cmdZoomToFullExtentActionPerformed /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void jButton1ActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_jButton1ActionPerformed try { final Class classInfo = ClassLoader.getSystemClassLoader() .loadClass("de.cismet.cismap.cidslayer.CidsLayer"); activeLayerModel.addLayer((RetrievalServiceLayer)classInfo.newInstance()); } catch (ClassNotFoundException ex) { log.error("ClassNotFound", ex); } catch (InstantiationException ex) { log.error("InstantiationException", ex); } catch (IllegalAccessException ex) { log.error("IllegalAccessException", ex); } } //GEN-LAST:event_jButton1ActionPerformed /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public ActiveLayerModel getMappingModel() { return activeLayerModel; } /** * DOCUMENT ME! * * @param args the command line arguments */ public static void main(final String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { new Tester().setVisible(true); } }); } /** * Called when the drag operation has terminated with a drop on the operable part of the drop site for the <code> * DropTarget</code> registered with this listener. * * <p>This method is responsible for undertaking the transfer of the data associated with the gesture. The <code> * DropTargetDropEvent</code> provides a means to obtain a <code>Transferable</code> object that represents the data * object(s) to be transfered.</p> * * <P>From this method, the <code>DropTargetListener</code> shall accept or reject the drop via the acceptDrop(int * dropAction) or rejectDrop() methods of the <code>DropTargetDropEvent</code> parameter.</P> * * <P>Subsequent to acceptDrop(), but not before, <code>DropTargetDropEvent</code>'s getTransferable() method may be * invoked, and data transfer may be performed via the returned <code>Transferable</code>'s getTransferData() * method.</P> * * <P>At the completion of a drop, an implementation of this method is required to signal the success/failure of the * drop by passing an appropriate <code>boolean</code> to the <code>DropTargetDropEvent</code>'s * dropComplete(boolean success) method.</P> * * <P>Note: The data transfer should be completed before the call to the <code>DropTargetDropEvent</code>'s * dropComplete(boolean success) method. After that, a call to the getTransferData() method of the <code> * Transferable</code> returned by <code>DropTargetDropEvent.getTransferable()</code> is guaranteed to succeed only * if the data transfer is local; that is, only if <code>DropTargetDropEvent.isLocalTransfer()</code> returns <code> * true</code>. Otherwise, the behavior of the call is implementation-dependent.</P> * * @param dtde the <code>DropTargetDropEvent</code> */ @Override public void drop(final java.awt.dnd.DropTargetDropEvent dtde) { LayerDropUtils.drop(dtde, activeLayerModel, this); } /** * DOCUMENT ME! * * @param dte DOCUMENT ME! */ @Override public void dragExit(final java.awt.dnd.DropTargetEvent dte) { } /** * DOCUMENT ME! * * @param dtde DOCUMENT ME! */ @Override public void dropActionChanged(final java.awt.dnd.DropTargetDragEvent dtde) { } /** * DOCUMENT ME! * * @param dtde DOCUMENT ME! */ @Override public void dragOver(final java.awt.dnd.DropTargetDragEvent dtde) { } /** * DOCUMENT ME! * * @param dtde DOCUMENT ME! */ @Override public void dragEnter(final java.awt.dnd.DropTargetDragEvent dtde) { } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public double getScale() { return 2.0; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public Image getErrorImage() { return errorImage; } /** * DOCUMENT ME! * * @param errorImage DOCUMENT ME! */ public void setErrorImage(final Image errorImage) { this.errorImage = errorImage; } /** * DOCUMENT ME! * * @return DOCUMENT ME! * * @throws NoWriteError DOCUMENT ME! */ @Override @Deprecated public Element getConfiguration() throws NoWriteError { return activeLayerModel.getConfiguration(); } /** * DOCUMENT ME! * * @param e DOCUMENT ME! */ @Override @Deprecated public void masterConfigure(final Element e) { activeLayerModel.masterConfigure(e); } /** * DOCUMENT ME! * * @param e DOCUMENT ME! */ @Override @Deprecated public void configure(final Element e) { activeLayerModel.configure(e); } /** * DOCUMENT ME! * * @param e DOCUMENT ME! * @param v DOCUMENT ME! * * @return DOCUMENT ME! */ public static List<String> getCapabilities(final Element e, final List<String> v) { try { if (e.getName().equals("capabilities") && (e.getAttribute("type") != null) && (e.getAttribute("type").getValue().equals(CapabilityLink.OGC) || e.getAttribute("type").getValue().equals(CapabilityLink.OGC_DEPRECATED))) { // NOI18N final String url = e.getTextTrim(); if (!v.contains(url)) { v.add(url); return v; } } else { final Iterator it = e.getChildren().iterator(); while (it.hasNext()) { final Object elem = (Object)it.next(); if (elem instanceof Element) { getCapabilities((Element)elem, v); } } } return v; } catch (Exception ex) { return new ArrayList<String>(0); } } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public JTreeTable getTreeTable() { return treeTable; } /** * DOCUMENT ME! * * @param lastPathComponent DOCUMENT ME! * * @return DOCUMENT ME! */ private boolean isSlidableWMSServiceLayerGroup(final Object lastPathComponent) { de.cismet.cismap.commons.wms.capabilities.deegree.DeegreeLayer layer = null; if (lastPathComponent instanceof de.cismet.cismap.commons.wms.capabilities.deegree.DeegreeLayer) { layer = (de.cismet.cismap.commons.wms.capabilities.deegree.DeegreeLayer)lastPathComponent; } else { return false; } final List<String> keywords = Arrays.asList(layer.getKeywords()); return keywords.contains("cismapSlidingLayerGroup"); } /** * This is required to prevent a bug on Macs that causes the first drop operation to fail with an exception, * "java.awt.datatransfer.UnsupportedFlavorException: application/x-java-file-list". This bug is related to * http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4746177 but only occurs during the first Mac OS drop operation * in a Java application. */ private static void hackDragAndDropDataFlavors() { final SystemFlavorMap sfm = (SystemFlavorMap)SystemFlavorMap.getDefaultFlavorMap(); final String nativeValue = "application/x-java-file-list"; // NOI18N final DataFlavor dataFlavor = new DataFlavor( "application/x-java-file-list; charset=ASCII; class=java.util.List", "File List"); // NOI18N sfm.addUnencodedNativeForFlavor(dataFlavor, nativeValue); sfm.addFlavorForUnencodedNative(nativeValue, dataFlavor); } }