From 6502813a6fd83865b37903692cfe6e0903f74ea2 Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Tue, 16 Sep 2014 08:50:53 +0200 Subject: Support for abstract vertex properties --- .../gui/graph/view/PropertyTableModel.java | 66 +++++++++++++++------- .../gui/graph/view/VertexPropertyPanel.java | 13 ++++- .../collection/CollectionMemberPropertyPanel.java | 7 +-- 3 files changed, 58 insertions(+), 28 deletions(-) diff --git a/src/main/java/com/c2kernel/gui/graph/view/PropertyTableModel.java b/src/main/java/com/c2kernel/gui/graph/view/PropertyTableModel.java index a339f8d..616c302 100644 --- a/src/main/java/com/c2kernel/gui/graph/view/PropertyTableModel.java +++ b/src/main/java/com/c2kernel/gui/graph/view/PropertyTableModel.java @@ -3,12 +3,12 @@ package com.c2kernel.gui.graph.view; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; -import java.util.HashMap; import javax.swing.JOptionPane; import javax.swing.event.TableModelEvent; import javax.swing.table.AbstractTableModel; +import com.c2kernel.utils.CastorHashMap; import com.c2kernel.utils.Language; /************************************************************************** @@ -22,8 +22,8 @@ import com.c2kernel.utils.Language; public class PropertyTableModel extends AbstractTableModel { - private final String[] mColumnNames = { Language.translate("Name"), Language.translate("Value") }; - public HashMap sourceMap = new HashMap(); + private final String[] mColumnNames = { Language.translate("Name"), Language.translate("Value"), Language.translate("Abstract") }; + public CastorHashMap sourceMap = new CastorHashMap(); public ArrayList sortedNameList = new ArrayList(); boolean isEditable = false; @@ -53,10 +53,16 @@ public class PropertyTableModel extends AbstractTableModel { { synchronized (sourceMap) { String rowName = sortedNameList.get(rowIndex); - if (colIndex == 0) - return rowName; - else - return sourceMap.get(rowName); + switch (colIndex) { + case 0: + return rowName; + case 1: + return sourceMap.get(rowName); + case 2: + return sourceMap.getAbstract().contains(rowName); + default: + return ""; + } } } @@ -66,21 +72,39 @@ public class PropertyTableModel extends AbstractTableModel { synchronized (sourceMap) { if (colIndex == 0) return; String rowName = sortedNameList.get(rowIndex); - Class oldElement = sourceMap.get(rowName).getClass(); - if (oldElement == Double.class && value.getClass() == String.class) - try { - value = Double.valueOf((String)value); - } catch (Exception ex) { } - if (value.getClass() != oldElement) - JOptionPane.showMessageDialog(null, "This property should contain a "+oldElement.getName()+" not a "+value.getClass().getName(), "Incorrect datatype", JOptionPane.ERROR_MESSAGE); - else { - sourceMap.put(rowName, value); - fireTableCellUpdated(rowIndex, colIndex); + if (colIndex == 1) { + Class oldElement = sourceMap.get(rowName).getClass(); + if (oldElement == Double.class && value.getClass() == String.class) + try { + value = Double.valueOf((String)value); + } catch (Exception ex) { } + if (value.getClass() != oldElement) + JOptionPane.showMessageDialog(null, "This property should contain a "+oldElement.getName()+" not a "+value.getClass().getName(), "Incorrect datatype", JOptionPane.ERROR_MESSAGE); + else + sourceMap.put(rowName, value); + } + else if (colIndex == 2) { + Boolean boolVal = (Boolean)value; + if (boolVal) + sourceMap.getAbstract().add(rowName); + else + sourceMap.getAbstract().remove(rowName); } } + fireTableCellUpdated(rowIndex, colIndex); } - public void setMap(HashMap props) { + @Override + public Class getColumnClass(int columnIndex) { + switch (columnIndex) { + case 2: + return Boolean.class; + default: + return String.class; + } + } + + public void setMap(CastorHashMap props) { synchronized (sourceMap) { sourceMap = props; sortedNameList = new ArrayList(props.size()); @@ -100,7 +124,7 @@ public class PropertyTableModel extends AbstractTableModel { @Override public boolean isCellEditable(int row, int col) { - return col==1 && isEditable; + return col>0 && isEditable; } /** @@ -120,8 +144,8 @@ public class PropertyTableModel extends AbstractTableModel { * @param text * @param object */ - public void addProperty(String text, Object object) { - sourceMap.put(text,object); + public void addProperty(String text, Object object, boolean isAbstract) { + sourceMap.put(text, object, isAbstract); setMap(sourceMap); } 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 62ef8c9..d500201 100644 --- a/src/main/java/com/c2kernel/gui/graph/view/VertexPropertyPanel.java +++ b/src/main/java/com/c2kernel/gui/graph/view/VertexPropertyPanel.java @@ -6,12 +6,12 @@ import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.lang.reflect.Constructor; -import java.util.HashMap; import java.util.Observable; import java.util.Observer; import javax.swing.Box; import javax.swing.JButton; +import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JOptionPane; @@ -30,6 +30,7 @@ import com.c2kernel.graph.model.Vertex; import com.c2kernel.gui.MainFrame; import com.c2kernel.gui.graph.event.SelectionChangedEvent; import com.c2kernel.gui.tabs.ItemTabPane; +import com.c2kernel.utils.CastorHashMap; import com.c2kernel.utils.Language; /************************************************************************** @@ -55,6 +56,7 @@ public class VertexPropertyPanel extends JPanel implements Observer, TableModelL Box newPropBox; private JTextField newPropName; private JComboBox newPropType; + private JCheckBox newPropAbstract; String[] typeOptions = { "String", "Boolean", "Integer", "Float" }; String[] typeInitVal = { "", "false", "0", "0.0"}; SelectedVertexPanel mSelPanel; @@ -138,7 +140,7 @@ public class VertexPropertyPanel extends JPanel implements Observer, TableModelL public void clear() { selObjName.setText(""); selObjClass.setText("Nothing Selected"); - mPropertyModel.setMap(new HashMap()); + mPropertyModel.setMap(new CastorHashMap()); if (mSelPanel != null) mSelPanel.clear(); addPropButton.setEnabled(false); delPropButton.setEnabled(false); @@ -199,6 +201,11 @@ public class VertexPropertyPanel extends JPanel implements Observer, TableModelL newPropBox.add(newPropName); newPropType = new JComboBox(typeOptions); newPropBox.add(newPropType); + newPropBox.add(Box.createHorizontalGlue()); + newPropAbstract = new JCheckBox(); + newPropBox.add(newPropAbstract); + newPropBox.add(Box.createHorizontalStrut(1)); + newPropBox.add(new JLabel("Abstract")); newPropBox.add(Box.createHorizontalStrut(1)); addPropButton = new JButton("Add"); addPropButton.setMargin(new Insets(0, 0, 0, 0)); @@ -242,7 +249,7 @@ public class VertexPropertyPanel extends JPanel implements Observer, TableModelL Class[] params = {String.class}; Constructor init = newPropClass.getConstructor(params); Object[] initParams = { typeInitVal[newPropType.getSelectedIndex()] }; - mPropertyModel.addProperty(newPropName.getText(), init.newInstance(initParams)); + mPropertyModel.addProperty(newPropName.getText(), init.newInstance(initParams), newPropAbstract.isSelected()); } catch (Exception ex) { MainFrame.exceptionDialog(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 bfbcdc5..478403c 100644 --- a/src/main/java/com/c2kernel/gui/tabs/collection/CollectionMemberPropertyPanel.java +++ b/src/main/java/com/c2kernel/gui/tabs/collection/CollectionMemberPropertyPanel.java @@ -6,7 +6,6 @@ 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; @@ -23,9 +22,9 @@ import com.c2kernel.gui.MainFrame; import com.c2kernel.gui.graph.view.PropertyTable; import com.c2kernel.gui.graph.view.PropertyTableModel; 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.CastorHashMap; import com.c2kernel.utils.Language; public class CollectionMemberPropertyPanel extends JPanel implements ActionListener { @@ -132,7 +131,7 @@ public class CollectionMemberPropertyPanel extends JPanel implements ActionListe public void clear() { selObjSlot.setText(""); selObjMember.setText("Nothing Selected"); - mPropertyModel.setMap(new HashMap()); + mPropertyModel.setMap(new CastorHashMap()); addPropButton.setEnabled(false); delPropButton.setEnabled(false); } @@ -165,7 +164,7 @@ public class CollectionMemberPropertyPanel extends JPanel implements ActionListe Class[] params = {String.class}; Constructor init = newPropClass.getConstructor(params); Object[] initParams = { typeInitVal[newPropType.getSelectedIndex()] }; - mPropertyModel.addProperty(newPropName.getText(), init.newInstance(initParams)); + mPropertyModel.addProperty(newPropName.getText(), init.newInstance(initParams), false); } catch (Exception ex) { MainFrame.exceptionDialog(ex); } -- cgit v1.2.3