/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
/*
* OverviewComponent.java
*
* Created on 5. Maerz 2008, 21:33
*/
package de.cismet.cismap.commons.gui.overviewwidget;
import com.vividsolutions.jts.geom.Coordinate;
import edu.umd.cs.piccolo.PCamera;
import org.deegree.model.crs.GeoTransformer;
import org.jdom.Element;
import java.awt.BorderLayout;
import java.awt.Color;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.JFrame;
import de.cismet.cismap.commons.BoundingBox;
import de.cismet.cismap.commons.Crs;
import de.cismet.cismap.commons.CrsTransformer;
import de.cismet.cismap.commons.RetrievalServiceLayer;
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.interaction.CismapBroker;
import de.cismet.cismap.commons.raster.wms.simple.SimpleWMS;
import de.cismet.cismap.commons.raster.wms.simple.SimpleWmsGetMapUrl;
import de.cismet.cismap.commons.retrieval.RetrievalEvent;
import de.cismet.cismap.commons.retrieval.RetrievalListener;
import de.cismet.tools.configuration.Configurable;
import de.cismet.tools.configuration.NoWriteError;
import de.cismet.tools.gui.log4jquickconfig.Log4JQuickConfig;
/**
* DOCUMENT ME!
*
* @author hell
* @version $Revision$, $Date$
*/
public class OverviewComponent extends javax.swing.JPanel implements Configurable {
//~ Instance fields --------------------------------------------------------
MappingComponent overviewMap = null;
MappingComponent masterMap = null;
ActiveLayerModel model = new ActiveLayerModel();
private final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(this.getClass());
private String url =
"http://geoportal.wuppertal.de/deegree/wms?&VERSION=1.1.1&REQUEST=GetMap&WIDTH=<cismap:width>&HEIGHT=<cismap:height>&BBOX=<cismap:boundingBox>&SRS=EPSG:31466&FORMAT=image/png&TRANSPARENT=true&BGCOLOR=0xF0F0F0&EXCEPTIONS=application/vnd.ogc.se_xml&LAYERS=R102:stadtplan2007&STYLES=default"; // NOI18N
SimpleWMS backgroundService = new SimpleWMS(new SimpleWmsGetMapUrl(url));
Crs srs = new Crs("EPSG:31466", "EPSG:31466", "EPSG:31466", true, true); // NOI18N
XBoundingBox home = new XBoundingBox(2567799, 5670041, 2594650, 5688258, srs.getCode(), srs.isMetric());
//~ Constructors -----------------------------------------------------------
/**
* Creates new form OverviewComponent.
*/
public OverviewComponent() {
initComponents();
overviewMap = new MappingComponent();
add(overviewMap, BorderLayout.CENTER);
overviewMap.setInteractionMode(MappingComponent.OVERVIEW);
overviewMap.setReadOnly(true);
overviewMap.setFixedBoundingBox(home);
model.setSrs(srs);
model.addHome(home);
overviewMap.setMappingModel(model);
revalidate();
}
//~ Methods ----------------------------------------------------------------
/**
* DOCUMENT ME!
*/
public void initBackgroundService() {
if (log.isDebugEnabled()) {
log.debug("initBackgroundService"); // NOI18N
}
model = new ActiveLayerModel();
overviewMap.setFixedBoundingBox(home);
model.setSrs(srs);
model.setDefaultHomeSrs(srs);
model.addHome(home);
overviewMap.setMappingModel(model);
overviewMap.resetWtst();
model.removeAllLayers();
model.addLayer((RetrievalServiceLayer)backgroundService);
backgroundService.addRetrievalListener(new RetrievalListener() {
@Override
public void retrievalStarted(final RetrievalEvent e) {
}
@Override
public void retrievalProgress(final RetrievalEvent e) {
}
@Override
public void retrievalComplete(final RetrievalEvent e) {
}
@Override
public void retrievalAborted(final RetrievalEvent e) {
}
@Override
public void retrievalError(final RetrievalEvent e) {
}
});
}
/**
* 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() {
setLayout(new java.awt.BorderLayout());
} // </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
// End of variables declaration//GEN-END:variables
/**
* DOCUMENT ME!
*
* @param args DOCUMENT ME!
*/
public static void main(final String[] args) {
Log4JQuickConfig.configure4LumbermillOnLocalhost();
final JFrame f = new JFrame();
f.setSize(500, 500);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final OverviewComponent ov = new OverviewComponent();
f.getContentPane().add(ov);
f.setVisible(true);
ov.overviewMap.unlock();
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public MappingComponent getOverviewMap() {
return overviewMap;
}
/**
* DOCUMENT ME!
*
* @param overviewMap DOCUMENT ME!
*/
public void setOverviewMap(final MappingComponent overviewMap) {
this.overviewMap = overviewMap;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public MappingComponent getMasterMap() {
return masterMap;
}
/**
* DOCUMENT ME!
*
* @param masterMap DOCUMENT ME!
*/
public void setMasterMap(final MappingComponent masterMap) {
this.masterMap = masterMap;
final Color fill = new Color(255, 0, 0, 100);
masterMap.getCamera()
.addPropertyChangeListener(PCamera.PROPERTY_VIEW_TRANSFORM, new PropertyChangeListener() {
@Override
public void propertyChange(final PropertyChangeEvent evt) {
try {
BoundingBox bb = masterMap.getCurrentBoundingBoxFromCamera();
if (!CismapBroker.getInstance().getSrs().getCode().equals(srs.getCode())) {
final CrsTransformer transformer = new CrsTransformer(srs.getCode());
bb = transformer.transformBoundingBox(
bb,
CismapBroker.getInstance().getSrs().getCode());
}
final double x = bb.getX1() + (bb.getWidth() / 2.0);
final double y = bb.getY2() - (bb.getHeight() / 2.0);
overviewMap.getWtst();
overviewMap.outlineArea(bb, fill);
// overviewMap.crossHairPoint(new Coordinate(2583781, 5682540));
overviewMap.crossHairPoint(new Coordinate(x, y));
} catch (Exception e) {
log.error(
"Cannot transform the current boundingbox from "
+ CismapBroker.getInstance().getSrs().getCode()
+ " to "
+ srs.getCode(),
e);
}
}
});
}
@Override
public void configure(final Element parent) {
}
@Override
public Element getConfiguration() throws NoWriteError {
return null;
}
@Override
public void masterConfigure(final Element parent) {
try {
final Element prefs = parent.getChild("cismapOverviewComponentPreferences"); // NOI18N
try {
// the following crs object is incomplete and should only be used within the OverviewComponent
final Crs tmp = new Crs();
tmp.setCode(prefs.getAttributeValue("srs"));
srs = tmp;
} catch (Exception skip) {
}
try {
// TODO determine, whether the home CRS is metric or not
home = new XBoundingBox(prefs.getChild("overviewExtent"), srs.getCode(), true); // NOI18N
} catch (Exception skip) {
}
try {
final SimpleWMS simpleWMS = new SimpleWMS(prefs.getChild("background").getChild("simpleWms")); // NOI18N
backgroundService = simpleWMS;
} catch (Exception skip) {
}
initBackgroundService();
} catch (Exception e) {
log.warn("Fehler beim Konfigurieren der OverviewComponent. Fallback=Stadtplan", e); // NOI18N
initBackgroundService();
}
}
}