OSDN Git Service

update wellknown-classes judge rule routine, for more simple
authortama3 <tama3@acee48c3-7b26-0410-bdac-b3d0e5314bbc>
Tue, 2 Oct 2007 06:22:42 +0000 (06:22 +0000)
committertama3 <tama3@acee48c3-7b26-0410-bdac-b3d0e5314bbc>
Tue, 2 Oct 2007 06:22:42 +0000 (06:22 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/stigmata/trunk@225 acee48c3-7b26-0410-bdac-b3d0e5314bbc

12 files changed:
src/main/java/jp/naist/se/stigmata/Main.java
src/main/java/jp/naist/se/stigmata/ui/swing/WellknownClassesSettingsPane.java
src/main/java/jp/naist/se/stigmata/utils/ConfigFileExporter.java
src/main/java/jp/naist/se/stigmata/utils/ConfigFileImporter.java
src/main/java/jp/naist/se/stigmata/utils/Names.java [new file with mode: 0755]
src/main/java/jp/naist/se/stigmata/utils/WellknownClassJudgeRule.java
src/main/java/jp/naist/se/stigmata/utils/WellknownClassManager.java
src/main/resources/META-INF/stigmata-4.0.dtd
src/main/resources/META-INF/stigmata-4.0.rng
src/main/resources/resources/messages.properties
src/main/resources/resources/messages_ja.source
src/main/resources/resources/stigmata.xml

index 4fb7971..2cfbfbc 100644 (file)
@@ -52,6 +52,7 @@ public final class Main{
 \r
     /**\r
      * main process.\r
+     * @throws org.apache.commons.cli.ParseException \r
      */\r
     public Main(String[] args) throws ParseException{\r
         Options options = buildOptions();\r
index af09182..57748ad 100644 (file)
@@ -5,52 +5,51 @@ package jp.naist.se.stigmata.ui.swing;
  */\r
 \r
 import java.awt.BorderLayout;\r
-import java.awt.Component;\r
-import java.awt.GridLayout;\r
+import java.awt.FlowLayout;\r
 import java.awt.event.ActionEvent;\r
 import java.awt.event.ActionListener;\r
+import java.awt.event.MouseAdapter;\r
+import java.awt.event.MouseEvent;\r
+import java.util.HashMap;\r
+import java.util.Map;\r
 \r
 import javax.swing.Box;\r
-import javax.swing.DefaultCellEditor;\r
+import javax.swing.DefaultListModel;\r
 import javax.swing.JButton;\r
+import javax.swing.JCheckBox;\r
 import javax.swing.JComboBox;\r
 import javax.swing.JComponent;\r
 import javax.swing.JLabel;\r
+import javax.swing.JList;\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.border.TitledBorder;\r
 import javax.swing.event.DocumentEvent;\r
 import javax.swing.event.DocumentListener;\r
 import javax.swing.event.ListSelectionEvent;\r
 import javax.swing.event.ListSelectionListener;\r
-import javax.swing.table.DefaultTableCellRenderer;\r
-import javax.swing.table.DefaultTableModel;\r
-import javax.swing.table.TableCellRenderer;\r
-import javax.swing.table.TableColumn;\r
-import javax.swing.table.TableColumnModel;\r
 \r
 import jp.naist.se.stigmata.utils.WellknownClassJudgeRule;\r
 import jp.naist.se.stigmata.utils.WellknownClassManager;\r
 \r
 /**\r
+ * Well-known classes judge rules management pane.\r
+ * \r
  * @author Haruaki TAMADA\r
  * @version $Revision$ $Date$\r
  */\r
 public class WellknownClassesSettingsPane extends JPanel{\r
     private static final long serialVersionUID = 329734546345634532L;\r
 \r
-    private JTable sectionTable = null;\r
-    private DefaultTableModel model;\r
-    private WellknownClassManager manager;\r
     private StigmataFrame stigmata;\r
-    private JComboBox checkPartType;\r
-    private JComboBox matchType;\r
-    private String matchTypeColumnIdentifier;\r
-    private String checkPartColumnIdentifier;\r
-    private String patternColumnIdentifier;\r
+    private WellknownClassManager manager;\r
+    private JList list;\r
+    private DefaultListModel listmodel;\r
+\r
+    private Map<String, String> matchTypeMap = new HashMap<String, String>();\r
+    private Map<String, String> partTypeMap = new HashMap<String, String>();\r
 \r
     public WellknownClassesSettingsPane(StigmataFrame stigmata){\r
         this.stigmata = stigmata;\r
@@ -62,12 +61,9 @@ public class WellknownClassesSettingsPane extends JPanel{
 \r
     public synchronized void setWellknownClasses(WellknownClassManager manager){\r
         manager.clear();\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
-            WellknownClassJudgeRule sect = new WellknownClassJudgeRule(value, partType | match);\r
-            manager.add(sect);\r
+        for(int i = 0; i < listmodel.getSize(); i++){\r
+            WellknownClassJudgeRule rule = (WellknownClassJudgeRule)listmodel.getElementAt(i);\r
+            manager.add(rule);\r
         }\r
     }\r
 \r
@@ -78,9 +74,7 @@ public class WellknownClassesSettingsPane extends JPanel{
     }\r
 \r
     public void reset(){\r
-        for(int i = model.getRowCount() - 1; i >= 0; i--){\r
-            model.removeRow(i);\r
-        }\r
+        listmodel.clear();\r
         initializeData();\r
     }\r
 \r
@@ -90,114 +84,60 @@ public class WellknownClassesSettingsPane extends JPanel{
         return manager.isWellKnownClass(className);\r
     }\r
 \r
-    private int getPartType(Object object){\r
-        if(object instanceof Integer){\r
-            return ((Integer)object).intValue();\r
-        }\r
-        else{\r
-            if(object.equals(Messages.getString("fully.label"))){\r
-                return WellknownClassJudgeRule.FULLY_TYPE;\r
-            }\r
-            else if(object.equals(Messages.getString("package.label"))){\r
-                return WellknownClassJudgeRule.PACKAGE_TYPE;\r
-            }\r
-            else if(object.equals(Messages.getString("classname.label"))){\r
-                return WellknownClassJudgeRule.CLASS_NAME_TYPE;\r
-            }\r
-            else if(object.equals(Messages.getString("exclude.label"))){\r
-                return WellknownClassJudgeRule.EXCLUDE_TYPE;\r
+    private String findType(JComboBox combo, Map<String, String> map){\r
+        String item = (String)combo.getSelectedItem();\r
+        for(Map.Entry<String, String> entry: map.entrySet()){\r
+            if(item.equals(entry.getValue())){\r
+                return entry.getKey();\r
             }\r
         }\r
-        return WellknownClassJudgeRule.FULLY_TYPE;\r
+        return null;\r
     }\r
 \r
-    private int getMatchType(Object object){\r
-        if(object instanceof Integer){\r
-            return ((Integer)object).intValue();\r
+    public void addRule(WellknownClassJudgeRule rule){\r
+        if(rule != null){\r
+            listmodel.addElement(rule);\r
         }\r
-        else{\r
-            if(object.equals(Messages.getString("prefix.label"))){\r
-                return WellknownClassJudgeRule.PREFIX_TYPE;\r
-            }\r
-            else if(object.equals(Messages.getString("suffix.label"))){            \r
-                return WellknownClassJudgeRule.SUFFIX_TYPE;\r
-            }\r
-            else if(object.equals(Messages.getString("exactmatch.label"))){\r
-                return WellknownClassJudgeRule.MATCH_TYPE;\r
-            }\r
-        }\r
-        return WellknownClassJudgeRule.PREFIX_TYPE;\r
     }\r
 \r
-    public void addSection(){\r
-        JPanel inputPanel = new JPanel(new GridLayout(3, 2));\r
-        JTextField text = new JTextField();\r
-        inputPanel.setOpaque(true);\r
-        inputPanel.add(new JLabel(matchTypeColumnIdentifier));\r
-        inputPanel.add(matchType);\r
-        inputPanel.add(new JLabel(checkPartColumnIdentifier));\r
-        inputPanel.add(checkPartType);\r
-        inputPanel.add(new JLabel(patternColumnIdentifier));\r
-        inputPanel.add(text);\r
-\r
-        int value = JOptionPane.showConfirmDialog(\r
-            stigmata, inputPanel, Messages.getString("addwellknown.dialog.title"),\r
-            JOptionPane.OK_CANCEL_OPTION\r
-        );\r
-        if(value == JOptionPane.OK_OPTION){\r
-            int part = getPartType(checkPartType.getSelectedItem());\r
-            int match = getMatchType(matchType.getSelectedItem());\r
-            String pattern = text.getText();\r
-\r
-            model.addRow(new Object[] { new Integer(part), new Integer(match), pattern, });\r
+    public void editRule(int index){\r
+        WellknownClassJudgeRule rule = (WellknownClassJudgeRule)listmodel.getElementAt(index);\r
+        WellknownClassJudgeRule newrule = createOrUpdateRule(rule);\r
+        if(newrule != null){\r
+            listmodel.setElementAt(newrule, index);\r
         }\r
-        adjustColumnPreferredWidths(sectionTable);\r
     }\r
 \r
+\r
     private void initializeData(){\r
-        WellknownClassJudgeRule[] sections = manager.getSections();\r
-        for(WellknownClassJudgeRule section : sections){\r
-            model.addRow(new Object[] { new Integer(section.getMatchPartType()),\r
-                    new Integer(section.getMatchType()), section.getName() });\r
+        for(WellknownClassJudgeRule rule : manager){\r
+            listmodel.addElement(rule);\r
         }\r
-        adjustColumnPreferredWidths(sectionTable);\r
-    }\r
 \r
-    /**\r
-     * copy from Swing Hacks.\r
-     */\r
-    private void adjustColumnPreferredWidths(JTable table){\r
-        TableColumnModel columnModel = table.getColumnModel();\r
-        for(int col = 0; col < table.getColumnCount(); col++){\r
-            int maxWidth = 0;\r
-            for(int row = 0; row < table.getRowCount(); row++){\r
-                TableCellRenderer renderer = table.getCellRenderer(row, col);\r
-                Object value = table.getValueAt(row, col);\r
-                Component component = renderer.getTableCellRendererComponent(table, value, false,\r
-                        false, row, col);\r
-                maxWidth = (int)Math.max(component.getPreferredSize().getWidth(), maxWidth);\r
-            }\r
-            TableColumn column = columnModel.getColumn(col);\r
-            column.setPreferredWidth(maxWidth);\r
+        for(WellknownClassJudgeRule.MatchType type: WellknownClassJudgeRule.MatchType.values()){\r
+            matchTypeMap.put(type.name(), Messages.getString("matchtype." + type.name()));\r
+        }\r
+        for(WellknownClassJudgeRule.MatchPartType type: WellknownClassJudgeRule.MatchPartType.values()){\r
+            partTypeMap.put(type.name(), Messages.getString("matchparttype." + type.name()));\r
         }\r
     }\r
 \r
     private void initLayouts(){\r
         setLayout(new BorderLayout());\r
-\r
         JPanel center = new JPanel(new BorderLayout());\r
-        JScrollPane scroll = new JScrollPane();\r
+        listmodel = new DefaultListModel();\r
+\r
+        list = new JList(listmodel);\r
+        JScrollPane scroll = new JScrollPane(list);\r
 \r
-        scroll.setViewportView(getSectionTable());\r
         center.add(scroll, BorderLayout.CENTER);\r
         center.add(createSouthPane(), BorderLayout.SOUTH);\r
-        center.setBorder(new TitledBorder(Messages.getString("rules.border")));\r
 \r
         add(center, BorderLayout.CENTER);\r
-        add(getCheckPanel(), BorderLayout.SOUTH);\r
+        add(createCheckPane(), BorderLayout.SOUTH);\r
     }\r
 \r
-    private JComponent getCheckPanel(){\r
+    private JComponent createCheckPane(){\r
         final JTextField text = new JTextField();\r
         final JButton checkButton = Utility.createButton("checkwellknown");\r
         final JLabel label = new JLabel(Utility.getIcon("wellknownclasschecker.default.icon"));\r
@@ -261,121 +201,111 @@ public class WellknownClassesSettingsPane extends JPanel{
         JButton addButton = Utility.createButton("addwellknown");\r
         final JButton removeButton = Utility.createButton("removewellknown");\r
         removeButton.setEnabled(false);\r
+        final JButton updateButton = Utility.createButton("updatewellknown");\r
+        updateButton.setEnabled(false);\r
 \r
         southPanel.add(Box.createHorizontalGlue());\r
         southPanel.add(addButton);\r
         southPanel.add(Box.createHorizontalGlue());\r
+        southPanel.add(updateButton);\r
+        southPanel.add(Box.createHorizontalGlue());\r
         southPanel.add(removeButton);\r
         southPanel.add(Box.createHorizontalGlue());\r
 \r
         addButton.addActionListener(new ActionListener(){\r
             public void actionPerformed(ActionEvent e){\r
-                addSection();\r
+                addRule(createOrUpdateRule(null));\r
+            }\r
+        });\r
+        updateButton.addActionListener(new ActionListener(){\r
+            public void actionPerformed(ActionEvent e){\r
+                editRule(list.getSelectedIndex());\r
             }\r
         });\r
 \r
         removeButton.addActionListener(new ActionListener(){\r
             public void actionPerformed(ActionEvent e){\r
-                int[] rows = sectionTable.getSelectedRows();\r
-                for(int i = rows.length - 1; i >= 0; i--){\r
-                    model.removeRow(rows[i]);\r
+                int[] indeces = list.getSelectedIndices();\r
+                for(int i = indeces.length - 1; i >= 0; i--){\r
+                    listmodel.removeElementAt(indeces[i]);\r
                 }\r
-                adjustColumnPreferredWidths(sectionTable);\r
+                list.getSelectionModel().clearSelection();\r
             }\r
         });\r
 \r
-        sectionTable.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
+        list.addMouseListener(new MouseAdapter(){\r
+            @Override\r
+            public void mouseClicked(MouseEvent e){\r
+                if(e.getClickCount() == 2){\r
+                    editRule(list.getSelectedIndex());\r
+                }\r
+            }\r
+        });\r
+\r
+        list.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
             public void valueChanged(ListSelectionEvent arg0){\r
-                removeButton.setEnabled(sectionTable.getSelectedRowCount() > 0);\r
+                int[] indeces = list.getSelectedIndices();\r
+                removeButton.setEnabled(indeces != null && indeces.length > 0);\r
+                updateButton.setEnabled(indeces != null && indeces.length == 1);\r
             }\r
         });\r
 \r
         return southPanel;\r
     }\r
 \r
-    /**\r
-     * This method initializes sectionTable\r
-     * \r
-     * @return javax.swing.JTable\r
-     */\r
-    private JTable getSectionTable(){\r
-        if(sectionTable == null){\r
-            model = new DefaultTableModel(0, 3);\r
-            matchTypeColumnIdentifier = Messages.getString("matchtype.table.column");\r
-            checkPartColumnIdentifier = Messages.getString("checkpart.table.column");\r
-            patternColumnIdentifier = Messages.getString("pattern.table.column");\r
-            model.setColumnIdentifiers(new Object[] { checkPartColumnIdentifier,\r
-                    matchTypeColumnIdentifier, patternColumnIdentifier, });\r
-            sectionTable = new JTable(model);\r
-\r
-            checkPartType = new JComboBox();\r
-            final String[] checkPartItems = Messages.getStringArray("checkpart.items");\r
-            for(int i = 0; i < checkPartItems.length; i++){\r
-                checkPartType.addItem(checkPartItems[i]);\r
+    private WellknownClassJudgeRule createOrUpdateRule(WellknownClassJudgeRule rule){\r
+        JTextField text = new JTextField();\r
+        text.setOpaque(true);\r
+        Utility.decorateJComponent(text, "addwellknown.newrule.pattern");\r
+        JCheckBox excludeCheck = new JCheckBox(Messages.getString("addwellknown.newrule.exclude.label"), false);\r
+        Utility.decorateJComponent(excludeCheck, "addwellknown.newrule.exclude");\r
+        JComboBox matchTypeComboBox = new JComboBox();\r
+        for(Map.Entry<String, String> entry: matchTypeMap.entrySet()){\r
+            matchTypeComboBox.addItem(entry.getValue());\r
+        }\r
+        JComboBox partTypeComboBox = new JComboBox();\r
+        for(Map.Entry<String, String> entry: partTypeMap.entrySet()){\r
+            partTypeComboBox.addItem(entry.getValue());\r
+        }\r
+        if(rule != null){\r
+            text.setText(rule.getPattern());\r
+            excludeCheck.setSelected(rule.isExclude());\r
+            matchTypeComboBox.setSelectedItem(matchTypeMap.get(rule.getMatchType().name()));\r
+            partTypeComboBox.setSelectedItem(partTypeMap.get(rule.getMatchPartType().name()));\r
+        }\r
+\r
+        JPanel panel = new JPanel(new BorderLayout());\r
+        panel.setOpaque(true);\r
+        JPanel centerPanel = new JPanel(new FlowLayout());\r
+\r
+        centerPanel.add(partTypeComboBox);\r
+        centerPanel.add(matchTypeComboBox);\r
+\r
+        panel.add(excludeCheck, BorderLayout.NORTH);\r
+        panel.add(centerPanel, BorderLayout.CENTER);\r
+        panel.add(text, BorderLayout.SOUTH);\r
+\r
+        int value = JOptionPane.showConfirmDialog(\r
+            stigmata, panel, Messages.getString("addwellknown.dialog.title"),\r
+            JOptionPane.OK_CANCEL_OPTION\r
+        );\r
+        if(value == JOptionPane.OK_OPTION){\r
+            String matchType = findType(matchTypeComboBox, matchTypeMap);\r
+            String partType = findType(partTypeComboBox, partTypeMap);\r
+            WellknownClassJudgeRule.MatchType match = null;\r
+            WellknownClassJudgeRule.MatchPartType part = null;\r
+            String pattern = text.getText();\r
+            boolean excludeFlag = excludeCheck.isSelected();\r
+\r
+            if(matchType != null && partType != null){\r
+                match = WellknownClassJudgeRule.MatchType.valueOf(matchType);\r
+                part = WellknownClassJudgeRule.MatchPartType.valueOf(partType);\r
             }\r
-            TableColumn column1 = sectionTable.getColumn(checkPartColumnIdentifier);\r
-            column1.setCellEditor(new DefaultCellEditor(checkPartType));\r
-            column1.setCellRenderer(new DefaultTableCellRenderer(){\r
-                private static final long serialVersionUID = 923743563L;\r
-\r
-                public void setValue(Object value){\r
-                    if(value instanceof Integer){\r
-                        int type = ((Integer)value).intValue();\r
-                        if(type == WellknownClassJudgeRule.FULLY_TYPE){\r
-                            setText(checkPartItems[0]);\r
-                        }\r
-                        else if(type == WellknownClassJudgeRule.PACKAGE_TYPE){\r
-                            setText(checkPartItems[1]);\r
-                        }\r
-                        else if(type == WellknownClassJudgeRule.CLASS_NAME_TYPE){\r
-                            setText(checkPartItems[2]);\r
-                        }\r
-                        else if(type == WellknownClassJudgeRule.EXCLUDE_TYPE){\r
-                            setText(checkPartItems[3]);\r
-                        }\r
-                        else{\r
-                            setText(value.toString());\r
-                        }\r
-                    }\r
-                    else{\r
-                        setText(value.toString());\r
-                    }\r
-                }\r
-            });\r
 \r
-            matchType = new JComboBox();\r
-            final String[] matchTypeStrings = Messages.getStringArray("matchtype.items");\r
-            for(int i = 0; i < matchTypeStrings.length; i++){\r
-                matchType.addItem(matchTypeStrings[i]);\r
+            if(match != null && partType != null && pattern != null && !pattern.equals("")){\r
+                return new WellknownClassJudgeRule(pattern, match, part, excludeFlag);\r
             }\r
-            TableColumn column2 = sectionTable.getColumn(matchTypeColumnIdentifier);\r
-            column2.setCellEditor(new DefaultCellEditor(matchType));\r
-            column2.setCellRenderer(new DefaultTableCellRenderer(){\r
-                private static final long serialVersionUID = 972356346L;\r
-\r
-                public void setValue(Object value){\r
-                    if(value instanceof Integer){\r
-                        int type = ((Integer)value).intValue();\r
-                        if(type == WellknownClassJudgeRule.PREFIX_TYPE){\r
-                            setText(matchTypeStrings[0]);\r
-                        }\r
-                        else if(type == WellknownClassJudgeRule.SUFFIX_TYPE){\r
-                            setText(matchTypeStrings[1]);\r
-                        }\r
-                        else if(type == WellknownClassJudgeRule.MATCH_TYPE){\r
-                            setText(matchTypeStrings[2]);\r
-                        }\r
-                        else{\r
-                            setText(value.toString());\r
-                        }\r
-                    }\r
-                    else{\r
-                        setText(value.toString());\r
-                    }\r
-                }\r
-            });\r
         }\r
-        return sectionTable;\r
+        return null;\r
     }\r
-\r
 }\r
index 943d9f1..31a7592 100644 (file)
@@ -71,24 +71,45 @@ public class ConfigFileExporter{
 \r
     private void exportWellknownClasses(PrintWriter out) throws IOException{\r
         out.println("  <wellknown-classes>");\r
-        for(WellknownClassJudgeRule rule: environment.getWellknownClassManager().getSections()){\r
-            int partType = rule.getMatchPartType();\r
-            int match = rule.getMatchType();\r
-            String value = rule.getName();\r
+        for(WellknownClassJudgeRule rule: environment.getWellknownClassManager()){\r
+            String value = rule.getPattern();\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
+            switch(rule.getMatchPartType()){\r
+            case CLASS_NAME:\r
+                tag = "class-name";\r
+                break;\r
+            case FULLY_NAME:\r
+                tag = "fully-name";\r
+                break;\r
+            case PACKAGE_NAME:\r
+                tag = "package-name";\r
+                break;\r
+            default:\r
+                throw new InternalError("unknown part type: " + rule.getMatchPartType());\r
+            }\r
+            switch(rule.getMatchType()){\r
+            case EXACT:\r
+                matchtag = "match";\r
+                break;\r
+            case NOT_MATCH:\r
+                matchtag = "not-match";\r
+                break;\r
+            case PREFIX:\r
+                matchtag = "prefix";\r
+                break;\r
+            case SUFFIX:\r
+                matchtag = "suffix";\r
+                break;\r
+            default:\r
+                throw new InternalError("unknown match type: " + rule.getMatchType());\r
+            }\r
 \r
-            out.printf("    <%s><%s>%s</%s></%s>%n", tag, matchtag, value, matchtag, tag);\r
+            out.print("    ");\r
+            if(rule.isExclude()) out.print("<exclude>");\r
+            out.printf("<%s><%s>%s</%s></%s>", tag, matchtag, value, matchtag, tag);\r
+            if(rule.isExclude()) out.print("</exclude>");\r
+            out.println();\r
         }\r
         out.println("  </wellknown-classes>");\r
     }\r
index 237588f..f645f80 100644 (file)
@@ -72,8 +72,9 @@ public class ConfigFileImporter{
         private BirthmarkService service;\r
         private ComparisonPairFilterSet filter;\r
         private Part part;\r
-        private int wellknownType = 0;\r
-        private int patternType = 0;\r
+        private boolean exclude;\r
+        private WellknownClassJudgeRule.MatchType matchType;\r
+        private WellknownClassJudgeRule.MatchPartType partType;\r
         private String qname;\r
         private String key;\r
         private String filterType, filterCriterion, attributeName;\r
@@ -93,7 +94,7 @@ public class ConfigFileImporter{
 \r
         @Override\r
         public void startElement(String uri, String localName, String qname,\r
-                Attributes attributes) throws SAXException{\r
+                                 Attributes attributes) throws SAXException{\r
             this.qname = qname;\r
 \r
             if(qname.equals("wellknown-classes")){\r
@@ -125,32 +126,34 @@ public class ConfigFileImporter{
             }\r
             else if(part == Part.WELLKNOWN_CLASSES){\r
                 if(qname.equals("exclude")){\r
-                    wellknownType = WellknownClassJudgeRule.EXCLUDE_TYPE;\r
+                    exclude = true;\r
                 }\r
-                else if(qname.equals("package")){\r
-                    wellknownType = WellknownClassJudgeRule.PACKAGE_TYPE;\r
+                else if(qname.equals("package-name")){\r
+                    partType = WellknownClassJudgeRule.MatchPartType.PACKAGE_NAME;\r
                 }\r
                 else if(qname.equals("class-name")){\r
-                    wellknownType = WellknownClassJudgeRule.CLASS_NAME_TYPE;\r
+                    partType = WellknownClassJudgeRule.MatchPartType.CLASS_NAME;\r
                 }\r
                 else if(qname.equals("fully-name")){\r
-                    wellknownType = WellknownClassJudgeRule.FULLY_TYPE;\r
+                    partType = WellknownClassJudgeRule.MatchPartType.FULLY_NAME;\r
                 }\r
                 else if(qname.equals("suffix")){\r
-                    patternType = WellknownClassJudgeRule.SUFFIX_TYPE;\r
+                    matchType = WellknownClassJudgeRule.MatchType.SUFFIX;\r
                 }\r
                 else if(qname.equals("prefix")){\r
-                    patternType = WellknownClassJudgeRule.PREFIX_TYPE;\r
+                    matchType = WellknownClassJudgeRule.MatchType.PREFIX;\r
                 }\r
                 else if(qname.equals("match")){\r
-                    patternType = WellknownClassJudgeRule.MATCH_TYPE;\r
+                    matchType = WellknownClassJudgeRule.MatchType.EXACT;\r
+                }\r
+                else if(qname.equals("not-match")){\r
+                    matchType = WellknownClassJudgeRule.MatchType.NOT_MATCH;\r
                 }\r
             }\r
         }\r
 \r
         @Override\r
-        public void characters(char[] data, int offset, int length)\r
-                throws SAXException{\r
+        public void characters(char[] data, int offset, int length) throws SAXException{\r
             String value = new String(data, offset, length).trim();\r
 \r
             if(value.length() > 0){\r
@@ -163,10 +166,9 @@ public class ConfigFileImporter{
                     }\r
                 }\r
                 else if(part == Part.WELLKNOWN_CLASSES\r
-                        && (qname.equals("suffix") || qname.equals("prefix") || qname\r
-                                .equals("match"))){\r
-                    manager.add(new WellknownClassJudgeRule(value,\r
-                            wellknownType | patternType));\r
+                        && (qname.equals("suffix") || qname.equals("prefix") || qname.equals("match"))){\r
+                    manager.add(new WellknownClassJudgeRule(value, matchType, partType, exclude));\r
+                    exclude = false;\r
                 }\r
                 else if(part == Part.CLASSPATH && qname.equals("classpath")){\r
                     try{\r
diff --git a/src/main/java/jp/naist/se/stigmata/utils/Names.java b/src/main/java/jp/naist/se/stigmata/utils/Names.java
new file mode 100755 (executable)
index 0000000..ab13c8b
--- /dev/null
@@ -0,0 +1,50 @@
+package jp.naist.se.stigmata.utils;
+
+/*
+ * $Id$
+ */
+
+import java.io.Serializable;
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+class Names implements Serializable{
+    private static final long serialVersionUID = 1911603124143509407L;
+    private final String fullyName;
+    private String className;
+    private String packageName;
+
+    public Names(final String fullyName){
+        this.fullyName = fullyName.replace('/', '.');
+    }
+
+    public String getFullyName(){
+        return fullyName;
+    }
+
+    public String getClassName(){
+        if(className == null){
+            generateClassAndPackageName();
+        }
+        return className;
+    }
+
+    public String getPackageName(){
+        if(packageName == null){
+            generateClassAndPackageName();
+        }
+        return packageName;
+    }
+
+    private void generateClassAndPackageName(){
+        final int index = fullyName.lastIndexOf('.');
+        this.className = fullyName.substring(index + 1);
+        this.packageName = "";
+        if(index > 0){
+            packageName = fullyName.substring(0, index - 1);
+        }
+    }
+}
index 776ccdb..863a279 100644 (file)
@@ -10,71 +10,99 @@ package jp.naist.se.stigmata.utils;
  * @author Haruaki TAMADA
  * @version $Revision$ $Date$
  */
-public class WellknownClassJudgeRule{
-    public static final int PREFIX_TYPE = 1;
-
-    public static final int SUFFIX_TYPE = 2;
-
-    public static final int MATCH_TYPE = 4;
-
-    public static final int FULLY_TYPE = 0x10;
-
-    public static final int PACKAGE_TYPE = 0x20;
-
-    public static final int CLASS_NAME_TYPE = 0x40;
-
-    public static final int EXCLUDE_TYPE = 0x80;
-
-    private int type;
-
-    private String name;
-
-    public WellknownClassJudgeRule(String name, int type){
-        this.name = name;
-        this.type = type;
+public final class WellknownClassJudgeRule{
+    public enum MatchType{
+        PREFIX, SUFFIX, EXACT, NOT_MATCH,
+    };
+    public enum MatchPartType{
+        FULLY_NAME, PACKAGE_NAME, CLASS_NAME,
+    };
+
+    private MatchType matchType;
+    private MatchPartType partType;
+    private boolean excludeFlag;
+
+    private String pattern;
+
+    public WellknownClassJudgeRule(String pattern, MatchType matchType, MatchPartType partType){
+        this(pattern, matchType, partType, false);
     }
 
-    public boolean isExcludeType(){
-        return getMatchPartType() == EXCLUDE_TYPE;
+    public WellknownClassJudgeRule(String pattern, MatchType matchType, MatchPartType partType, boolean excludeFlag){
+        this.pattern = pattern;
+        this.matchType = matchType;
+        this.partType = partType;
+        this.excludeFlag = excludeFlag;
     }
 
-    public boolean isFullyType(){
-        return getMatchPartType() == FULLY_TYPE;
+    public void setExclude(boolean excludeFlag){
+        this.excludeFlag = excludeFlag;
     }
 
-    public boolean isPackageType(){
-        return getMatchPartType() == PACKAGE_TYPE;
+    public boolean isExclude(){
+        return excludeFlag;
     }
 
-    public boolean isClassNameType(){
-        return getMatchPartType() == CLASS_NAME_TYPE;
+    public String getPattern(){
+        return pattern;
     }
 
-    public int getMatchPartType(){
-        return getType() & 0xf0;
+    public MatchType getMatchType(){
+        return matchType;
     }
 
-    public int getMatchType(){
-        return getType() & 0xf;
+    public MatchPartType getMatchPartType(){
+        return partType;
     }
 
-    public int getType(){
-        return type;
+    public int hashCode(){
+        int m = getMatchType().hashCode();
+        int p = getMatchPartType().hashCode();
+        int s = getPattern().hashCode();
+
+        return m + p + s;
     }
 
-    public String getName(){
-        return name;
+    public boolean equals(Object o){
+        if(o instanceof WellknownClassJudgeRule){
+            WellknownClassJudgeRule wcjr = (WellknownClassJudgeRule)o;
+            return getPattern().equals(wcjr.getPattern())
+                && getMatchPartType() == wcjr.getMatchPartType()
+                && getMatchType() == wcjr.getMatchType();
+        }
+        return false;
     }
 
     public String toString(){
+        String string = null;
         switch(getMatchType()){
-        case PREFIX_TYPE:
-            return "<prefix>" + getName() + "</prefix>";
-        case SUFFIX_TYPE:
-            return "<suffix>" + getName() + "</suffix>";
-        case MATCH_TYPE:
-            return "<match>" + getName() + "</match>";
+        case PREFIX:
+            string = String.format("<prefix>%s</prefix>", getPattern());
+            break;
+        case SUFFIX:
+            string = String.format("<suffix>%s</suffix>", getPattern());
+            break;
+        case EXACT:
+            string = String.format("<match>%s</match>", getPattern());
+            break;
+        case NOT_MATCH:
+            string = String.format("<not-match>%s</not-match>", getPattern());
+            break;
+        }
+        switch(getMatchPartType()){
+        case CLASS_NAME:
+            string = String.format("<class-name>%s</class-name>", string);
+            break;
+        case FULLY_NAME:
+            string = String.format("<fully-name>%s</fully-name>", string);
+            break;
+        case PACKAGE_NAME:
+            string = String.format("<package-name>%s</package-name>", string);
+            break;
+        }
+        if(isExclude()){
+            string = "<exclude>" + string + "</exclude>";
         }
-        return null;
+        return string;
     }
 }
index 658bd05..9fe985b 100644 (file)
@@ -10,129 +10,89 @@ import java.util.List;
 
 import org.objectweb.asm.Opcodes;
 
+import jp.naist.se.stigmata.utils.WellknownClassJudgeRule.MatchType;
+import jp.naist.se.stigmata.utils.WellknownClassJudgeRule.MatchPartType;
+
 /**
  * Managing wellknown class checking rule.
  * 
  * @author Haruaki TAMADA
  * @version $Revision$ $Date$
  */
-public class WellknownClassManager{
-    public static final int FULLY_PREFIX_TYPE       = WellknownClassJudgeRule.FULLY_TYPE | WellknownClassJudgeRule.PREFIX_TYPE;
-    public static final int FULLY_SUFFIX_TYPE       = WellknownClassJudgeRule.FULLY_TYPE | WellknownClassJudgeRule.SUFFIX_TYPE;
-    public static final int FULLY_MATCH_TYPE        = WellknownClassJudgeRule.FULLY_TYPE | WellknownClassJudgeRule.MATCH_TYPE;
-    public static final int PACKAGE_PREFIX_TYPE     = WellknownClassJudgeRule.PACKAGE_TYPE | WellknownClassJudgeRule.PREFIX_TYPE;
-    public static final int PACKAGE_SUFFIX_TYPE     = WellknownClassJudgeRule.PACKAGE_TYPE | WellknownClassJudgeRule.SUFFIX_TYPE;
-    public static final int PACKAGE_MATCH_TYPE      = WellknownClassJudgeRule.PACKAGE_TYPE | WellknownClassJudgeRule.MATCH_TYPE;
-    public static final int CLASS_NAME_PREFIX_TYPE  = WellknownClassJudgeRule.CLASS_NAME_TYPE | WellknownClassJudgeRule.PREFIX_TYPE;
-    public static final int CLASS_NAME_SUFFIX_TYPE  = WellknownClassJudgeRule.CLASS_NAME_TYPE | WellknownClassJudgeRule.SUFFIX_TYPE;
-    public static final int CLASS_NAME_MATCH_TYPE   = WellknownClassJudgeRule.CLASS_NAME_TYPE | WellknownClassJudgeRule.MATCH_TYPE;
-
-    private List<WellknownClassJudgeRule> systemClassesList = new ArrayList<WellknownClassJudgeRule>();
-    private List<WellknownClassJudgeRule> excludes = new ArrayList<WellknownClassJudgeRule>();
+public class WellknownClassManager implements Iterable<WellknownClassJudgeRule>{
+    private List<WellknownClassJudgeRule> rules = new ArrayList<WellknownClassJudgeRule>();
 
     public WellknownClassManager(){
     }
 
     public WellknownClassManager(WellknownClassManager manager){
-        systemClassesList = new ArrayList<WellknownClassJudgeRule>(manager.systemClassesList);
-        excludes = new ArrayList<WellknownClassJudgeRule>(manager.excludes);
+        rules = new ArrayList<WellknownClassJudgeRule>(manager.rules);
     }
 
-    public void remove(String value, int type){
-        int index = -1;
-        for(int i = 0; i < systemClassesList.size(); i++){ 
-            WellknownClassJudgeRule section = (WellknownClassJudgeRule)systemClassesList.get(i);
-            if(section.getName().equals(value) && section.getType() == type){
-                index = i;
-                break;
-            }
-        }
-        systemClassesList.remove(index);
+    public void remove(WellknownClassJudgeRule rule){
+        rules.remove(rule);
+    }
+
+    public void remove(String value, MatchType matchType, MatchPartType partType){
+        remove(new WellknownClassJudgeRule(value, matchType, partType));
     }
 
     public void clear(){
-        systemClassesList.clear();
-        excludes.clear();
+        rules.clear();
     }
 
-    public WellknownClassJudgeRule[] getSections(){
-        List<WellknownClassJudgeRule> sections = new ArrayList<WellknownClassJudgeRule>();
-        sections.addAll(excludes);
-        sections.addAll(systemClassesList);
-        return sections.toArray(new WellknownClassJudgeRule[sections.size()]);
+    public synchronized Iterator<WellknownClassJudgeRule> iterator(){
+        List<WellknownClassJudgeRule> copiedRules = new ArrayList<WellknownClassJudgeRule>(rules);
+        return copiedRules.iterator();
     }
 
-    public void add(WellknownClassJudgeRule section){
-        if(section.isExcludeType()){
-            excludes.add(section);
-        }
-        else{
-            systemClassesList.add(section);
-        }
+    public synchronized WellknownClassJudgeRule[] getRules(){
+        return rules.toArray(new WellknownClassJudgeRule[rules.size()]);
     }
 
-    private boolean checkSystemClass(String className){
-        String fully = className.replace('/', '.');
-        int index = className.lastIndexOf('.');
-        String cn = className.substring(index + 1);
-        String pn = "";
-        if(index > 0){
-            pn = fully.substring(0, index - 1);
+    public void add(WellknownClassJudgeRule rule){
+        if(!rules.contains(rule)){
+            rules.add(rule);
         }
+    }
 
-        if(isExcludes(fully)){
+    private boolean checkSystemClass(String className){
+        Names names = new Names(className);
+        if(isMatch(names, true)){
             return false;
         }
-
-        for(Iterator<WellknownClassJudgeRule> i = systemClassesList.iterator(); i.hasNext(); ){
-            WellknownClassJudgeRule section = i.next();
-            String target = fully;
-            if(section.isClassNameType()){
-                target = cn;
-            }
-            else if(section.isPackageType()){
-                target = pn;
-            }
-            switch(section.getMatchType()){
-            case WellknownClassJudgeRule.PREFIX_TYPE:
-                if(target.startsWith(section.getName())){
-                    return true;
-                }
-                break;
-            case WellknownClassJudgeRule.SUFFIX_TYPE:
-                if(target.endsWith(section.getName())){
-                    return true;
-                }
-                break;
-            case WellknownClassJudgeRule.MATCH_TYPE:
-                if(target.equals(section.getName())){
-                    return true;
-                }
-                break;
-            }
-        }
-        return false;
+        return isMatch(names, false);
     }
 
-    private boolean isExcludes(String fully){
-        for(Iterator<WellknownClassJudgeRule> i = excludes.iterator(); i.hasNext(); ){
+    private boolean isMatch(Names names, boolean excludeFlag){
+        for(Iterator<WellknownClassJudgeRule> i = rules.iterator(); i.hasNext(); ){
             WellknownClassJudgeRule s = i.next();
-            switch(s.getMatchType()){
-            case WellknownClassJudgeRule.PREFIX_TYPE:
-                if(fully.startsWith(s.getName())){
-                    return true;
+            if(s.isExclude() == excludeFlag){
+                boolean flag = false;
+                String partName = names.getFullyName();
+                if(s.getMatchPartType() == MatchPartType.CLASS_NAME){
+                    partName = names.getClassName();
+                }
+                else if(s.getMatchPartType() == MatchPartType.PACKAGE_NAME){
+                    partName = names.getPackageName();
                 }
-                break;
-            case WellknownClassJudgeRule.SUFFIX_TYPE:
-                if(fully.endsWith(s.getName())){
-                    return true;
+                switch(s.getMatchType()){
+                case PREFIX:
+                    flag = partName.startsWith(s.getPattern());
+                    break;
+                case SUFFIX:
+                    flag = partName.endsWith(s.getPattern());
+                    break;
+                case EXACT:
+                    flag = partName.equals(s.getPattern());
+                    break;
+                case NOT_MATCH:
+                    flag = !partName.equals(s.getPattern());
+                    break;
                 }
-                break;
-            case WellknownClassJudgeRule.MATCH_TYPE:
-                if(fully.equals(s.getName())){
-                    return true;
+                if(flag){
+                    return flag;
                 }
-                break;
             }
         }
         return false;
@@ -148,12 +108,12 @@ public class WellknownClassManager{
      */
     private boolean checkSystemMethod(int access, String methodName, String signature){
         if(methodName.equals("main")){
-            return signature.equals("([Ljava/lang/String;)V") && 
-                checkAccess(access, Opcodes.ACC_PUBLIC);
+            return signature.equals("([Ljava/lang/String;)V")
+                && checkAccess(access, Opcodes.ACC_PUBLIC);
         }
         else if(methodName.equals("<clinit>")){
-            return signature.equals("()V") &&
-                checkAccess(access, Opcodes.ACC_STATIC);
+            return signature.equals("()V")
+                && checkAccess(access, Opcodes.ACC_STATIC);
         }
         else if(methodName.equals("<init>")){
             return !checkAccess(access, Opcodes.ACC_STATIC);
index 26bc4a0..415a8e1 100755 (executable)
 <!ELEMENT criterion               (#PCDATA)>\r
 <!ELEMENT filter-type             (#PCDATA)>\r
 \r
-<!ELEMENT exclude                 (suffix|prefix|match)>\r
-<!ELEMENT package                 (suffix|prefix|match)>\r
-<!ELEMENT class-name              (suffix|prefix|match)>\r
-<!ELEMENT fully-name              (suffix|prefix|match)>\r
+<!ELEMENT package                 (suffix|prefix|match|not-match)>\r
+<!ELEMENT class-name              (suffix|prefix|match|not-match)>\r
+<!ELEMENT fully-name              (suffix|prefix|match|not-match)>\r
 \r
+<!ELEMENT exclude                 (package|class-name|fully-name)>\r
 <!ELEMENT wellknown-classes       ((exclude|package|class-name|fully-name)*)>\r
 \r
 <!ELEMENT property                (name,value)>\r
index 1737664..1eac6a2 100755 (executable)
       <zeroOrMore>
         <choice>
           <ref name="exclude"/>
-          <ref name="package"/>
-          <ref name="class-name"/>
-          <ref name="fully-name"/>
+          <ref name="judge-rule"/>
         </choice>
       </zeroOrMore>
     </element>
 
   <define name="exclude">
     <element name="exclude">
-      <ref name="match-type"/>
+      <ref name="judge-rule"/>
     </element>
   </define>
+
+  <define name="judge-rule">
+    <choice>
+      <ref name="package-name"/>
+      <ref name="class-name"/>
+      <ref name="fully-name"/>
+    </choice>
+  </define>
   <define name="package">
     <element name="package">
       <ref name="match-type"/>
       <ref name="prefix"/>
       <ref name="match"/>
       <ref name="suffix"/>
+      <ref name="not-match"/>
     </choice>
   </define>
 
       <data type="string"/>
     </element>
   </define>
+  <define name="not-match">
+    <element name="not-match">
+      <data type="string"/>
+    </element>
+  </define>
   <define name="suffix">
     <element name="suffix">
       <data type="string"/>
index d155145..dc50504 100755 (executable)
@@ -44,9 +44,13 @@ 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
+savesetting.menuitem.label=Save settings\r
+savesetting.menuitem.tooltip=Save current settings\r
+savesetting.menuitem.icon=page_save.png\r
+\r
+exportsetting.menuitem.label=Export settings as...\r
 exportsetting.menuitem.tooltip=Export settings of control panel.\r
-exportsetting.menuitem.icon=page_save.png\r
+exportsetting.menuitem.icon=page_go.png\r
 \r
 export.extensions=xml\r
 export.description=Store stigmata settings to {0} file\r
@@ -110,10 +114,28 @@ unsupportedfiletype.dialog.message=Following files are not supported.
 # WellknownClassesSettingsPane\r
 ################################################\r
 addwellknown.button.label=Add...\r
-addwellknown.button.tooltip=Add well-known class check rule\r
+addwellknown.button.tooltip=Add a new well-known class check rule\r
 addwellknown.button.icon=cog_add.png\r
 addwellknown.dialog.title=New Wellknown class rule\r
 \r
+addwellknown.newrule.pattern.tooltip=A pattern of new rule\r
+addwellknown.newrule.pattern.border=New rule pattern\r
+addwellknown.newrule.exclude.label=Exclude rule\r
+addwellknown.newrule.exclude.tooltip=If this check box is checked, specified rule is exclude pattern\r
+\r
+updatewellknown.button.label=Update...\r
+updatewellknown.button.tooltip=Update the selected well-known class check rule\r
+updatewellknown.button.icon=cog_edit.png\r
+\r
+matchtype.PREFIX=starts with\r
+matchtype.SUFFIX=ends with\r
+matchtype.EXACT=exact matches with\r
+matchtype.NOT_MATCH=not matches with\r
+\r
+matchparttype.FULLY_NAME=Fully class name\r
+matchparttype.CLASS_NAME=Class name (exclude package name)\r
+matchparttype.PACKAGE_NAME=Package name (exclude class name)\r
+\r
 removewellknown.button.label=Remove...\r
 removewellknown.button.tooltip=Remove selected check rule\r
 removewellknown.button.icon=cog_delete.png\r
index 0b75d66..98ec1ec 100755 (executable)
@@ -34,8 +34,11 @@ fileMenu.menu.label=
 newframe.menuitem.label=\90V\8bK\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
+savesetting.menuitem.label=\90Ý\92è\82ð\95Û\91\r
+savesetting.menuitem.tooltip=\8c»\8dÝ\82Ì\90Ý\92è\82ð\95Û\91\82µ\82Ü\82·\r
+\r
+exportsetting.menuitem.label=\90Ý\92è\82ð\95Ê\96¼\82Å\95Û\91¶...\r
+exportsetting.menuitem.tooltip=\90Ý\92è\82ðXML\83t\83@\83C\83\8b\82É\95Û\91\82µ\82Ü\82·\r
 export.description=\90Ý\92è\83t\83@\83C\83\8b ({0})\r
 \r
 closetab.menuitem.label=\83^\83u\82ð\95Â\82\82é\r
@@ -90,6 +93,23 @@ addwellknown.button.label=
 addwellknown.button.tooltip=\8aù\92m\82Ì\83N\83\89\83X\94»\92è\83\8b\81[\83\8b\82ð\92Ç\89Á\82µ\82Ü\82·\r
 addwellknown.dialog.title=\90V\8bK: \8aù\92m\82Ì\83N\83\89\83X\94»\92è\83\8b\81[\83\8b\r
 \r
+addwellknown.newrule.pattern.tooltip=\90V\8bK\83\8b\81[\83\8b\82Ì\94»\92è\95\8e\9a\97ñ\83p\83^\81[\83\93\r
+addwellknown.newrule.pattern.border=\83p\83^\81[\83\93\r
+addwellknown.newrule.exclude.label=\8f\9c\8aO\83\8b\81[\83\8b\r
+addwellknown.newrule.exclude.tooltip=\83`\83F\83b\83N\82ª\93ü\82ê\82ç\82ê\82Ä\82¢\82é\8fê\8d\87\81C\88È\89º\82Å\8ew\92è\82·\82é\83\8b\81[\83\8b\82Í\8aù\92m\82Ì\83N\83\89\83X\94»\92è\83\8b\81[\83\8b\82©\82ç\8f\9c\8aO\82³\82ê\82é\83\8b\81[\83\8b\82Æ\82µ\82Ä\88µ\82í\82ê\82Ü\82·\r
+\r
+updatewellknown.button.label=\8dX\90V...\r
+updatewellknown.button.tooltip=\91I\91ð\92\86\82Ì\83\8b\81[\83\8b\82ð\8dX\90V\82µ\82Ü\82·\r
+\r
+matchparttype.FULLY_NAME=\83N\83\89\83X\82Ì\8a®\91S\8fC\8fü\96¼\82ª\r
+matchparttype.CLASS_NAME=\83p\83b\83P\81[\83W\96¼\82ð\8f\9c\82­\83N\83\89\83X\96¼\82ª\r
+matchparttype.PACKAGE_NAME=\83p\83b\83P\81[\83W\96¼\82ª\r
+\r
+matchtype.PREFIX=\8e\9f\82Ì\83p\83^\81[\83\93\82Å\8en\82Ü\82Á\82Ä\82¢\82é\r
+matchtype.SUFFIX=\8e\9f\82Ì\83p\83^\81[\83\93\82Å\8fI\82í\82Á\82Ä\82¢\82é\r
+matchtype.EXACT=\8e\9f\82Ì\83p\83^\81[\83\93\82Æ\8a®\91S\82É\88ê\92v\82µ\82Ä\82¢\82é\r
+matchtype.NOT_MATCH=\8e\9f\82Ì\83p\83^\81[\83\93\82Æ\88ê\92v\82µ\82Ä\82¢\82È\82¢\r
+\r
 removewellknown.button.label=\8dí\8f\9c...\r
 removewellknown.button.tooltip=\8ew\92è\82³\82ê\82½\8aù\92m\82Ì\83N\83\89\83X\94»\92è\83\8b\81[\83\8b\82ð\8dí\8f\9c\82µ\82Ü\82·\r
 \r
index 82f42d7..edc03e9 100755 (executable)
@@ -146,30 +146,29 @@ $Id$
       Those names are excluded from wellknown classes, even if
       following parts define the name is contain wellknown classes.
       ¤³¤ÎÃæ¤Ë´Þ¤Þ¤ì¤ë¤â¤Î¤Ï¾¤Ç¤¤¤¯¤é wellknown ¤ÈÀßÄꤵ¤ì¤Æ¤¤¤Æ¤â̵»ë¤¹¤ë¡¥
-      »ØÄêÊýË¡¤Ï fully-names ¤ÈƱ¤¸¡¥
     -->
-    <exclude><suffix>Exception</suffix></exclude>
-    <exclude><suffix>Error</suffix></exclude>
-    <exclude><match>java.lang.Throwable</match></exclude>
-    <exclude><match>java.lang.ThreadDeath</match></exclude>
+    <exclude><fully-name><suffix>Exception</suffix></fully-name></exclude>
+    <exclude><fully-name><suffix>Error</suffix></fully-name></exclude>
+    <exclude><fully-name><match>java.lang.Throwable</match></fully-name></exclude>
+    <exclude><fully-name><match>java.lang.ThreadDeath</match></fully-name></exclude>
 
     <!-- Package names includes 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>
+    <package-name><prefix>java</prefix></package-name>
+    <package-name><prefix>javax</prefix></package-name>
+    <package-name><prefix>org.omg</prefix></package-name>
+    <package-name><prefix>org.xml</prefix></package-name>
+    <package-name><prefix>org.w3c</prefix></package-name>
+    <package-name><prefix>org.ietf</prefix></package-name>
 
     <!-- ¤½¤Î¾¡¤¤è¤¯»È¤ï¤ì¤Æ¤¤¤½¤¦¤Ê¥Ñ¥Ã¥±¡¼¥¸ -->
-    <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>
+    <package-name><prefix>org.gnu</prefix></package-name>
+    <package-name><prefix>com.apple</prefix></package-name>
+    <package-name><prefix>pnuts</prefix></package-name>
+    <package-name><prefix>org.eclipse</prefix></package-name>
+    <package-name><prefix>com.sun</prefix></package-name>
+    <package-name><prefix>sun</prefix></package-name>
+    <package-name><prefix>junit</prefix></package-name>
+    <package-name><prefix>org.apache</prefix></package-name>
 
     <class-name><suffix>Test</suffix></class-name>
 <!--