/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ package Sirius.navigator.ui.tree.postfilter; import Sirius.navigator.connection.SessionManager; import Sirius.navigator.ui.tree.PostfilterEnabledSearchResultsTree; import Sirius.server.middleware.types.MetaClass; import Sirius.server.middleware.types.MetaObject; import Sirius.server.middleware.types.MetaObjectNode; import Sirius.server.middleware.types.Node; import java.awt.EventQueue; import java.util.ArrayList; import java.util.Collection; import javax.swing.SwingWorker; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import de.cismet.cids.dynamics.CidsBean; import de.cismet.cids.navigator.utils.ClassCacheMultiple; /** * DOCUMENT ME! * * @author thorsten * @version $Revision$, $Date$ */ //@ServiceProvider(service = PostFilterGUI.class) public class ExampleAdressPostFilterGUI extends AbstractPostFilterGUI { //~ Instance fields -------------------------------------------------------- PostFilter f = new PostFilter() { @Override public Integer getFilterChainOrderKeyPrio() { return 100; } @Override public Collection<Node> filter(final Collection<Node> input) { if ((input != null)) { final ArrayList<Node> ret = new ArrayList<Node>(); for (final Node n : input) { if (n.getClassId() == adressClass.getId()) { if (n instanceof MetaObjectNode) { final MetaObjectNode mon = (MetaObjectNode)n; try { final String nr = (String)mon.getObject().getBean().getProperty("hausnummer"); final int nint = new Integer(nr).intValue(); if ((nint >= sldMin.getValue()) && (nint <= sldMax.getValue())) { ret.add(n); } } catch (Exception skip) { ret.add(n); } } } else { ret.add(n); } } return ret; } else { return null; } } }; MetaClass adressClass; int min = Integer.MAX_VALUE; int max = 0; private ChangeListener cl = new ChangeListener() { @Override public void stateChanged(final ChangeEvent e) { firePostFilterChanged(); } }; // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JProgressBar prbLoading; private javax.swing.JSlider sldMax; private javax.swing.JSlider sldMin; private org.jdesktop.beansbinding.BindingGroup bindingGroup; // End of variables declaration//GEN-END:variables //~ Constructors ----------------------------------------------------------- /** * Creates new form ExampleAdressPostFilterGUI. */ public ExampleAdressPostFilterGUI() { initComponents(); prbLoading.setVisible(false); adressClass = ClassCacheMultiple.getMetaClass("WUNDA_BLAU", "ADRESSE"); } //~ Methods ---------------------------------------------------------------- @Override public void initializeFilter(final Collection<Node> nodes) { EventQueue.invokeLater(new Runnable() { @Override public void run() { sldMin.removeChangeListener(cl); sldMax.removeChangeListener(cl); sldMax.setEnabled(false); sldMin.setEnabled(false); prbLoading.setVisible(true); } }); final SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { min = Integer.MAX_VALUE; max = 0; try { for (final Node n : new ArrayList<Node>(nodes)) { if ((n instanceof MetaObjectNode) && (((MetaObjectNode)n).getClassId() == adressClass.getId())) { MetaObject mo = ((MetaObjectNode)n).getObject(); if (mo == null) { mo = SessionManager.getProxy() .getMetaObject(((MetaObjectNode)n).getObjectId(), ((MetaObjectNode)n).getClassId(), ((MetaObjectNode)n).getDomain()); ((MetaObjectNode)n).setObject(mo); } final CidsBean cb = mo.getBean(); try { final String nr = (String)cb.getProperty("hausnummer"); final int nint = new Integer(nr).intValue(); if (nint < min) { min = nint; } if (nint > max) { max = nint; } } catch (Exception skip) { } } } } catch (Exception e) { e.printStackTrace(); } return null; } @Override protected void done() { sldMax.setEnabled(true); sldMin.setEnabled(true); prbLoading.setVisible(false); sldMin.setMinimum(min - 1); sldMin.setMaximum(max + 1); sldMax.setMinimum(min - 1); sldMax.setMaximum(max + 1); sldMin.setValue(min); sldMax.setValue(max); sldMin.addChangeListener(cl); sldMax.addChangeListener(cl); } }; worker.execute(); } @Override public void adjustFilter(final Collection<Node> nodes) { } @Override public boolean canHandle(final Collection<Node> nodes) { return PostfilterEnabledSearchResultsTree.getAllTableNamesForNodeCollection(nodes).contains("ADRESSE"); } @Override public boolean isActive() { return true; } @Override public String getTitle() { return "Adressenfilter"; } @Override public PostFilter getFilter() { return f; } @Override public Integer getDisplayOrderKeyPrio() { return 200; } /** * 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() { bindingGroup = new org.jdesktop.beansbinding.BindingGroup(); sldMax = new javax.swing.JSlider(); sldMin = new javax.swing.JSlider(); jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); jLabel3 = new javax.swing.JLabel(); jLabel4 = new javax.swing.JLabel(); prbLoading = new javax.swing.JProgressBar(); sldMax.setPaintTicks(true); sldMin.setPaintTicks(true); org.openide.awt.Mnemonics.setLocalizedText( jLabel1, org.openide.util.NbBundle.getMessage( ExampleAdressPostFilterGUI.class, "ExampleAdressPostFilterGUI.jLabel1.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText( jLabel2, org.openide.util.NbBundle.getMessage( ExampleAdressPostFilterGUI.class, "ExampleAdressPostFilterGUI.jLabel2.text")); // NOI18N org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding( org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, sldMin, org.jdesktop.beansbinding.ELProperty.create("${value}"), jLabel3, org.jdesktop.beansbinding.BeanProperty.create("text")); bindingGroup.addBinding(binding); binding = org.jdesktop.beansbinding.Bindings.createAutoBinding( org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, sldMax, org.jdesktop.beansbinding.ELProperty.create("${value}"), jLabel4, org.jdesktop.beansbinding.BeanProperty.create("text")); bindingGroup.addBinding(binding); prbLoading.setIndeterminate(true); final javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup( layout.createSequentialGroup().addGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup( layout.createSequentialGroup().addContainerGap().addGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup( layout.createSequentialGroup().addComponent(jLabel2).addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent( sldMax, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)).addGroup( layout.createSequentialGroup().addComponent(jLabel1).addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent( sldMin, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))).addGap(76, 76, 76).addComponent( prbLoading, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE)).addGroup( layout.createSequentialGroup().addGap(216, 216, 216).addComponent(jLabel3)).addGroup( layout.createSequentialGroup().addGap(218, 218, 218).addComponent(jLabel4))).addGap( 0, 295, Short.MAX_VALUE))); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup( layout.createSequentialGroup().addContainerGap().addComponent(jLabel3).addGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup( layout.createSequentialGroup().addGap(1, 1, 1).addGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING).addComponent( sldMin, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(jLabel1)).addGap(12, 12, 12) .addGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jLabel2).addComponent( sldMax, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))).addGroup( layout.createSequentialGroup().addGap(33, 33, 33).addComponent( prbLoading, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))).addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(jLabel4).addContainerGap( 166, Short.MAX_VALUE))); bindingGroup.bind(); } // </editor-fold>//GEN-END:initComponents }