/***************************************************
*
* 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.featureservice.style;
import org.jdom.Element;
import org.openide.util.lookup.ServiceProvider;
import java.awt.Frame;
import java.util.ArrayList;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import de.cismet.cismap.commons.Debug;
import de.cismet.cismap.commons.featureservice.AbstractFeatureService;
import de.cismet.cismap.commons.featureservice.SLDStyledLayer;
import de.cismet.cismap.commons.featureservice.WebFeatureService;
import de.cismet.cismap.commons.gui.MappingComponent;
import de.cismet.cismap.commons.gui.layerwidget.ActiveLayerTableCellEditor;
import de.cismet.cismap.commons.wfs.WFSFacade;
/**
* DOCUMENT ME!
*
* @author mroncoroni
* @version $Revision$, $Date$
*/
@ServiceProvider(
service = StyleDialogInterface.class,
position = 1
)
public class BasicFeatureStyleDialogFactory implements StyleDialogInterface {
//~ Static fields/initializers ---------------------------------------------
private static final boolean DEBUG = Debug.DEBUG;
public static final String KEY = "basic";
//~ Instance fields --------------------------------------------------------
private final org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(this.getClass());
private StyleDialog dialog;
private AbstractFeatureService selectedService;
private Frame parent;
//~ Methods ----------------------------------------------------------------
@Override
public JDialog configureDialog(final AbstractFeatureService FeatureService,
final Frame parentFrame,
final MappingComponent mappingComponent,
final ArrayList<String> configTabs) {
selectedService = FeatureService;
parent = parentFrame;
dialog = new StyleDialog(parentFrame, true);
dialog.configureDialog(FeatureService.getSLDDefiniton(),
FeatureService.getName(),
FeatureService.getLayerProperties(),
FeatureService.getFeatureServiceAttributes(),
FeatureService.getQuery());
return dialog;
}
@Override
public Runnable createResultTask() {
return new Runnable() {
@Override
public void run() {
try {
boolean forceUpdate = false;
if (selectedService instanceof WebFeatureService) {
if (dialog.isGeoAttributeChanged()
|| dialog.isAttributeSelectionChanged()) {
if (DEBUG) {
if (logger.isDebugEnabled()) {
logger.debug("Attributes changed, updating the QUERY Element"); // NOI18N
}
}
final Element query = ((WebFeatureService)selectedService).getQueryElement();
final WebFeatureService service = ((WebFeatureService)selectedService);
WFSFacade.setGeometry(query,
dialog.getSelectedGeoAttribute(), service.getVersion());
WFSFacade.changePropertyNames(
query,
dialog.getSelectedAttributes(),
service.getVersion());
service.setQueryElement(query);
forceUpdate = true;
}
if (dialog.isQueryStringChanged()) {
final int i = JOptionPane.showConfirmDialog(
parent,
org.openide.util.NbBundle.getMessage(
ActiveLayerTableCellEditor.class,
"ActiveLayerTableCellEditor.mouseClicked(MouseEvent).showConfirmDialog.message"), // NOI18N
org.openide.util.NbBundle.getMessage(
ActiveLayerTableCellEditor.class,
"ActiveLayerTableCellEditor.mouseClicked(MouseEvent).showConfirmDialog.title"), // NOI18N
JOptionPane.YES_NO_OPTION,
JOptionPane.WARNING_MESSAGE);
if (i == JOptionPane.YES_OPTION) {
if (DEBUG) {
if (logger.isDebugEnabled()) {
logger.debug("Query String changed, updating the QUERY String "); // NOI18N
}
}
selectedService.setQuery(dialog.getQueryString());
forceUpdate = true;
}
}
}
// this causes a refresh of the last created features and fires a
// retrieval event
selectedService.setFeatureServiceAttributes(dialog.getFeatureServiceAttributes());
if (forceUpdate) {
((WebFeatureService)selectedService).setLayerPropertiesWithoutUpdate(
dialog.getLayerProperties());
selectedService.retrieve(forceUpdate);
} else {
selectedService.setLayerProperties(dialog.getLayerProperties(), false);
if (selectedService instanceof SLDStyledLayer) {
((SLDStyledLayer)selectedService).setSLDInputStream(
dialog.getSLDStyle());
}
selectedService.refreshFeatures();
}
} catch (Throwable t) {
logger.error(t.getMessage(), t);
}
}
};
}
@Override
public boolean isAccepted() {
return dialog.isAccepted();
}
@Override
public String getKey() {
return KEY;
}
}