/*
* SearchServicesPanel.java
*
* Created on 2008-12-10, 03:21:56
*/
package app.navigps.gui.searchServices.swing;
import app.navigps.gui.NaviRootWindow;
import app.navigps.gui.MyPopupMenu;
import app.navigps.gui.Scrollbar.ui.LineScrollBarUI;
import app.navigps.gui.svgComponents.DisplayObjects.AbstractDisplayManager;
import app.navigps.utils.InvokeUtils;
import app.navigps.utils.InvokeUtils.ReturnValue;
import app.navigps.utils.NaviPoint;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ContainerEvent;
import java.awt.event.MouseEvent;
import java.util.Vector;
import javax.swing.AbstractAction;
import javax.swing.JMenuItem;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTree.DynamicUtilTreeNode;
import javax.swing.SwingUtilities;
import javax.swing.event.MouseInputAdapter;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeModel;
import app.database.odb.core.Category;
import app.database.odb.core.Search;
import app.database.odb.core.ServiceCore;
import app.database.odb.utils.ConnectionListener;
import app.database.odb.utils.Constants;
import app.database.odb.utils.ODBConnection;
import app.navigps.gui.detailspanel.AlphaJPanel;
import app.navigps.gui.detailspanel.LoacationManager.LeftLocation;
import app.navigps.gui.detailspanel.RoundJPanel;
import app.navigps.gui.detailspanel.RoundWindow;
import app.navigps.gui.svgComponents.SVGCanvasLayers;
import app.navigps.utils.BridgeForVerboseMode;
import app.navigps.utils.NaviLogger;
import app.navigps.utils.NaviUtilities;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Insets;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.ContainerListener;
import java.util.logging.Level;
import org.neodatis.odb.ODB;
import org.neodatis.odb.OID;
import org.neodatis.odb.ObjectRepresentation;
import org.neodatis.odb.core.trigger.DeleteTrigger;
import org.neodatis.odb.core.trigger.InsertTrigger;
import org.neodatis.odb.core.trigger.UpdateTrigger;
/**
*
* @author vara
*/
public class SearchServicesPanel extends javax.swing.JPanel{
private JScrollPane jScrollPane1;
private JCheckBoxTree jCheckBox;
//for test !!!
private RoundWindow rWindow;
private ServicesInfoDisplayedList servlistPanel = new ServicesInfoDisplayedList();
private boolean triggers;
/** Creates new form SearchServicesPanel */
public SearchServicesPanel() {
initComponents();
initValue();
initListenersDB();
Vector<String> val = new Vector<String>();
jCheckBox = new JCheckBoxTree();
jCheckBox.setRootVisible(false);
jCheckBox.setShowsRootHandles(true);
setServices(val);
jScrollPane1 = new JScrollPane(jCheckBox);
jScrollPane1.setOpaque(false);
jScrollPane1.setBorder(null);
jScrollPane1.getViewport().setOpaque(false);
jScrollPane1.getViewport().setBorder(null);
jCheckBox.addMouseListener(new MouseEventReloadJTree());
JScrollBar scbH = jScrollPane1.getHorizontalScrollBar();
JScrollBar scbV = jScrollPane1.getVerticalScrollBar();
scbH.setOpaque(false);
scbV.setOpaque(false);
scbV.setUI(new LineScrollBarUI());
scbH.setUI(new LineScrollBarUI());
scbH.removeAll();
scbV.removeAll();
jCheckBox.setOpaque(false);
jCheckBox.setFocusable(false);
panelForJTree.add(jScrollPane1);
}
protected void initListenersDB(){
ODBConnection.getInstance().
addConnectionListener(new ODBConnectionListener());
}
public void installTriggers(){
System.err.println(getClass().getName()+" triggers was installed: "+triggers);
if(!triggers){
addTriggersToDB();
}
}
protected boolean addTriggersToDB(){
ODB odb = Constants.getDbConnection();
if(odb != null ){
odb.addInsertTrigger(Category.class,new MyInsertTrigger());
odb.addUpdateTrigger(Category.class, new MyUpdateTriger());
odb.addUpdateTrigger(ServiceCore.class,new MyUpdateTriger());
odb.addDeleteTrigger(Category.class, new MyDeleteTriger());
return (triggers = true);
}
return (triggers = false);
}
/** 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() {
jPanel2 = new javax.swing.JPanel();
jPanel4 = new javax.swing.JPanel();
jPanel1 = new javax.swing.JPanel();
jLabel3 = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
jSeparator1 = new javax.swing.JSeparator();
jLabel5 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jLabel1 = new javax.swing.JLabel();
gRadius = new javax.swing.JFormattedTextField();
gCurrentX = new javax.swing.JFormattedTextField();
gCurrentY = new javax.swing.JFormattedTextField();
gCenterX = new javax.swing.JFormattedTextField();
gCenterY = new javax.swing.JFormattedTextField();
jButtonSearch = new javax.swing.JButton();
jPanel7 = new javax.swing.JPanel();
jLabel7 = new javax.swing.JLabel();
jPanel5 = new javax.swing.JPanel();
panelForJTree = new javax.swing.JPanel();
jPanel6 = new javax.swing.JPanel();
jLabel6 = new javax.swing.JLabel();
jPanel3 = new javax.swing.JPanel();
jRadioButton1 = new javax.swing.JRadioButton();
setDoubleBuffered(false);
setFocusable(false);
setOpaque(false);
setRequestFocusEnabled(false);
setLayout(new java.awt.GridLayout(1, 0));
jPanel2.setOpaque(false);
jPanel4.setOpaque(false);
jPanel1.setBorder(javax.swing.BorderFactory.createMatteBorder(1, 1, 1, 1, new java.awt.Color(204, 219, 255)));
jPanel1.setOpaque(false);
jPanel1.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
jLabel3.setForeground(new java.awt.Color(238, 239, 239));
jLabel3.setText("x");
jPanel1.add(jLabel3, new org.netbeans.lib.awtextra.AbsoluteConstraints(50, 170, -1, -1));
jLabel4.setForeground(new java.awt.Color(238, 239, 239));
jLabel4.setText("y");
jPanel1.add(jLabel4, new org.netbeans.lib.awtextra.AbsoluteConstraints(140, 170, -1, -1));
jPanel1.add(jSeparator1, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 190, 150, -1));
jLabel5.setForeground(new java.awt.Color(238, 239, 239));
jLabel5.setText("Current Point");
jPanel1.add(jLabel5, new org.netbeans.lib.awtextra.AbsoluteConstraints(50, 60, -1, -1));
jLabel2.setForeground(new java.awt.Color(238, 239, 239));
jLabel2.setText("Center Point");
jPanel1.add(jLabel2, new org.netbeans.lib.awtextra.AbsoluteConstraints(50, 110, -1, -1));
jLabel1.setForeground(new java.awt.Color(238, 239, 239));
jLabel1.setText("Radius");
jPanel1.add(jLabel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(70, 10, -1, -1));
gRadius.setCaretColor(new java.awt.Color(151, 151, 151));
gRadius.setOpaque(false);
jPanel1.add(gRadius, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 30, 170, -1));
gCurrentX.setCaretColor(new java.awt.Color(151, 151, 151));
gCurrentX.setOpaque(false);
jPanel1.add(gCurrentX, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 80, 80, -1));
gCurrentY.setCaretColor(new java.awt.Color(151, 151, 151));
gCurrentY.setOpaque(false);
jPanel1.add(gCurrentY, new org.netbeans.lib.awtextra.AbsoluteConstraints(100, 80, 80, -1));
gCenterX.setCaretColor(new java.awt.Color(151, 151, 151));
gCenterX.setOpaque(false);
jPanel1.add(gCenterX, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 140, 80, -1));
gCenterY.setCaretColor(new java.awt.Color(151, 151, 151));
gCenterY.setOpaque(false);
jPanel1.add(gCenterY, new org.netbeans.lib.awtextra.AbsoluteConstraints(100, 140, 80, -1));
jButtonSearch.setText("Search");
jButtonSearch.setFocusPainted(false);
jButtonSearch.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonSearchActionPerformed(evt);
}
});
jPanel7.setOpaque(false);
jLabel7.setText("Parameters");
javax.swing.GroupLayout jPanel7Layout = new javax.swing.GroupLayout(jPanel7);
jPanel7.setLayout(jPanel7Layout);
jPanel7Layout.setHorizontalGroup(
jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel7Layout.createSequentialGroup()
.addGap(59, 59, 59)
.addComponent(jLabel7)
.addContainerGap(67, Short.MAX_VALUE))
);
jPanel7Layout.setVerticalGroup(
jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel7)
);
javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
jPanel4.setLayout(jPanel4Layout);
jPanel4Layout.setHorizontalGroup(
jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel4Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jPanel7, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jButtonSearch, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 195, Short.MAX_VALUE)
.addComponent(jPanel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 195, Short.MAX_VALUE))
.addContainerGap())
);
jPanel4Layout.setVerticalGroup(
jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel4Layout.createSequentialGroup()
.addComponent(jPanel7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jButtonSearch, javax.swing.GroupLayout.PREFERRED_SIZE, 45, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
jPanel5.setOpaque(false);
panelForJTree.setBorder(javax.swing.BorderFactory.createMatteBorder(1, 1, 1, 1, new java.awt.Color(204, 219, 255)));
panelForJTree.setAlignmentX(0.0F);
panelForJTree.setAlignmentY(0.0F);
panelForJTree.setFocusable(false);
panelForJTree.setOpaque(false);
panelForJTree.setLayout(new java.awt.BorderLayout());
jPanel6.setOpaque(false);
jLabel6.setText("Services");
javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6);
jPanel6.setLayout(jPanel6Layout);
jPanel6Layout.setHorizontalGroup(
jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel6Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel6)
.addContainerGap(88, Short.MAX_VALUE))
);
jPanel6Layout.setVerticalGroup(
jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel6, javax.swing.GroupLayout.PREFERRED_SIZE, 15, javax.swing.GroupLayout.PREFERRED_SIZE)
);
javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5);
jPanel5.setLayout(jPanel5Layout);
jPanel5Layout.setHorizontalGroup(
jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel6, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(panelForJTree, javax.swing.GroupLayout.DEFAULT_SIZE, 150, Short.MAX_VALUE)
);
jPanel5Layout.setVerticalGroup(
jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel5Layout.createSequentialGroup()
.addComponent(jPanel6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(panelForJTree, javax.swing.GroupLayout.PREFERRED_SIZE, 197, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
jPanel3.setOpaque(false);
jRadioButton1.setFont(new java.awt.Font("Dialog", 1, 10));
jRadioButton1.setForeground(new java.awt.Color(238, 239, 239));
jRadioButton1.setText("Remove Last search");
jRadioButton1.setContentAreaFilled(false);
jRadioButton1.setFocusPainted(false);
javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
jPanel3.setLayout(jPanel3Layout);
jPanel3Layout.setHorizontalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addComponent(jRadioButton1)
.addContainerGap(21, Short.MAX_VALUE))
);
jPanel3Layout.setVerticalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addContainerGap(20, Short.MAX_VALUE)
.addComponent(jRadioButton1))
);
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
add(jPanel2);
}// </editor-fold>//GEN-END:initComponents
/**
*
* @param al
*/
public void addActionForSearchButton(ActionListener al) {
jButtonSearch.addActionListener(al);
}
private AbstractDisplayManager getDisplayManager(){
SVGCanvasLayers svgCanvaasLayers = NaviUtilities.getSVGCanvasLayers(getParent());
if(svgCanvaasLayers != null){
return svgCanvaasLayers.getSvgCanvas().getDisplayManager();
}else{
String msg = "Can't find display manager ! ";
System.err.println(msg);
NaviLogger.logger.log(Level.WARNING, msg);
}
return null;
}
private void jButtonSearchActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonSearchActionPerformed
if(rWindow == null){
createRoundWindowForServicesList();
}
final Vector<String> services = getSelectedServices();
if (!services.isEmpty()) {
final double radius = ((Number) gRadius.getValue()).doubleValue();
final double cx = ((Number) gCenterX.getValue()).doubleValue();
final double cy = ((Number) gCenterY.getValue()).doubleValue();
new Thread(new Runnable() {
@Override
public void run() {
Object obj[] = {services, cx, cy, radius};
Class[] pt = {Vector.class, double.class, double.class, double.class};
//test reflection
ReturnValue rv = InvokeUtils.invokeWithTime(
new Search(), "searchCategoryRadius", pt, obj);
if(rv.isMessage()){
rv.getMessage().printStackTrace
(BridgeForVerboseMode.getInstance().getErrOutputStream());
return;
}
Vector subResult = (Vector) rv.getRet();
AbstractDisplayManager dm = getDisplayManager();
if(dm == null) return;
if(jRadioButton1.isSelected()){
dm.removeLastServices();
servlistPanel.getListModel().removeAll();
}
Vector retVal = dm.createObject(subResult);
dm.putObject(retVal);
servlistPanel.getListModel().addServices(subResult);
if(!retVal.isEmpty()){
if(!rWindow.isEnabled()){
rWindow.updatePosition();
rWindow.setEnabled(true);
}
}else{
if(rWindow.isEnabled() && servlistPanel.getListModel().isEmpty()){
rWindow.setEnabled(false);
//servlistPanel.getAnimamtionLayer().dispose();
}
}
String summaryMsg = "found "+subResult.size() + " services";
System.out.println("Query finished, execution time: " + (rv.getTimeNano()/1000000) + " mili sec " + summaryMsg);
NaviRootWindow.getBridgeInformationPipe().currentStatusChanged(summaryMsg);
}
}).start();
} else {
String msg= "";
if(Constants.getDbConnection() != null){
msg = "Please select a service category!";
}else{
msg = "No database initialized";
}
NaviRootWindow.getBridgeInformationPipe().currentStatusChanged(msg);
}
}//GEN-LAST:event_jButtonSearchActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JFormattedTextField gCenterX;
private javax.swing.JFormattedTextField gCenterY;
private javax.swing.JFormattedTextField gCurrentX;
private javax.swing.JFormattedTextField gCurrentY;
private javax.swing.JFormattedTextField gRadius;
private javax.swing.JButton jButtonSearch;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JPanel jPanel4;
private javax.swing.JPanel jPanel5;
private javax.swing.JPanel jPanel6;
private javax.swing.JPanel jPanel7;
private javax.swing.JRadioButton jRadioButton1;
private javax.swing.JSeparator jSeparator1;
private javax.swing.JPanel panelForJTree;
// End of variables declaration//GEN-END:variables
private void initValue() {
setRadius(0);
setCenterPoint(new NaviPoint(0, 0));
setCurrentPos(new NaviPoint(0, 0));
}
/**
*
*/
public void reloadCategory(){
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
setServices(new Search().getCategories());
NaviRootWindow.getBridgeInformationPipe().
currentStatusChanged("Category Tree reloaded");
}
});
}
/**
*
* @param val
*/
public void setRadius(double val) {
gRadius.setValue(new Double(val));
}
/**
*
* @param val
*/
public void setCenterPoint(NaviPoint val) {
gCenterX.setValue(new Float(val.getX()));
gCenterY.setValue(new Float(val.getY()));
}
/**
*
* @param val
*/
public void setCurrentPos(NaviPoint val) {
gCurrentX.setValue(new Float(val.getX()));
gCurrentY.setValue(new Float(val.getY()));
}
/*
* This method implies that jtree model contais String objects
*/
/**
*
* @return
*/
public Vector<String> getSelectedServices() {
Vector<String> val = new Vector<String>(10, 10);
boolean checked = false;
boolean anyChecked = false;
int selRows = jCheckBox.getRowCount();
for (int i = 0; i < selRows; i++) {
if (!(checked = ((JCheckBoxTree) jCheckBox).isChecked(jCheckBox.getPathForRow(i)))) {
anyChecked = ((JCheckBoxTree) jCheckBox).isAnyChildChecked(jCheckBox.getPathForRow(i));
}
if (checked || anyChecked) {
TreeModel model = jCheckBox.getModel();
Object child = model.getChild(model.getRoot(), i);
if (child instanceof DefaultMutableTreeNode) {
Object data = ((DefaultMutableTreeNode) child).getUserObject();
if (data instanceof String) {
val.add(((String) data));
} else {
System.err.println(getClass().getCanonicalName() +
" method : getSelectedServices , Child [" + data + "] is not a String object !!! ");
}
}
}
}
return val;
}
private void createRoundWindowForServicesList(){
rWindow = new RoundWindow();
SVGCanvasLayers svgcl = NaviUtilities.getSVGCanvasLayers(getParent());
if(svgcl!=null){
AlphaJPanel container = svgcl.getModalContainer();
rWindow.setLocationManager(new LeftLocation(rWindow));
rWindow.setDynamicRevalidate(true);
rWindow.setTitle("Services List");
rWindow.setDecorateWindow(true);
rWindow.setUpperThresholdAlpha(0.75f);
rWindow.setAlpha(0.0f);
rWindow.getContentPane().setUpperThresholdAlpha(0.75f);
rWindow.getContentPane().setLayout(new BorderLayout(10, 10));
rWindow.getContentPane().add(servlistPanel,BorderLayout.CENTER);
rWindow.setEnabled(false);
((RoundJPanel)rWindow.getContentPane()).
setInsets(new Insets(10,10,10,10));
((RoundJPanel)rWindow.getContentPane()).setInnerCorners(0,0);
//JRootPane root = getRootPane();
//root.setGlassPane(servlistPanel.getAnimamtionLayer());
svgcl.add(servlistPanel.getAnimamtionLayer(), SVGCanvasLayers.POPUP_LAYER);
servlistPanel.getAnimamtionLayer().setVisible(true);
svgcl.getServicesContainer().addContainerListener(new ContainerListener() {
@Override
public void componentAdded(ContainerEvent e) {
System.out.println("add service "+e.getChild());
}
@Override
public void componentRemoved(ContainerEvent e) {
System.out.println("remove service "+e.getChild());
if(rWindow.isVisible()){
Component comp = e.getChild();
servlistPanel.getListModel().removeElement(comp);
}
}
});
container.add(rWindow);
container.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
rWindow.updatePosition();
}
});
}else{
String msg = "Can't initial round window for search services list,\n"+
"SVGCanvasLayers need -> Not Found !!!";
System.err.println(getClass().getCanonicalName()+" "+msg);
}
}
/**
*
* @param value
*/
public void setServices(Vector<String> value) {
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Services");
DynamicUtilTreeNode.createChildren(root, value);
DefaultTreeModel dtm = new DefaultTreeModel(root, false);
jCheckBox.setModel(dtm);
}
private class ReloadJTree extends AbstractAction{
public ReloadJTree(String name) {
super(name);
}
@Override
public void actionPerformed(ActionEvent e) {
reloadCategory();
}
}
private class MouseEventReloadJTree extends MouseInputAdapter{
@Override
public void mousePressed(MouseEvent e) {
if(e.getButton() == MouseEvent.BUTTON3){
MyPopupMenu myPop = new MyPopupMenu();
JMenuItem mi = new JMenuItem(new ReloadJTree("Reload Services"));
myPop.add(mi);
myPop.show(e.getComponent(), e.getX(), e.getY());
}
}
}
private class MyInsertTrigger extends InsertTrigger {
@Override
public boolean beforeInsert(Object object) {
//System.out.println("before inserting " + object);
return true;
}
@Override
public void afterInsert(Object object, OID oid) {
//System.out.println("after insert object with id "+oid+"("+object.getClass().getName()+")");
//System.out.println("Insert trigger DB");
reloadCategory();
}
}
private class MyUpdateTriger extends UpdateTrigger{
@Override
public boolean beforeUpdate(ObjectRepresentation oldObjectRepresentation, Object newObject, OID oid) {
return true;
}
@Override
public void afterUpdate(ObjectRepresentation oldObjectRepresentation, Object newObject, OID oid) {
if(newObject instanceof Category){
reloadCategory();
}else if(newObject instanceof ServiceCore){
AbstractDisplayManager dm = getDisplayManager();
if(dm != null){
((ServiceCore)newObject).setOID(oid);
dm.updateService(newObject);
}
}
}
}
private class MyDeleteTriger extends DeleteTrigger{
@Override
public boolean beforeDelete(Object object, OID oid) {
return true;
}
@Override
public void afterDelete(Object object, OID oid) {
reloadCategory();
}
}
private class ODBConnectionListener implements ConnectionListener{
@Override
public void connectionOpened() {
reloadCategory();
addTriggersToDB();
}
@Override
public void connectionClosed() {
}
}
}