OSDN Git Service

add property edit pane
authortama3 <tama3@acee48c3-7b26-0410-bdac-b3d0e5314bbc>
Sat, 3 Mar 2007 08:39:21 +0000 (08:39 +0000)
committertama3 <tama3@acee48c3-7b26-0410-bdac-b3d0e5314bbc>
Sat, 3 Mar 2007 08:39:21 +0000 (08:39 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/stigmata/trunk@62 acee48c3-7b26-0410-bdac-b3d0e5314bbc

src/main/java/jp/naist/se/stigmata/BirthmarkContext.java
src/main/java/jp/naist/se/stigmata/ui/swing/ControlPane.java
src/main/java/jp/naist/se/stigmata/ui/swing/PropertyEditPane.java [new file with mode: 0755]
src/main/resources/resources/images/tag_blue_add.png [new file with mode: 0755]
src/main/resources/resources/images/tag_blue_delete.png [new file with mode: 0755]
src/main/resources/resources/messages.properties
src/main/resources/resources/messages_ja.source

index d3df823..e1cd0fb 100755 (executable)
@@ -111,6 +111,14 @@ public class BirthmarkContext{
         return value;\r
     }\r
 \r
+    public void clearProperties(){\r
+        properties.clear();\r
+    }\r
+\r
+    public Iterator<String> propertyKeys(){\r
+        return properties.keySet().iterator();\r
+    }\r
+\r
     /**\r
      * returns the classpath context.\r
      */\r
index 59d2a0b..9852686 100755 (executable)
@@ -42,6 +42,7 @@ public class ControlPane extends JPanel{
     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
@@ -57,6 +58,7 @@ public class ControlPane extends JPanel{
         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
@@ -78,9 +80,13 @@ public class ControlPane extends JPanel{
         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
@@ -98,7 +104,7 @@ public class ControlPane extends JPanel{
                 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
@@ -113,11 +119,16 @@ public class ControlPane extends JPanel{
 \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
@@ -229,12 +240,14 @@ public class ControlPane extends JPanel{
     }\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
diff --git a/src/main/java/jp/naist/se/stigmata/ui/swing/PropertyEditPane.java b/src/main/java/jp/naist/se/stigmata/ui/swing/PropertyEditPane.java
new file mode 100755 (executable)
index 0000000..ea27c4e
--- /dev/null
@@ -0,0 +1,167 @@
+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
diff --git a/src/main/resources/resources/images/tag_blue_add.png b/src/main/resources/resources/images/tag_blue_add.png
new file mode 100755 (executable)
index 0000000..f135248
Binary files /dev/null and b/src/main/resources/resources/images/tag_blue_add.png differ
diff --git a/src/main/resources/resources/images/tag_blue_delete.png b/src/main/resources/resources/images/tag_blue_delete.png
new file mode 100755 (executable)
index 0000000..9fbae67
Binary files /dev/null and b/src/main/resources/resources/images/tag_blue_delete.png differ
index f7b9332..9109738 100755 (executable)
@@ -264,6 +264,7 @@ servicelist.border=Birthmark service list
 servicelist.tooltip=Registered birthmark service list\r
 definition.tab.label=Define Birthmarks\r
 definition.tab.tooltip=Define new birthmarks\r
+\r
 removeservice.button.label=Remove\r
 removeservice.button.tooltip=Remove selected service from context\r
 removeservice.button.icon=script_delete.png\r
@@ -287,3 +288,18 @@ define.userdef.label=User defined birthmark
 define.userdef.tooltip=User defined birthmark\r
 newservice.definition.label=(New Service)\r
 \r
+############################################################\r
+# property pane\r
+############################################################\r
+property.tab.label=Properties\r
+property.tab.tooltip=Editing properties\r
+\r
+propertyname.label=Property name\r
+propertyvalue.label=Property value\r
+propertyadd.button.label=Add\r
+propertyadd.button.tooltip=Add new property\r
+propertyadd.button.icon=tag_blue_add.png\r
+propertyremove.button.label=Remove\r
+propertyremove.button.tooltip=Remove selected property\r
+propertyremove.button.icon=tag_blue_delete.png\r
+propertyadd.dialog.title=New property\r
index 35fbe2f..06be440 100755 (executable)
@@ -240,3 +240,17 @@ define.expert.tooltip=
 define.userdef.label=\83\86\81[\83U\92è\8b`\r
 define.userdef.tooltip=\83\86\81[\83U\82ª\92è\8b`\82µ\82½\83o\81[\83X\83}\81[\83N\82Å\82 \82é\82©\r
 newservice.definition.label=(\90V\8bK\83o\81[\83X\83}\81[\83N)\r
+\r
+############################################################\r
+# property pane\r
+############################################################\r
+property.tab.label=\83v\83\8d\83p\83e\83B\r
+property.tab.tooltip=\83v\83\8d\83p\83e\83B\82ð\95Ò\8fW\82µ\82Ü\82·\81D\r
+\r
+propertyname.label=\83v\83\8d\83p\83e\83B\96¼\r
+propertyvalue.label=\83v\83\8d\83p\83e\83B\92l\r
+propertyadd.button.label=\92Ç\89Á\r
+propertyadd.button.tooltip=\90V\82µ\82¢\83v\83\8d\83p\83e\83B\82ð\92Ç\89Á\82µ\82Ü\82·\81D\r
+propertyremove.button.label=\8dí\8f\9c\r
+propertyremove.button.tooltip=\91I\91ð\82µ\82Ä\82¢\82é\83v\83\8d\83p\83e\83B\82ð\8dí\8f\9c\82µ\82Ü\82·\81D\r
+propertyadd.dialog.title=\90V\8bK\83v\83\8d\83p\83e\83B\r