From 21230edbafdd30fcf0c43d1dc64ccbf4ca5e06a8 Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Wed, 7 May 2014 17:33:57 +0200 Subject: Agent now extends Item, so they can have workflows. All traces of the old 'Entity' superclasses should be removed, including proxies and paths. Very large change, breaks API compatibility with CRISTAL 2.x. --- .../java/com/c2kernel/gui/DomainKeyListener.java | 2 +- .../java/com/c2kernel/gui/DynamicTreeBuilder.java | 3 +- src/main/java/com/c2kernel/gui/EntityDetails.java | 231 --------------------- src/main/java/com/c2kernel/gui/EntityFinder.java | 222 -------------------- .../java/com/c2kernel/gui/EntityTabManager.java | 84 -------- src/main/java/com/c2kernel/gui/ItemDetails.java | 231 +++++++++++++++++++++ src/main/java/com/c2kernel/gui/ItemFinder.java | 222 ++++++++++++++++++++ src/main/java/com/c2kernel/gui/ItemTabManager.java | 84 ++++++++ src/main/java/com/c2kernel/gui/Main.java | 4 +- src/main/java/com/c2kernel/gui/MainFrame.java | 8 +- src/main/java/com/c2kernel/gui/TreeBrowser.java | 14 +- .../gui/collection/AggregationMemberRenderer.java | 2 +- .../gui/collection/SelectedMemberPanel.java | 14 +- .../gui/graph/view/VertexPropertyPanel.java | 6 +- .../gui/lifecycle/instance/TransitionPanel.java | 6 +- .../java/com/c2kernel/gui/tabs/CollectionPane.java | 14 +- .../java/com/c2kernel/gui/tabs/EntityTabPane.java | 197 ------------------ .../java/com/c2kernel/gui/tabs/ExecutionPane.java | 14 +- .../java/com/c2kernel/gui/tabs/HistoryPane.java | 8 +- .../java/com/c2kernel/gui/tabs/ItemTabPane.java | 197 ++++++++++++++++++ .../gui/tabs/JTabbedPaneWithCloseIcons.java | 8 +- .../java/com/c2kernel/gui/tabs/JobListPane.java | 8 +- .../java/com/c2kernel/gui/tabs/PropertiesPane.java | 18 +- .../java/com/c2kernel/gui/tabs/ViewpointPane.java | 29 ++- .../java/com/c2kernel/gui/tabs/WorkflowPane.java | 15 +- .../tabs/collection/CollectionHistoryWindow.java | 19 +- .../collection/CollectionMemberPropertyPanel.java | 14 +- .../gui/tabs/collection/CollectionView.java | 4 +- .../gui/tabs/execution/ActivityViewer.java | 8 +- src/main/java/com/c2kernel/gui/tree/Node.java | 13 +- src/main/java/com/c2kernel/gui/tree/NodeAgent.java | 6 +- .../java/com/c2kernel/gui/tree/NodeCollection.java | 28 +-- .../java/com/c2kernel/gui/tree/NodeContext.java | 4 +- .../java/com/c2kernel/gui/tree/NodeEntity.java | 94 --------- src/main/java/com/c2kernel/gui/tree/NodeItem.java | 93 +++++++-- 35 files changed, 940 insertions(+), 984 deletions(-) delete mode 100644 src/main/java/com/c2kernel/gui/EntityDetails.java delete mode 100644 src/main/java/com/c2kernel/gui/EntityFinder.java delete mode 100644 src/main/java/com/c2kernel/gui/EntityTabManager.java create mode 100644 src/main/java/com/c2kernel/gui/ItemDetails.java create mode 100644 src/main/java/com/c2kernel/gui/ItemFinder.java create mode 100644 src/main/java/com/c2kernel/gui/ItemTabManager.java delete mode 100644 src/main/java/com/c2kernel/gui/tabs/EntityTabPane.java create mode 100644 src/main/java/com/c2kernel/gui/tabs/ItemTabPane.java delete mode 100644 src/main/java/com/c2kernel/gui/tree/NodeEntity.java diff --git a/src/main/java/com/c2kernel/gui/DomainKeyListener.java b/src/main/java/com/c2kernel/gui/DomainKeyListener.java index df18e72..95c7e3a 100644 --- a/src/main/java/com/c2kernel/gui/DomainKeyListener.java +++ b/src/main/java/com/c2kernel/gui/DomainKeyListener.java @@ -15,7 +15,7 @@ public interface DomainKeyListener { public boolean enable() throws IOException; - public void setConsumer(EntityFinder consumer); + public void setConsumer(ItemFinder consumer); public void disable(); diff --git a/src/main/java/com/c2kernel/gui/DynamicTreeBuilder.java b/src/main/java/com/c2kernel/gui/DynamicTreeBuilder.java index 46c5917..3f6e933 100644 --- a/src/main/java/com/c2kernel/gui/DynamicTreeBuilder.java +++ b/src/main/java/com/c2kernel/gui/DynamicTreeBuilder.java @@ -39,7 +39,8 @@ public class DynamicTreeBuilder extends Node implements NodeSubscriber { * @param nodeClicked The Parent Tree Node that will be populated. * @see NodeItem * @see TreeDisplay*/ - public DynamicTreeBuilder(DefaultMutableTreeNode parent) { + public DynamicTreeBuilder(DefaultMutableTreeNode parent, ItemTabManager desktop) { + super(desktop); this.parent = parent; loading = new DefaultMutableTreeNode(this); } diff --git a/src/main/java/com/c2kernel/gui/EntityDetails.java b/src/main/java/com/c2kernel/gui/EntityDetails.java deleted file mode 100644 index ed13035..0000000 --- a/src/main/java/com/c2kernel/gui/EntityDetails.java +++ /dev/null @@ -1,231 +0,0 @@ -package com.c2kernel.gui; - -import java.awt.BorderLayout; -import java.awt.Font; -import java.awt.GridBagConstraints; -import java.awt.GridBagLayout; -import java.awt.event.ActionEvent; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; - -import javax.swing.ImageIcon; -import javax.swing.JComponent; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.JTabbedPane; -import javax.swing.SwingConstants; -import javax.swing.event.ChangeListener; - -import com.c2kernel.gui.tabs.EntityTabPane; -import com.c2kernel.gui.tree.NodeEntity; -import com.c2kernel.utils.Language; -import com.c2kernel.utils.Logger; - -/** - * The tab pane for each viewed item - * @version $Revision: 1.38 $ $Date: 2005/06/27 15:16:14 $ - * @author $Author: abranson $ - */ -public class EntityDetails extends JPanel implements ChangeListener, Runnable { - protected JTabbedPane myTabbedPane = new JTabbedPane(SwingConstants.BOTTOM); - protected JPanel itemTitlePanel; - private EntityTabManager desktopManager; - protected NodeEntity myEntity; - protected HashMap childPanes = new HashMap(); - protected String startTab; - protected String startCommand = null; - protected boolean initialized = false; - - public EntityDetails(NodeEntity thisItem) { - super(); - startTab = MainFrame.getPref("DefaultStartTab", "Properties"); - myEntity = thisItem; - } - - @Override - public void run() { - Thread.currentThread().setName("Entity Pane Builder"); - EntityTabPane componentToAdd = null; - setLayout(new BorderLayout()); - itemTitlePanel = getItemTitlePanel(); - add(itemTitlePanel, BorderLayout.NORTH); - add(myTabbedPane); - - // decide which tabs to create - ArrayList requiredTabs = myEntity.getTabs(); - - for (Object name2 : requiredTabs) { - String tabName = (String)name2; - if (tabName != null) { - //create class instances and initialise - Class myClass = null; - //look up the required TabbedPane - try { - myClass = Class.forName(this.getClass().getPackage().getName() + ".tabs." + tabName + "Pane"); - Logger.msg(2, "ItemDetails. - Creating ItemTabPane instance: " + - this.getClass().getPackage().getName() + ".tabs." + tabName + "Pane"); - componentToAdd = (EntityTabPane)myClass.newInstance(); - } catch (ClassNotFoundException e) { - Logger.msg(2, "ItemDetails. - No specialist tab found for " + tabName + ". Using default."); - } catch (InstantiationException e) { - Logger.msg(0, "ItemDetails. - Instantiation Error! " + e); - } catch (IllegalAccessException e) { - Logger.msg(0, "ItemDetails. - Illegal Method Access Error! Class was probably not a ItemTabPane: " + e); - } - if (componentToAdd == null) componentToAdd = new EntityTabPane(tabName, null); - componentToAdd.setParent(this); - - //adds the component to the panel - childPanes.put(componentToAdd, new Boolean(false)); - - int placement = myTabbedPane.getTabCount(); - if (tabName.equals("Properties")) // must be first - placement = 0; - myTabbedPane.insertTab(componentToAdd.getTabName(), null, componentToAdd, null, placement); - } - } - initialized = true; - if (!(requiredTabs.contains(startTab))) { - startTab = "Properties"; - startCommand = null; - } - runCommand(Language.translate(startTab), startCommand); - myTabbedPane.setVisible(true); - myTabbedPane.addChangeListener(this); - validate(); - MainFrame.progress.stopBouncing("Done"); - - } - - @Override - public void stateChanged(javax.swing.event.ChangeEvent p1) { - initialisePane((EntityTabPane)myTabbedPane.getSelectedComponent()); - } - - public void initialisePane(EntityTabPane pane) { - Boolean isInit = childPanes.get(pane); - if (isInit.booleanValue() == false) { - Logger.msg(4,"Initialising "+pane.getTabName()); - pane.initForEntity(myEntity); - childPanes.put(pane, new Boolean(true)); - validate(); - } - } - - public EntityTabManager getDesktopManager() { - return desktopManager; - } - - public void setDesktopManager(EntityTabManager newDesktopManager) { - desktopManager = newDesktopManager; - } - - public JPanel getItemTitlePanel() { - JPanel titlePanel = new JPanel(); - JComponent current; - // Use gridbag layout for title - GridBagLayout gridbag = new GridBagLayout(); - GridBagConstraints c = new GridBagConstraints(); - titlePanel.setLayout(gridbag); - // Place Item Icon - c.gridx = 0; - c.gridy = 0; - c.gridheight = GridBagConstraints.REMAINDER; - c.anchor = GridBagConstraints.NORTH; - c.ipadx = 5; - c.ipady = 5; - ImageIcon icon = ImageLoader.findImage("typeicons/"+myEntity.getIconName()+"_32.png"); - if (icon==ImageLoader.nullImg) icon = ImageLoader.findImage("typeicons/item_32.png"); - current = new JLabel(icon); - gridbag.setConstraints(current, c); - titlePanel.add(current); - // Place Name/ID Label - current = new JLabel(myEntity.getName() + " (" + myEntity.getSysKey() + ")"); - c.gridx = 1; c.gridy = 0; c.gridheight = 1; - c.anchor = GridBagConstraints.NORTH; c.fill = GridBagConstraints.HORIZONTAL; - c.weightx = 1.0; c.ipadx = 2; c.ipady = 2; - current.setFont(new Font("Helvetica", Font.PLAIN, 18)); - gridbag.setConstraints(current, c); - titlePanel.add(current); - // Place Type Label - current = new JLabel(myEntity.getType()); - c.gridx = 1; c.gridy = 2; c.gridheight = 1; - c.anchor = GridBagConstraints.CENTER; c.fill = GridBagConstraints.HORIZONTAL; - c.weightx = 1.0; - current.setFont(new Font("Helvetica", Font.PLAIN, 12)); - gridbag.setConstraints(current, c); - titlePanel.add(current); - return titlePanel; - } - - public void discardTabs() { - myTabbedPane.removeChangeListener(this); - myTabbedPane.removeAll(); - for (Iterator iter = childPanes.keySet().iterator(); iter.hasNext();) { - EntityTabPane element = iter.next(); - element.destroy(); - iter.remove(); - } - } - - public int getSysKey() - { - return myEntity.getSysKey(); - } - - public void closeTab() { - desktopManager.remove(myEntity.getSysKey()); - Logger.msg(5,"Remove master Tab :"+myEntity.getType()+ " SysKey "+myEntity.getSysKey()); - myEntity.getEntity().dumpSubscriptions(5); - } - - public void actionPerformed(ActionEvent e) { - if (e.getActionCommand().equals("close")) - closeTab(); - } - - public void runCommand(String tab, String command) { - if (initialized) { - int tabIndex = findTab(tab); - Logger.msg(3, "Running command "+tab+" "+command+" ("+tabIndex+")"); - if (tabIndex == -1) { - Logger.error("Tab "+tab+" not found for command "+command); - return; - } - EntityTabPane startPane = (EntityTabPane)myTabbedPane.getComponentAt(tabIndex); - myTabbedPane.setSelectedIndex(tabIndex); - initialisePane(startPane); - if (command!= null) startPane.runCommand(command); - } - else - { - Logger.msg(3, "Storing command "+tab+" "+command+" until initialised."); - startTab = tab; - startCommand = command; - } - } - - protected int findTab(String tabName) { - for (int i=0; i< myTabbedPane.getTabCount(); i++) { - EntityTabPane thisPane = (EntityTabPane)myTabbedPane.getComponentAt(i); - if (thisPane.getTabName().equals(tabName)) - return i; - } - return -1; - } - - - public void refresh() - { - } - /** - * - */ - @Override - protected void finalize() throws Throwable { - Logger.msg(7, "EntityDetails "+myEntity.getSysKey()+" reaped"); - super.finalize(); - } - -} \ No newline at end of file diff --git a/src/main/java/com/c2kernel/gui/EntityFinder.java b/src/main/java/com/c2kernel/gui/EntityFinder.java deleted file mode 100644 index 1423055..0000000 --- a/src/main/java/com/c2kernel/gui/EntityFinder.java +++ /dev/null @@ -1,222 +0,0 @@ -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.Box; -import javax.swing.BoxLayout; -import javax.swing.ImageIcon; -import javax.swing.JButton; -import javax.swing.JLabel; -import javax.swing.JOptionPane; -import javax.swing.JTextField; -import javax.swing.JToggleButton; - -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; - -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 =ImageLoader.findImage("next.png"); - mFindIcon =ImageLoader.findImage("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() { - @Override - 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() { - @Override - 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() { - @Override - public void actionPerformed(ActionEvent e) { - nextMatch(); - } - }); - findNextButton.setEnabled(false); - add(findNextButton); - add(Box.createHorizontalStrut(15)); - - // create plugins - Logger.msg(6, "ItemFinder() - creating plugins"); - String requiredListeners = Gateway.getProperties().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(); - } - - @Override - public void run() { - Thread.currentThread().setName("Entity Search"); - String searchTerm = inputField.getText(); - if (searchTerm.length() == 0) return; // don't allow null searches - - findButton.setEnabled(false); findNextButton.setEnabled(false); - MainFrame.progress.startBouncing("Searching. Please Wait"); - findNextButton.setEnabled(false); - String term = inputField.getText(); -// The following block does property searching when the field contains a colon, but that returns EntityPaths, which the tree can't handle -// int colonPos = term.indexOf(':'); -// if (colonPos > 0) -// matches = lookup.search(rootNode,term.substring(0, colonPos), term.substring(colonPos+1)); -// else - matches = lookup.search(rootNode,term); - if (!matches.hasMoreElements()) { - MainFrame.progress.stopBouncing("No results"); - currentConsumer.push(searchTerm); // for subscribers who don't care if it exists - findButton.setEnabled(true); - return; - } - MainFrame.progress.stopBouncing("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 final DomainKeyListener listener; - private final JToggleButton listenerButton; - - public ListenerButtonListener(DomainKeyListener newListener, JToggleButton listenerButton) { - this.listener = newListener; - this.listenerButton = listenerButton; - } - - @Override - 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()); - } - } - } - -} diff --git a/src/main/java/com/c2kernel/gui/EntityTabManager.java b/src/main/java/com/c2kernel/gui/EntityTabManager.java deleted file mode 100644 index 02d97fe..0000000 --- a/src/main/java/com/c2kernel/gui/EntityTabManager.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.c2kernel.gui; -import java.awt.GridLayout; -import java.util.ArrayList; -import java.util.HashMap; - -import javax.swing.BorderFactory; -import javax.swing.JPanel; - -import com.c2kernel.gui.tabs.JTabbedPaneWithCloseIcons; -import com.c2kernel.gui.tree.NodeEntity; -import com.c2kernel.utils.Logger; - -/** - * Keeps - * - * @version $Revision: 1.12 $ $Date: 2005/09/12 14:56:19 $ - * @author $Author: abranson $ - */ - -public class EntityTabManager extends JPanel -{ - - protected HashMap openItems = new HashMap(); - protected JTabbedPaneWithCloseIcons tabbedPane = new JTabbedPaneWithCloseIcons(); - //JTabbedPane tabbedPane = new JTabbedPane(); - MenuBuilder myMenuBuilder; - - - public EntityTabManager() { - super(); - setLayout(new GridLayout(1,1)); - setBorder(BorderFactory.createLoweredBevelBorder()); - - add(tabbedPane); - } - - public EntityDetails add(NodeEntity thisEntity) { - - EntityDetails requestedDetails; - if (!openItems.containsKey(new Integer(thisEntity.getSysKey()))) { - MainFrame.progress.startBouncing("Opening "+thisEntity.getName()+". Please wait."); - Logger.msg(1, "ItemWindowManager.add() - Window for syskey "+thisEntity.getSysKey()+" not found. Opening new one."); - requestedDetails = new EntityDetails(thisEntity); - Thread itemLoader = new Thread(requestedDetails); - itemLoader.start(); - openItems.put(new Integer(thisEntity.getSysKey()), requestedDetails); - requestedDetails.setDesktopManager(this); - - // get currently selected item to set location - tabbedPane.addTab(thisEntity.getName(), thisEntity.getIcon(), requestedDetails, Integer.toString(thisEntity.getSysKey())); - - } - else { //opened window but different nodeitem - requestedDetails = openItems.get(new Integer(thisEntity.getSysKey())); - } - tabbedPane.setSelectedComponent(requestedDetails); - return requestedDetails; - } - - public void setMenuBuilder(MenuBuilder myMenuBuilder) { - this.myMenuBuilder = myMenuBuilder; - } - - @Override - public void remove(int sysKey) { - Integer sysKeyObj = new Integer(sysKey); - if (!openItems.containsKey(sysKeyObj)) return; - EntityDetails tabToClose = openItems.get(sysKeyObj); - tabbedPane.remove(tabToClose); - tabToClose.discardTabs(); - openItems.remove(sysKeyObj); - } - - public void closeAll(boolean keepOpen) { - ArrayList toRemove = new ArrayList(); - for (Integer element : openItems.keySet()) { - if (keepOpen && openItems.get(element).equals(tabbedPane.getSelectedComponent())) continue; - toRemove.add(element); - } - for (Integer element : toRemove) { - remove(element.intValue()); - } - } -} diff --git a/src/main/java/com/c2kernel/gui/ItemDetails.java b/src/main/java/com/c2kernel/gui/ItemDetails.java new file mode 100644 index 0000000..92fc077 --- /dev/null +++ b/src/main/java/com/c2kernel/gui/ItemDetails.java @@ -0,0 +1,231 @@ +package com.c2kernel.gui; + +import java.awt.BorderLayout; +import java.awt.Font; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.event.ActionEvent; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; + +import javax.swing.ImageIcon; +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTabbedPane; +import javax.swing.SwingConstants; +import javax.swing.event.ChangeListener; + +import com.c2kernel.gui.tabs.ItemTabPane; +import com.c2kernel.gui.tree.NodeItem; +import com.c2kernel.utils.Language; +import com.c2kernel.utils.Logger; + +/** + * The tab pane for each viewed item + * @version $Revision: 1.38 $ $Date: 2005/06/27 15:16:14 $ + * @author $Author: abranson $ + */ +public class ItemDetails extends JPanel implements ChangeListener, Runnable { + protected JTabbedPane myTabbedPane = new JTabbedPane(SwingConstants.BOTTOM); + protected JPanel itemTitlePanel; + private ItemTabManager desktopManager; + protected NodeItem myItem; + protected HashMap childPanes = new HashMap(); + protected String startTab; + protected String startCommand = null; + protected boolean initialized = false; + + public ItemDetails(NodeItem thisItem) { + super(); + startTab = MainFrame.getPref("DefaultStartTab", "Properties"); + myItem = thisItem; + } + + @Override + public void run() { + Thread.currentThread().setName("Entity Pane Builder"); + ItemTabPane componentToAdd = null; + setLayout(new BorderLayout()); + itemTitlePanel = getItemTitlePanel(); + add(itemTitlePanel, BorderLayout.NORTH); + add(myTabbedPane); + + // decide which tabs to create + ArrayList requiredTabs = myItem.getTabs(); + + for (Object name2 : requiredTabs) { + String tabName = (String)name2; + if (tabName != null) { + //create class instances and initialise + Class myClass = null; + //look up the required TabbedPane + try { + myClass = Class.forName(this.getClass().getPackage().getName() + ".tabs." + tabName + "Pane"); + Logger.msg(2, "ItemDetails. - Creating ItemTabPane instance: " + + this.getClass().getPackage().getName() + ".tabs." + tabName + "Pane"); + componentToAdd = (ItemTabPane)myClass.newInstance(); + } catch (ClassNotFoundException e) { + Logger.msg(2, "ItemDetails. - No specialist tab found for " + tabName + ". Using default."); + } catch (InstantiationException e) { + Logger.msg(0, "ItemDetails. - Instantiation Error! " + e); + } catch (IllegalAccessException e) { + Logger.msg(0, "ItemDetails. - Illegal Method Access Error! Class was probably not a ItemTabPane: " + e); + } + if (componentToAdd == null) componentToAdd = new ItemTabPane(tabName, null); + componentToAdd.setParent(this); + + //adds the component to the panel + childPanes.put(componentToAdd, new Boolean(false)); + + int placement = myTabbedPane.getTabCount(); + if (tabName.equals("Properties")) // must be first + placement = 0; + myTabbedPane.insertTab(componentToAdd.getTabName(), null, componentToAdd, null, placement); + } + } + initialized = true; + if (!(requiredTabs.contains(startTab))) { + startTab = "Properties"; + startCommand = null; + } + runCommand(Language.translate(startTab), startCommand); + myTabbedPane.setVisible(true); + myTabbedPane.addChangeListener(this); + validate(); + MainFrame.progress.stopBouncing("Done"); + + } + + @Override + public void stateChanged(javax.swing.event.ChangeEvent p1) { + initialisePane((ItemTabPane)myTabbedPane.getSelectedComponent()); + } + + public void initialisePane(ItemTabPane pane) { + Boolean isInit = childPanes.get(pane); + if (isInit.booleanValue() == false) { + Logger.msg(4,"Initialising "+pane.getTabName()); + pane.initForItem(myItem); + childPanes.put(pane, new Boolean(true)); + validate(); + } + } + + public ItemTabManager getDesktopManager() { + return desktopManager; + } + + public void setDesktopManager(ItemTabManager newDesktopManager) { + desktopManager = newDesktopManager; + } + + public JPanel getItemTitlePanel() { + JPanel titlePanel = new JPanel(); + JComponent current; + // Use gridbag layout for title + GridBagLayout gridbag = new GridBagLayout(); + GridBagConstraints c = new GridBagConstraints(); + titlePanel.setLayout(gridbag); + // Place Item Icon + c.gridx = 0; + c.gridy = 0; + c.gridheight = GridBagConstraints.REMAINDER; + c.anchor = GridBagConstraints.NORTH; + c.ipadx = 5; + c.ipady = 5; + ImageIcon icon = ImageLoader.findImage("typeicons/"+myItem.getIconName()+"_32.png"); + if (icon==ImageLoader.nullImg) icon = ImageLoader.findImage("typeicons/item_32.png"); + current = new JLabel(icon); + gridbag.setConstraints(current, c); + titlePanel.add(current); + // Place Name/ID Label + current = new JLabel(myItem.getName() + " (" + myItem.getSysKey() + ")"); + c.gridx = 1; c.gridy = 0; c.gridheight = 1; + c.anchor = GridBagConstraints.NORTH; c.fill = GridBagConstraints.HORIZONTAL; + c.weightx = 1.0; c.ipadx = 2; c.ipady = 2; + current.setFont(new Font("Helvetica", Font.PLAIN, 18)); + gridbag.setConstraints(current, c); + titlePanel.add(current); + // Place Type Label + current = new JLabel(myItem.getType()); + c.gridx = 1; c.gridy = 2; c.gridheight = 1; + c.anchor = GridBagConstraints.CENTER; c.fill = GridBagConstraints.HORIZONTAL; + c.weightx = 1.0; + current.setFont(new Font("Helvetica", Font.PLAIN, 12)); + gridbag.setConstraints(current, c); + titlePanel.add(current); + return titlePanel; + } + + public void discardTabs() { + myTabbedPane.removeChangeListener(this); + myTabbedPane.removeAll(); + for (Iterator iter = childPanes.keySet().iterator(); iter.hasNext();) { + ItemTabPane element = iter.next(); + element.destroy(); + iter.remove(); + } + } + + public int getSysKey() + { + return myItem.getSysKey(); + } + + public void closeTab() { + desktopManager.remove(myItem.getSysKey()); + Logger.msg(5,"Remove master Tab :"+myItem.getType()+ " SysKey "+myItem.getSysKey()); + myItem.getItem().dumpSubscriptions(5); + } + + public void actionPerformed(ActionEvent e) { + if (e.getActionCommand().equals("close")) + closeTab(); + } + + public void runCommand(String tab, String command) { + if (initialized) { + int tabIndex = findTab(tab); + Logger.msg(3, "Running command "+tab+" "+command+" ("+tabIndex+")"); + if (tabIndex == -1) { + Logger.error("Tab "+tab+" not found for command "+command); + return; + } + ItemTabPane startPane = (ItemTabPane)myTabbedPane.getComponentAt(tabIndex); + myTabbedPane.setSelectedIndex(tabIndex); + initialisePane(startPane); + if (command!= null) startPane.runCommand(command); + } + else + { + Logger.msg(3, "Storing command "+tab+" "+command+" until initialised."); + startTab = tab; + startCommand = command; + } + } + + protected int findTab(String tabName) { + for (int i=0; i< myTabbedPane.getTabCount(); i++) { + ItemTabPane thisPane = (ItemTabPane)myTabbedPane.getComponentAt(i); + if (thisPane.getTabName().equals(tabName)) + return i; + } + return -1; + } + + + public void refresh() + { + } + /** + * + */ + @Override + protected void finalize() throws Throwable { + Logger.msg(7, "EntityDetails "+myItem.getSysKey()+" reaped"); + super.finalize(); + } + +} \ No newline at end of file diff --git a/src/main/java/com/c2kernel/gui/ItemFinder.java b/src/main/java/com/c2kernel/gui/ItemFinder.java new file mode 100644 index 0000000..6b1ed00 --- /dev/null +++ b/src/main/java/com/c2kernel/gui/ItemFinder.java @@ -0,0 +1,222 @@ +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.Box; +import javax.swing.BoxLayout; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JTextField; +import javax.swing.JToggleButton; + +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; + +public class ItemFinder 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 =ImageLoader.findImage("next.png"); + mFindIcon =ImageLoader.findImage("find.png"); + } + catch (Exception e) + { + Logger.error("Couldn't load images: " + e); + } + } + + public ItemFinder() { + 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() { + @Override + 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() { + @Override + 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() { + @Override + public void actionPerformed(ActionEvent e) { + nextMatch(); + } + }); + findNextButton.setEnabled(false); + add(findNextButton); + add(Box.createHorizontalStrut(15)); + + // create plugins + Logger.msg(6, "ItemFinder() - creating plugins"); + String requiredListeners = Gateway.getProperties().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(); + } + + @Override + public void run() { + Thread.currentThread().setName("Entity Search"); + String searchTerm = inputField.getText(); + if (searchTerm.length() == 0) return; // don't allow null searches + + findButton.setEnabled(false); findNextButton.setEnabled(false); + MainFrame.progress.startBouncing("Searching. Please Wait"); + findNextButton.setEnabled(false); + String term = inputField.getText(); +// The following block does property searching when the field contains a colon, but that returns EntityPaths, which the tree can't handle +// int colonPos = term.indexOf(':'); +// if (colonPos > 0) +// matches = lookup.search(rootNode,term.substring(0, colonPos), term.substring(colonPos+1)); +// else + matches = lookup.search(rootNode,term); + if (!matches.hasMoreElements()) { + MainFrame.progress.stopBouncing("No results"); + currentConsumer.push(searchTerm); // for subscribers who don't care if it exists + findButton.setEnabled(true); + return; + } + MainFrame.progress.stopBouncing("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 final DomainKeyListener listener; + private final JToggleButton listenerButton; + + public ListenerButtonListener(DomainKeyListener newListener, JToggleButton listenerButton) { + this.listener = newListener; + this.listenerButton = listenerButton; + } + + @Override + 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()); + } + } + } + +} diff --git a/src/main/java/com/c2kernel/gui/ItemTabManager.java b/src/main/java/com/c2kernel/gui/ItemTabManager.java new file mode 100644 index 0000000..2c07207 --- /dev/null +++ b/src/main/java/com/c2kernel/gui/ItemTabManager.java @@ -0,0 +1,84 @@ +package com.c2kernel.gui; +import java.awt.GridLayout; +import java.util.ArrayList; +import java.util.HashMap; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; + +import com.c2kernel.gui.tabs.JTabbedPaneWithCloseIcons; +import com.c2kernel.gui.tree.NodeItem; +import com.c2kernel.utils.Logger; + +/** + * Keeps + * + * @version $Revision: 1.12 $ $Date: 2005/09/12 14:56:19 $ + * @author $Author: abranson $ + */ + +public class ItemTabManager extends JPanel +{ + + protected HashMap openItems = new HashMap(); + protected JTabbedPaneWithCloseIcons tabbedPane = new JTabbedPaneWithCloseIcons(); + //JTabbedPane tabbedPane = new JTabbedPane(); + MenuBuilder myMenuBuilder; + + + public ItemTabManager() { + super(); + setLayout(new GridLayout(1,1)); + setBorder(BorderFactory.createLoweredBevelBorder()); + + add(tabbedPane); + } + + public ItemDetails add(NodeItem thisItem) { + + ItemDetails requestedDetails; + if (!openItems.containsKey(new Integer(thisItem.getSysKey()))) { + MainFrame.progress.startBouncing("Opening "+thisItem.getName()+". Please wait."); + Logger.msg(1, "ItemWindowManager.add() - Window for syskey "+thisItem.getSysKey()+" not found. Opening new one."); + requestedDetails = new ItemDetails(thisItem); + Thread itemLoader = new Thread(requestedDetails); + itemLoader.start(); + openItems.put(new Integer(thisItem.getSysKey()), requestedDetails); + requestedDetails.setDesktopManager(this); + + // get currently selected item to set location + tabbedPane.addTab(thisItem.getName(), thisItem.getIcon(), requestedDetails, Integer.toString(thisItem.getSysKey())); + + } + else { //opened window but different nodeitem + requestedDetails = openItems.get(new Integer(thisItem.getSysKey())); + } + tabbedPane.setSelectedComponent(requestedDetails); + return requestedDetails; + } + + public void setMenuBuilder(MenuBuilder myMenuBuilder) { + this.myMenuBuilder = myMenuBuilder; + } + + @Override + public void remove(int sysKey) { + Integer sysKeyObj = new Integer(sysKey); + if (!openItems.containsKey(sysKeyObj)) return; + ItemDetails tabToClose = openItems.get(sysKeyObj); + tabbedPane.remove(tabToClose); + tabToClose.discardTabs(); + openItems.remove(sysKeyObj); + } + + public void closeAll(boolean keepOpen) { + ArrayList toRemove = new ArrayList(); + for (Integer element : openItems.keySet()) { + if (keepOpen && openItems.get(element).equals(tabbedPane.getSelectedComponent())) continue; + toRemove.add(element); + } + for (Integer element : toRemove) { + remove(element.intValue()); + } + } +} diff --git a/src/main/java/com/c2kernel/gui/Main.java b/src/main/java/com/c2kernel/gui/Main.java index 627ad1a..6e8f73d 100644 --- a/src/main/java/com/c2kernel/gui/Main.java +++ b/src/main/java/com/c2kernel/gui/Main.java @@ -55,7 +55,7 @@ public class Main extends StandardClient } catch( Exception ex ) { - Logger.error(ex); + ex.printStackTrace(); try { @@ -63,7 +63,7 @@ public class Main extends StandardClient } catch(Exception ex1) { - Logger.error(ex1); + ex1.printStackTrace(); } } } diff --git a/src/main/java/com/c2kernel/gui/MainFrame.java b/src/main/java/com/c2kernel/gui/MainFrame.java index 62418d1..cfb0260 100644 --- a/src/main/java/com/c2kernel/gui/MainFrame.java +++ b/src/main/java/com/c2kernel/gui/MainFrame.java @@ -37,8 +37,8 @@ import com.c2kernel.utils.Logger; */ public class MainFrame extends javax.swing.JFrame { public static TreeBrowser treeBrowser; - public static EntityTabManager myDesktopManager; - public static EntityFinder itemFinder; + public static ItemTabManager myDesktopManager; + public static ItemFinder itemFinder; protected static Node userNode = null; protected MenuBuilder menuBuilder; protected org.omg.CORBA.ORB orb; @@ -143,7 +143,7 @@ public class MainFrame extends javax.swing.JFrame { } }); // initialise the desktop manager - myDesktopManager = new EntityTabManager(); + myDesktopManager = new ItemTabManager(); //get the menu bar and add it to the frame menuBuilder = new MenuBuilder(this); @@ -157,7 +157,7 @@ public class MainFrame extends javax.swing.JFrame { treeBrowser.setVisible(getPref("ShowTree", "true").equals("true")); // add search box - itemFinder = new EntityFinder(); + itemFinder = new ItemFinder(); GridBagConstraints c = new GridBagConstraints(); c.gridx = 0; c.gridy = 0; diff --git a/src/main/java/com/c2kernel/gui/TreeBrowser.java b/src/main/java/com/c2kernel/gui/TreeBrowser.java index 60d6330..288cb93 100644 --- a/src/main/java/com/c2kernel/gui/TreeBrowser.java +++ b/src/main/java/com/c2kernel/gui/TreeBrowser.java @@ -22,7 +22,7 @@ import javax.swing.tree.TreePath; import javax.swing.tree.TreeSelectionModel; import com.c2kernel.gui.tree.Node; -import com.c2kernel.gui.tree.NodeEntity; +import com.c2kernel.gui.tree.NodeItem; import com.c2kernel.gui.tree.NodeTransferHandler; import com.c2kernel.lookup.DomainPath; import com.c2kernel.utils.Logger; @@ -36,11 +36,11 @@ import com.c2kernel.utils.Logger; // must put in top level list of loaded items, so we don't have duplicates public class TreeBrowser extends JPanel implements DomainKeyConsumer { - private EntityTabManager desktop; + private ItemTabManager desktop; protected JTree tree; private Node userRoot; - public TreeBrowser(EntityTabManager target, Node userRoot) { + public TreeBrowser(ItemTabManager target, Node userRoot) { setLayout(new java.awt.BorderLayout()); //record the desktop and node factory for our item frames this.desktop = target; @@ -120,8 +120,8 @@ public class TreeBrowser extends JPanel implements DomainKeyConsumer tree.addSelectionPath(targetNode); tree.makeVisible(targetNode); // open it - if (currentNode instanceof NodeEntity) { - desktop.add((NodeEntity)currentNode); + if (currentNode instanceof NodeItem) { + desktop.add((NodeItem)currentNode); } } @@ -200,8 +200,8 @@ public class TreeBrowser extends JPanel implements DomainKeyConsumer Object source = getNodeAt(e.getPoint()); if (source == null) return; if (e.getClickCount() == 2) { - if (source instanceof NodeEntity) { - NodeEntity thisNode = (NodeEntity)source; + if (source instanceof NodeItem) { + NodeItem thisNode = (NodeItem)source; desktop.add(thisNode); } if (source instanceof DynamicTreeBuilder) { diff --git a/src/main/java/com/c2kernel/gui/collection/AggregationMemberRenderer.java b/src/main/java/com/c2kernel/gui/collection/AggregationMemberRenderer.java index db1426e..d84a88d 100644 --- a/src/main/java/com/c2kernel/gui/collection/AggregationMemberRenderer.java +++ b/src/main/java/com/c2kernel/gui/collection/AggregationMemberRenderer.java @@ -43,7 +43,7 @@ public class AggregationMemberRenderer implements VertexRenderer try { - String name = memberPair.getEntityName(); + String name = memberPair.getItemName(); g2d.drawString( name, centre.x-metrics.stringWidth(name)/2, diff --git a/src/main/java/com/c2kernel/gui/collection/SelectedMemberPanel.java b/src/main/java/com/c2kernel/gui/collection/SelectedMemberPanel.java index 9e7d93c..89479df 100644 --- a/src/main/java/com/c2kernel/gui/collection/SelectedMemberPanel.java +++ b/src/main/java/com/c2kernel/gui/collection/SelectedMemberPanel.java @@ -15,13 +15,13 @@ import javax.swing.JToggleButton; import com.c2kernel.collection.AggregationMember; import com.c2kernel.collection.MembershipException; -import com.c2kernel.entity.proxy.EntityProxy; +import com.c2kernel.entity.proxy.ItemProxy; import com.c2kernel.graph.model.Vertex; import com.c2kernel.gui.DomainKeyConsumer; import com.c2kernel.gui.MainFrame; import com.c2kernel.gui.graph.view.SelectedVertexPanel; import com.c2kernel.lookup.DomainPath; -import com.c2kernel.lookup.EntityPath; +import com.c2kernel.lookup.ItemPath; import com.c2kernel.process.Gateway; import com.c2kernel.utils.Language; @@ -80,7 +80,7 @@ public class SelectedMemberPanel extends SelectedVertexPanel implements DomainKe } else { MainFrame.itemFinder.clearConsumer(me); - if (selectedMember.getEntityKey() > -1) findButton.setEnabled(true); + if (selectedMember.getSystemKey() > -1) findButton.setEnabled(true); } } }); @@ -88,7 +88,7 @@ public class SelectedMemberPanel extends SelectedVertexPanel implements DomainKe removeButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent ae) { - selectedMember.clearEntity(); + selectedMember.clearItem(); selectedMember.getProperties().remove("Name"); select(selectedMember); } @@ -109,10 +109,10 @@ public class SelectedMemberPanel extends SelectedVertexPanel implements DomainKe public void select(Vertex vert) { selectedMember = (AggregationMember)vert; slotNumber.setText(String.valueOf(vert.getID())); - int memberId = selectedMember.getEntityKey(); + int memberId = selectedMember.getSystemKey(); String name = "Empty"; try { - EntityProxy member = Gateway.getProxyManager().getProxy(new EntityPath(memberId)); + ItemProxy member = Gateway.getProxyManager().getProxy(new ItemPath(memberId)); name = member.getName(); } catch (Exception e) { } memberKey.setText(name); @@ -142,7 +142,7 @@ public class SelectedMemberPanel extends SelectedVertexPanel implements DomainKe @Override public void push(DomainPath key) { try { - selectedMember.assignEntity(key.getSysKey()); + selectedMember.assignItem(key.getSysKey()); select(selectedMember); } catch (MembershipException ex) { JOptionPane.showMessageDialog(null, "Product does not fit in this slot", "Error", JOptionPane.ERROR_MESSAGE); diff --git a/src/main/java/com/c2kernel/gui/graph/view/VertexPropertyPanel.java b/src/main/java/com/c2kernel/gui/graph/view/VertexPropertyPanel.java index 121d0c1..62ef8c9 100644 --- a/src/main/java/com/c2kernel/gui/graph/view/VertexPropertyPanel.java +++ b/src/main/java/com/c2kernel/gui/graph/view/VertexPropertyPanel.java @@ -29,7 +29,7 @@ import com.c2kernel.graph.model.GraphableVertex; import com.c2kernel.graph.model.Vertex; import com.c2kernel.gui.MainFrame; import com.c2kernel.gui.graph.event.SelectionChangedEvent; -import com.c2kernel.gui.tabs.EntityTabPane; +import com.c2kernel.gui.tabs.ItemTabPane; import com.c2kernel.utils.Language; /************************************************************************** @@ -170,7 +170,7 @@ public class VertexPropertyPanel extends JPanel implements Observer, TableModelL c.ipady = 5; selObjName = new JLabel(); - selObjName.setFont(EntityTabPane.titleFont); + selObjName.setFont(ItemTabPane.titleFont); gridbag.setConstraints(selObjName, c); add(selObjName); @@ -181,7 +181,7 @@ public class VertexPropertyPanel extends JPanel implements Observer, TableModelL c.gridy++; JLabel title = new JLabel("Properties"); - title.setFont(EntityTabPane.titleFont); + title.setFont(ItemTabPane.titleFont); gridbag.setConstraints(title, c); add(title); diff --git a/src/main/java/com/c2kernel/gui/lifecycle/instance/TransitionPanel.java b/src/main/java/com/c2kernel/gui/lifecycle/instance/TransitionPanel.java index eba4a18..7806dc1 100644 --- a/src/main/java/com/c2kernel/gui/lifecycle/instance/TransitionPanel.java +++ b/src/main/java/com/c2kernel/gui/lifecycle/instance/TransitionPanel.java @@ -19,7 +19,7 @@ import com.c2kernel.entity.proxy.ItemProxy; import com.c2kernel.graph.model.Vertex; import com.c2kernel.gui.MainFrame; import com.c2kernel.gui.graph.view.SelectedVertexPanel; -import com.c2kernel.gui.tabs.EntityTabPane; +import com.c2kernel.gui.tabs.ItemTabPane; import com.c2kernel.gui.tabs.execution.Executor; import com.c2kernel.lifecycle.instance.Activity; import com.c2kernel.lifecycle.instance.stateMachine.State; @@ -57,7 +57,7 @@ public class TransitionPanel extends SelectedVertexPanel implements ActionListen c.fill=GridBagConstraints.HORIZONTAL; JLabel title = new JLabel("Available Transitions"); - title.setFont(EntityTabPane.titleFont); + title.setFont(ItemTabPane.titleFont); gridbag.setConstraints(title, c); add(title); @@ -82,7 +82,7 @@ public class TransitionPanel extends SelectedVertexPanel implements ActionListen if (MainFrame.isAdmin) { c.gridx=0; c.gridy++; title = new JLabel("State Hacking"); - title.setFont(EntityTabPane.titleFont); + title.setFont(ItemTabPane.titleFont); gridbag.setConstraints(title, c); add(title); Box hackBox = Box.createHorizontalBox(); diff --git a/src/main/java/com/c2kernel/gui/tabs/CollectionPane.java b/src/main/java/com/c2kernel/gui/tabs/CollectionPane.java index bb07c19..ac69f68 100644 --- a/src/main/java/com/c2kernel/gui/tabs/CollectionPane.java +++ b/src/main/java/com/c2kernel/gui/tabs/CollectionPane.java @@ -8,7 +8,7 @@ import com.c2kernel.collection.Collection; import com.c2kernel.collection.CollectionDescription; import com.c2kernel.collection.CollectionMember; import com.c2kernel.collection.Dependency; -import com.c2kernel.entity.proxy.EntityProxyObserver; +import com.c2kernel.entity.proxy.ProxyObserver; import com.c2kernel.entity.proxy.ItemProxy; import com.c2kernel.entity.proxy.MemberSubscription; import com.c2kernel.gui.tabs.collection.AggregationView; @@ -21,7 +21,7 @@ import com.c2kernel.utils.Logger; * @version $Revision: 1.36 $ $Date: 2005/10/06 06:51:15 $ * @author $Author: abranson $ */ -public class CollectionPane extends EntityTabPane implements EntityProxyObserver> +public class CollectionPane extends ItemTabPane implements ProxyObserver> { JTabbedPane collTabs; @@ -40,13 +40,13 @@ public class CollectionPane extends EntityTabPane implements EntityProxyObserver if (thisCollView == null){ if (contents instanceof Aggregation) { AggregationView thisAggView = new AggregationView(); - thisAggView.setItem((ItemProxy)sourceEntity.getEntity()); + thisAggView.setItem(sourceItem.getItem()); thisAggView.setCollection((Aggregation)contents); thisCollView = thisAggView; } else if (contents instanceof Dependency) { DependencyView thisDepView = new DependencyView(); - thisDepView.setItem((ItemProxy)sourceEntity.getEntity()); + thisDepView.setItem(sourceItem.getItem()); thisDepView.setCollection((Dependency)contents); thisCollView = thisDepView; } @@ -94,15 +94,15 @@ public class CollectionPane extends EntityTabPane implements EntityProxyObserver public void run() { Thread.currentThread().setName("Collection Loader"); - sourceEntity.getEntity().subscribe(new MemberSubscription>(this, ClusterStorage.COLLECTION, true)); + sourceItem.getItem().subscribe(new MemberSubscription>(this, ClusterStorage.COLLECTION, true)); } @Override public void reload() { - Gateway.getStorage().clearCache(sourceEntity.getSysKey(), ClusterStorage.COLLECTION); + Gateway.getStorage().clearCache(sourceItem.getSysKey(), ClusterStorage.COLLECTION); collTabs.removeAll(); - initForEntity(sourceEntity); + initForItem(sourceItem); } @Override diff --git a/src/main/java/com/c2kernel/gui/tabs/EntityTabPane.java b/src/main/java/com/c2kernel/gui/tabs/EntityTabPane.java deleted file mode 100644 index 70f4930..0000000 --- a/src/main/java/com/c2kernel/gui/tabs/EntityTabPane.java +++ /dev/null @@ -1,197 +0,0 @@ -/* - * TabbedPane.java - * - * Created on March 22, 2001, 11:39 AM - */ -package com.c2kernel.gui.tabs; -import java.awt.Color; -import java.awt.Cursor; -import java.awt.Font; -import java.awt.GridBagConstraints; -import java.awt.GridBagLayout; -import java.awt.Insets; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.FocusEvent; - -import javax.swing.Box; -import javax.swing.ImageIcon; -import javax.swing.JButton; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.JToggleButton; -import javax.swing.SwingConstants; - -import com.c2kernel.entity.proxy.EntityProxyObserver; -import com.c2kernel.gui.EntityDetails; -import com.c2kernel.gui.ImageLoader; -import com.c2kernel.gui.MainFrame; -import com.c2kernel.gui.tabs.outcome.OutcomeHandler; -import com.c2kernel.gui.tabs.outcome.form.OutcomePanel; -import com.c2kernel.gui.tree.NodeEntity; -import com.c2kernel.process.Gateway; -import com.c2kernel.utils.Language; -import com.c2kernel.utils.Logger; -/** - * Generic item details tabbed pane. - * - * @version $Revision: 1.31 $ $Date: 2005/06/08 16:47:44 $ - * @author $Author: abranson $ - */ -public class EntityTabPane extends JPanel implements Runnable { - - protected NodeEntity sourceEntity; - protected String titleText = null; - protected ImageIcon titleIcon = null; - private final String tabName; - protected GridBagLayout gridbag = new GridBagLayout(); - protected GridBagConstraints c = null; - public static Font titleFont = null; - public static Color headingColor = new Color(0, 0, 185); - protected EntityDetails parent; - protected static ImageIcon mReloadIcon = null; - protected Box titleBox; - static { - try { - mReloadIcon = ImageLoader.findImage("refresh.png"); - } catch (Exception e) { - Logger.warning("Couldn't load images: " + e); - } - } - - public void focusLost(FocusEvent e) - { - } - - public EntityTabPane(String tabName, String titleText) { - this.tabName = Language.translate(tabName); - this.titleText = - titleText == null ? null : Language.translate(titleText); - if (titleFont == null) - titleFont = - new Font("SansSerif", Font.BOLD, this.getFont().getSize() + 5); - Logger.msg(2, "ItemTabPane. - viewing " + tabName); - setLayout(gridbag); - } - public void setParent(EntityDetails parent) { - this.parent = parent; - } - public String getTabName() { - return tabName; - } - protected GridBagConstraints getGridBagConstraints() { - if (c == null) - c = new GridBagConstraints(); - return c; - } - protected void initPanel() { - getGridBagConstraints().gridx = 0; - getGridBagConstraints().gridy = 0; - getGridBagConstraints().anchor = GridBagConstraints.NORTHWEST; - getGridBagConstraints().fill = GridBagConstraints.HORIZONTAL; - getGridBagConstraints().ipadx = 5; - getGridBagConstraints().weightx = 1.0; - getGridBagConstraints().ipady = 5; - // Help panel - if (titleText == null) - titleText = tabName; - if (titleIcon == null) - titleIcon = ImageLoader.findImage("info_16.png"); - JLabel title = new JLabel(titleText, titleIcon, SwingConstants.LEFT); - title.setFont(titleFont); - title.setForeground(headingColor); - JButton refreshButton = new JButton(mReloadIcon); - refreshButton.setToolTipText(Language.translate("Refresh")); - refreshButton.setMargin(new Insets(0, 0, 0, 0)); - refreshButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - setCursor(new Cursor(Cursor.WAIT_CURSOR)); - reload(); - setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); - } - }); - String defaultStartTab = MainFrame.getPref("DefaultStartTab", "Properties"); - JToggleButton defaultStart = - new JToggleButton(ImageLoader.findImage("graph/start.png")); - defaultStart.setMargin(new Insets(0, 0, 0, 0)); - defaultStart.setToolTipText( - Language.translate("Select this tab to be the default one opened when you double click an item")); - defaultStart.setSelected(tabName.equals(defaultStartTab)); - defaultStart.setActionCommand(tabName); - defaultStart.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if (((JToggleButton)e.getSource()).isSelected()) - MainFrame.setPref("DefaultStartTab", e.getActionCommand()); - } - }); - titleBox = Box.createHorizontalBox(); - titleBox.add(title); - titleBox.add(Box.createHorizontalGlue()); - titleBox.add(defaultStart); - titleBox.add(refreshButton); - gridbag.setConstraints(titleBox, c); - this.add(titleBox); - } - public void initForEntity(NodeEntity sourceEntity) { - this.sourceEntity = sourceEntity; - Thread loader = new Thread(this); - loader.start(); - } - @Override - public void run() { - Thread.currentThread().setName("Default Entity Pane Builder"); - getGridBagConstraints(); - c.gridx = 0; - c.gridy = 1; - c.anchor = GridBagConstraints.NORTHWEST; - c.fill = GridBagConstraints.HORIZONTAL; - c.ipadx = 5; - c.weightx = 1.0; - c.weighty = 1.0; - c.ipady = 5; - JLabel error = new JLabel("In Development"); - gridbag.setConstraints(error, c); - this.add(error); - } - public void reload() { - } - public void runCommand(String command) { - } - - public void destroy() { - if (sourceEntity != null && this instanceof EntityProxyObserver) { - sourceEntity.getEntity().unsubscribe((EntityProxyObserver)this); - } - parent = null; - } - - @Override - protected void finalize() throws Throwable { - Logger.msg(7, "Reaping "+getClass().getName()); - } - - static public OutcomeHandler getOutcomeHandler(String schema, int version) { - String ohClassName = Gateway.getProperties().getProperty("OutcomeHandler."+schema+"."+version); - try { - if (ohClassName != null && ohClassName.length() > 0) { - Class ohClass = Class.forName(ohClassName); - return (OutcomeHandler) ohClass.newInstance(); - } - } catch (Exception ex) { - Logger.error("Error creating handler "+ohClassName+". using default outcome editor"); - } - ohClassName = Gateway.getProperties().getProperty("OutcomeHandler.*"); - try { - if (ohClassName != null && ohClassName.length() > 0) { - Class ohClass = Class.forName(ohClassName); - return (OutcomeHandler) ohClass.newInstance(); - } - } catch (Exception ex) { - Logger.error("Error creating handler "+ohClassName+". using default outcome editor"); - Logger.error(ex); - } - return new OutcomePanel(); - } -} diff --git a/src/main/java/com/c2kernel/gui/tabs/ExecutionPane.java b/src/main/java/com/c2kernel/gui/tabs/ExecutionPane.java index 1f5d3b8..e16c9e3 100644 --- a/src/main/java/com/c2kernel/gui/tabs/ExecutionPane.java +++ b/src/main/java/com/c2kernel/gui/tabs/ExecutionPane.java @@ -14,7 +14,7 @@ import javax.swing.JLabel; import javax.swing.JPanel; import com.c2kernel.entity.agent.Job; -import com.c2kernel.entity.proxy.EntityProxyObserver; +import com.c2kernel.entity.proxy.ProxyObserver; import com.c2kernel.entity.proxy.ItemProxy; import com.c2kernel.entity.proxy.MemberSubscription; import com.c2kernel.gui.MainFrame; @@ -25,7 +25,7 @@ import com.c2kernel.persistency.ClusterStorage; import com.c2kernel.utils.Language; import com.c2kernel.utils.Logger; -public class ExecutionPane extends EntityTabPane implements EntityProxyObserver { +public class ExecutionPane extends ItemTabPane implements ProxyObserver { ArrayList jobList = null; Object jobLock = new Object(); @@ -69,7 +69,7 @@ public class ExecutionPane extends EntityTabPane implements EntityProxyObserver< @Override public void run() { Thread.currentThread().setName("Execution Pane Builder"); - sourceEntity.getEntity().subscribe(new MemberSubscription(this, ClusterStorage.LIFECYCLE, false)); + sourceItem.getItem().subscribe(new MemberSubscription(this, ClusterStorage.LIFECYCLE, false)); loadJobList(); init = true; if (autoRun != null) { @@ -83,7 +83,7 @@ public class ExecutionPane extends EntityTabPane implements EntityProxyObserver< view.removeAll(); activities = new ArrayList(); try { - jobList = ((ItemProxy)sourceEntity.getEntity()).getJobList(MainFrame.userAgent); + jobList = (sourceItem.getItem()).getJobList(MainFrame.userAgent); activitySelector.addItem(emptyAct); for (Job thisJob : jobList) { //Logger.msg(7, "ExecutionPane - loadJobList " + thisJob.hasOutcome() + "|" + thisJob.getSchemaName() + "|" + thisJob.getSchemaVersion() + "|"); @@ -106,7 +106,7 @@ public class ExecutionPane extends EntityTabPane implements EntityProxyObserver< view.add(noActs); break; case 1 : - currentActView = new ActivityViewer(activities.get(0), (ItemProxy)sourceEntity.getEntity(), this); + currentActView = new ActivityViewer(activities.get(0), sourceItem.getItem(), this); c.fill = GridBagConstraints.BOTH; gridbag.setConstraints(view, c); view.add(currentActView); @@ -144,7 +144,7 @@ public class ExecutionPane extends EntityTabPane implements EntityProxyObserver< view.removeAll(); c.fill = GridBagConstraints.BOTH; gridbag.setConstraints(view, c); - currentActView = new ActivityViewer((ActivityItem)selObj, (ItemProxy)sourceEntity.getEntity(), this); + currentActView = new ActivityViewer((ActivityItem)selObj, sourceItem.getItem(), this); view.add(currentActView); revalidate(); updateUI(); @@ -171,7 +171,7 @@ public class ExecutionPane extends EntityTabPane implements EntityProxyObserver< else { // look to see if this form is now invalid // get the new joblist try { - jobList = ((ItemProxy)sourceEntity.getEntity()).getJobList(MainFrame.userAgent); + jobList = (sourceItem.getItem()).getJobList(MainFrame.userAgent); } catch (Exception ex) { return; } diff --git a/src/main/java/com/c2kernel/gui/tabs/HistoryPane.java b/src/main/java/com/c2kernel/gui/tabs/HistoryPane.java index 1e03a41..01fc3ff 100644 --- a/src/main/java/com/c2kernel/gui/tabs/HistoryPane.java +++ b/src/main/java/com/c2kernel/gui/tabs/HistoryPane.java @@ -23,7 +23,7 @@ import javax.swing.JTable; import javax.swing.table.AbstractTableModel; import com.c2kernel.common.ObjectNotFoundException; -import com.c2kernel.entity.proxy.EntityProxyObserver; +import com.c2kernel.entity.proxy.ProxyObserver; import com.c2kernel.entity.proxy.MemberSubscription; import com.c2kernel.events.Event; import com.c2kernel.events.History; @@ -40,7 +40,7 @@ import com.c2kernel.utils.Logger; * @version $Revision: 1.22 $ $Date: 2005/04/26 06:48:13 $ * @author $Author: abranson $ */ -public class HistoryPane extends EntityTabPane implements ActionListener, EntityProxyObserver { +public class HistoryPane extends ItemTabPane implements ActionListener, ProxyObserver { History history; HistoryTableModel model; @@ -114,8 +114,8 @@ public class HistoryPane extends EntityTabPane implements ActionListener, Entity Thread.currentThread().setName("History Pane Builder"); MainFrame.progress.startBouncing("Loading history"); try { - history = (History)sourceEntity.getEntity().getObject(ClusterStorage.HISTORY); - sourceEntity.getEntity().subscribe(new MemberSubscription(this, ClusterStorage.HISTORY, true)); + history = (History)sourceItem.getItem().getObject(ClusterStorage.HISTORY); + sourceItem.getItem().subscribe(new MemberSubscription(this, ClusterStorage.HISTORY, true)); } catch (ObjectNotFoundException e) { Logger.error(e); } diff --git a/src/main/java/com/c2kernel/gui/tabs/ItemTabPane.java b/src/main/java/com/c2kernel/gui/tabs/ItemTabPane.java new file mode 100644 index 0000000..46bfcdf --- /dev/null +++ b/src/main/java/com/c2kernel/gui/tabs/ItemTabPane.java @@ -0,0 +1,197 @@ +/* + * TabbedPane.java + * + * Created on March 22, 2001, 11:39 AM + */ +package com.c2kernel.gui.tabs; +import java.awt.Color; +import java.awt.Cursor; +import java.awt.Font; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Insets; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.FocusEvent; + +import javax.swing.Box; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JToggleButton; +import javax.swing.SwingConstants; + +import com.c2kernel.entity.proxy.ProxyObserver; +import com.c2kernel.gui.ItemDetails; +import com.c2kernel.gui.ImageLoader; +import com.c2kernel.gui.MainFrame; +import com.c2kernel.gui.tabs.outcome.OutcomeHandler; +import com.c2kernel.gui.tabs.outcome.form.OutcomePanel; +import com.c2kernel.gui.tree.NodeItem; +import com.c2kernel.process.Gateway; +import com.c2kernel.utils.Language; +import com.c2kernel.utils.Logger; +/** + * Generic item details tabbed pane. + * + * @version $Revision: 1.31 $ $Date: 2005/06/08 16:47:44 $ + * @author $Author: abranson $ + */ +public class ItemTabPane extends JPanel implements Runnable { + + protected NodeItem sourceItem; + protected String titleText = null; + protected ImageIcon titleIcon = null; + private final String tabName; + protected GridBagLayout gridbag = new GridBagLayout(); + protected GridBagConstraints c = null; + public static Font titleFont = null; + public static Color headingColor = new Color(0, 0, 185); + protected ItemDetails parent; + protected static ImageIcon mReloadIcon = null; + protected Box titleBox; + static { + try { + mReloadIcon = ImageLoader.findImage("refresh.png"); + } catch (Exception e) { + Logger.warning("Couldn't load images: " + e); + } + } + + public void focusLost(FocusEvent e) + { + } + + public ItemTabPane(String tabName, String titleText) { + this.tabName = Language.translate(tabName); + this.titleText = + titleText == null ? null : Language.translate(titleText); + if (titleFont == null) + titleFont = + new Font("SansSerif", Font.BOLD, this.getFont().getSize() + 5); + Logger.msg(2, "ItemTabPane. - viewing " + tabName); + setLayout(gridbag); + } + public void setParent(ItemDetails parent) { + this.parent = parent; + } + public String getTabName() { + return tabName; + } + protected GridBagConstraints getGridBagConstraints() { + if (c == null) + c = new GridBagConstraints(); + return c; + } + protected void initPanel() { + getGridBagConstraints().gridx = 0; + getGridBagConstraints().gridy = 0; + getGridBagConstraints().anchor = GridBagConstraints.NORTHWEST; + getGridBagConstraints().fill = GridBagConstraints.HORIZONTAL; + getGridBagConstraints().ipadx = 5; + getGridBagConstraints().weightx = 1.0; + getGridBagConstraints().ipady = 5; + // Help panel + if (titleText == null) + titleText = tabName; + if (titleIcon == null) + titleIcon = ImageLoader.findImage("info_16.png"); + JLabel title = new JLabel(titleText, titleIcon, SwingConstants.LEFT); + title.setFont(titleFont); + title.setForeground(headingColor); + JButton refreshButton = new JButton(mReloadIcon); + refreshButton.setToolTipText(Language.translate("Refresh")); + refreshButton.setMargin(new Insets(0, 0, 0, 0)); + refreshButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + setCursor(new Cursor(Cursor.WAIT_CURSOR)); + reload(); + setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); + } + }); + String defaultStartTab = MainFrame.getPref("DefaultStartTab", "Properties"); + JToggleButton defaultStart = + new JToggleButton(ImageLoader.findImage("graph/start.png")); + defaultStart.setMargin(new Insets(0, 0, 0, 0)); + defaultStart.setToolTipText( + Language.translate("Select this tab to be the default one opened when you double click an item")); + defaultStart.setSelected(tabName.equals(defaultStartTab)); + defaultStart.setActionCommand(tabName); + defaultStart.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (((JToggleButton)e.getSource()).isSelected()) + MainFrame.setPref("DefaultStartTab", e.getActionCommand()); + } + }); + titleBox = Box.createHorizontalBox(); + titleBox.add(title); + titleBox.add(Box.createHorizontalGlue()); + titleBox.add(defaultStart); + titleBox.add(refreshButton); + gridbag.setConstraints(titleBox, c); + this.add(titleBox); + } + public void initForItem(NodeItem sourceItem) { + this.sourceItem = sourceItem; + Thread loader = new Thread(this); + loader.start(); + } + @Override + public void run() { + Thread.currentThread().setName("Default Entity Pane Builder"); + getGridBagConstraints(); + c.gridx = 0; + c.gridy = 1; + c.anchor = GridBagConstraints.NORTHWEST; + c.fill = GridBagConstraints.HORIZONTAL; + c.ipadx = 5; + c.weightx = 1.0; + c.weighty = 1.0; + c.ipady = 5; + JLabel error = new JLabel("In Development"); + gridbag.setConstraints(error, c); + this.add(error); + } + public void reload() { + } + public void runCommand(String command) { + } + + public void destroy() { + if (sourceItem != null && this instanceof ProxyObserver) { + sourceItem.getItem().unsubscribe((ProxyObserver)this); + } + parent = null; + } + + @Override + protected void finalize() throws Throwable { + Logger.msg(7, "Reaping "+getClass().getName()); + } + + static public OutcomeHandler getOutcomeHandler(String schema, int version) { + String ohClassName = Gateway.getProperties().getProperty("OutcomeHandler."+schema+"."+version); + try { + if (ohClassName != null && ohClassName.length() > 0) { + Class ohClass = Class.forName(ohClassName); + return (OutcomeHandler) ohClass.newInstance(); + } + } catch (Exception ex) { + Logger.error("Error creating handler "+ohClassName+". using default outcome editor"); + } + ohClassName = Gateway.getProperties().getProperty("OutcomeHandler.*"); + try { + if (ohClassName != null && ohClassName.length() > 0) { + Class ohClass = Class.forName(ohClassName); + return (OutcomeHandler) ohClass.newInstance(); + } + } catch (Exception ex) { + Logger.error("Error creating handler "+ohClassName+". using default outcome editor"); + Logger.error(ex); + } + return new OutcomePanel(); + } +} diff --git a/src/main/java/com/c2kernel/gui/tabs/JTabbedPaneWithCloseIcons.java b/src/main/java/com/c2kernel/gui/tabs/JTabbedPaneWithCloseIcons.java index 8f047ca..638ed01 100644 --- a/src/main/java/com/c2kernel/gui/tabs/JTabbedPaneWithCloseIcons.java +++ b/src/main/java/com/c2kernel/gui/tabs/JTabbedPaneWithCloseIcons.java @@ -10,7 +10,7 @@ import javax.swing.JTabbedPane; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; -import com.c2kernel.gui.EntityDetails; +import com.c2kernel.gui.ItemDetails; /** * @author Developpement @@ -51,9 +51,9 @@ public class JTabbedPaneWithCloseIcons extends JTabbedPane implements MouseListe { //the tab is being closed cp = this.getComponent(tabNumber); //if (getComponentCount() != 1) - if (cp instanceof EntityDetails) + if (cp instanceof ItemDetails) { - ((EntityDetails) cp).closeTab(); + ((ItemDetails) cp).closeTab(); remove(cp); } } @@ -91,6 +91,6 @@ public class JTabbedPaneWithCloseIcons extends JTabbedPane implements MouseListe public void stateChanged(ChangeEvent e) { if (getSelectedComponent()!= null) - ((EntityDetails) getSelectedComponent()).refresh(); + ((ItemDetails) getSelectedComponent()).refresh(); } } diff --git a/src/main/java/com/c2kernel/gui/tabs/JobListPane.java b/src/main/java/com/c2kernel/gui/tabs/JobListPane.java index 20a4e05..bfc3019 100644 --- a/src/main/java/com/c2kernel/gui/tabs/JobListPane.java +++ b/src/main/java/com/c2kernel/gui/tabs/JobListPane.java @@ -27,7 +27,7 @@ import javax.swing.table.AbstractTableModel; import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.entity.agent.Job; import com.c2kernel.entity.agent.JobList; -import com.c2kernel.entity.proxy.EntityProxyObserver; +import com.c2kernel.entity.proxy.ProxyObserver; import com.c2kernel.entity.proxy.MemberSubscription; import com.c2kernel.gui.MainFrame; import com.c2kernel.persistency.ClusterStorage; @@ -42,7 +42,7 @@ import com.c2kernel.utils.Logger; * @version $Revision: 1.4 $ $Date: 2004/10/21 08:02:21 $ * @author $Author: abranson $ */ -public class JobListPane extends EntityTabPane implements ActionListener, EntityProxyObserver { +public class JobListPane extends ItemTabPane implements ActionListener, ProxyObserver { JobList joblist; JoblistTableModel model; @@ -105,8 +105,8 @@ public class JobListPane extends EntityTabPane implements ActionListener, Entity public void run() { Thread.currentThread().setName("Joblist Pane Builder"); try { - joblist = (JobList)sourceEntity.getEntity().getObject(ClusterStorage.JOB); - sourceEntity.getEntity().subscribe(new MemberSubscription(this, ClusterStorage.JOB, false)); + joblist = (JobList)sourceItem.getItem().getObject(ClusterStorage.JOB); + sourceItem.getItem().subscribe(new MemberSubscription(this, ClusterStorage.JOB, false)); } catch (ObjectNotFoundException e) { Logger.error(e); } diff --git a/src/main/java/com/c2kernel/gui/tabs/PropertiesPane.java b/src/main/java/com/c2kernel/gui/tabs/PropertiesPane.java index 7cbd00e..b6fca75 100644 --- a/src/main/java/com/c2kernel/gui/tabs/PropertiesPane.java +++ b/src/main/java/com/c2kernel/gui/tabs/PropertiesPane.java @@ -24,7 +24,7 @@ import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.SwingConstants; -import com.c2kernel.entity.proxy.EntityProxyObserver; +import com.c2kernel.entity.proxy.ProxyObserver; import com.c2kernel.entity.proxy.ItemProxy; import com.c2kernel.entity.proxy.MemberSubscription; import com.c2kernel.gui.MainFrame; @@ -40,7 +40,7 @@ import com.c2kernel.utils.Language; * @version $Revision: 1.44 $ $Date: 2005/08/31 07:21:20 $ * @author $Author: abranson $ */ -public class PropertiesPane extends EntityTabPane implements EntityProxyObserver, ActionListener { +public class PropertiesPane extends ItemTabPane implements ProxyObserver, ActionListener { Box propertyBox; JButton eraseButton; @@ -94,25 +94,25 @@ public class PropertiesPane extends EntityTabPane implements EntityProxyObserver @Override public void reload() { - Gateway.getStorage().clearCache(sourceEntity.getSysKey(), ClusterStorage.PROPERTY); + Gateway.getStorage().clearCache(sourceItem.getSysKey(), ClusterStorage.PROPERTY); loadedProps = new HashMap(); - initForEntity(sourceEntity); + initForItem(sourceItem); } @Override public void run() { Thread.currentThread().setName("Property Pane Builder"); - if (sourceEntity instanceof NodeAgent) { + if (sourceItem instanceof NodeAgent) { remove(domAdmin); remove(domTitle); eraseButton.setEnabled(false); } else if (domAdmin != null) - domAdmin.setEntity((ItemProxy)sourceEntity.getEntity()); + domAdmin.setEntity(sourceItem.getItem()); propertyBox.removeAll(); propertyBox.add(Box.createGlue()); revalidate(); - sourceEntity.getEntity().subscribe(new MemberSubscription(this, ClusterStorage.PROPERTY, true)); + sourceItem.getItem().subscribe(new MemberSubscription(this, ClusterStorage.PROPERTY, true)); } /** @@ -140,7 +140,7 @@ public class PropertiesPane extends EntityTabPane implements EntityProxyObserver JOptionPane.QUESTION_MESSAGE, null, null, oldVal); if (newVal!=null && !(newVal.equals(oldVal))) { try { - ((ItemProxy)sourceEntity.getEntity()).setProperty(MainFrame.userAgent, e.getActionCommand(), newVal); + (sourceItem.getItem()).setProperty(MainFrame.userAgent, e.getActionCommand(), newVal); } catch (Exception ex) { MainFrame.exceptionDialog(ex); } @@ -186,7 +186,7 @@ public class PropertiesPane extends EntityTabPane implements EntityProxyObserver return; try { - MainFrame.userAgent.execute((ItemProxy)sourceEntity.getEntity(), predefStep, params); + MainFrame.userAgent.execute(sourceItem.getItem(), predefStep, params); } catch (Exception ex) { MainFrame.exceptionDialog(ex); } diff --git a/src/main/java/com/c2kernel/gui/tabs/ViewpointPane.java b/src/main/java/com/c2kernel/gui/tabs/ViewpointPane.java index 4f7db24..234f1db 100644 --- a/src/main/java/com/c2kernel/gui/tabs/ViewpointPane.java +++ b/src/main/java/com/c2kernel/gui/tabs/ViewpointPane.java @@ -25,9 +25,8 @@ import javax.swing.SwingConstants; import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.entity.C2KLocalObject; -import com.c2kernel.entity.proxy.EntityProxyObserver; -import com.c2kernel.entity.proxy.ItemProxy; import com.c2kernel.entity.proxy.MemberSubscription; +import com.c2kernel.entity.proxy.ProxyObserver; import com.c2kernel.events.Event; import com.c2kernel.gui.MainFrame; import com.c2kernel.gui.tabs.outcome.OutcomeException; @@ -40,7 +39,7 @@ import com.c2kernel.utils.Language; import com.c2kernel.utils.LocalObjectLoader; import com.c2kernel.utils.Logger; -public class ViewpointPane extends EntityTabPane implements ItemListener, ActionListener, EntityProxyObserver { +public class ViewpointPane extends ItemTabPane implements ItemListener, ActionListener, ProxyObserver { JComboBox schemas; JComboBox views; @@ -155,21 +154,21 @@ public class ViewpointPane extends EntityTabPane implements ItemListener, Action clearView(); // reload - initForEntity(sourceEntity); + initForItem(sourceItem); } @Override public void run() { Thread.currentThread().setName("Viewpoint Pane Builder"); //Local object subscriptions - sourceEntity.getEntity().subscribe(new MemberSubscription(this, ClusterStorage.VIEWPOINT, false)); - sourceEntity.getEntity().subscribe(new MemberSubscription(this, ClusterStorage.OUTCOME, false)); + sourceItem.getItem().subscribe(new MemberSubscription(this, ClusterStorage.VIEWPOINT, false)); + sourceItem.getItem().subscribe(new MemberSubscription(this, ClusterStorage.OUTCOME, false)); clearView(); schemas.addItem("--"); currentSchema = null; schemaList = new ArrayList(); try { - String outcomeTypes = sourceEntity.getEntity().queryData(ClusterStorage.VIEWPOINT+"/all"); + String outcomeTypes = sourceItem.getItem().queryData(ClusterStorage.VIEWPOINT+"/all"); StringTokenizer tok = new StringTokenizer(outcomeTypes, ","); while (tok.hasMoreTokens()) { String thisType = tok.nextToken(); @@ -209,12 +208,12 @@ public class ViewpointPane extends EntityTabPane implements ItemListener, Action try { // populate views - String viewNames = sourceEntity.getEntity().queryData(ClusterStorage.VIEWPOINT+"/"+schemaName+"/all"); + String viewNames = sourceItem.getItem().queryData(ClusterStorage.VIEWPOINT+"/"+schemaName+"/all"); StringTokenizer tok = new StringTokenizer(viewNames, ","); Viewpoint lastView = null; while(tok.hasMoreTokens()) { String viewName = tok.nextToken(); - Viewpoint thisView = (Viewpoint)sourceEntity.getEntity().getObject(ClusterStorage.VIEWPOINT+"/"+schemaName+"/"+viewName); + Viewpoint thisView = (Viewpoint)sourceItem.getItem().getObject(ClusterStorage.VIEWPOINT+"/"+schemaName+"/"+viewName); views.addItem(thisView); if (lastView == null) lastView = thisView; if (thisView.getName().equals("last")) //select @@ -222,11 +221,11 @@ public class ViewpointPane extends EntityTabPane implements ItemListener, Action viewpointList.add(thisView); } - String ocVersions = sourceEntity.getEntity().queryData(ClusterStorage.OUTCOME+"/"+schemaName+"/all"); + String ocVersions = sourceItem.getItem().queryData(ClusterStorage.OUTCOME+"/"+schemaName+"/all"); tok = new StringTokenizer(ocVersions, ","); while(tok.hasMoreTokens()) { int schemaVersion = Integer.parseInt(tok.nextToken()); - String ocEvents = sourceEntity.getEntity().queryData(ClusterStorage.OUTCOME+"/"+schemaName+"/"+schemaVersion+"/all"); + String ocEvents = sourceItem.getItem().queryData(ClusterStorage.OUTCOME+"/"+schemaName+"/"+schemaVersion+"/all"); StringTokenizer tok2 = new StringTokenizer(ocEvents, ","); while(tok2.hasMoreTokens()) { int eventId = Integer.parseInt(tok2.nextToken()); @@ -277,7 +276,7 @@ public class ViewpointPane extends EntityTabPane implements ItemListener, Action public void showEvent(EventItem thisEvent) { eventDetails.setText(thisEvent.getEventDesc()); try { - setView((Outcome)sourceEntity.getEntity().getObject( + setView((Outcome)sourceItem.getItem().getObject( ClusterStorage.OUTCOME+"/"+currentSchema+"/"+thisEvent.schemaVersion+"/"+thisEvent.eventId)); } catch (Exception ex) { Logger.error(ex); @@ -295,7 +294,7 @@ public class ViewpointPane extends EntityTabPane implements ItemListener, Action String error = null; try { schema = LocalObjectLoader.getSchema(data.getSchemaType(), data.getSchemaVersion()).schema; - thisOutcome = EntityTabPane.getOutcomeHandler(data.getSchemaType(), data.getSchemaVersion()); + thisOutcome = ItemTabPane.getOutcomeHandler(data.getSchemaType(), data.getSchemaVersion()); thisOutcome.setDescription(schema); thisOutcome.setOutcome(data.getData()); thisOutcome.setReadOnly(true); @@ -373,7 +372,7 @@ public class ViewpointPane extends EntityTabPane implements ItemListener, Action try { String[] predefParams = new String[1]; predefParams[0] = Gateway.getMarshaller().marshall(oldView); - MainFrame.userAgent.execute((ItemProxy)sourceEntity.getEntity(), "AddC2KObject", predefParams); + MainFrame.userAgent.execute(sourceItem.getItem(), "AddC2KObject", predefParams); } catch (Exception e) { Logger.error(e); MainFrame.exceptionDialog(e); @@ -504,7 +503,7 @@ public class ViewpointPane extends EntityTabPane implements ItemListener, Action public String getEventDesc() { try { - Event myEvent = (Event)sourceEntity.getEntity().getObject(ClusterStorage.HISTORY+"/"+eventId); + Event myEvent = (Event)sourceItem.getItem().getObject(ClusterStorage.HISTORY+"/"+eventId); return (Language.translate("Recorded on")+" "+myEvent.getTimeString()+" "+ Language.translate("by")+" "+myEvent.getAgentName()+" "+ Language.translate("using schema v")+schemaVersion); diff --git a/src/main/java/com/c2kernel/gui/tabs/WorkflowPane.java b/src/main/java/com/c2kernel/gui/tabs/WorkflowPane.java index 754cf60..bc31ac2 100644 --- a/src/main/java/com/c2kernel/gui/tabs/WorkflowPane.java +++ b/src/main/java/com/c2kernel/gui/tabs/WorkflowPane.java @@ -9,9 +9,8 @@ import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JSplitPane; -import com.c2kernel.entity.proxy.EntityProxyObserver; -import com.c2kernel.entity.proxy.ItemProxy; import com.c2kernel.entity.proxy.MemberSubscription; +import com.c2kernel.entity.proxy.ProxyObserver; import com.c2kernel.graph.layout.DefaultGraphLayoutGenerator; import com.c2kernel.graph.model.EdgeFactory; import com.c2kernel.graph.model.VertexFactory; @@ -34,7 +33,7 @@ import com.c2kernel.process.Gateway; import com.c2kernel.utils.FileStringUtility; import com.c2kernel.utils.Language; import com.c2kernel.utils.Logger; -public class WorkflowPane extends EntityTabPane implements EntityProxyObserver +public class WorkflowPane extends ItemTabPane implements ProxyObserver { // Only for the purpose of loading and saving protected Workflow mWorkflow = null; @@ -180,14 +179,14 @@ public class WorkflowPane extends EntityTabPane implements EntityProxyObserver(this, ClusterStorage.LIFECYCLE, true)); - transPanel.setItem((ItemProxy) sourceEntity.getEntity()); + sourceItem.getItem().subscribe(new MemberSubscription(this, ClusterStorage.LIFECYCLE, true)); + transPanel.setItem(sourceItem.getItem()); } @Override public void reload() { - Gateway.getStorage().clearCache(sourceEntity.getSysKey(), ClusterStorage.LIFECYCLE); - initForEntity(sourceEntity); + Gateway.getStorage().clearCache(sourceItem.getSysKey(), ClusterStorage.LIFECYCLE); + initForItem(sourceItem); } protected void createLayout() { @@ -229,7 +228,7 @@ public class WorkflowPane extends EntityTabPane implements EntityProxyObserver { + private class HistoryTableModel extends AbstractTableModel implements ProxyObserver { ItemProxy item; ArrayList collEvents; @@ -97,14 +96,14 @@ public class CollectionHistoryWindow extends JFrame { return "Click to view"; String name; try { - EntityProxy childItem = Gateway.getProxyManager().getProxy(new EntityPath(Integer.parseInt(((String[])collEventData.get(rowIndex))[2]))); + ItemProxy childItem = Gateway.getProxyManager().getProxy(new ItemPath(Integer.parseInt(((String[])collEventData.get(rowIndex))[2]))); name = childItem.getName(); } catch (NumberFormatException e) { - name = "Invalid entity key: "+((String[])collEventData.get(rowIndex))[2]; + name = "Invalid Item key: "+((String[])collEventData.get(rowIndex))[2]; } catch (ObjectNotFoundException e) { name = "Item deleted: "+((String[])collEventData.get(rowIndex))[2]; - } catch (InvalidEntityPathException e) { - name = "Invalid entity key: "+((String[])collEventData.get(rowIndex))[2]; + } catch (InvalidItemPathException e) { + name = "Invalid Item key: "+((String[])collEventData.get(rowIndex))[2]; } return name; default: @@ -170,7 +169,7 @@ public class CollectionHistoryWindow extends JFrame { else { String[] params = (String[])data; try { - EntityProxy childItem = Gateway.getProxyManager().getProxy(new EntityPath(Integer.parseInt(params[2]))); + ItemProxy childItem = Gateway.getProxyManager().getProxy(new ItemPath(Integer.parseInt(params[2]))); MainFrame.itemFinder.pushNewKey(childItem.getName()); } catch (Exception ex) { } } diff --git a/src/main/java/com/c2kernel/gui/tabs/collection/CollectionMemberPropertyPanel.java b/src/main/java/com/c2kernel/gui/tabs/collection/CollectionMemberPropertyPanel.java index 6004f59..248240e 100644 --- a/src/main/java/com/c2kernel/gui/tabs/collection/CollectionMemberPropertyPanel.java +++ b/src/main/java/com/c2kernel/gui/tabs/collection/CollectionMemberPropertyPanel.java @@ -22,9 +22,9 @@ import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.gui.MainFrame; import com.c2kernel.gui.graph.view.PropertyTable; import com.c2kernel.gui.graph.view.PropertyTableModel; -import com.c2kernel.gui.tabs.EntityTabPane; -import com.c2kernel.lookup.EntityPath; -import com.c2kernel.lookup.InvalidEntityPathException; +import com.c2kernel.gui.tabs.ItemTabPane; +import com.c2kernel.lookup.InvalidItemPathException; +import com.c2kernel.lookup.ItemPath; import com.c2kernel.process.Gateway; import com.c2kernel.utils.Language; @@ -57,11 +57,11 @@ public class CollectionMemberPropertyPanel extends JPanel implements ActionListe selectedCollMem = cm; String newMemberName; try { - EntityPath path = new EntityPath(cm.getEntityKey()); + ItemPath path = new ItemPath(cm.getSystemKey()); newMemberName = Gateway.getProxyManager().getProxy(path).getProperty("Name"); } catch (ObjectNotFoundException e) { newMemberName = "Item or Item name property not found"; - } catch (InvalidEntityPathException e) { + } catch (InvalidItemPathException e) { newMemberName = "No member"; } @@ -84,7 +84,7 @@ public class CollectionMemberPropertyPanel extends JPanel implements ActionListe c.ipady = 5; selObjSlot = new JLabel(); - selObjSlot.setFont(EntityTabPane.titleFont); + selObjSlot.setFont(ItemTabPane.titleFont); gridbag.setConstraints(selObjSlot, c); add(selObjSlot); @@ -95,7 +95,7 @@ public class CollectionMemberPropertyPanel extends JPanel implements ActionListe c.gridy++; JLabel title = new JLabel("Properties"); - title.setFont(EntityTabPane.titleFont); + title.setFont(ItemTabPane.titleFont); gridbag.setConstraints(title, c); add(title); diff --git a/src/main/java/com/c2kernel/gui/tabs/collection/CollectionView.java b/src/main/java/com/c2kernel/gui/tabs/collection/CollectionView.java index 022433f..f9f7d50 100644 --- a/src/main/java/com/c2kernel/gui/tabs/collection/CollectionView.java +++ b/src/main/java/com/c2kernel/gui/tabs/collection/CollectionView.java @@ -28,8 +28,8 @@ public abstract class CollectionView extends JPanel super(); } - public void setItem(ItemProxy entity) { - this.item = entity; + public void setItem(ItemProxy item) { + this.item = item; } public abstract void setCollection(Collection coll); diff --git a/src/main/java/com/c2kernel/gui/tabs/execution/ActivityViewer.java b/src/main/java/com/c2kernel/gui/tabs/execution/ActivityViewer.java index 82c45ff..9405937 100644 --- a/src/main/java/com/c2kernel/gui/tabs/execution/ActivityViewer.java +++ b/src/main/java/com/c2kernel/gui/tabs/execution/ActivityViewer.java @@ -24,7 +24,7 @@ import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.entity.agent.Job; import com.c2kernel.entity.proxy.ItemProxy; import com.c2kernel.gui.MainFrame; -import com.c2kernel.gui.tabs.EntityTabPane; +import com.c2kernel.gui.tabs.ItemTabPane; import com.c2kernel.gui.tabs.ExecutionPane; import com.c2kernel.gui.tabs.outcome.InvalidOutcomeException; import com.c2kernel.gui.tabs.outcome.InvalidSchemaException; @@ -84,7 +84,7 @@ public class ActivityViewer extends JPanel implements Runnable { // activity title JLabel actTitle = new JLabel(Language.translate("Activity")+": "+newAct.name); - actTitle.setFont(EntityTabPane.titleFont); + actTitle.setFont(ItemTabPane.titleFont); gridbag.setConstraints(actTitle, c); add(actTitle); @@ -150,7 +150,7 @@ public class ActivityViewer extends JPanel implements Runnable { c.gridy++; status = new JLabel(Language.translate("Waiting for request")); - status.setFont(EntityTabPane.titleFont); + status.setFont(ItemTabPane.titleFont); gridbag.setConstraints(status, c); add(status); @@ -229,7 +229,7 @@ public class ActivityViewer extends JPanel implements Runnable { String schema; OutcomeHandler thisForm; schema = LocalObjectLoader.getSchema(thisJob.getSchemaName(), thisJob.getSchemaVersion()).schema; - thisForm = EntityTabPane.getOutcomeHandler(thisJob.getSchemaName(), thisJob.getSchemaVersion()); + thisForm = ItemTabPane.getOutcomeHandler(thisJob.getSchemaName(), thisJob.getSchemaVersion()); thisForm.setReadOnly(false); thisForm.setDescription(schema); String outcomeString = thisJob.getOutcomeString(); diff --git a/src/main/java/com/c2kernel/gui/tree/Node.java b/src/main/java/com/c2kernel/gui/tree/Node.java index a2be6c7..62e9d19 100644 --- a/src/main/java/com/c2kernel/gui/tree/Node.java +++ b/src/main/java/com/c2kernel/gui/tree/Node.java @@ -13,7 +13,7 @@ import javax.swing.tree.DefaultMutableTreeNode; import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.gui.DynamicTreeBuilder; -import com.c2kernel.gui.EntityTabManager; +import com.c2kernel.gui.ItemTabManager; import com.c2kernel.gui.ImageLoader; import com.c2kernel.lookup.AgentPath; import com.c2kernel.lookup.Path; @@ -37,18 +37,19 @@ public abstract class Node implements Runnable { protected DynamicTreeBuilder loader = null; private boolean loaded = false; private String iconName; - protected EntityTabManager desktop; + protected ItemTabManager desktop; static ImageIcon folder = ImageLoader.findImage("folder.png"); static ImageIcon emptyLeaf = ImageLoader.findImage("leaf.png"); - public Node() { + public Node(ItemTabManager desktop) { + this.desktop = desktop; } protected void createTreeNode() { this.treeNode = new DefaultMutableTreeNode(this); } - public Node(Path path, EntityTabManager desktop) { + public Node(Path path, ItemTabManager desktop) { this.binding = path; this.desktop = desktop; this.sysKey = path.getSysKey(); @@ -60,7 +61,7 @@ public abstract class Node implements Runnable { this.name = Gateway.getProperties().getProperty("Name"); } - public EntityTabManager getDesktop() { + public ItemTabManager getDesktop() { return desktop; } @@ -81,7 +82,7 @@ public abstract class Node implements Runnable { */ public void makeExpandable() { if (isExpandable) return; - loader = new DynamicTreeBuilder(this.treeNode); + loader = new DynamicTreeBuilder(this.treeNode, desktop); this.treeNode.insert(loader.getTreeNode(),0); isExpandable = true; } diff --git a/src/main/java/com/c2kernel/gui/tree/NodeAgent.java b/src/main/java/com/c2kernel/gui/tree/NodeAgent.java index cda6579..f8cf045 100644 --- a/src/main/java/com/c2kernel/gui/tree/NodeAgent.java +++ b/src/main/java/com/c2kernel/gui/tree/NodeAgent.java @@ -4,7 +4,7 @@ package com.c2kernel.gui.tree; import java.util.ArrayList; -import com.c2kernel.gui.EntityTabManager; +import com.c2kernel.gui.ItemTabManager; import com.c2kernel.lookup.Path; /** @@ -12,9 +12,9 @@ import com.c2kernel.lookup.Path; * @author $Author: abranson $ * @version $Version$ */ -public class NodeAgent extends NodeEntity { +public class NodeAgent extends NodeItem { - public NodeAgent(Path path, EntityTabManager desktop) { + public NodeAgent(Path path, ItemTabManager desktop) { super(path, desktop); } diff --git a/src/main/java/com/c2kernel/gui/tree/NodeCollection.java b/src/main/java/com/c2kernel/gui/tree/NodeCollection.java index 47afc5f..3d624ee 100644 --- a/src/main/java/com/c2kernel/gui/tree/NodeCollection.java +++ b/src/main/java/com/c2kernel/gui/tree/NodeCollection.java @@ -8,27 +8,27 @@ import com.c2kernel.collection.Collection; import com.c2kernel.collection.CollectionMember; import com.c2kernel.collection.Dependency; import com.c2kernel.common.ObjectNotFoundException; -import com.c2kernel.entity.proxy.EntityProxyObserver; import com.c2kernel.entity.proxy.ItemProxy; import com.c2kernel.entity.proxy.MemberSubscription; -import com.c2kernel.gui.EntityTabManager; +import com.c2kernel.entity.proxy.ProxyObserver; +import com.c2kernel.gui.ItemTabManager; import com.c2kernel.gui.MainFrame; -import com.c2kernel.lookup.EntityPath; -import com.c2kernel.lookup.InvalidEntityPathException; +import com.c2kernel.lookup.InvalidItemPathException; +import com.c2kernel.lookup.ItemPath; import com.c2kernel.lookup.Path; import com.c2kernel.persistency.ClusterStorage; import com.c2kernel.utils.CastorHashMap; import com.c2kernel.utils.KeyValuePair; import com.c2kernel.utils.Logger; -public class NodeCollection extends Node implements EntityProxyObserver> { +public class NodeCollection extends Node implements ProxyObserver> { ItemProxy parent; Collection thisCollection; String path; - public NodeCollection(ItemProxy parent, String name, EntityTabManager desktop) { - this.desktop = desktop; + public NodeCollection(ItemProxy parent, String name, ItemTabManager desktop) { + super(desktop); this.parent = parent; this.name = name; this.path = parent.getSystemKey()+"/Collection/"+name; @@ -36,8 +36,8 @@ public class NodeCollection extends Node implements EntityProxyObserver coll, EntityTabManager desktop) { - this.desktop = desktop; + public NodeCollection(ItemProxy parent, Collection coll, ItemTabManager desktop) { + super(desktop); this.parent = parent; this.name = coll.getName(); this.path = parent.getSystemKey()+"/Collection/"+name; @@ -75,17 +75,17 @@ public class NodeCollection extends Node implements EntityProxyObserver currentPaths = new ArrayList(); // add any missing paths for (CollectionMember newMember : newMembers) { - if (!oldMembers.contains(newMember) && newMember.getEntityKey()>-1) + if (!oldMembers.contains(newMember) && newMember.getSystemKey()>-1) try { - EntityPath entityPath = new EntityPath(newMember.getEntityKey()); - currentPaths.add(entityPath); - NodeItem newMemberNode = new NodeItem(entityPath, desktop); + ItemPath itemPath = new ItemPath(newMember.getSystemKey()); + currentPaths.add(itemPath); + NodeItem newMemberNode = new NodeItem(itemPath, desktop); newMemberNode.setCollection(contents, newMember.getID(), parent); newMemberNode.setToolTip(getPropertyToolTip(newMember.getProperties())); add(newMemberNode); } - catch (InvalidEntityPathException ex) + catch (InvalidItemPathException ex) { Logger.error("NodeCollection::loadChildren() " + ex.toString()); } diff --git a/src/main/java/com/c2kernel/gui/tree/NodeContext.java b/src/main/java/com/c2kernel/gui/tree/NodeContext.java index b2d215c..f63855c 100644 --- a/src/main/java/com/c2kernel/gui/tree/NodeContext.java +++ b/src/main/java/com/c2kernel/gui/tree/NodeContext.java @@ -3,7 +3,7 @@ package com.c2kernel.gui.tree; import java.util.Enumeration; import com.c2kernel.entity.proxy.DomainPathSubscriber; -import com.c2kernel.gui.EntityTabManager; +import com.c2kernel.gui.ItemTabManager; import com.c2kernel.lookup.DomainPath; import com.c2kernel.lookup.Path; import com.c2kernel.process.Gateway; @@ -13,7 +13,7 @@ import com.c2kernel.utils.Logger; public class NodeContext extends Node implements DomainPathSubscriber { Enumeration children; - public NodeContext(Path path, EntityTabManager desktop) { + public NodeContext(Path path, ItemTabManager desktop) { super(path, desktop); this.sysKey=Path.INVALID; createTreeNode(); diff --git a/src/main/java/com/c2kernel/gui/tree/NodeEntity.java b/src/main/java/com/c2kernel/gui/tree/NodeEntity.java deleted file mode 100644 index aa425d6..0000000 --- a/src/main/java/com/c2kernel/gui/tree/NodeEntity.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.c2kernel.gui.tree; - - -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.ArrayList; - -import javax.swing.JMenuItem; -import javax.swing.JPopupMenu; - -import com.c2kernel.common.ObjectNotFoundException; -import com.c2kernel.entity.proxy.EntityProxy; -import com.c2kernel.gui.EntityTabManager; -import com.c2kernel.lookup.Path; -import com.c2kernel.process.Gateway; -import com.c2kernel.utils.Language; -import com.c2kernel.utils.Logger; - -/** - * Structure for Item presence on the tree and ItemDetails boxes. Created by NodeFactory. - * @author $Author: abranson $ - * @version $Version$ - */ -public abstract class NodeEntity extends Node { - - protected EntityProxy myEntity = null; - - public NodeEntity(Path path, EntityTabManager desktop) { - super(path, desktop); - Logger.msg(2,"NodeEntity. - Creating item for '"+path.toString()+"'."); - - // if an item - resolve the item and get its properties - try { - myEntity = Gateway.getProxyManager().getProxy(path); - this.sysKey = path.getSysKey(); - Logger.msg(2,"NodeEntity. - System key is "+this.sysKey); - - // Name should be the alias if present - String alias = myEntity.getName(); - if (alias != null) this.name = alias; - - try { - this.type = myEntity.getProperty("Type"); - } catch (ObjectNotFoundException e) { - this.type = ""; - } - String iconString = this.type; - if (type.equals("ActivityDesc")) - try { - iconString = myEntity.getProperty("Complexity")+iconString; - } catch (ObjectNotFoundException e) { - iconString = "error"; - } - iconString = iconString.toLowerCase(); - this.setIcon(iconString); - } catch (ObjectNotFoundException e1) { - this.sysKey = -1; - this.type="Error"; - this.name="Entity not found"; - this.setIcon("error"); - } - createTreeNode(); - } - - public EntityProxy getEntity() { - return myEntity; - } - /** - * - */ - @Override - public JPopupMenu getPopupMenu() { - JPopupMenu popup = super.getPopupMenu(); - JMenuItem openItem = new JMenuItem(Language.translate("Open")); - openItem.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - openItem(); - } - }); - popup.addSeparator(); - popup.add(openItem); - return popup; - } - - public void openItem() { - desktop.add(this); - } - - public ArrayList getTabs() { - ArrayList requiredTabs = new ArrayList(); - return requiredTabs; - } -} diff --git a/src/main/java/com/c2kernel/gui/tree/NodeItem.java b/src/main/java/com/c2kernel/gui/tree/NodeItem.java index 18d35be..9cdfc5a 100644 --- a/src/main/java/com/c2kernel/gui/tree/NodeItem.java +++ b/src/main/java/com/c2kernel/gui/tree/NodeItem.java @@ -15,13 +15,16 @@ import javax.swing.JPopupMenu; import com.c2kernel.collection.Aggregation; import com.c2kernel.collection.Collection; import com.c2kernel.collection.CollectionMember; +import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.entity.agent.Job; import com.c2kernel.entity.proxy.ItemProxy; -import com.c2kernel.gui.EntityDetails; -import com.c2kernel.gui.EntityTabManager; +import com.c2kernel.gui.ItemDetails; +import com.c2kernel.gui.ItemTabManager; import com.c2kernel.gui.MainFrame; import com.c2kernel.lookup.Path; import com.c2kernel.persistency.ClusterStorage; +import com.c2kernel.process.Gateway; +import com.c2kernel.utils.Language; import com.c2kernel.utils.Logger; /** @@ -29,8 +32,57 @@ import com.c2kernel.utils.Logger; * @author $Author: abranson $ * @version $Version$ */ -public class NodeItem extends NodeEntity implements Transferable { +public class NodeItem extends Node implements Transferable { + protected ItemProxy myItem = null; + + public NodeItem(Path path, ItemTabManager desktop) { + + super(path, desktop); + Logger.msg(2,"NodeEntity. - Creating item for '"+path.toString()+"'."); + + // if an item - resolve the item and get its properties + try { + myItem = Gateway.getProxyManager().getProxy(path); + this.sysKey = path.getSysKey(); + Logger.msg(2,"NodeEntity. - System key is "+this.sysKey); + + // Name should be the alias if present + String alias = myItem.getName(); + if (alias != null) this.name = alias; + + try { + this.type = myItem.getProperty("Type"); + } catch (ObjectNotFoundException e) { + this.type = ""; + } + String iconString = this.type; + if (type.equals("ActivityDesc")) + try { + iconString = myItem.getProperty("Complexity")+iconString; + } catch (ObjectNotFoundException e) { + iconString = "error"; + } + iconString = iconString.toLowerCase(); + this.setIcon(iconString); + } catch (ObjectNotFoundException e1) { + this.sysKey = -1; + this.type="Error"; + this.name="Entity not found"; + this.setIcon("error"); + } + createTreeNode(); + makeExpandable(); + } + + public ItemProxy getItem() { + return myItem; + } + + public void openItem() { + desktop.add(this); + } + public Collection getParentCollection() { return parentCollection; } @@ -49,16 +101,6 @@ public class NodeItem extends NodeEntity implements Transferable { DataFlavor.getTextPlainUnicodeFlavor() }; - public NodeItem(Path path, EntityTabManager desktop) { - super(path, desktop); - try { - makeExpandable(); - } catch (Exception e) { - Logger.error(e); - } - - } - public void setCollection(Collection parentCollection, Integer slotNo, ItemProxy parentItem) { this.parentCollection = parentCollection; this.slotNo = slotNo; @@ -68,10 +110,10 @@ public class NodeItem extends NodeEntity implements Transferable { @Override public void loadChildren() { try { - String collections = myEntity.queryData("Collection/all"); + String collections = myItem.queryData("Collection/all"); StringTokenizer tok = new StringTokenizer(collections, ","); while (tok.hasMoreTokens()) { - NodeCollection newCollection = new NodeCollection((ItemProxy)myEntity, tok.nextToken(), desktop); + NodeCollection newCollection = new NodeCollection(myItem, tok.nextToken(), desktop); add(newCollection); } end(false); @@ -82,7 +124,17 @@ public class NodeItem extends NodeEntity implements Transferable { @Override public JPopupMenu getPopupMenu() { - JPopupMenu popup = super.getPopupMenu(); + + JPopupMenu popup = super.getPopupMenu(); + JMenuItem openItem = new JMenuItem(Language.translate("Open")); + openItem.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + openItem(); + } + }); + popup.addSeparator(); + popup.add(openItem); popup.addSeparator(); if (parentCollection != null && MainFrame.isAdmin) { JMenuItem collMenuItem = new JMenuItem("Remove from collection"); @@ -104,7 +156,7 @@ public class NodeItem extends NodeEntity implements Transferable { popup.addSeparator(); } try { - ArrayList jobList = ((ItemProxy)myEntity).getJobList(MainFrame.userAgent); + ArrayList jobList = myItem.getJobList(MainFrame.userAgent); ArrayList already = new ArrayList(); if (jobList.size() > 0) { for (Job thisJob : jobList) { @@ -139,17 +191,16 @@ public class NodeItem extends NodeEntity implements Transferable { } public void execute(String stepName) { - EntityDetails thisDetail = desktop.add(this); + ItemDetails thisDetail = desktop.add(this); thisDetail.runCommand("Execution", stepName); } - @Override public ArrayList getTabs() { - ArrayList requiredTabs = super.getTabs(); + ArrayList requiredTabs = new ArrayList(); requiredTabs.add("Properties"); try { - String collNames = myEntity.queryData(ClusterStorage.COLLECTION+"/all"); + String collNames = myItem.queryData(ClusterStorage.COLLECTION+"/all"); if (collNames.length() > 0) requiredTabs.add("Collection"); } catch (Exception e) { } -- cgit v1.2.3