/***************************************************
*
* 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.featureservice.style;
import org.apache.log4j.Logger;
import org.openide.util.Lookup;
import org.openide.util.NbBundle;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Frame;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import javax.swing.Icon;
import javax.swing.JDialog;
import de.cismet.cismap.commons.featureservice.AbstractFeatureService;
import de.cismet.cismap.commons.interaction.CismapBroker;
import de.cismet.commons.concurrency.CismetExecutors;
import de.cismet.tools.gui.StaticSwingTools;
import de.cismet.tools.gui.WaitingDialogThread;
/**
* DOCUMENT ME!
*
* @author therter
* @version $Revision$, $Date$
*/
public class StyleDialogStarter extends WaitingDialogThread<JDialog> {
//~ Static fields/initializers ---------------------------------------------
private static final Logger log = Logger.getLogger(StyleDialogStarter.class);
//~ Instance fields --------------------------------------------------------
private final Frame parentFrame;
private final AbstractFeatureService selectedService;
private StyleDialogInterface styleDialog;
private final ArrayList<String> panel;
private final List<StyleDialogClosedListener> listener = new ArrayList<StyleDialogClosedListener>();
//~ Constructors -----------------------------------------------------------
/**
* Creates a new StyleDialogStarter object.
*
* @param parent DOCUMENT ME!
* @param selectedService DOCUMENT ME!
* @param panel DOCUMENT ME!
* @param delay DOCUMENT ME!
*/
public StyleDialogStarter(final Frame parent,
final AbstractFeatureService selectedService,
final ArrayList<String> panel,
final int delay) {
super(
parent,
true,
NbBundle.getMessage(StyleDialogStarter.class, "StyleDialogStarter.StyleDialogStarter()"),
null,
delay);
this.parentFrame = parent;
this.selectedService = selectedService;
this.panel = panel;
}
//~ Methods ----------------------------------------------------------------
@Override
protected JDialog doInBackground() throws Exception {
if (styleDialog == null) {
if (log.isDebugEnabled()) {
log.debug("creating new StyleDialog '"
+ parentFrame.getTitle() + "'"); // NOI18N
}
final String lookupkey = CismapBroker.getInstance().getFeatureStylingComponentKey();
if ((lookupkey != null) && !lookupkey.isEmpty()) {
final Lookup.Result<StyleDialogInterface> result = Lookup.getDefault()
.lookupResult(StyleDialogInterface.class);
for (final StyleDialogInterface dialog : result.allInstances()) {
if (lookupkey.equals(dialog.getKey())) {
styleDialog = dialog;
}
}
}
if (styleDialog == null) {
styleDialog = Lookup.getDefault().lookup(StyleDialogInterface.class);
}
}
// configure dialog, adding attributes to the tab and
// set style from the layer properties
return styleDialog.configureDialog(
selectedService,
parentFrame,
CismapBroker.getInstance().getMappingComponent(),
panel);
}
@Override
protected void done() {
try {
final JDialog dialog = get();
dialog.setPreferredSize(new Dimension(
dialog.getPreferredSize().width
+ 70,
dialog.getPreferredSize().height));
if (log.isDebugEnabled()) {
log.debug("set dialog visible"); // NOI18N
}
StaticSwingTools.showDialog(dialog);
// check returnstatus
if ((styleDialog != null) && styleDialog.isAccepted()) {
final Runnable r = styleDialog.createResultTask();
final ExecutorService es = CismetExecutors.newSingleThreadExecutor();
es.submit(r);
es.submit(new Runnable() {
@Override
public void run() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
fireStyleDialogClosed(new StyleDialogClosedEvent(styleDialog));
}
});
}
});
} else {
if (log.isDebugEnabled()) {
log.debug("Style Dialog canceled"); // NOI18N
}
}
} catch (Throwable t) {
log.error("could not configure StyleDialog: " + t.getMessage(), t); // NOI18N
}
}
/**
* DOCUMENT ME!
*
* @param evt DOCUMENT ME!
*/
private void fireStyleDialogClosed(final StyleDialogClosedEvent evt) {
for (final StyleDialogClosedListener l : listener) {
l.StyleDialogClosed(evt);
}
}
/**
* DOCUMENT ME!
*
* @param l DOCUMENT ME!
*/
public void addStyleDialogClosedListener(final StyleDialogClosedListener l) {
listener.add(l);
}
/**
* DOCUMENT ME!
*
* @param l DOCUMENT ME!
*/
public void removeStyleDialogClosedListener(final StyleDialogClosedListener l) {
listener.remove(l);
}
}