/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
package de.cismet.cids.custom.objecteditors;
import Sirius.navigator.connection.Connection;
import Sirius.navigator.connection.ConnectionFactory;
import Sirius.navigator.connection.ConnectionInfo;
import Sirius.navigator.connection.ConnectionSession;
import Sirius.navigator.connection.SessionManager;
import Sirius.navigator.connection.proxy.ConnectionProxy;
import Sirius.navigator.exception.ConnectionException;
import Sirius.server.middleware.types.MetaObject;
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import de.cismet.cids.dynamics.CidsBeanStore;
import de.cismet.cids.editors.CidsObjectEditorFactory;
import de.cismet.cids.navigator.utils.ClassCacheMultiple;
import de.cismet.cismap.commons.XBoundingBox;
import de.cismet.cismap.commons.gui.MappingComponent;
import de.cismet.cismap.commons.gui.layerwidget.ActiveLayerModel;
import de.cismet.cismap.commons.interaction.CismapBroker;
import de.cismet.cismap.commons.raster.wms.simple.SimpleWMS;
import de.cismet.cismap.commons.raster.wms.simple.SimpleWmsGetMapUrl;
import de.cismet.tools.gui.log4jquickconfig.Log4JQuickConfig;
/**
* DOCUMENT ME!
*
* @author jruiz
* @version $Revision$, $Date$
*/
public abstract class EditorTester extends javax.swing.JFrame {
//~ Static fields/initializers ---------------------------------------------
private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(EditorTester.class);
private static final String SRS = "EPSG:4326";
private static final String WMS_CALL =
"http://osm.wheregroup.com/cgi-bin/osm_basic.xml?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&SERVICE=WMS&LAYERS=Grenzen,Landwirtschaft,Industriegebiet,Bauland,Gruenflaeche,unkultiviertes_Land,Park,Naherholungsgebiet,Wald,Wiese,Fussgaengerzone,Gebaeude,Wasser,Fluesse,Baeche,Kanal,Wasserbecken,Insel,Kueste,Inselpunkte,Strand,Fussgaengerweg,Radweg,Wege,Wohnstrasse,Zufahrtswege,einfache_Strasse,Landstrasse,Bundesstrasse,Kraftfahrstrasse,Autobahn,Ortschaft,Weiler,Stadtteil,Dorf,Stadt,Grossstadt,Bahn,Bahnhof,Airport,Kirchengelaende,Friedhof,Kirche,Graeber,copyright&STYLES=,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,&SRS=EPSG:4326&FORMAT=image/png;%20mode=24bit&BGCOLOR=0xffffff&TRANSPARENT=TRUE&EXCEPTIONS=application/vnd.ogc.se_inimage"
+ "&BBOX=<cismap:boundingBox>"
+ "&WIDTH=<cismap:width>"
+ "&HEIGHT=<cismap:height>";
//~ Instance fields --------------------------------------------------------
private ConnectionProxy proxy;
private CidsBeanStore cidsBeanStore;
private String className;
private String domain;
private Class editorClass;
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JPanel editorPanel;
private javax.swing.JLabel jLabel1;
private javax.swing.JPanel jPanel1;
private javax.swing.JSpinner jSpinner1;
private javax.swing.JTabbedPane jTabbedPane1;
private javax.swing.JToggleButton jToggleButton1;
private javax.swing.JPanel mapPanel;
// End of variables declaration//GEN-END:variables
//~ Constructors -----------------------------------------------------------
/**
* Creates new form EditorTestFrame.
*
* @param className DOCUMENT ME!
* @param editorClass DOCUMENT ME!
* @param domain DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
protected EditorTester(final String className, final Class editorClass, final String domain) throws Exception {
initComponents();
this.className = className;
this.editorClass = editorClass;
this.domain = domain;
}
//~ Methods ----------------------------------------------------------------
/**
* DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
private void init() throws Exception {
initProxy();
initMap();
initEditor(editorClass);
if (LOG.isDebugEnabled()) {
LOG.debug("EditorTester constructor done");
}
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
protected ConnectionProxy getProxy() {
return proxy;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*
* @throws ConnectionException DOCUMENT ME!
*/
protected abstract Connection getConnection() throws ConnectionException;
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
protected abstract ConnectionInfo getConnectionInfo();
/**
* DOCUMENT ME!
*
* @param objectId DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
private void loadMetaObject(final int objectId) throws Exception {
final int classId = ClassCacheMultiple.getMetaClass(domain, className).getId();
final MetaObject metaObject = proxy.getMetaObject(objectId, classId, domain);
if (metaObject != null) {
cidsBeanStore.setCidsBean(metaObject.getBean());
} else {
cidsBeanStore.setCidsBean(null);
throw new Exception("Metaobject nicht gefunden!");
}
}
/**
* DOCUMENT ME!
*/
protected void initMap() {
if (LOG.isDebugEnabled()) {
LOG.debug("initMap");
}
final MappingComponent mappingComponent = new MappingComponent();
final Dimension d = new Dimension(300, 300);
mappingComponent.setPreferredSize(d);
mappingComponent.setSize(d);
mapPanel.add(mappingComponent, BorderLayout.CENTER);
final ActiveLayerModel mappingModel = new ActiveLayerModel();
mappingModel.addHome(new XBoundingBox(6.7d, 49.1, 7.1d, 49.33d, SRS, false));
mappingModel.setSrs(SRS);
final SimpleWMS swms = new SimpleWMS(new SimpleWmsGetMapUrl(WMS_CALL));
mappingModel.addLayer(swms);
mappingComponent.setInteractionMode(MappingComponent.SELECT);
mappingComponent.setMappingModel(mappingModel);
mappingComponent.gotoInitialBoundingBox();
mappingComponent.unlock();
CismapBroker.getInstance().setMappingComponent(mappingComponent);
}
/**
* DOCUMENT ME!
*
* @param editorClass DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
protected void initEditor(final Class editorClass) throws Exception {
if (LOG.isDebugEnabled()) {
LOG.debug("initEditor");
}
final Object editorO = editorClass.newInstance();
if (editorO instanceof CidsBeanStore) {
cidsBeanStore = (CidsBeanStore)editorO;
if (editorO instanceof JComponent) {
final JComponent editorComponent = (JComponent)editorO;
editorPanel.add((JComponent)CidsObjectEditorFactory.getInstance().getComponentWrapper().wrapComponent(
editorComponent));
} else {
throw new Exception("editor class not instance of JComponent");
}
cidsBeanStore.setCidsBean(null);
} else {
throw new Exception("editor class not instance of CidsBeanStore");
}
}
/**
* DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
protected void initProxy() throws Exception {
if (LOG.isDebugEnabled()) {
LOG.debug("initConnection");
}
final Connection connection = getConnection();
final ConnectionInfo connectionInfo = getConnectionInfo();
final ConnectionSession session = ConnectionFactory.getFactory()
.createSession(connection, connectionInfo, true);
proxy = ConnectionFactory.getFactory()
.createProxy("Sirius.navigator.connection.proxy.DefaultConnectionProxyHandler", session);
SessionManager.init(proxy);
}
/**
* This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The
* content of this method is always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
jTabbedPane1 = new javax.swing.JTabbedPane();
editorPanel = new javax.swing.JPanel();
mapPanel = new javax.swing.JPanel();
jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jSpinner1 = new javax.swing.JSpinner();
jToggleButton1 = new javax.swing.JToggleButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle(org.openide.util.NbBundle.getMessage(EditorTester.class, "EditorTester.title")); // NOI18N
setMinimumSize(new java.awt.Dimension(1000, 800));
jTabbedPane1.addTab(org.openide.util.NbBundle.getMessage(
EditorTester.class,
"EditorTester.editorPanel.TabConstraints.tabTitle"),
editorPanel); // NOI18N
mapPanel.setLayout(new java.awt.BorderLayout());
jTabbedPane1.addTab(org.openide.util.NbBundle.getMessage(
EditorTester.class,
"EditorTester.mapPanel.TabConstraints.tabTitle"),
mapPanel); // NOI18N
getContentPane().add(jTabbedPane1, java.awt.BorderLayout.CENTER);
jPanel1.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));
jLabel1.setText(org.openide.util.NbBundle.getMessage(EditorTester.class, "EditorTester.jLabel1.text")); // NOI18N
jPanel1.add(jLabel1);
jSpinner1.setModel(new javax.swing.SpinnerNumberModel());
jSpinner1.setEditor(new javax.swing.JSpinner.NumberEditor(jSpinner1, ""));
jSpinner1.setPreferredSize(new java.awt.Dimension(100, 28));
jPanel1.add(jSpinner1);
jToggleButton1.setText(org.openide.util.NbBundle.getMessage(
EditorTester.class,
"EditorTester.jToggleButton1.text")); // NOI18N
jToggleButton1.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(final java.awt.event.ActionEvent evt) {
jToggleButton1ActionPerformed(evt);
}
});
jPanel1.add(jToggleButton1);
getContentPane().add(jPanel1, java.awt.BorderLayout.NORTH);
pack();
} // </editor-fold>//GEN-END:initComponents
/**
* DOCUMENT ME!
*
* @param evt DOCUMENT ME!
*/
private void jToggleButton1ActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_jToggleButton1ActionPerformed
try {
loadMetaObject((Integer)jSpinner1.getValue());
} catch (Exception ex) {
LOG.error("Fehler beim Laden des Objektes", ex);
JOptionPane.showMessageDialog(
this,
"<html>Fehler beim Laden des Objektes.<br/>Siehe Log-Ausgabe.",
"Fehler",
JOptionPane.ERROR_MESSAGE);
}
} //GEN-LAST:event_jToggleButton1ActionPerformed
/**
* DOCUMENT ME!
*
* @param tester DOCUMENT ME!
*/
protected static void run(final EditorTester tester) {
Log4JQuickConfig.configure4LumbermillOnLocalhost();
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
tester.init();
tester.setExtendedState(tester.getExtendedState() | JFrame.MAXIMIZED_BOTH);
tester.setVisible(true);
} catch (Exception ex) {
LOG.fatal("ERROR", ex);
System.exit(1);
}
}
});
}
/**
* DOCUMENT ME!
*/
public abstract void run();
}