From 5e4034b5cba89460a62fa958fc78c2b85acb3d5f Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Tue, 7 Oct 2014 09:18:33 +0200 Subject: Repackage to org.cristalise --- .../gui/tabs/collection/AggregationView.java | 91 ++++++++++ .../tabs/collection/CollectionHistoryWindow.java | 188 +++++++++++++++++++++ .../collection/CollectionMemberPropertyPanel.java | 183 ++++++++++++++++++++ .../gui/tabs/collection/CollectionView.java | 51 ++++++ .../gui/tabs/collection/DependencyView.java | 73 ++++++++ 5 files changed, 586 insertions(+) create mode 100644 src/main/java/org/cristalise/gui/tabs/collection/AggregationView.java create mode 100644 src/main/java/org/cristalise/gui/tabs/collection/CollectionHistoryWindow.java create mode 100644 src/main/java/org/cristalise/gui/tabs/collection/CollectionMemberPropertyPanel.java create mode 100644 src/main/java/org/cristalise/gui/tabs/collection/CollectionView.java create mode 100644 src/main/java/org/cristalise/gui/tabs/collection/DependencyView.java (limited to 'src/main/java/org/cristalise/gui/tabs/collection') diff --git a/src/main/java/org/cristalise/gui/tabs/collection/AggregationView.java b/src/main/java/org/cristalise/gui/tabs/collection/AggregationView.java new file mode 100644 index 0000000..141fcb1 --- /dev/null +++ b/src/main/java/org/cristalise/gui/tabs/collection/AggregationView.java @@ -0,0 +1,91 @@ +package org.cristalise.gui.tabs.collection; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.JButton; +import javax.swing.JSplitPane; + +import org.cristalise.gui.ImageLoader; +import org.cristalise.gui.MainFrame; +import org.cristalise.gui.collection.AggregationMemberRenderer; +import org.cristalise.gui.collection.PropertyPanel; +import org.cristalise.gui.collection.SelectedMemberPanel; +import org.cristalise.gui.graph.view.EditorPanel; +import org.cristalise.gui.graph.view.GraphPanel; +import org.cristalise.kernel.collection.Aggregation; +import org.cristalise.kernel.collection.AggregationMember; +import org.cristalise.kernel.collection.AggregationVertexFactory; +import org.cristalise.kernel.collection.AggregationVertexOutlineCreator; +import org.cristalise.kernel.collection.Collection; +import org.cristalise.kernel.utils.Language; + +/** + * @version $Revision: 1.5 $ $Date: 2006/09/15 15:02:24 $ + * @author $Author: abranson $ + */ +public class AggregationView extends CollectionView +{ + protected JButton mSaveButton = new JButton(ImageLoader.findImage("graph/save.png")); + protected JButton mHistoryButton = new JButton(ImageLoader.findImage("graph/history.png")); + protected JButton[] mOtherToolBarButtons = { mSaveButton, mHistoryButton }; + // Graph editor panel + protected EditorPanel mEditorPanel; + // Objects to view/modify the properties of the selected activity + protected PropertyPanel mPropertyPanel; + protected JSplitPane mSplitPane; + private final AggregationVertexFactory mAggregationVertexFactory = new AggregationVertexFactory(); + private final AggregationMemberRenderer mAggregationMemberRenderer = new AggregationMemberRenderer(); + public AggregationView() + { + super(); + setLayout(new GridLayout(1,1)); + mPropertyPanel = new PropertyPanel(); + mEditorPanel = new EditorPanel(null, mAggregationVertexFactory, new AggregationVertexOutlineCreator(), false, mOtherToolBarButtons, new GraphPanel(null, mAggregationMemberRenderer)); + createLayout(); + createListeners(); + mPropertyPanel.setGraphModelManager(mEditorPanel.mGraphModelManager); + mPropertyPanel.createLayout(new SelectedMemberPanel()); + mEditorPanel.setEditable(MainFrame.isAdmin); + } + + @Override + public void setCollection(Collection contents) + { + thisColl = contents; + Aggregation agg = (Aggregation)thisColl; + mPropertyPanel.setCollection(agg); + mAggregationMemberRenderer.setAggregation(agg); + mEditorPanel.mGraphModelManager.setModel(agg.getLayout()); + mEditorPanel.updateVertexTypes(agg.getVertexTypeNameAndConstructionInfo()); + mEditorPanel.enterSelectMode(); + mAggregationVertexFactory.setCreationContext(agg); + } + public void createLayout() + { + mSaveButton.setToolTipText(Language.translate("Save Layout Changes")); + mSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, mEditorPanel, mPropertyPanel); + mSplitPane.setDividerSize(5); + add(mSplitPane); + } + + protected void createListeners() + { + mSaveButton.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent ae) + { + saveCollection(); + } + }); + mHistoryButton.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent ae) + { + new CollectionHistoryWindow(item, (Aggregation)thisColl); + } + }); + } +} diff --git a/src/main/java/org/cristalise/gui/tabs/collection/CollectionHistoryWindow.java b/src/main/java/org/cristalise/gui/tabs/collection/CollectionHistoryWindow.java new file mode 100644 index 0000000..d1ae054 --- /dev/null +++ b/src/main/java/org/cristalise/gui/tabs/collection/CollectionHistoryWindow.java @@ -0,0 +1,188 @@ +package org.cristalise.gui.tabs.collection; + +import java.awt.HeadlessException; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.ArrayList; + +import javax.swing.JFrame; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.table.AbstractTableModel; + +import org.cristalise.gui.MainFrame; +import org.cristalise.kernel.collection.Aggregation; +import org.cristalise.kernel.collection.Collection; +import org.cristalise.kernel.common.ObjectNotFoundException; +import org.cristalise.kernel.entity.proxy.ItemProxy; +import org.cristalise.kernel.entity.proxy.MemberSubscription; +import org.cristalise.kernel.entity.proxy.ProxyObserver; +import org.cristalise.kernel.events.Event; +import org.cristalise.kernel.lifecycle.instance.predefined.PredefinedStep; +import org.cristalise.kernel.lookup.ItemPath; +import org.cristalise.kernel.persistency.ClusterStorage; +import org.cristalise.kernel.persistency.outcome.Outcome; +import org.cristalise.kernel.process.Gateway; +import org.cristalise.kernel.utils.Language; +import org.cristalise.kernel.utils.Logger; + + +public class CollectionHistoryWindow extends JFrame { + + JTable historyTable; + HistoryTableModel historyModel; + + public CollectionHistoryWindow(ItemProxy item, Aggregation coll) throws HeadlessException { + super("Collection History"); + historyModel = new HistoryTableModel(item, coll); + historyTable = new JTable(historyModel); + this.getContentPane().add(new JScrollPane(historyTable)); + historyTable.addMouseListener(new HistoryTableListener(item)); + this.pack(); + super.toFront(); + this.validate(); + this.setVisible(true); + } + + private class HistoryTableModel extends AbstractTableModel implements ProxyObserver { + + ItemProxy item; + ArrayList collEvents; + ArrayList collEventData; + Aggregation coll; + public HistoryTableModel(ItemProxy item, Aggregation coll) { + this.item = item; + this.coll = coll; + collEvents = new ArrayList(); + collEventData = new ArrayList(); + item.subscribe(new MemberSubscription(this, ClusterStorage.HISTORY, true)); + } + @Override + public int getColumnCount() { + return 4; + } + + @Override + public String getColumnName(int columnIndex) { + switch(columnIndex) { + case 0: return Language.translate("Date"); + case 1: return Language.translate("Operation"); + case 2: return Language.translate("Slot"); + case 3: return Language.translate("Child"); + default: return ""; + } + } + @Override + public int getRowCount() { + return collEvents.size(); + } + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + Event ev = collEvents.get(rowIndex); + switch (columnIndex) { + case 0: + return ev.getTimeString(); + case 1: + if (ev.getStepName().equals("AssignItemToSlot")) + return "Item Assigned"; + else + return "Collection replaced"; + case 2: + if (ev.getStepName().equals("AssignItemToSlot")) + return ((String[])collEventData.get(rowIndex))[1]; + return ""; + case 3: + if (ev.getStepName().equals("AddC2KObject")) + return "Click to view"; + String name; + try { + ItemProxy childItem = Gateway.getProxyManager().getProxy(new ItemPath(((String[])collEventData.get(rowIndex))[2])); + name = childItem.getName(); + } catch (ObjectNotFoundException e) { + name = "Item deleted: "+((String[])collEventData.get(rowIndex))[2]; + } catch (Exception e) { + name = "Problem resolving Item key: "+((String[])collEventData.get(rowIndex))[2]; + } + return name; + default: + return ""; + } + } + public Object getEventData(int row) { + return collEventData.get(row); + } + @Override + public void add(Event thisEv) { + if (thisEv.getStepName().equals("AssignItemToSlot") || thisEv.getStepName().equals("AddC2KObject")) { + String[] params; + try { + Outcome oc = (Outcome)item.getObject(ClusterStorage.OUTCOME+"/PredefinedStepOutcome/0/"+thisEv.getID()); + params = PredefinedStep.getDataList(oc.getData()); + } catch (ObjectNotFoundException ex) { return; } + if (thisEv.getStepName().equals("AssignItemToSlot")) { + if (params[0].equals(coll.getName())) + collEventData.add(params); + else return; + } + else { + Object obj; + try { + obj = Gateway.getMarshaller().unmarshall(params[0]); + } catch (Exception e) { + Logger.error(e); + return; + } + if (obj instanceof Collection) + collEventData.add(obj); + else return; + + } + } + else return; + collEvents.add(thisEv); + fireTableRowsInserted(collEvents.size()-1, collEvents.size()-1); + } + @Override + public void remove(String id) { } + @Override + public void control(String control, String msg) { + } + } + + private class HistoryTableListener extends MouseAdapter { + + ItemProxy item; + public HistoryTableListener(ItemProxy item) { + this.item = item; + } + + @Override + public void mouseClicked(MouseEvent e) { + if (e.getClickCount()==2) { + int row = historyTable.getSelectedRow(); + Object data = historyModel.getEventData(row); + if (data instanceof Aggregation) { + showColl((Aggregation)data); + } + else { + String[] params = (String[])data; + try { + ItemProxy childItem = Gateway.getProxyManager().getProxy(new ItemPath(params[2])); + MainFrame.itemFinder.pushNewKey(childItem.getName()); + } catch (Exception ex) { } + } + } + } + public void showColl(Aggregation coll) { + JFrame newFrame = new JFrame(); + AggregationView newView = new AggregationView(); + newView.setCollection(coll); + newView.setItem(item); + newFrame.getContentPane().add(newView); + newFrame.pack(); + newFrame.toFront(); + newFrame.validate(); + newFrame.setVisible(true); + } + } +} diff --git a/src/main/java/org/cristalise/gui/tabs/collection/CollectionMemberPropertyPanel.java b/src/main/java/org/cristalise/gui/tabs/collection/CollectionMemberPropertyPanel.java new file mode 100644 index 0000000..d55a2c2 --- /dev/null +++ b/src/main/java/org/cristalise/gui/tabs/collection/CollectionMemberPropertyPanel.java @@ -0,0 +1,183 @@ +package org.cristalise.gui.tabs.collection; + +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Insets; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.lang.reflect.Constructor; + +import javax.swing.Box; +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextField; + +import org.cristalise.gui.MainFrame; +import org.cristalise.gui.graph.view.PropertyTable; +import org.cristalise.gui.graph.view.PropertyTableModel; +import org.cristalise.gui.tabs.ItemTabPane; +import org.cristalise.kernel.collection.CollectionMember; +import org.cristalise.kernel.common.ObjectNotFoundException; +import org.cristalise.kernel.lookup.ItemPath; +import org.cristalise.kernel.process.Gateway; +import org.cristalise.kernel.utils.CastorHashMap; +import org.cristalise.kernel.utils.Language; + + +public class CollectionMemberPropertyPanel extends JPanel implements ActionListener { + + private final PropertyTableModel mPropertyModel; + private final PropertyTable mPropertyTable; + private boolean isEditable = false; + CollectionMember selectedCollMem; + GridBagLayout gridbag = new GridBagLayout(); + protected JLabel selObjSlot; + protected JLabel selObjMember; + JButton addPropButton; + JButton delPropButton; + Box newPropBox; + private JTextField newPropName; + private JComboBox newPropType; + String[] typeOptions = { "String", "Boolean", "Integer", "Float" }; + String[] typeInitVal = { "", "false", "0", "0.0"}; + + public CollectionMemberPropertyPanel() { + super(); + setLayout(gridbag); + mPropertyModel = new PropertyTableModel(); + mPropertyTable = new PropertyTable(mPropertyModel); + createLayout(); + } + + public void setMember(CollectionMember cm) { + selectedCollMem = cm; + String newMemberName; + try { + ItemPath path = cm.getItemPath(); + if (path == null) newMemberName = "No member"; + else newMemberName = Gateway.getProxyManager().getProxy(path).getProperty("Name"); + } catch (ObjectNotFoundException e) { + newMemberName = "Item or Item name property not found"; + } + + selObjSlot.setText(newMemberName); + selObjMember.setText("Slot "+cm.getID()); + mPropertyModel.setMap(cm.getProperties()); + addPropButton.setEnabled(isEditable); + delPropButton.setEnabled(isEditable); + } + + public void createLayout() + { + GridBagConstraints c = new GridBagConstraints(); + c.gridx = 0; + c.gridy = 0; + c.weightx = 1; + c.weighty = 0; + c.anchor = GridBagConstraints.NORTHWEST; + c.ipadx = 5; + c.ipady = 5; + + selObjSlot = new JLabel(); + selObjSlot.setFont(ItemTabPane.titleFont); + gridbag.setConstraints(selObjSlot, c); + add(selObjSlot); + + c.gridy++; + selObjMember = new JLabel(); + gridbag.setConstraints(selObjMember, c); + add(selObjMember); + + c.gridy++; + JLabel title = new JLabel("Properties"); + title.setFont(ItemTabPane.titleFont); + gridbag.setConstraints(title, c); + add(title); + + c.gridy++; + c.fill = GridBagConstraints.BOTH; + c.weighty = 2; + JScrollPane scroll = new JScrollPane(mPropertyTable); + gridbag.setConstraints(scroll, c); + add(scroll); + + newPropBox = Box.createHorizontalBox(); + newPropBox.add(new JLabel(Language.translate("New :"))); + newPropBox.add(Box.createHorizontalGlue()); + newPropName = new JTextField(15); + newPropBox.add(newPropName); + newPropType = new JComboBox(typeOptions); + newPropBox.add(newPropType); + newPropBox.add(Box.createHorizontalStrut(1)); + addPropButton = new JButton("Add"); + addPropButton.setMargin(new Insets(0, 0, 0, 0)); + delPropButton = new JButton("Del"); + delPropButton.setMargin(new Insets(0, 0, 0, 0)); + addPropButton.addActionListener(this); + delPropButton.addActionListener(this); + newPropBox.add(addPropButton); + newPropBox.add(delPropButton); + + c.gridy++; + c.weighty=0; + c.fill= GridBagConstraints.HORIZONTAL; + gridbag.setConstraints(newPropBox, c); + add(newPropBox); + } + + public void clear() { + selObjSlot.setText(""); + selObjMember.setText("Nothing Selected"); + mPropertyModel.setMap(new CastorHashMap()); + addPropButton.setEnabled(false); + delPropButton.setEnabled(false); + } + + /** + * @param isEditable The isEditable to set. + */ + public void setEditable(boolean editable) { + mPropertyModel.setEditable(editable); + isEditable = editable; + newPropBox.setVisible(editable); + } + + @Override + public void actionPerformed(ActionEvent e) { + if (e.getSource() == addPropButton) { + if (newPropName.getText().length() < 1) { + JOptionPane.showMessageDialog(this, "Enter a name for the new property", "Cannot add property", JOptionPane.ERROR_MESSAGE); + return; + } + if (mPropertyModel.sourceMap.containsKey(newPropName.getText())) { + JOptionPane.showMessageDialog(this, "Property '"+newPropName.getText()+"' already exists.", "Cannot add property", JOptionPane.ERROR_MESSAGE); + return; + } + if (mPropertyTable.getCellEditor() != null) + mPropertyTable.getCellEditor().stopCellEditing(); + + try { + Class newPropClass = Class.forName("java.lang."+typeOptions[newPropType.getSelectedIndex()]); + Class[] params = {String.class}; + Constructor init = newPropClass.getConstructor(params); + Object[] initParams = { typeInitVal[newPropType.getSelectedIndex()] }; + mPropertyModel.addProperty(newPropName.getText(), init.newInstance(initParams), false); + } catch (Exception ex) { + MainFrame.exceptionDialog(ex); + } + } + else if (e.getSource() == delPropButton) { + int selrow = mPropertyTable.getSelectedRow(); + if (selrow == -1) { + JOptionPane.showMessageDialog(this, "Select a property to remove", "Cannot delete property", JOptionPane.ERROR_MESSAGE); + return; + } + mPropertyModel.delProperty(mPropertyModel.sortedNameList.get(selrow)); + } + } + +} diff --git a/src/main/java/org/cristalise/gui/tabs/collection/CollectionView.java b/src/main/java/org/cristalise/gui/tabs/collection/CollectionView.java new file mode 100644 index 0000000..06b11ab --- /dev/null +++ b/src/main/java/org/cristalise/gui/tabs/collection/CollectionView.java @@ -0,0 +1,51 @@ +package org.cristalise.gui.tabs.collection; + +import javax.swing.JPanel; + +import org.cristalise.gui.MainFrame; +import org.cristalise.kernel.collection.Collection; +import org.cristalise.kernel.collection.CollectionMember; +import org.cristalise.kernel.entity.proxy.ItemProxy; +import org.cristalise.kernel.process.Gateway; +import org.cristalise.kernel.utils.Logger; + + +/************************************************************************** + * + * $Revision: 1.1 $ + * $Date: 2004/08/10 07:56:08 $ + * + * Copyright (C) 2003 CERN - European Organization for Nuclear Research + * All rights reserved. + **************************************************************************/ + + +public abstract class CollectionView extends JPanel { + + protected Collection thisColl; + protected ItemProxy item; + + public CollectionView() { + super(); + } + + public void setItem(ItemProxy item) { + this.item = item; + } + + public abstract void setCollection(Collection coll); + + protected void saveCollection() + { + try + { + String[] params = new String[1]; + params[0] = Gateway.getMarshaller().marshall(thisColl); + MainFrame.userAgent.execute(item, "AddC2KObject", params); + } + catch (Exception e) + { + Logger.error(e); + } + } +} diff --git a/src/main/java/org/cristalise/gui/tabs/collection/DependencyView.java b/src/main/java/org/cristalise/gui/tabs/collection/DependencyView.java new file mode 100644 index 0000000..543d3aa --- /dev/null +++ b/src/main/java/org/cristalise/gui/tabs/collection/DependencyView.java @@ -0,0 +1,73 @@ +package org.cristalise.gui.tabs.collection; +import java.awt.GridLayout; + +import javax.swing.JSplitPane; +import javax.swing.event.TreeSelectionEvent; +import javax.swing.event.TreeSelectionListener; +import javax.swing.tree.DefaultMutableTreeNode; + +import org.cristalise.gui.MainFrame; +import org.cristalise.gui.TreeBrowser; +import org.cristalise.gui.tree.Node; +import org.cristalise.gui.tree.NodeCollection; +import org.cristalise.gui.tree.NodeItem; +import org.cristalise.kernel.collection.Collection; +import org.cristalise.kernel.collection.DependencyMember; +import org.cristalise.kernel.common.ObjectNotFoundException; + +/** + * @version $Revision: 1.2 $ $Date: 2005/06/02 12:17:22 $ + * @author $Author: abranson $ + */ +public class DependencyView extends CollectionView +{ + TreeBrowser tree; + CollectionMemberPropertyPanel propPanel; + JSplitPane split; + + public DependencyView() + { + super(); + setLayout(new GridLayout(1, 1)); + createLayout(); + } + + @Override + public void setCollection(Collection contents) + { + thisColl = contents; + NodeCollection collNode = new NodeCollection(item, thisColl.getName(), null); + tree = new TreeBrowser(MainFrame.myDesktopManager, collNode); + tree.getTree().addTreeSelectionListener(new TreeSelectionListener() { + @Override + public void valueChanged(TreeSelectionEvent e) { + if (e.getPath() == null) { + propPanel.clear(); + } + else { + Node selectedNode = (Node)((DefaultMutableTreeNode)e.getPath().getLastPathComponent()).getUserObject(); + if (selectedNode instanceof NodeItem) { + NodeItem thisItem = (NodeItem)selectedNode; + if (thisItem.getParentCollection() != null) { + try { + propPanel.setMember(thisItem.getParentCollection().getMember(thisItem.getSlotNo())); + return; + } catch (ObjectNotFoundException e1) { } + } + propPanel.clear(); + } + } + } + }); + split.setLeftComponent(tree); + } + public void createLayout() + { + propPanel = new CollectionMemberPropertyPanel(); + split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); + split.setRightComponent(propPanel); + add(split); + + } + +} -- cgit v1.2.3