OSDN Git Service

new feature: export settings
authortama3 <tama3@acee48c3-7b26-0410-bdac-b3d0e5314bbc>
Sat, 3 Mar 2007 06:54:58 +0000 (06:54 +0000)
committertama3 <tama3@acee48c3-7b26-0410-bdac-b3d0e5314bbc>
Sat, 3 Mar 2007 06:54:58 +0000 (06:54 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/stigmata/trunk@61 acee48c3-7b26-0410-bdac-b3d0e5314bbc

src/main/java/jp/naist/se/stigmata/ui/swing/BirthmarkDefinitionPane.java
src/main/java/jp/naist/se/stigmata/ui/swing/ClasspathSettingsPane.java
src/main/java/jp/naist/se/stigmata/ui/swing/ControlPane.java
src/main/java/jp/naist/se/stigmata/ui/swing/PairComparisonResultSetPane.java
src/main/java/jp/naist/se/stigmata/ui/swing/StigmataFrame.java
src/main/java/jp/naist/se/stigmata/ui/swing/WellknownClassesSettingsPane.java
src/main/resources/META-INF/birthmark-3.0.dtd
src/main/resources/resources/birthmark.xml
src/main/resources/resources/images/page_save.png [new file with mode: 0755]
src/main/resources/resources/messages.properties
src/main/resources/resources/messages_ja.source

index 01dbf1e..3805aa0 100755 (executable)
@@ -10,6 +10,8 @@ import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;\r
 import java.awt.event.ItemEvent;\r
 import java.awt.event.ItemListener;\r
+import java.io.IOException;\r
+import java.io.PrintWriter;\r
 import java.util.ArrayList;\r
 import java.util.HashMap;\r
 import java.util.Iterator;\r
@@ -74,6 +76,34 @@ public class BirthmarkDefinitionPane extends JPanel{
         }\r
     }\r
 \r
+    public void exportSettings(PrintWriter out) throws IOException{\r
+        out.println("  <services>");\r
+        for(String key: services.keySet()){\r
+            BirthmarkSpi service = services.get(key);\r
+            // not expert birthmarks are defined as class.\r
+            if(service.isExpert()){\r
+                out.println("    <service>");\r
+                out.print("      <type>");\r
+                out.print(service.getType());\r
+                out.println("</type>");\r
+                out.print("      <display-name>");\r
+                out.print(service.getDisplayType());\r
+                out.println("</display-name>");\r
+                out.print("      <description>");\r
+                out.print(service.getDescription());\r
+                out.println("</description>");\r
+                out.print("      <extractor>");\r
+                out.print(service.getExtractorClassName());\r
+                out.println("</extractor>");\r
+                out.print("      <comparator>");\r
+                out.print(service.getComparatorClassName());\r
+                out.println("</comparator>");\r
+                out.println("    </service>");\r
+            }\r
+        }\r
+        out.println("  </services>");\r
+    }\r
+\r
     private void initData(){\r
         information.initData();\r
         model.addElement(Messages.getString("newservice.definition.label"));\r
index e787e01..b83f77d 100755 (executable)
@@ -10,6 +10,7 @@ import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;\r
 import java.io.File;\r
 import java.io.IOException;\r
+import java.io.PrintWriter;\r
 \r
 import javax.swing.Box;\r
 import javax.swing.JButton;\r
@@ -43,6 +44,19 @@ public class ClasspathSettingsPane extends JPanel{
         initLayouts();\r
     }\r
 \r
+    public void exportSettings(PrintWriter out) throws IOException{\r
+        String[] cplist = classpath.getValues();\r
+        if(cplist != null && cplist.length > 0){\r
+            out.println("  <classpath-list>");\r
+            for(int i = 0; i < cplist.length; i++){\r
+                out.print("<classpath>");\r
+                out.print(cplist[i]);\r
+                out.println("</classpath>");\r
+            }\r
+            out.println("  </classpath-list>");\r
+        }\r
+    }\r
+\r
     public void updateClasspathContext(ClasspathContext context){\r
         String[] cplist = classpath.getValues();\r
         if(cplist != null && cplist.length >= 0){\r
index e060bf7..59d2a0b 100755 (executable)
@@ -7,6 +7,10 @@ package jp.naist.se.stigmata.ui.swing;
 import java.awt.BorderLayout;\r
 import java.awt.event.ActionEvent;\r
 import java.awt.event.ActionListener;\r
+import java.io.File;\r
+import java.io.FileWriter;\r
+import java.io.IOException;\r
+import java.io.PrintWriter;\r
 import java.util.HashSet;\r
 import java.util.Set;\r
 \r
@@ -80,6 +84,28 @@ public class ControlPane extends JPanel{
         }\r
     }\r
 \r
+    public void exportSettings(){\r
+        File file = stigmata.getSaveFile(Messages.getStringArray("export.extensions"),\r
+            Messages.getString("export.description"));\r
+        if(file != null){\r
+            if(!file.getName().endsWith(".xml")){\r
+                file = new File(file.getParent(), file.getName() + ".xml");\r
+            }\r
+            try{\r
+                PrintWriter out = new PrintWriter(new FileWriter(file));\r
+                out.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");\r
+                out.println("<birthmark>");\r
+                definition.exportSettings(out);\r
+                wellknownClassses.exportSettings(out);\r
+                classpath.exportSettings(out);\r
+                // properties.exportSettings(out);\r
+                out.println("</birthmark>");\r
+                out.close();\r
+            } catch(IOException e){\r
+            }\r
+        }\r
+    }\r
+\r
     public void setGeekMode(boolean geekmode){\r
         this.geekmode = geekmode;\r
         birthmarks.setGeekMode(geekmode);\r
index 67d70db..5c26300 100755 (executable)
@@ -45,17 +45,11 @@ public class PairComparisonResultSetPane extends JPanel implements BirthmarkData
     private static final long serialVersionUID = 3298346465652354302L;\r
 \r
     private StigmataFrame frame;\r
-\r
     private BirthmarkContext context;\r
-\r
     private DefaultTableModel model = new PairComparisonResultSetTableModel();\r
-\r
     private JTable table = new JTable(model);\r
-\r
     private JLabel averageLabel, maximumLabel, minimumLabel;\r
-\r
     private List<ComparisonPair> list = new ArrayList<ComparisonPair>();\r
-\r
     private double average, maximum, minimum;\r
 \r
     public PairComparisonResultSetPane(StigmataFrame frame, ComparisonResultSet resultset){\r
index 0d8ba7d..c593d37 100755 (executable)
@@ -381,6 +381,7 @@ public class StigmataFrame extends JFrame implements CurrentDirectoryHolder{
     private JMenu createFileMenu(){\r
         JMenu fileMenu = Utility.createJMenu("fileMenu");\r
         JMenuItem newFrameMenu = Utility.createJMenuItem("newframe");\r
+        JMenuItem exportMenu = Utility.createJMenuItem("exportsetting");\r
         JMenuItem closeTabMenu = Utility.createJMenuItem("closetab");\r
         JMenuItem closeMenu = Utility.createJMenuItem("closeframe");\r
         JMenuItem exitMenu = Utility.createJMenuItem("exit");\r
@@ -388,32 +389,39 @@ public class StigmataFrame extends JFrame implements CurrentDirectoryHolder{
 \r
         fileMenu.add(newFrameMenu);\r
         fileMenu.add(new JSeparator());\r
+        fileMenu.add(exportMenu);\r
+        fileMenu.add(new JSeparator());\r
         fileMenu.add(closeTabMenu);\r
         fileMenu.add(closeMenu);\r
         fileMenu.add(new JSeparator());\r
         fileMenu.add(exitMenu);\r
 \r
-        newFrameMenu.addActionListener(new java.awt.event.ActionListener(){\r
-            public void actionPerformed(java.awt.event.ActionEvent evt){\r
+        newFrameMenu.addActionListener(new ActionListener(){\r
+            public void actionPerformed(ActionEvent evt){\r
                 newFrameMenuActionPerformed(evt);\r
             }\r
         });\r
+        exportMenu.addActionListener(new ActionListener(){\r
+            public void actionPerformed(ActionEvent e){\r
+                control.exportSettings();\r
+            }\r
+        });\r
 \r
-        closeTabMenu.addActionListener(new java.awt.event.ActionListener(){\r
-            public void actionPerformed(java.awt.event.ActionEvent evt){\r
+        closeTabMenu.addActionListener(new ActionListener(){\r
+            public void actionPerformed(ActionEvent evt){\r
                 closeTabMenuActionPerformed();\r
             }\r
         });\r
 \r
-        closeMenu.addActionListener(new java.awt.event.ActionListener(){\r
-            public void actionPerformed(java.awt.event.ActionEvent evt){\r
+        closeMenu.addActionListener(new ActionListener(){\r
+            public void actionPerformed(ActionEvent evt){\r
                 closeMenuActionPerformed(evt);\r
             }\r
         });\r
 \r
-        exitMenu.addActionListener(new java.awt.event.ActionListener(){\r
-            public void actionPerformed(java.awt.event.ActionEvent evt){\r
-                exitMenuActionPerformed(evt);\r
+        exitMenu.addActionListener(new ActionListener(){\r
+            public void actionPerformed(ActionEvent evt){\r
+                System.exit(0);\r
             }\r
         });\r
         return fileMenu;\r
@@ -540,7 +548,7 @@ public class StigmataFrame extends JFrame implements CurrentDirectoryHolder{
         return null;\r
     }\r
 \r
-    private void formWindowClosed(java.awt.event.WindowEvent evt){\r
+    private void formWindowClosed(WindowEvent evt){\r
         frameList.remove(this);\r
         if(frameList.size() == 0){\r
             System.exit(1);\r
@@ -561,7 +569,7 @@ public class StigmataFrame extends JFrame implements CurrentDirectoryHolder{
         }\r
     }\r
 \r
-    private void closeMenuActionPerformed(java.awt.event.ActionEvent evt){\r
+    private void closeMenuActionPerformed(ActionEvent evt){\r
         setVisible(false);\r
         dispose();\r
 \r
@@ -571,11 +579,7 @@ public class StigmataFrame extends JFrame implements CurrentDirectoryHolder{
         }\r
     }\r
 \r
-    private void exitMenuActionPerformed(java.awt.event.ActionEvent evt){\r
-        System.exit(1);\r
-    }\r
-\r
-    private void newFrameMenuActionPerformed(java.awt.event.ActionEvent evt){\r
+    private void newFrameMenuActionPerformed(ActionEvent evt){\r
         StigmataFrame frame = new StigmataFrame(stigmata, context);\r
         frame.setVisible(true);\r
     }\r
index feaef63..9e91909 100755 (executable)
@@ -9,6 +9,8 @@ import java.awt.Component;
 import java.awt.GridLayout;\r
 import java.awt.event.ActionEvent;\r
 import java.awt.event.ActionListener;\r
+import java.io.IOException;\r
+import java.io.PrintWriter;\r
 \r
 import javax.swing.Box;\r
 import javax.swing.DefaultCellEditor;\r
@@ -32,8 +34,8 @@ import javax.swing.table.TableCellRenderer;
 import javax.swing.table.TableColumn;\r
 import javax.swing.table.TableColumnModel;\r
 \r
-import jp.naist.se.stigmata.utils.WellknownClassManager;\r
 import jp.naist.se.stigmata.utils.WellknownClassJudgeRule;\r
+import jp.naist.se.stigmata.utils.WellknownClassManager;\r
 \r
 /**\r
  * @author Haruaki TAMADA\r
@@ -43,19 +45,12 @@ public class WellknownClassesSettingsPane extends JPanel{
     private static final long serialVersionUID = 329734546345634532L;\r
 \r
     private JTable sectionTable = null;\r
-\r
     private DefaultTableModel model;\r
-\r
     private WellknownClassManager manager;\r
-\r
     private JComboBox checkPartType;\r
-\r
     private JComboBox matchType;\r
-\r
     private String matchTypeColumnIdentifier;\r
-\r
     private String checkPartColumnIdentifier;\r
-\r
     private String patternColumnIdentifier;\r
 \r
     public WellknownClassesSettingsPane(WellknownClassManager manager){\r
@@ -66,6 +61,31 @@ public class WellknownClassesSettingsPane extends JPanel{
         initializeData();\r
     }\r
 \r
+    public void exportSettings(PrintWriter out) throws IOException{\r
+        out.println("  <wellknown-classes>");\r
+        for(int i = 0; i < model.getRowCount(); i++){\r
+            int partType = getPartType(model.getValueAt(i, 0));\r
+            int match = getMatchType(model.getValueAt(i, 1));\r
+            String value = (String)model.getValueAt(i, 2);\r
+            String tag;\r
+            String matchtag;\r
+            if(partType == WellknownClassJudgeRule.CLASS_NAME_TYPE)   tag = "class-name";\r
+            else if(partType == WellknownClassJudgeRule.EXCLUDE_TYPE) tag = "exclude";\r
+            else if(partType == WellknownClassJudgeRule.FULLY_TYPE)   tag = "fully-name";\r
+            else if(partType == WellknownClassJudgeRule.PACKAGE_TYPE) tag = "package";\r
+            else throw new InternalError("unknown part type: " + partType);\r
+\r
+            if(match == WellknownClassJudgeRule.MATCH_TYPE)       matchtag = "match";\r
+            else if(match == WellknownClassJudgeRule.PREFIX_TYPE) matchtag = "prefix";\r
+            else if(match == WellknownClassJudgeRule.SUFFIX_TYPE) matchtag = "suffix";\r
+            else throw new InternalError("unknown match type: " + match);\r
+\r
+            out.printf("    <%s><%s>%s</%s></%s>", tag, matchtag, value, matchtag, tag);\r
+            out.println();\r
+        }\r
+        out.println("  </wellknown-classes>");\r
+    }\r
+\r
     public synchronized void setWellknownClasses(WellknownClassManager manager){\r
         manager.clear();\r
         for(int i = 0; i < model.getRowCount(); i++){\r
index 47e10bd..7f194d6 100755 (executable)
@@ -7,7 +7,7 @@
 <!ELEMENT classpath     (#PCDATA)>\r
 \r
 <!ELEMENT type          (#PCDATA)>\r
-<!ELEMENT display-type  (#PCDATA)>\r
+<!ELEMENT display-name  (#PCDATA)>\r
 <!ELEMENT description   (#PCDATA)>\r
 <!ELEMENT extractor     (#PCDATA)>\r
 <!ELEMENT comparator    (#PCDATA)>\r
@@ -33,7 +33,7 @@
 \r
 <!ELEMENT properties (property*)>\r
 \r
-<!ELEMENT service (type,display-type,description,extractor,comparator)>\r
+<!ELEMENT service (type,display-name,description,extractor,comparator)>\r
 \r
 <!ELEMENT services (service*)>\r
 \r
index 4b22307..facf395 100755 (executable)
@@ -76,50 +76,42 @@ $Id$
     ¥Ñ¥Ã¥±¡¼¥¸¤ÎÀÜƬ¼­¡¤¥¯¥é¥¹Ì¾¤ÎÀÜÈø¼­¡¤¥¯¥é¥¹¤Î´°Á´½¤¾þ̾¤Ç
     ÀßÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤ë¡¥
    -->
+  <!--
+    ¤³¤ÎÃæ¤Ë´Þ¤Þ¤ì¤ë¤â¤Î¤Ï¾¤Ç¤¤¤¯¤é wellknown ¤ÈÀßÄꤵ¤ì¤Æ¤¤¤Æ¤â̵»ë¤¹¤ë¡¥
+    »ØÄêÊýË¡¤Ï fully-names ¤ÈƱ¤¸¡¥
+  -->
   <wellknown-classes>
-    <exclude>
-      <!--
-        ¤³¤ÎÃæ¤Ë´Þ¤Þ¤ì¤ë¤â¤Î¤Ï¾¤Ç¤¤¤¯¤é wellknown ¤ÈÀßÄꤵ¤ì¤Æ¤¤¤Æ¤â̵»ë¤¹¤ë¡¥
-        »ØÄêÊýË¡¤Ï fully-names ¤ÈƱ¤¸¡¥
-      -->
-      <suffix>Exception</suffix>
-      <suffix>Error</suffix>
-      <match>java.lang.Throwable</match>
-      <match>java.lang.ThreadDeath</match>
-    </exclude>
+    <exclude><suffix>Exception</suffix></exclude>
+    <exclude><suffix>Error</suffix></exclude>
+    <exclude><match>java.lang.Throwable</match></exclude>
+    <exclude><match>java.lang.ThreadDeath</match></exclude>
 
-    <package>
-      <!-- JDK 1.5 ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ë¥Ñ¥Ã¥±¡¼¥¸ -->
-      <prefix>java</prefix>
-      <prefix>javax</prefix>
-      <prefix>org.omg</prefix>
-      <prefix>org.xml</prefix>
-      <prefix>org.w3c</prefix>
-      <prefix>org.ietf</prefix>
+    <!-- JDK 1.5 ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ë¥Ñ¥Ã¥±¡¼¥¸ -->
+    <package><prefix>java</prefix></package>
+    <package><prefix>javax</prefix></package>
+    <package><prefix>org.omg</prefix></package>
+    <package><prefix>org.xml</prefix></package>
+    <package><prefix>org.w3c</prefix></package>
+    <package><prefix>org.ietf</prefix></package>
 
-      <!-- ¤½¤Î¾¡¤¤è¤¯»È¤ï¤ì¤Æ¤¤¤½¤¦¤Ê¥Ñ¥Ã¥±¡¼¥¸ -->
-      <prefix>org.gnu</prefix>
-      <prefix>com.apple</prefix>
-      <prefix>pnuts</prefix>
-      <prefix>org.eclipse</prefix>
-      <prefix>com.sun</prefix>
-      <prefix>sun</prefix>
-      <prefix>junit</prefix>
-      <prefix>org.apache</prefix>
-    </package>
+    <!-- ¤½¤Î¾¡¤¤è¤¯»È¤ï¤ì¤Æ¤¤¤½¤¦¤Ê¥Ñ¥Ã¥±¡¼¥¸ -->
+    <package><prefix>org.gnu</prefix></package>
+    <package><prefix>com.apple</prefix></package>
+    <package><prefix>pnuts</prefix></package>
+    <package><prefix>org.eclipse</prefix></package>
+    <package><prefix>com.sun</prefix></package>
+    <package><prefix>sun</prefix></package>
+    <package><prefix>junit</prefix></package>
+    <package><prefix>org.apache</prefix></package>
 
-    <class-name>
-      <suffix>Test</suffix>
+    <class-name><suffix>Test</suffix></class-name>
 <!--
-      <match>well.known.class.name</match>
+    <class-name><match>well.known.class.name</match></class-name>
 -->
-    </class-name>
 <!--
-    <fully-name>
-      <suffix>Test</suffix>
-      <prefix>fully.class.name.preffix</prefix>
-      <match>fully.class.name.match</match>
-    </fully-name>
+    <fully-name><suffix>Test</suffix></fully-name>
+    <fully-name><prefix>fully.class.name.preffix</prefix></fully-name>
+    <fully-name><match>fully.class.name.match</match></fully-name>
 -->
   </wellknown-classes>
 
diff --git a/src/main/resources/resources/images/page_save.png b/src/main/resources/resources/images/page_save.png
new file mode 100755 (executable)
index 0000000..caea546
Binary files /dev/null and b/src/main/resources/resources/images/page_save.png differ
index 50cbdce..f7b9332 100755 (executable)
@@ -32,6 +32,12 @@ newframe.menuitem.label=New Frame
 newframe.menuitem.tooltip=Create New Frame\r
 newframe.menuitem.icon=application_add.png\r
 \r
+exportsetting.menuitem.label=Export settings...\r
+exportsetting.menuitem.tooltip=Export settings of control panel.\r
+exportsetting.menuitem.icon=page_save.png\r
+export.extensions=xml\r
+export.description=Store stigmata settings to xml file\r
+\r
 closetab.menuitem.label=Close Tab\r
 closetab.menuteim.tooltip=Close current tab\r
 closetab.menuitem.icon=tab_delete.png\r
index 3b79d8a..35fbe2f 100755 (executable)
@@ -26,6 +26,10 @@ fileMenu.menu.label=
 newframe.menuitem.label=\90V\82½\82È\83t\83\8c\81[\83\80\r
 newframe.menuitem.tooltip=\90V\82µ\82¢\83t\83\8c\81[\83\80\82ð\8dì\90¬\82µ\82Ü\82·\r
 \r
+exportsetting.menuitem.label=\90Ý\92è\82ð\95Û\91¶...\r
+exportsetting.menuitem.tooltip=\90Ý\92è\82ðXML\83t\83@\83C\83\8b\82É\95Û\91\82µ\82Ü\82·\81D\r
+export.description=\90Ý\92è\82ð\8fo\97Í\82·\82éxml\83t\83@\83C\83\8b\r
+\r
 closetab.menuitem.label=\83^\83u\82ð\95Â\82\82é\r
 closetab.menuteim.tooltip=\8c»\8dÝ\82Ì\83^\83u\82ð\95Â\82\82Ü\82·\r
 \r