diff options
| author | Andrew Branson <andrew.branson@cern.ch> | 2014-10-07 09:18:33 +0200 |
|---|---|---|
| committer | Andrew Branson <andrew.branson@cern.ch> | 2014-10-07 09:18:33 +0200 |
| commit | 5e4034b5cba89460a62fa958fc78c2b85acb3d5f (patch) | |
| tree | aa8e32f014801459ad65acdf45eee70d16008fe6 /src/main/java/org/cristalise/gui/tabs/collection | |
| parent | a5a9d90ec6714ad6a9358c35ca7093e5868373f7 (diff) | |
Repackage to org.cristalise
Diffstat (limited to 'src/main/java/org/cristalise/gui/tabs/collection')
5 files changed, 586 insertions, 0 deletions
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<AggregationMember>
+{
+ 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<AggregationMember> 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<Event> {
+
+ ItemProxy item;
+ ArrayList<Event> collEvents;
+ ArrayList<Object> collEventData;
+ Aggregation coll;
+ public HistoryTableModel(ItemProxy item, Aggregation coll) {
+ this.item = item;
+ this.coll = coll;
+ collEvents = new ArrayList<Event>();
+ collEventData = new ArrayList<Object>();
+ item.subscribe(new MemberSubscription<Event>(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<M extends CollectionMember> extends JPanel {
+
+ protected Collection<M> thisColl;
+ protected ItemProxy item;
+
+ public CollectionView() {
+ super();
+ }
+
+ public void setItem(ItemProxy item) {
+ this.item = item;
+ }
+
+ public abstract void setCollection(Collection<M> 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<DependencyMember>
+{
+ TreeBrowser tree;
+ CollectionMemberPropertyPanel propPanel;
+ JSplitPane split;
+
+ public DependencyView()
+ {
+ super();
+ setLayout(new GridLayout(1, 1));
+ createLayout();
+ }
+
+ @Override
+ public void setCollection(Collection<DependencyMember> 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);
+
+ }
+
+}
|
