private ClasspathSettingsPane classpath;\r
private WellknownClassesSettingsPane wellknownClassses;\r
private BirthmarkDefinitionPane definition;\r
+ private PropertyEditPane properties;\r
private JTabbedPane controlTab;\r
private JButton compareButton;\r
private JButton extractButton;\r
Utility.addNewTab("wellknown", controlTab, createWellknownClassPane());\r
Utility.addNewTab("classpath", controlTab, classpath = new ClasspathSettingsPane(stigmata));\r
definition = new BirthmarkDefinitionPane(stigmata);\r
+ properties = new PropertyEditPane(stigmata);\r
\r
reset();\r
}\r
wellknownClassses.reset();\r
updateEnable();\r
\r
- int index = controlTab.indexOfTab(Messages.getString("definition.tab.label"));\r
- if(index >= 0){\r
- controlTab.removeTabAt(index);\r
+ int index1 = controlTab.indexOfTab(Messages.getString("definition.tab.label"));\r
+ if(index1 >= 0){\r
+ controlTab.removeTabAt(index1);\r
+ }\r
+ int index2 = controlTab.indexOfTab(Messages.getString("property.tab.label"));\r
+ if(index2 >= 0){\r
+ controlTab.removeTabAt(index2);\r
}\r
}\r
\r
definition.exportSettings(out);\r
wellknownClassses.exportSettings(out);\r
classpath.exportSettings(out);\r
- // properties.exportSettings(out);\r
+ properties.exportSettings(out);\r
out.println("</birthmark>");\r
out.close();\r
} catch(IOException e){\r
\r
if(geekmode){\r
Utility.addNewTab("definition", controlTab, definition);\r
+ Utility.addNewTab("property", controlTab, properties);\r
}\r
else{\r
- int index = controlTab.indexOfTab(Messages.getString("definition.tab.label"));\r
- if(index >= 0){\r
- controlTab.removeTabAt(index);\r
+ int index1 = controlTab.indexOfTab(Messages.getString("definition.tab.label"));\r
+ if(index1 >= 0){\r
+ controlTab.removeTabAt(index1);\r
+ }\r
+ int index2 = controlTab.indexOfTab(Messages.getString("property.tab.label"));\r
+ if(index2 >= 0){\r
+ controlTab.removeTabAt(index2);\r
}\r
}\r
updateEnable();\r
}\r
\r
private BirthmarkContext initAction(){\r
- BirthmarkContext context = stigmata.getContext();\r
+ BirthmarkContext context = stigmata.getStigmata().createContext();\r
+ // BirthmarkContext context2 = stigmata.getContext();\r
ClasspathContext bytecode = context.getBytecodeContext();\r
WellknownClassManager manager = context.getWellknownClassManager();\r
\r
classpath.updateClasspathContext(bytecode);\r
wellknownClassses.setWellknownClasses(manager);\r
+ properties.updateContext(context);\r
\r
return context;\r
}\r
--- /dev/null
+package jp.naist.se.stigmata.ui.swing;\r
+\r
+import java.awt.BorderLayout;\r
+import java.awt.GridBagConstraints;\r
+import java.awt.GridBagLayout;\r
+import java.awt.Insets;\r
+import java.awt.event.ActionEvent;\r
+import java.awt.event.ActionListener;\r
+import java.io.IOException;\r
+import java.io.PrintWriter;\r
+import java.util.Iterator;\r
+\r
+import javax.swing.Box;\r
+import javax.swing.JButton;\r
+import javax.swing.JLabel;\r
+import javax.swing.JOptionPane;\r
+import javax.swing.JPanel;\r
+import javax.swing.JScrollPane;\r
+import javax.swing.JTable;\r
+import javax.swing.JTextField;\r
+import javax.swing.ListSelectionModel;\r
+import javax.swing.SpringLayout;\r
+import javax.swing.event.ListSelectionEvent;\r
+import javax.swing.event.ListSelectionListener;\r
+import javax.swing.table.DefaultTableModel;\r
+\r
+import jp.naist.se.stigmata.BirthmarkContext;\r
+\r
+public class PropertyEditPane extends JPanel{\r
+ private static final long serialVersionUID = 12397342543653L;\r
+\r
+ private StigmataFrame stigmata;\r
+ private JTable table;\r
+ private DefaultTableModel model;\r
+\r
+ public PropertyEditPane(StigmataFrame stigmata){\r
+ this.stigmata = stigmata;\r
+\r
+ initLayouts();\r
+ initData();\r
+ }\r
+\r
+ public void exportSettings(PrintWriter out) throws IOException{\r
+ out.println(" <properties>");\r
+ for(int i = 0; i < model.getRowCount(); i++){\r
+ out.println(" <property>");\r
+ out.print(" <name>");\r
+ out.print(model.getValueAt(i, 0));\r
+ out.println("</name>");\r
+ out.print(" <value>");\r
+ out.print(model.getValueAt(i, 1));\r
+ out.println("</value>");\r
+ out.println(" </property>");\r
+ }\r
+ out.println(" </properties>");\r
+ }\r
+\r
+ public void updateContext(BirthmarkContext context){\r
+ context.clearProperties();\r
+ for(int i = 0; i < model.getRowCount(); i++){\r
+ context.addProperty(\r
+ (String)model.getValueAt(i, 0),\r
+ (String)model.getValueAt(i, 1)\r
+ );\r
+ }\r
+ }\r
+\r
+ private void initData(){\r
+ BirthmarkContext context = stigmata.getContext();\r
+ for(Iterator<String> i = context.propertyKeys(); i.hasNext(); ){\r
+ String key = i.next();\r
+ model.addRow(new Object[] { key, context.getProperty(key), });\r
+ }\r
+ }\r
+\r
+ private void addNewProperty(){\r
+ GridBagLayout layout = new GridBagLayout();\r
+ JPanel panel = new JPanel(layout);\r
+ JLabel nameLabel = new JLabel(Messages.getString("propertyname.label"));\r
+ JLabel valueLabel = new JLabel(Messages.getString("propertyvalue.label"));\r
+ JTextField name = new JTextField(15);\r
+ JTextField value = new JTextField(15);\r
+\r
+ GridBagConstraints gbc = new GridBagConstraints();\r
+ gbc.gridx = 0; gbc.gridwidth = 1;\r
+ gbc.gridy = 0; gbc.gridheight = 1;\r
+ gbc.insets = new Insets(5, 5, 5, 0);\r
+ layout.setConstraints(nameLabel, gbc);\r
+ panel.add(nameLabel);\r
+\r
+ gbc.gridx = 1; gbc.gridwidth = 2;\r
+ gbc.gridy = 0; gbc.gridheight = 1;\r
+ gbc.fill = GridBagConstraints.HORIZONTAL;\r
+ layout.setConstraints(name, gbc);\r
+ panel.add(name);\r
+\r
+ gbc.gridx = 0; gbc.gridwidth = 1;\r
+ gbc.gridy = 1; gbc.gridheight = 1;\r
+ layout.setConstraints(valueLabel, gbc);\r
+ panel.add(valueLabel);\r
+\r
+ gbc.gridx = 1; gbc.gridwidth = 2;\r
+ gbc.gridy = 1; gbc.gridheight = 1;\r
+ gbc.fill = GridBagConstraints.HORIZONTAL;\r
+ layout.setConstraints(value, gbc);\r
+ panel.add(value);\r
+\r
+ int val = JOptionPane.showConfirmDialog(\r
+ stigmata, panel, Messages.getString("propertyadd.dialog.title"),\r
+ JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE\r
+ );\r
+ if(val == JOptionPane.YES_OPTION){\r
+ model.addRow(new Object[] {\r
+ name.getText().trim(),\r
+ value.getText()\r
+ });\r
+ }\r
+ }\r
+\r
+ private void removeSelectedProperty(){\r
+ int[] indexes = table.getSelectedRows();\r
+ for(int i = indexes.length - 1; i >= 0; i--){\r
+ model.removeRow(indexes[i]);\r
+ }\r
+ }\r
+\r
+ private void initLayouts(){\r
+ model = new DefaultTableModel();\r
+ model.addColumn(Messages.getString("propertyname.label"));\r
+ model.addColumn(Messages.getString("propertyvalue.label"));\r
+ table = new JTable(model);\r
+ table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);\r
+ table.setColumnSelectionAllowed(false);\r
+\r
+ JButton add = Utility.createButton("propertyadd");\r
+ final JButton remove = Utility.createButton("propertyremove");\r
+\r
+ setLayout(new BorderLayout());\r
+ JScrollPane scroll = new JScrollPane(table);\r
+ Box box = Box.createHorizontalBox();\r
+ box.add(Box.createHorizontalGlue());\r
+ box.add(add);\r
+ box.add(Box.createHorizontalGlue());\r
+ box.add(remove);\r
+ box.add(Box.createHorizontalGlue());\r
+\r
+ add(scroll, BorderLayout.CENTER);\r
+ add(box, BorderLayout.SOUTH);\r
+\r
+ add.addActionListener(new ActionListener(){\r
+ public void actionPerformed(ActionEvent e){\r
+ addNewProperty();\r
+ }\r
+ });\r
+ remove.addActionListener(new ActionListener(){\r
+ public void actionPerformed(ActionEvent e){\r
+ removeSelectedProperty();\r
+ }\r
+ });\r
+ table.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
+ public void valueChanged(ListSelectionEvent arg0){\r
+ remove.setEnabled(table.getSelectedRowCount() != 0);\r
+ }\r
+ });\r
+ remove.setEnabled(false);\r
+ }\r
+}\r