/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package de.cismet.cismap.commons.gui.featureinfopanel;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.Point;
import edu.umd.cs.piccolo.event.PInputEvent;
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import de.cismet.cismap.commons.features.Feature;
import de.cismet.cismap.commons.raster.wms.WMSLayer;
import de.cismet.cismap.commons.raster.wms.WMSServiceLayer;
/**
* DOCUMENT ME!
*
* @author therter
* @version $Revision$, $Date$
*/
public class WMSGetFeatureInfoDescription implements Feature {
//~ Instance fields --------------------------------------------------------
private WMSLayer layer;
private WMSServiceLayer service;
private Geometry geometry;
private PInputEvent pInputEvent;
//~ Constructors -----------------------------------------------------------
/**
* Creates a new WMSGetFeatureInfoDescription object.
*/
public WMSGetFeatureInfoDescription() {
}
/**
* Creates a new WMSGetFeatureInfoDescription object.
*
* @param geometry DOCUMENT ME!
* @param pInputEvent DOCUMENT ME!
* @param layer DOCUMENT ME!
* @param service DOCUMENT ME!
*/
public WMSGetFeatureInfoDescription(final Geometry geometry,
final PInputEvent pInputEvent,
final WMSLayer layer,
final WMSServiceLayer service) {
this.layer = layer;
this.service = service;
this.geometry = geometry;
this.pInputEvent = pInputEvent;
}
//~ Methods ----------------------------------------------------------------
/**
* DOCUMENT ME!
*
* @return the x
*/
public int getX() {
return (int)getpInputEvent().getCanvasPosition().getX();
}
/**
* DOCUMENT ME!
*
* @return the y
*/
public int getY() {
return (int)getpInputEvent().getCanvasPosition().getY();
}
/**
* DOCUMENT ME!
*
* @return the layer
*/
public WMSLayer getLayer() {
return layer;
}
/**
* DOCUMENT ME!
*
* @param layer the layer to set
*/
public void setLayer(final WMSLayer layer) {
this.layer = layer;
}
/**
* DOCUMENT ME!
*
* @return the service
*/
public WMSServiceLayer getService() {
return service;
}
/**
* DOCUMENT ME!
*
* @param service the service to set
*/
public void setService(final WMSServiceLayer service) {
this.service = service;
}
@Override
public Geometry getGeometry() {
return geometry;
}
@Override
public void setGeometry(final Geometry geom) {
this.geometry = geometry;
}
@Override
public boolean canBeSelected() {
return true;
}
@Override
public void setCanBeSelected(final boolean canBeSelected) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public boolean isEditable() {
return false;
}
@Override
public void setEditable(final boolean editable) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public boolean isHidden() {
return false;
}
@Override
public void hide(final boolean hiding) {
throw new UnsupportedOperationException("Not supported yet.");
}
/**
* DOCUMENT ME!
*
* @return the pInputEvent
*/
public PInputEvent getpInputEvent() {
return pInputEvent;
}
/**
* DOCUMENT ME!
*
* @param pInputEvent the pInputEvent to set
*/
public void setpInputEvent(final PInputEvent pInputEvent) {
this.pInputEvent = pInputEvent;
}
@Override
public String toString() {
String label = service.getName();
if ((geometry != null) && (geometry instanceof Point)) {
label += round(((Point)geometry).getX()) + ", " + round(((Point)geometry).getY());
}
return label;
}
/**
* DOCUMENT ME!
*
* @param value DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
private String round(final double value) {
final int precision = (int)Math.log10(value) + 3;
return new BigDecimal(value).round(new MathContext(precision, RoundingMode.HALF_EVEN)).toPlainString();
}
}