summaryrefslogtreecommitdiff
path: root/source/com/c2kernel/gui/EntityFinder.java
diff options
context:
space:
mode:
Diffstat (limited to 'source/com/c2kernel/gui/EntityFinder.java')
-rwxr-xr-xsource/com/c2kernel/gui/EntityFinder.java205
1 files changed, 205 insertions, 0 deletions
diff --git a/source/com/c2kernel/gui/EntityFinder.java b/source/com/c2kernel/gui/EntityFinder.java
new file mode 100755
index 0000000..6f23a5d
--- /dev/null
+++ b/source/com/c2kernel/gui/EntityFinder.java
@@ -0,0 +1,205 @@
+package com.c2kernel.gui;
+
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.io.IOException;
+import java.util.Enumeration;
+import java.util.StringTokenizer;
+
+import javax.swing.*;
+
+import com.c2kernel.lookup.DomainPath;
+import com.c2kernel.lookup.LDAPLookup;
+import com.c2kernel.lookup.Path;
+import com.c2kernel.process.Gateway;
+import com.c2kernel.utils.Language;
+import com.c2kernel.utils.Logger;
+import com.c2kernel.utils.Resource;
+
+public class EntityFinder extends Box implements Runnable {
+ JTextField inputField;
+ JButton findButton;
+ JButton findNextButton;
+ GridBagLayout gridbag = new GridBagLayout();
+ LDAPLookup lookup = Gateway.getLDAPLookup();
+ DomainKeyConsumer defaultConsumer = null;
+ DomainKeyConsumer currentConsumer = null;
+ Enumeration matches;
+ Path rootNode = MainFrame.userNode.getPath();
+
+ static protected ImageIcon mFindIcon = null;
+ static protected ImageIcon mNextIcon = null;
+ static {
+ try
+ {
+ mNextIcon =Resource.getImageResource("next.png");
+ mFindIcon =Resource.getImageResource("find.png");
+ }
+ catch (Exception e)
+ {
+ Logger.error("Couldn't load images: " + e);
+ }
+ }
+
+ public EntityFinder() {
+ super(BoxLayout.X_AXIS);
+ initPanel();
+ }
+
+ public void pushNewKey(String key) {
+ inputField.setText(key);
+ runSearch();
+ }
+
+ public void setDefaultConsumer(DomainKeyConsumer newConsumer) {
+ defaultConsumer = newConsumer;
+ currentConsumer = newConsumer;
+ }
+
+ public void setConsumer(DomainKeyConsumer newConsumer, String label) {
+ currentConsumer = newConsumer;
+ findButton.setText(label);
+ }
+
+ public void clearConsumer(DomainKeyConsumer oldConsumer) {
+ if (currentConsumer == oldConsumer) {
+ currentConsumer = defaultConsumer;
+ findButton.setText("");
+ }
+ }
+
+ private void initPanel() {
+
+ JLabel search = new JLabel(" "+Language.translate("Search")+":");
+ add(search);
+ add(Box.createHorizontalStrut(7));
+
+ inputField = new JTextField(20);
+ add(inputField);
+ add(Box.createHorizontalStrut(5));
+ inputField.addActionListener( new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ pushNewKey(inputField.getText());
+ }
+ });
+
+ findButton = new JButton(mFindIcon);//(Language.translate("Find"));
+ findButton.setMargin(new Insets(2, 5, 2, 5));
+ findButton.addActionListener( new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ pushNewKey(inputField.getText());
+ }
+ });
+ add(findButton);
+ add(Box.createHorizontalStrut(5));
+
+ findNextButton = new JButton(mNextIcon);//(Language.translate("Next"));
+ findNextButton.setMargin(new Insets(2, 5, 2, 5));
+ findNextButton.addActionListener( new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ MainFrame.status.setText("Navigating to next match");
+ nextMatch();
+ }
+ });
+ findNextButton.setEnabled(false);
+ add(findNextButton);
+ add(Box.createHorizontalStrut(15));
+
+ // create plugins
+ Logger.msg(6, "ItemFinder() - creating plugins");
+ String requiredListeners = Gateway.getProperty("DomainKeyListeners");
+ if (requiredListeners != null) {
+ StringTokenizer tok = new StringTokenizer(requiredListeners, ",");
+ while (tok.hasMoreTokens()) {
+ String listenerName = tok.nextToken();
+ Logger.msg(6, "ItemFinder() - creating a " + listenerName);
+ try {
+ Class listenerClass = Class.forName(listenerName);
+ DomainKeyListener newListener = (DomainKeyListener)listenerClass.newInstance();
+ newListener.init(); newListener.setConsumer(this);
+ JToggleButton listenerButton = new JToggleButton(newListener.getIcon(), false);
+ listenerButton.addItemListener(new ListenerButtonListener(newListener, listenerButton));
+ listenerButton.setMargin(new Insets(0, 2, 0, 2));
+ listenerButton.setToolTipText("Enable "+newListener.getDescription());
+ add(listenerButton);
+ add(Box.createHorizontalStrut(7));
+ } catch (Exception e) {
+ Logger.error("ItemFinder() - could not create a "+listenerName+": "+e);
+ }
+ }
+ add(Box.createHorizontalGlue());
+ }
+ }
+
+ private void runSearch() {
+ Thread searcher = new Thread(this);
+ searcher.start();
+ }
+
+ public void run() {
+ Thread.currentThread().setName("Entity Search");
+ MainFrame.status.setText("Searching. Please Wait");
+ findButton.setEnabled(false); findNextButton.setEnabled(false);
+ String searchTerm = inputField.getText();
+ if (searchTerm.length() == 0) return; // don't allow null searches
+ findNextButton.setEnabled(false);
+ matches = lookup.search(rootNode,inputField.getText());
+ if (!matches.hasMoreElements()) {
+ MainFrame.status.setText("No results");
+ currentConsumer.push(searchTerm); // for subscribers who don't care if it exists
+ findButton.setEnabled(true);
+ return;
+ }
+ MainFrame.status.setText("Selecting first match.");
+ nextMatch();
+
+ }
+
+ void nextMatch() {
+ findButton.setEnabled(false); findNextButton.setEnabled(false);
+ DomainPath nextMatch = (DomainPath)matches.nextElement();
+ try
+ {
+ currentConsumer.push(nextMatch);
+ }
+ catch (NullPointerException e)
+ {
+ //case the item searched is not found !
+ }
+ findButton.setEnabled(true);
+ findNextButton.setToolTipText("Click to show next match");
+ if (matches.hasMoreElements()) findNextButton.setEnabled(true);
+ }
+
+ private class ListenerButtonListener implements ItemListener {
+ private DomainKeyListener listener;
+ private JToggleButton listenerButton;
+
+ public ListenerButtonListener(DomainKeyListener newListener, JToggleButton listenerButton) {
+ this.listener = newListener;
+ this.listenerButton = listenerButton;
+ }
+
+ public void itemStateChanged(ItemEvent e) {
+ if (e.getStateChange() == ItemEvent.SELECTED) {
+ // Switch on
+ try {
+ if (!(listener.enable())) listenerButton.doClick(); // allow plugins to disable themselves
+ } catch (IOException ex) {
+ JOptionPane.showMessageDialog(null, ex.getMessage(), "Error initialising "+listener.getDescription(), JOptionPane.ERROR_MESSAGE);
+ listenerButton.doClick();
+ }
+ listenerButton.setToolTipText("Disable "+listener.getDescription());
+ } else {
+ // Switch off
+ listener.disable();
+ listenerButton.setToolTipText("Enable "+listener.getDescription());
+ }
+ }
+ }
+
+}