/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ package de.cismet.cismap.commons.featureservice; import org.apache.log4j.Logger; import org.jdom.CDATA; import org.jdom.Element; import java.awt.Color; import java.util.HashMap; import javax.swing.Icon; import javax.swing.ImageIcon; import de.cismet.cismap.commons.LayerInfoProvider; import de.cismet.cismap.commons.features.PostgisFeature; import de.cismet.cismap.commons.featureservice.factory.FeatureFactory; import de.cismet.cismap.commons.featureservice.factory.PostgisFeatureFactory; import de.cismet.cismap.commons.wms.capabilities.Layer; import de.cismet.tools.ConnectionInfo; /** * DOCUMENT ME! * * @author thorsten.hell@cismet.de * @author Pascal Dihé * @version $Revision$, $Date$ */ public class SimplePostgisFeatureService extends AbstractFeatureService<PostgisFeature, SimpleFeatureServiceSqlStatement> implements LayerInfoProvider { //~ Static fields/initializers --------------------------------------------- private static final transient Logger LOG = Logger.getLogger(SimplePostgisFeatureService.class); public static final String POSTGIS_FEATURELAYER_TYPE = "simplePostgisFeatureService"; // NOI18N public static final HashMap<Integer, Icon> layerIcons = new HashMap<Integer, Icon>(); static { layerIcons.put( LAYER_ENABLED_VISIBLE, new ImageIcon( AbstractFeatureService.class.getResource( "/de/cismet/cismap/commons/gui/layerwidget/res/layerPostgis.png"))); // NOI18N layerIcons.put( LAYER_ENABLED_INVISIBLE, new ImageIcon( AbstractFeatureService.class.getResource( "/de/cismet/cismap/commons/gui/layerwidget/res/layerPostgisInvisible.png"))); // NOI18N layerIcons.put( LAYER_DISABLED_VISIBLE, new ImageIcon( AbstractFeatureService.class.getResource( "/de/cismet/cismap/commons/gui/layerwidget/res/disabled/layerPostgis.png"))); // NOI18N layerIcons.put( LAYER_DISABLED_INVISIBLE, new ImageIcon( AbstractFeatureService.class.getResource( "/de/cismet/cismap/commons/gui/layerwidget/res/disabled/layerPostgisInvisible.png"))); // NOI18N } //~ Instance fields -------------------------------------------------------- private SimpleFeatureServiceSqlStatement sqlStatement; private ConnectionInfo connectionInfo; //~ Constructors ----------------------------------------------------------- /** * Creates a new instance of SimplePostgisFeatureService. * * @param spfs DOCUMENT ME! */ public SimplePostgisFeatureService(final SimplePostgisFeatureService spfs) { super(spfs); this.connectionInfo = spfs.getConnectionInfo(); this.sqlStatement = spfs.getQuery(); } /** * Creates a new SimplePostgisFeatureService object. * * @param element DOCUMENT ME! * * @throws Exception DOCUMENT ME! */ public SimplePostgisFeatureService(final Element element) throws Exception { super(element); } //~ Methods ---------------------------------------------------------------- /** * DOCUMENT ME! * * @param element DOCUMENT ME! * * @throws Exception DOCUMENT ME! */ @Override public void initFromElement(final Element element) throws Exception { super.initFromElement(element); if (element.getChild("dbConnectionInfo") != null) // NOI18N { final ConnectionInfo newConnectionInfo = new ConnectionInfo(element.getChild("dbConnectionInfo")); // NOI18N this.setConnectionInfo(newConnectionInfo); if (LOG.isDebugEnabled()) { LOG.debug("SimplePostgisFeatureService initialised with connection: \n" + this.getConnectionInfo().getUrl() + ", " + this.getConnectionInfo().getDriver() + ", " + this.getConnectionInfo().getUser()); // NOI18N } } else { LOG.error("missing element 'dbConnectionInfo' in xml configuration"); // NOI18N } // TODO: SimpleFeatureServiceSqlStatement should implement ConvertableToXML this.sqlStatement = new SimpleFeatureServiceSqlStatement(element.getChild("statement").getTextTrim()); // NOI18N this.sqlStatement.setAllFields(element.getChild("allFields").getTextTrim()); // NOI18N this.sqlStatement.setOrderBy(element.getChild("orderBy").getTextTrim()); // NOI18N } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ @Override public Element toElement() { final Element e = super.toElement(); if (this.sqlStatement != null) { final Element stmnt = new Element("statement"); // NOI18N stmnt.addContent(new CDATA(sqlStatement.getSqlTemplate())); e.addContent(stmnt); final Element allFields = new Element("allFields"); // NOI18N allFields.addContent(new CDATA(sqlStatement.getAllFields())); e.addContent(allFields); final Element orderBy = new Element("orderBy"); // NOI18N orderBy.addContent(new CDATA(sqlStatement.getOrderBy())); e.addContent(orderBy); } else { LOG.warn("sql statement is null and cannot be saved"); // NOI18N } if (this.connectionInfo != null) { // TODO: ConnectionInfo should implement ConvertableToXML final Element connectionElement = new Element("dbConnectionInfo"); // NOI18N connectionElement.addContent(new Element("driverClass").addContent(this.getConnectionInfo().getDriver())); // NOI18N connectionElement.addContent(new Element("dbUrl").addContent(this.getConnectionInfo().getUrl())); // NOI18N connectionElement.addContent(new Element("user").addContent(this.getConnectionInfo().getUser())); // NOI18N connectionElement.addContent(new Element("pass").addContent(this.getConnectionInfo().getPass())); // NOI18N e.addContent(connectionElement); } else { LOG.warn("connection info is null and cannot be saved"); // NOI18N } return e; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ @Override protected LayerProperties createLayerProperties() { final DefaultLayerProperties defaultLayerProperties = new DefaultLayerProperties(); defaultLayerProperties.getStyle().setLineColor(new Color(0.6f, 0.6f, 0.6f, 0.7f)); defaultLayerProperties.getStyle().setFillColor(new Color(0.2f, 0.2f, 0.2f, 0.7f)); defaultLayerProperties.setQueryType(LayerProperties.QUERYTYPE_UNDEFINED); defaultLayerProperties.setFeatureService(this); return defaultLayerProperties; } /** * DOCUMENT ME! * * @return DOCUMENT ME! * * @throws Exception DOCUMENT ME! */ @Override protected FeatureFactory createFeatureFactory() throws Exception { return new PostgisFeatureFactory(this.getLayerProperties(), this.getConnectionInfo(), null, this); } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ @Override public SimpleFeatureServiceSqlStatement getQuery() { return this.sqlStatement; } /** * DOCUMENT ME! * * @param sqlStatement DOCUMENT ME! */ @Override public void setQuery(final SimpleFeatureServiceSqlStatement sqlStatement) { this.sqlStatement = sqlStatement; } /** * DOCUMENT ME! * * @throws Exception DOCUMENT ME! */ @Override protected void initConcreteInstance() throws Exception { // nothing to do here } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ @Override protected String getFeatureLayerType() { return POSTGIS_FEATURELAYER_TYPE; } /** * DOCUMENT ME! * * @param type DOCUMENT ME! * * @return DOCUMENT ME! */ @Override public Icon getLayerIcon(final int type) { return layerIcons.get(type); } /** * DOCUMENT ME! * * @param connectionInfo DOCUMENT ME! */ public void setConnectionInfo(final ConnectionInfo connectionInfo) { this.connectionInfo = connectionInfo; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public ConnectionInfo getConnectionInfo() { return this.connectionInfo; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ @Override public SimplePostgisFeatureService clone() { if (LOG.isDebugEnabled()) { LOG.debug("cloning SimplePostgisFeatureService " + this.getName()); // NOI18N } return new SimplePostgisFeatureService(this); } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ @Override public String getLayerURI() { return sqlStatement.getSqlTemplate(); } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ @Override public String getServerURI() { return connectionInfo.toString(); } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ @Override public boolean isLayerQuerySelected() { return false; } /** * DOCUMENT ME! * * @param selected DOCUMENT ME! */ @Override public void setLayerQuerySelected(final boolean selected) { } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ @Override public boolean isQueryable() { return false; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ @Override public Layer getLayerInformation() { return null; } }