diff options
| author | Andrew Branson <andrew.branson@cern.ch> | 2012-08-03 14:03:59 +0200 |
|---|---|---|
| committer | Andrew Branson <andrew.branson@cern.ch> | 2012-08-03 14:03:59 +0200 |
| commit | e4ccc012a781d794c06b8d3fd27e0a1f532b3fe7 (patch) | |
| tree | 7f96e165b1583b75c39221ee59d15e2d3f160650 /src/main/java/com/c2kernel/gui/tabs | |
| parent | 8c272e0261686302e86849ad86ae8fa393d9e95e (diff) | |
Menu item on collection members in the tree to remove them.
Drag items onto dependencies to add them.
Dependency view
Logging cleanup
Fixes #42
Diffstat (limited to 'src/main/java/com/c2kernel/gui/tabs')
4 files changed, 230 insertions, 8 deletions
diff --git a/src/main/java/com/c2kernel/gui/tabs/CollectionPane.java b/src/main/java/com/c2kernel/gui/tabs/CollectionPane.java index 4d9092e..52af795 100644 --- a/src/main/java/com/c2kernel/gui/tabs/CollectionPane.java +++ b/src/main/java/com/c2kernel/gui/tabs/CollectionPane.java @@ -39,11 +39,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.setCollection((Aggregation)contents);
thisCollView = thisAggView;
}
else if (contents instanceof Dependency) {
DependencyView thisDepView = new DependencyView();
+ thisDepView.setItem((ItemProxy)sourceEntity.getEntity());
thisDepView.setCollection((Dependency)contents);
thisCollView = thisDepView;
}
@@ -52,7 +54,6 @@ public class CollectionPane extends EntityTabPane implements EntityProxyObserver return;
}
Logger.msg(3, "Adding new "+thisCollView.getClass().getName());
- thisCollView.setItem((ItemProxy)sourceEntity.getEntity());
collTabs.add(contents.getName(), thisCollView);
}
}
diff --git a/src/main/java/com/c2kernel/gui/tabs/ExecutionPane.java b/src/main/java/com/c2kernel/gui/tabs/ExecutionPane.java index a5df52c..9d9a395 100644 --- a/src/main/java/com/c2kernel/gui/tabs/ExecutionPane.java +++ b/src/main/java/com/c2kernel/gui/tabs/ExecutionPane.java @@ -97,7 +97,7 @@ public class ExecutionPane extends EntityTabPane implements EntityProxyObserver< }
}
} catch (Exception e) {
- Logger.debug("Error fetching joblist");
+ Logger.error("Error fetching joblist");
Logger.error(e);
}
diff --git a/src/main/java/com/c2kernel/gui/tabs/collection/CollectionMemberPropertyPanel.java b/src/main/java/com/c2kernel/gui/tabs/collection/CollectionMemberPropertyPanel.java new file mode 100644 index 0000000..ea649f9 --- /dev/null +++ b/src/main/java/com/c2kernel/gui/tabs/collection/CollectionMemberPropertyPanel.java @@ -0,0 +1,185 @@ +package com.c2kernel.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 java.util.HashMap;
+
+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 com.c2kernel.collection.CollectionMember;
+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.graph.view.SelectedVertexPanel;
+import com.c2kernel.gui.tabs.EntityTabPane;
+import com.c2kernel.lookup.EntityPath;
+import com.c2kernel.lookup.InvalidEntityPathException;
+import com.c2kernel.process.Gateway;
+import com.c2kernel.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 {
+ EntityPath path = new EntityPath(cm.getEntityKey());
+ newMemberName = Gateway.getProxyManager().getProxy(path).getProperty("Name");
+ } catch (ObjectNotFoundException e) {
+ newMemberName = "Item or Item name property not found";
+ } catch (InvalidEntityPathException e) {
+ newMemberName = "No member";
+ }
+
+ 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(EntityTabPane.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(EntityTabPane.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 HashMap<String, Object>());
+ 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));
+ } 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/com/c2kernel/gui/tabs/collection/DependencyView.java b/src/main/java/com/c2kernel/gui/tabs/collection/DependencyView.java index e068bdc..cd46a3d 100644 --- a/src/main/java/com/c2kernel/gui/tabs/collection/DependencyView.java +++ b/src/main/java/com/c2kernel/gui/tabs/collection/DependencyView.java @@ -1,22 +1,32 @@ package com.c2kernel.gui.tabs.collection;
import java.awt.GridLayout;
-import javax.swing.JLabel;
+import javax.swing.JSplitPane;
+import javax.swing.event.TreeSelectionEvent;
+import javax.swing.event.TreeSelectionListener;
+import javax.swing.tree.DefaultMutableTreeNode;
import com.c2kernel.collection.Collection;
import com.c2kernel.collection.DependencyMember;
+import com.c2kernel.common.ObjectNotFoundException;
+import com.c2kernel.gui.TreeBrowser;
+import com.c2kernel.gui.tree.Node;
+import com.c2kernel.gui.tree.NodeCollection;
+import com.c2kernel.gui.tree.NodeItem;
/**
* @version $Revision: 1.2 $ $Date: 2005/06/02 12:17:22 $
* @author $Author: abranson $
*/
public class DependencyView extends CollectionView<DependencyMember>
{
- // Objects to view/modify the properties of the selected activity
-
+ TreeBrowser tree;
+ CollectionMemberPropertyPanel propPanel;
+ JSplitPane split;
+
public DependencyView()
{
super();
- setLayout(new GridLayout(1,1));
+ setLayout(new GridLayout(1, 1));
createLayout();
}
@@ -24,11 +34,37 @@ public class DependencyView extends CollectionView<DependencyMember> public void setCollection(Collection<DependencyMember> contents)
{
thisColl = contents;
+ NodeCollection collNode = new NodeCollection(item, thisColl.getName(), null);
+ tree = new TreeBrowser(null, collNode);
+ tree.getTree().addTreeSelectionListener(new TreeSelectionListener() {
+ 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()
{
- // TODO: design a nice dependency view, with property viewing and modification
- add(new JLabel("Dependency view not yet implemented. Please browse the tree instead."));
+ propPanel = new CollectionMemberPropertyPanel();
+ split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
+ split.setRightComponent(propPanel);
+ add(split);
+
}
}
|
