/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ package de.cismet.cids.custom.switchon.objectrenderer; import org.apache.log4j.Logger; import org.openide.util.NbBundle; import java.awt.Component; import java.awt.GridLayout; import javax.swing.JCheckBox; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import de.cismet.cids.custom.switchon.AbstractCidsBeanRenderer; import de.cismet.cids.custom.switchon.MonitorstationContext; import de.cismet.cids.custom.switchon.Utils; import de.cismet.cids.custom.switchon.Variable; import de.cismet.cids.custom.switchon.objecteditors.MonitorstationEditor.VarCheckBox; import de.cismet.cismap.commons.Crs; import de.cismet.cismap.commons.XBoundingBox; import de.cismet.cismap.commons.gui.MappingComponent; import de.cismet.cismap.commons.gui.layerwidget.ActiveLayerModel; import de.cismet.cismap.commons.raster.wms.simple.SimpleWMS; import de.cismet.cismap.commons.raster.wms.simple.SimpleWmsGetMapUrl; import de.cismet.cismap.navigatorplugin.CidsFeature; /** * DOCUMENT ME! * * @author mscholl * @version $Revision$, $Date$ */ public class MonitorstationRenderer extends AbstractCidsBeanRenderer { //~ Static fields/initializers --------------------------------------------- private static final String WMS_DEMIS_WORLDMAP_GETMAP_TEMPLATE = "http://www2.demis.nl/WMS/wms.ashx?wms=WorldMap&&VERSION=1.1.0&REQUEST=GetMap&BBOX=<cismap:boundingBox>&WIDTH=<cismap:width>&HEIGHT=<cismap:height>&SRS=EPSG:4326&FORMAT=image/png&TRANSPARENT=TRUE&BGCOLOR=0xF0F0F0&EXCEPTIONS=application/vnd.ogc.se_xml&LAYERS=Bathymetry,Countries,Topography,Hillshading,Builtup%20areas,Coastlines,Waterbodies,Inundated,Rivers,Streams,Railroads,Highways,Roads,Trails,Borders,Cities,Settlements,Spot%20elevations,Airports,Ocean%20features&STYLES"; /** LOGGER. */ private static final transient Logger LOG = Logger.getLogger(MonitorstationRenderer.class); //~ Instance fields -------------------------------------------------------- private final transient ChangeListener posPreventVarChangeL; private final transient ChangeListener negPreventVarChangeL; // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.Box.Filler filler1; private javax.swing.JLabel lblContext; private javax.swing.JLabel lblContextValue; private javax.swing.JLabel lblHeadingMap; private javax.swing.JLabel lblHeadingMetadata; private javax.swing.JLabel lblName; private javax.swing.JLabel lblNameValue; private de.cismet.cismap.commons.gui.MappingComponent map; private de.cismet.tools.gui.SemiRoundedPanel panHeadInfo; private de.cismet.tools.gui.SemiRoundedPanel panHeadInfo1; private javax.swing.JPanel pnlDataContent; private de.cismet.tools.gui.RoundedPanel pnlMap; private javax.swing.JPanel pnlVariables; private de.cismet.tools.gui.RoundedPanel pnldata; private org.jdesktop.beansbinding.BindingGroup bindingGroup; // End of variables declaration//GEN-END:variables //~ Constructors ----------------------------------------------------------- /** * Creates new form MonitorstationRenderer. */ public MonitorstationRenderer() { this.posPreventVarChangeL = new PreventChangeListener(true); this.negPreventVarChangeL = new PreventChangeListener(false); initComponents(); initVariables(); } //~ Methods ---------------------------------------------------------------- /** * DOCUMENT ME! */ private void initVariables() { final Variable[] vars = Variable.values(); final GridLayout varLayout = new GridLayout(Math.round(vars.length / 2.0f), 2, 5, 5); pnlVariables.setLayout(varLayout); for (final Variable var : vars) { final VarCheckBox box = new VarCheckBox(var); box.setContentAreaFilled(false); pnlVariables.add(box); } } /** * DOCUMENT ME! */ @Override protected void init() { bindingGroup.unbind(); bindingGroup.bind(); initType(); initMap(); final CidsFeature cidsFeature = new CidsFeature(cidsBean.getMetaObject()); map.getFeatureCollection().addFeature(cidsFeature); } /** * DOCUMENT ME! */ private void initType() { final String type = (String)cidsBean.getProperty("type"); // NOI18N clearCheckboxes(); if (type != null) { if ("R".equals(type)) { LOG.warn("old monitor station type: " + cidsBean); // NOI18N return; } final String[] split = type.split(":", 2); // NOI18N assert (split.length == 1) || (split.length == 2) : "illegal type definition: " + type; // NOI18N final String ctxKey = split[0]; lblContextValue.setText(MonitorstationContext.getMonitorstationContext(ctxKey).getLocalisedName()); if (split.length == 2) { if (LOG.isDebugEnabled()) { LOG.debug("assuming type with variable description:" + type); // NOI18N } final String[] vars = split[1].split(","); // NOI18N for (final String var : vars) { setVarSelected(Variable.getVariable(var), true); } } } } /** * DOCUMENT ME! */ @Override public void dispose() { map.getFeatureCollection().removeAllFeatures(); super.dispose(); } /** * DOCUMENT ME! */ private void clearCheckboxes() { for (final Component c : pnlVariables.getComponents()) { if (c instanceof JCheckBox) { final JCheckBox box = (JCheckBox)c; box.setSelected(false); box.removeChangeListener(posPreventVarChangeL); box.addChangeListener(negPreventVarChangeL); } } } /** * DOCUMENT ME! * * @param var DOCUMENT ME! * @param selected DOCUMENT ME! * * @return DOCUMENT ME! * * @throws IllegalArgumentException DOCUMENT ME! */ private boolean setVarSelected(final Variable var, final boolean selected) { for (final Component c : pnlVariables.getComponents()) { if (c instanceof VarCheckBox) { final VarCheckBox box = (VarCheckBox)c; if (box.getVar().equals(var)) { box.removeChangeListener(selected ? negPreventVarChangeL : posPreventVarChangeL); box.setSelected(selected); box.addChangeListener(selected ? posPreventVarChangeL : negPreventVarChangeL); return true; } } } throw new IllegalArgumentException("var not present: " + var); // NOI18N } /** * DOCUMENT ME! */ private void initMap() { map.lock(); // europe final XBoundingBox bbox = new XBoundingBox( -23.328414916992188, 27.816315492228306, 45.596466064453125, 74.51063839571114, Utils.EPSG_WGS84, false); final ActiveLayerModel mappingModel = new ActiveLayerModel(); mappingModel.setSrs(new Crs(Utils.EPSG_WGS84, Utils.EPSG_WGS84, Utils.EPSG_WGS84, false, true)); mappingModel.addHome(bbox); final SimpleWmsGetMapUrl getMapUrl = new SimpleWmsGetMapUrl(WMS_DEMIS_WORLDMAP_GETMAP_TEMPLATE); mappingModel.addLayer(new SimpleWMS(getMapUrl)); map.setMappingModel(mappingModel); map.setInteractionMode(MappingComponent.OVERVIEW); map.gotoInitialBoundingBox(); map.unlock(); } /** * 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. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { java.awt.GridBagConstraints gridBagConstraints; bindingGroup = new org.jdesktop.beansbinding.BindingGroup(); pnldata = new de.cismet.tools.gui.RoundedPanel(); panHeadInfo = new de.cismet.tools.gui.SemiRoundedPanel(); lblHeadingMetadata = new javax.swing.JLabel(); pnlDataContent = new javax.swing.JPanel(); lblName = new javax.swing.JLabel(); lblNameValue = new javax.swing.JLabel(); lblContext = new javax.swing.JLabel(); lblContextValue = new javax.swing.JLabel(); pnlVariables = new javax.swing.JPanel(); filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 32767)); pnlMap = new de.cismet.tools.gui.RoundedPanel(); panHeadInfo1 = new de.cismet.tools.gui.SemiRoundedPanel(); lblHeadingMap = new javax.swing.JLabel(); map = new de.cismet.cismap.commons.gui.MappingComponent(); setOpaque(false); setLayout(new java.awt.GridBagLayout()); pnldata.setLayout(new java.awt.GridBagLayout()); panHeadInfo.setBackground(new java.awt.Color(51, 51, 51)); panHeadInfo.setMinimumSize(new java.awt.Dimension(109, 24)); panHeadInfo.setPreferredSize(new java.awt.Dimension(109, 24)); panHeadInfo.setLayout(new java.awt.FlowLayout()); lblHeadingMetadata.setForeground(new java.awt.Color(255, 255, 255)); lblHeadingMetadata.setText(org.openide.util.NbBundle.getMessage( MonitorstationRenderer.class, "MonitorstationRenderer.lblHeadingMetadata.text")); // NOI18N panHeadInfo.add(lblHeadingMetadata); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH; gridBagConstraints.weightx = 1.0; pnldata.add(panHeadInfo, gridBagConstraints); pnlDataContent.setOpaque(false); pnlDataContent.setLayout(new java.awt.GridBagLayout()); lblName.setText(NbBundle.getMessage(MonitorstationRenderer.class, "MonitorstationRenderer.lblName.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); pnlDataContent.add(lblName, gridBagConstraints); final org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding( org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${cidsBean.name}"), lblNameValue, org.jdesktop.beansbinding.BeanProperty.create("text")); bindingGroup.addBinding(binding); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); pnlDataContent.add(lblNameValue, gridBagConstraints); lblContext.setText(NbBundle.getMessage(MonitorstationRenderer.class, "MonitorstationRenderer.lblContext.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); pnlDataContent.add(lblContext, gridBagConstraints); lblContextValue.setText(NbBundle.getMessage( MonitorstationRenderer.class, "MonitorstationRenderer.lblContextValue.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); pnlDataContent.add(lblContextValue, gridBagConstraints); pnlVariables.setBorder(javax.swing.BorderFactory.createTitledBorder( NbBundle.getMessage(MonitorstationRenderer.class, "MonitorstationRenderer.pnlVariables.border.title"))); // NOI18N pnlVariables.setToolTipText(NbBundle.getMessage( MonitorstationRenderer.class, "MonitorstationRenderer.pnlVariables.toolTipText")); // NOI18N pnlVariables.setOpaque(false); pnlVariables.setLayout(new java.awt.GridBagLayout()); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); pnlDataContent.add(pnlVariables, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; gridBagConstraints.insets = new java.awt.Insets(15, 15, 15, 15); pnldata.add(pnlDataContent, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.weighty = 1.0; pnldata.add(filler1, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(10, 10, 10, 10); add(pnldata, gridBagConstraints); pnlMap.setLayout(new java.awt.GridBagLayout()); panHeadInfo1.setBackground(new java.awt.Color(51, 51, 51)); panHeadInfo1.setMinimumSize(new java.awt.Dimension(109, 24)); panHeadInfo1.setPreferredSize(new java.awt.Dimension(109, 24)); panHeadInfo1.setLayout(new java.awt.FlowLayout()); lblHeadingMap.setForeground(new java.awt.Color(255, 255, 255)); lblHeadingMap.setText(org.openide.util.NbBundle.getMessage( MonitorstationRenderer.class, "MonitorstationRenderer.lblHeadingMap.text")); // NOI18N panHeadInfo1.add(lblHeadingMap); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH; gridBagConstraints.weightx = 1.0; pnlMap.add(panHeadInfo1, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; gridBagConstraints.insets = new java.awt.Insets(10, 10, 10, 10); pnlMap.add(map, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; gridBagConstraints.insets = new java.awt.Insets(10, 10, 10, 10); add(pnlMap, gridBagConstraints); bindingGroup.bind(); } // </editor-fold>//GEN-END:initComponents //~ Inner Classes ---------------------------------------------------------- /** * DOCUMENT ME! * * @version $Revision$, $Date$ */ private final class PreventChangeListener implements ChangeListener { //~ Instance fields ---------------------------------------------------- private final boolean state; //~ Constructors ------------------------------------------------------- /** * Creates a new PreventChangeListener object. * * @param state DOCUMENT ME! */ public PreventChangeListener(final boolean state) { this.state = state; } //~ Methods ------------------------------------------------------------ /** * DOCUMENT ME! * * @param e DOCUMENT ME! */ @Override public void stateChanged(final ChangeEvent e) { final JCheckBox box = (JCheckBox)e.getSource(); box.setSelected(state); } } }