/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package de.cismet.cismap.commons.features;
import org.jdesktop.swingx.JXErrorPane;
import org.jdesktop.swingx.error.ErrorInfo;
import java.sql.Connection;
import java.util.logging.Level;
import de.cismet.cismap.commons.featureservice.factory.PostgisAction;
import de.cismet.cismap.commons.featureservice.factory.PostgisFeatureFactory;
import de.cismet.cismap.commons.interaction.CismapBroker;
import de.cismet.cismap.commons.retrieval.RetrievalService;
import de.cismet.tools.ConnectionInfo;
import static de.cismet.cismap.commons.featureservice.factory.AbstractFeatureFactory.DEBUG;
import static de.cismet.cismap.commons.featureservice.factory.PostgisFeatureFactory.ID_TOKEN;
/**
* DOCUMENT ME!
*
* @author thorsten
* @version $Revision$, $Date$
*/
public class UpdateablePostgisFeature extends PostgisFeature {
//~ Instance fields --------------------------------------------------------
private final ConnectionInfo connectionInfo;
private final RetrievalService parentService;
private PostgisAction action;
private Connection connection;
//~ Constructors -----------------------------------------------------------
/**
* Creates a new UpdateablePostgisFeature object.
*
* @param connectionInfo DOCUMENT ME!
* @param parentService DOCUMENT ME!
* @param action DOCUMENT ME!
* @param connection DOCUMENT ME!
*/
public UpdateablePostgisFeature(final ConnectionInfo connectionInfo,
final RetrievalService parentService,
final PostgisAction action,
final Connection connection) {
this.connectionInfo = connectionInfo;
this.parentService = parentService;
this.action = action;
this.connection = connection;
}
//~ Methods ----------------------------------------------------------------
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public PostgisAction getAction() {
return action;
}
/**
* DOCUMENT ME!
*/
public void doUpdate() {
try {
if ((action.getAction() != null) && (action.getAction().length() > 0)) {
if ((this.connection == null) || this.connection.isClosed()) {
this.logger.error("Connection to database lost or not correctly initialised");
this.connection = PostgisFeatureFactory.createConnection(this.connectionInfo);
}
final java.sql.Statement statement = connection.createStatement();
final String sql = action.getAction().replaceAll(ID_TOKEN, String.valueOf(getId()));
if (DEBUG) {
if (logger.isDebugEnabled()) {
logger.debug("performing action on feature #" + getId() + ": \n" + sql);
}
}
statement.execute(sql);
statement.close();
parentService.retrieve(true);
} else {
logger.warn("Feature Service not yet correclty initialised, ignoring action");
throw new Exception("Feature Service not yet correclty initialised, ignoring action");
}
} catch (Exception ex) {
logger.error("Error during doAction(): " + ex.getMessage(), ex);
final ErrorInfo ei = new ErrorInfo(
"Fehler",
"Fehler beim Zugriff auf den FeatureService",
null,
null,
ex,
Level.ALL,
null);
JXErrorPane.showDialog(CismapBroker.getInstance().getMappingComponent(), ei);
}
}
}