Author: dblevins
Date: Mon Jan 23 11:11:19 2012
New Revision: 1234744

URL: http://svn.apache.org/viewvc?rev=1234744&view=rev
Log:
More tooling

Added:
    
openejb/trunk/sandbox/release-tools/src/main/java/org/apache/openejb/tools/release/cmd/CloseJiras.java
      - copied, changed from r1234270, 
openejb/trunk/sandbox/release-tools/src/main/java/org/apache/openejb/tools/release/cmd/ReviewCommits.java
Modified:
    openejb/trunk/sandbox/release-tools/pom.xml
    
openejb/trunk/sandbox/release-tools/src/main/java/org/apache/openejb/tools/release/Commit.java
    
openejb/trunk/sandbox/release-tools/src/main/java/org/apache/openejb/tools/release/Release.java
    
openejb/trunk/sandbox/release-tools/src/main/java/org/apache/openejb/tools/release/cmd/ReviewCommits.java
    
openejb/trunk/sandbox/release-tools/src/main/java/org/apache/openejb/tools/release/util/ObjectList.java

Modified: openejb/trunk/sandbox/release-tools/pom.xml
URL: 
http://svn.apache.org/viewvc/openejb/trunk/sandbox/release-tools/pom.xml?rev=1234744&r1=1234743&r2=1234744&view=diff
==============================================================================
--- openejb/trunk/sandbox/release-tools/pom.xml (original)
+++ openejb/trunk/sandbox/release-tools/pom.xml Mon Jan 23 11:11:19 2012
@@ -107,7 +107,7 @@
     <dependency>
       <groupId>org.codehaus.swizzle</groupId>
       <artifactId>swizzle-jirareport</artifactId>
-      <version>1.6.1</version>
+      <version>1.6.2-SNAPSHOT</version>
     </dependency>
 
     <dependency>

Modified: 
openejb/trunk/sandbox/release-tools/src/main/java/org/apache/openejb/tools/release/Commit.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/sandbox/release-tools/src/main/java/org/apache/openejb/tools/release/Commit.java?rev=1234744&r1=1234743&r2=1234744&view=diff
==============================================================================
--- 
openejb/trunk/sandbox/release-tools/src/main/java/org/apache/openejb/tools/release/Commit.java
 (original)
+++ 
openejb/trunk/sandbox/release-tools/src/main/java/org/apache/openejb/tools/release/Commit.java
 Mon Jan 23 11:11:19 2012
@@ -94,6 +94,23 @@ public class Commit {
                 '}';
     }
 
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        Commit commit = (Commit) o;
+
+        if (revision != commit.revision) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        return (int) (revision ^ (revision >>> 32));
+    }
+
     @XmlAccessorType(XmlAccessType.FIELD)
     public static class Path {
 

Modified: 
openejb/trunk/sandbox/release-tools/src/main/java/org/apache/openejb/tools/release/Release.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/sandbox/release-tools/src/main/java/org/apache/openejb/tools/release/Release.java?rev=1234744&r1=1234743&r2=1234744&view=diff
==============================================================================
--- 
openejb/trunk/sandbox/release-tools/src/main/java/org/apache/openejb/tools/release/Release.java
 (original)
+++ 
openejb/trunk/sandbox/release-tools/src/main/java/org/apache/openejb/tools/release/Release.java
 Mon Jan 23 11:11:19 2012
@@ -43,6 +43,7 @@ public class Release {
     public static String to = "[email protected]";
     public static String user = System.getProperty("user.name");
     public static String build = "075";
+    public static String lastReleaseDate = "2011-10-05";
 
     static {
         final File public_html = Files.file(System.getProperty("user.home"), 
"public_html");

Copied: 
openejb/trunk/sandbox/release-tools/src/main/java/org/apache/openejb/tools/release/cmd/CloseJiras.java
 (from r1234270, 
openejb/trunk/sandbox/release-tools/src/main/java/org/apache/openejb/tools/release/cmd/ReviewCommits.java)
URL: 
http://svn.apache.org/viewvc/openejb/trunk/sandbox/release-tools/src/main/java/org/apache/openejb/tools/release/cmd/CloseJiras.java?p2=openejb/trunk/sandbox/release-tools/src/main/java/org/apache/openejb/tools/release/cmd/CloseJiras.java&p1=openejb/trunk/sandbox/release-tools/src/main/java/org/apache/openejb/tools/release/cmd/ReviewCommits.java&r1=1234270&r2=1234744&rev=1234744&view=diff
==============================================================================
--- 
openejb/trunk/sandbox/release-tools/src/main/java/org/apache/openejb/tools/release/cmd/ReviewCommits.java
 (original)
+++ 
openejb/trunk/sandbox/release-tools/src/main/java/org/apache/openejb/tools/release/cmd/CloseJiras.java
 Mon Jan 23 11:11:19 2012
@@ -16,314 +16,212 @@
  */
 package org.apache.openejb.tools.release.cmd;
 
-import com.sun.org.apache.regexp.internal.RE;
 import org.apache.openejb.tools.release.Command;
 import org.apache.openejb.tools.release.Commit;
 import org.apache.openejb.tools.release.Release;
 import org.apache.openejb.tools.release.util.Exec;
-import org.apache.openejb.tools.release.util.Join;
 import org.apache.openejb.tools.release.util.ObjectList;
 import org.apache.openejb.tools.release.util.Options;
 import org.codehaus.swizzle.jira.Issue;
-import org.codehaus.swizzle.jira.IssueType;
 import org.codehaus.swizzle.jira.Jira;
-import org.codehaus.swizzle.jira.MapObject;
-import org.codehaus.swizzle.jira.MapObjectList;
 import org.codehaus.swizzle.jira.Version;
 
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.Unmarshaller;
 import java.io.BufferedReader;
-import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.List;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.sql.SQLOutput;
+import java.text.SimpleDateFormat;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.LinkedHashSet;
 import java.util.Map;
+import java.util.Set;
+import java.util.Vector;
 
 /**
  * @version $Rev$ $Date$
  */
 @Command
-public class ReviewCommits {
+public class CloseJiras {
 
     private static BufferedReader in = new BufferedReader(new 
InputStreamReader(System.in));
+    private static SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd");
 
     public static void main(String... args) throws Exception {
 
-        final String branch = Release.branches + Release.openejbVersion;
         final String tag = Release.tags + Release.openejbVersion;
 
-        final InputStream in = Exec.read("svn", "log", "--verbose", "--xml", 
"-rHEAD:{2011-10-05}", tag);
+        final InputStream in = Exec.read("svn", "log", "--verbose", "--xml", 
"-rHEAD:{" + Release.lastReleaseDate + "}", tag);
 
         final JAXBContext context = JAXBContext.newInstance(Commit.Log.class);
         final Unmarshaller unmarshaller = context.createUnmarshaller();
 
         final Commit.Log log = (Commit.Log) unmarshaller.unmarshal(in);
 
-        ObjectList<Commit> commits = log.getCommits();
-//        commits = commits.difference(commits.matches("message", 
".*(OPENEJB|TOMEE)-[0-9]+.*"));
+        final State state = new State();
 
-//        commits = commits.matches("message", ".*OPENEJB.*");
-
-        commits = commits.ascending("revision");
-        commits = commits.subtract(commits.contains("message", "OPENEJB-"));
-        commits = commits.subtract(commits.contains("message", "TOMEE-"));
-
-        for (Commit commit : commits) {
-            handle(commit);
-        }
-
-//        for (Commit commit : commits) {
-//            System.out.println(commit);
-//        }
-//
-        System.out.println("commits.size() = " + commits.size());
-
-    }
-
-    public static boolean handle(Commit commit) {
-        for (Commit.Path path : commit.getPaths()) {
-            System.out.printf(" %s %s", path.getAction(), path.getPath());
-            System.out.println();
-        }
-        System.out.println(commit);
-
-        System.out.printf("[%s]: ", Join.join(", ", Key.values()));
-
-        final String line = readLine().toUpperCase();
-        final Key key = Key.valueOf(line);
-        if (!key.pressed(commit)) handle(commit);
-
-
-        return true;
-    }
-
-    private static String prompt(String s) {
-        System.out.printf("%s : ", s);
-        final String value = readLine();
-        return (value == null || value.length() == 0) ? s : value;
-    }
-
-    /**
-     * Sort of a mini clipboard of recently seen issues
-     */
-    private static List<Issue> last = new ArrayList<Issue>();
-
-    private static void addIssue(Issue issue) {
-        last.remove(issue);
-        last.add(0, issue);
-        while (last.size() > 9) {
-            last.remove(last.size() - 1);
+        { // Collect the work that made it into the release
+            ObjectList<Commit> commits = log.getCommits();
+            commits = commits.ascending("revision");
+
+            mine:
+            for (Commit commit : commits) {
+                final String[] tokens = 
commit.getMessage().toUpperCase().split("[^A-Z0-9-]+");
+                for (String token : tokens) {
+                    if (token.matches("(OPENEJB|TOMEE)-[0-9]+")) {
+                        try {
+                            state.get(token).add(commit);
+//                            break mine;
+                        } catch (Exception e) {
+                            System.err.printf("Bad issue %s\n", token);
+                        }
+                    }
+                }
+            }
         }
-    }
 
-    private static Jira jira;
-    private static List<IssueType> issueTypes = new ArrayList<IssueType>();
+        // Close those jiras with links to the commits
+        for (IssueCommits ic : state.map.values()) {
+            final Issue issue = ic.getIssue();
+
+            final StringBuilder comment = new StringBuilder();
+            for (Commit commit : ic.getCommits()) {
+                comment.append(String.format("%s - 
http://svn.apache.org/viewvc?view=revision&revision=%s - %s\n", 
date.format(commit.getDate()), commit.getRevision(), commit.getAuthor()));
+            }
 
-    public static Jira getJira() {
-        if (jira == null) {
             try {
-                final Options options = new Options(System.getProperties());
-                Jira jira = new 
Jira("http://issues.apache.org/jira/rpc/xmlrpc";);
-                jira.login(options.get("username", ""), 
options.get("password", ""));
-                ReviewCommits.jira = jira;
-
-                issueTypes.add(jira.getIssueType("Improvement"));
-                issueTypes.add(jira.getIssueType("New Feature"));
-                issueTypes.add(jira.getIssueType("Bug"));
-                issueTypes.add(jira.getIssueType("Task"));
-                issueTypes.add(jira.getIssueType("Dependency Upgrade"));
-
+                System.out.println("\n\n" + comment);
+                System.out.printf("Adding comment to %s\n", issue.getKey());
+                state.jira.addComment(issue.getKey(), comment.toString());
             } catch (Exception e) {
-                throw new IllegalStateException(e);
+                synchronized (System.out) {
+                    e.printStackTrace();
+                }
             }
         }
-        return jira;
-    }
-
-    public static enum Key {
-        V(new Action() {
-            @Override
-            public boolean perform(Commit commit) {
-                Exec.exec("open", 
String.format("http://svn.apache.org/viewvc?view=revision&revision=%s";, 
commit.getRevision()));
-                return false;
-            }
-        }),
-
-        // ASSOCIATE with a JIRA issue
-        A(new Action() {
-            @Override
-            public boolean perform(Commit commit) {
-                int i = 0;
 
-                final List<Issue> issues = new ArrayList<Issue>(last);
+        // Close those jiras with links to the commits
+        if (false) for (IssueCommits ic : state.map.values()) {
+            final Issue issue = ic.getIssue();
 
-                for (Issue issue : issues) {
-                    System.out.printf("%s) %s: %s\n", i++, issue.getKey(), 
issue.getSummary());
-                }
-
-                final String[] split = prompt("issues?").split(" +");
-                for (String key : split) {
-
-                    final Issue issue = resolve(key, issues);
-                    if (issue == null) {
-                        System.out.println("No such issue " + key);
-                        continue;
-                    }
-
-                    addIssue(issue);
-                    System.out.printf("Associating %s", issue.getKey());
-                    System.out.println();
-                    updateCommitMessage(commit, issue);
-                }
-
-                return false;
+            final Version version;
+            if (issue.getKey().startsWith("TOMEE-")) {
+                version = state.jira.getVersion("TOMEE", 
ReviewCommits.v(Release.tomeeVersion));
+            } else if (issue.getKey().startsWith("OPENEJB-")) {
+                version = state.jira.getVersion("OPENEJB", 
ReviewCommits.v(Release.openejbVersion));
+            } else {
+                continue;
             }
 
-        }),
-
-        // NEXT commit
-        N(new Action() {
-            @Override
-            public boolean perform(Commit commit) {
-                return true;
+            final Set<String> ids = new HashSet<String>();
+            for (Version v : issue.getFixVersions()) {
+                ids.add(v.getId() + "");
             }
-        }),
 
-        // CREATE jira
-        C(new Action() {
-
-            @Override
-            public boolean perform(Commit commit) {
+            final int versions = ids.size();
+            ids.add(version.getId() + "");
 
+            if (versions != ids.size()) {
                 try {
-                    final Jira jira = getJira();
+                    System.out.printf("Adding version to %s\n", 
issue.getKey());
 
-                    final String summary = prompt("summary");
-                    final String project = prompt("TOMEE");
-                    final String version = 
prompt("TOMEE".equals(project)?v(Release.tomeeVersion): 
v(Release.openejbVersion));
-                    final String type = prompt("Improvement").toLowerCase();
-
-                    Issue issue = new Issue();
-
-                    if (project.equalsIgnoreCase("o")) {
-                        issue.setProject(jira.getProject("OPENEJB"));
-                    } else {
-                        issue.setProject(jira.getProject(project));
-                    }
-                    issue.setSummary(summary);
-
-                    // Set default to Improvement
-                    issue.setType(issueTypes.get(0));
-                    for (IssueType issueType : issueTypes) {
-                        if 
(issueType.getName().toLowerCase().startsWith(type)) {
-                            issue.setType(issueType);
-                            break;
-                        }
-                    }
-
-                    final Version v = jira.getVersion(project, version);
-                    if (v != null) {
-
-                    }
-                    issue.getFixVersions().add(v);
-
-                    System.out.printf("%s %s\n%s %s\n", issue.getProject(), 
issue.getSummary(), issue.getType(), Join.join(",", issue.getFixVersions()));
-                    final String prompt = prompt("create?");
-
-                    if (prompt.equals("create?") || prompt.equals("yes")) {
-                        try {
-                            final Issue jiraIssue = createIssue(jira, issue);
-                            addIssue(jiraIssue);
-
-                            System.out.println(jiraIssue.getKey());
-
-                            updateCommitMessage(commit, jiraIssue);
-                        } catch (Exception e) {
-                            System.out.println("Could not create jira issue");
-                            e.printStackTrace();
-                        }
-                    }
+                    final Hashtable map = new Hashtable();
+                    map.put("fixVersions", new Vector(ids));
+                    call(state.jira, "updateIssue", issue.getKey(), map);
                 } catch (Exception e) {
                     e.printStackTrace();
                 }
-
-                return false;
             }
+        }
+    }
 
-            private String v(String version) {
-                return version.replaceFirst("^[a-z]+-", "");
-            }
-        });
-
-        private static Issue createIssue(Jira jira, Issue issue) throws 
Exception {
-            toMap(issue).remove("votes");
-
-            for (Version version : issue.getFixVersions()) {
-                toMap(version).remove("archived");
-                toMap(version).remove("sequence");
-                toMap(version).remove("released");
-                toMap(version).remove("releaseDate");
-            }
+    public static void updateIssue(Jira jira, Issue i) throws Exception {
+        Hashtable issue = new Hashtable();
+        Vector v = new Vector();
 
-            return jira.createIssue(issue);
+        v = new Vector();
+        for (Version version : i.getFixVersions()) {
+            v.add(version.getId() + ""); // version's ID
         }
+        issue.put("fixVersions", v);
 
-        private static Map toMap(MapObject issue) throws NoSuchFieldException, 
IllegalAccessException {
-            final Field fields = MapObject.class.getDeclaredField("fields");
-            fields.setAccessible(true);
-            return (Map) fields.get(issue);
-        }
+        call(jira, "updateIssue", i.getKey(), issue);
+    }
 
-        private static Issue resolve(String key, List<Issue> issues) {
-            try {
-                return issues.get(new Integer(key));
-            } catch (Exception e) {
-            }
+    private static void call(Jira jira, String command, Object... args) throws 
NoSuchMethodException, IllegalAccessException, InvocationTargetException {
+        final Method method = Jira.class.getDeclaredMethod("call", 
String.class, Object[].class);
+        method.setAccessible(true);
+        method.invoke(jira, command, args);
+    }
 
+    public static class State {
 
-            try {
-                return getJira().getIssue(key);
-            } catch (Exception e) {
-            }
+        private Jira jira;
+        private Map<String, IssueCommits> map = new HashMap<String, 
IssueCommits>();
 
-            return null;
+        public State() throws Exception {
+            final Options options = new Options(System.getProperties());
+            jira = new Jira("http://issues.apache.org/jira/rpc/xmlrpc";);
+            jira.login(options.get("username", ""), options.get("password", 
""));
         }
 
-        private static void updateCommitMessage(Commit commit, Issue issue) {
-            final String oldMessage = commit.getMessage();
+        public IssueCommits get(String key) {
+            final IssueCommits commits = map.get(key);
+            if (commits != null) return commits;
 
-            if (oldMessage.contains(issue.getKey())) return;
+            final IssueCommits issueCommits = new 
IssueCommits(jira.getIssue(key));
+            map.put(issueCommits.getKey(), issueCommits);
 
-            final String newMessage = String.format("%s\n%s: %s", oldMessage, 
issue.getKey(), issue.getSummary());
+            return issueCommits;
+        }
+    }
+
+    public static class IssueCommits {
+        private final String key;
+        private final Issue issue;
+        Set<Commit> commits = new LinkedHashSet<Commit>();
 
-            Exec.exec("svn", "propset", "-r", commit.getRevision() + "", 
"--revprop", "svn:log", newMessage, "https://svn.apache.org/repos/asf";);
+        public IssueCommits(Issue issue) {
+            this.key = issue.getKey();
+            this.issue = issue;
         }
 
+        public Issue getIssue() {
+            return issue;
+        }
 
-        private final Action action;
+        public String getKey() {
+            return key;
+        }
 
-        Key(Action action) {
-            this.action = action;
+        public Set<Commit> getCommits() {
+            return commits;
         }
 
-        public boolean pressed(Commit commit) {
-            return action.perform(commit);
+        public void add(Commit commit) {
+            this.commits.add(commit);
         }
-    }
 
-    public static interface Action {
+        @Override
+        public boolean equals(Object o) {
+            if (this == o) return true;
+            if (o == null || getClass() != o.getClass()) return false;
 
-        boolean perform(Commit commit);
-    }
+            IssueCommits that = (IssueCommits) o;
+
+            if (!key.equals(that.key)) return false;
+
+            return true;
+        }
 
-    private static String readLine() {
-        try {
-            return in.readLine();
-        } catch (IOException e) {
-            throw new IllegalStateException(e);
+        @Override
+        public int hashCode() {
+            return key.hashCode();
         }
     }
 }

Modified: 
openejb/trunk/sandbox/release-tools/src/main/java/org/apache/openejb/tools/release/cmd/ReviewCommits.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/sandbox/release-tools/src/main/java/org/apache/openejb/tools/release/cmd/ReviewCommits.java?rev=1234744&r1=1234743&r2=1234744&view=diff
==============================================================================
--- 
openejb/trunk/sandbox/release-tools/src/main/java/org/apache/openejb/tools/release/cmd/ReviewCommits.java
 (original)
+++ 
openejb/trunk/sandbox/release-tools/src/main/java/org/apache/openejb/tools/release/cmd/ReviewCommits.java
 Mon Jan 23 11:11:19 2012
@@ -38,7 +38,10 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.lang.reflect.Field;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -52,10 +55,9 @@ public class ReviewCommits {
 
     public static void main(String... args) throws Exception {
 
-        final String branch = Release.branches + Release.openejbVersion;
         final String tag = Release.tags + Release.openejbVersion;
 
-        final InputStream in = Exec.read("svn", "log", "--verbose", "--xml", 
"-rHEAD:{2011-10-05}", tag);
+        final InputStream in = Exec.read("svn", "log", "--verbose", "--xml", 
"-rHEAD:{" + Release.lastReleaseDate + "}", tag);
 
         final JAXBContext context = JAXBContext.newInstance(Commit.Log.class);
         final Unmarshaller unmarshaller = context.createUnmarshaller();
@@ -63,14 +65,29 @@ public class ReviewCommits {
         final Commit.Log log = (Commit.Log) unmarshaller.unmarshal(in);
 
         ObjectList<Commit> commits = log.getCommits();
-//        commits = commits.difference(commits.matches("message", 
".*(OPENEJB|TOMEE)-[0-9]+.*"));
+        commits = commits.ascending("revision");
 
-//        commits = commits.matches("message", ".*OPENEJB.*");
+        for (Commit commit : commits) {
+            final String[] tokens = commit.getMessage().split("[^A-Z0-9-]+");
+            for (String token : tokens) {
+                if (token.matches("(OPENEJB|TOMEE)-[0-9]+")){
+                    try {
+                        addIssue(getJira().getIssue(token));
+                    } catch (Exception e) {
+                        System.out.printf("Invalid JIRA '%s'\n", token);
+                    }
+                }
+            }
+        }
 
-        commits = commits.ascending("revision");
+        final Date reviewed = new 
SimpleDateFormat("yyyy-MM-dd").parse("2012-01-05");
+        commits = commits.greater("date", reviewed);
         commits = commits.subtract(commits.contains("message", "OPENEJB-"));
         commits = commits.subtract(commits.contains("message", "TOMEE-"));
 
+        System.out.printf("Are you ready to review %s commits?", 
commits.size());
+        System.out.println();
+
         for (Commit commit : commits) {
             handle(commit);
         }
@@ -79,7 +96,6 @@ public class ReviewCommits {
 //            System.out.println(commit);
 //        }
 //
-        System.out.println("commits.size() = " + commits.size());
 
     }
 
@@ -93,9 +109,13 @@ public class ReviewCommits {
         System.out.printf("[%s]: ", Join.join(", ", Key.values()));
 
         final String line = readLine().toUpperCase();
-        final Key key = Key.valueOf(line);
-        if (!key.pressed(commit)) handle(commit);
 
+        try {
+            final Key key = Key.valueOf(line);
+            if (!key.pressed(commit)) handle(commit);
+        } catch (IllegalArgumentException e) {
+            return handle(commit);
+        }
 
         return true;
     }
@@ -114,7 +134,7 @@ public class ReviewCommits {
     private static void addIssue(Issue issue) {
         last.remove(issue);
         last.add(0, issue);
-        while (last.size() > 9) {
+        while (last.size() > 20) {
             last.remove(last.size() - 1);
         }
     }
@@ -134,7 +154,7 @@ public class ReviewCommits {
                 issueTypes.add(jira.getIssueType("New Feature"));
                 issueTypes.add(jira.getIssueType("Bug"));
                 issueTypes.add(jira.getIssueType("Task"));
-                issueTypes.add(jira.getIssueType("Dependency Upgrade"));
+                issueTypes.add(jira.getIssueType("Dependency upgrade"));
 
             } catch (Exception e) {
                 throw new IllegalStateException(e);
@@ -224,10 +244,7 @@ public class ReviewCommits {
                         }
                     }
 
-                    final Version v = jira.getVersion(project, version);
-                    if (v != null) {
-
-                    }
+                    final Version v = jira.getVersion(issue.getProject(), 
version);
                     issue.getFixVersions().add(v);
 
                     System.out.printf("%s %s\n%s %s\n", issue.getProject(), 
issue.getSummary(), issue.getType(), Join.join(",", issue.getFixVersions()));
@@ -253,29 +270,14 @@ public class ReviewCommits {
                 return false;
             }
 
-            private String v(String version) {
-                return version.replaceFirst("^[a-z]+-", "");
-            }
         });
 
         private static Issue createIssue(Jira jira, Issue issue) throws 
Exception {
-            toMap(issue).remove("votes");
-
-            for (Version version : issue.getFixVersions()) {
-                toMap(version).remove("archived");
-                toMap(version).remove("sequence");
-                toMap(version).remove("released");
-                toMap(version).remove("releaseDate");
-            }
+            trimIssue(issue);
 
             return jira.createIssue(issue);
         }
 
-        private static Map toMap(MapObject issue) throws NoSuchFieldException, 
IllegalAccessException {
-            final Field fields = MapObject.class.getDeclaredField("fields");
-            fields.setAccessible(true);
-            return (Map) fields.get(issue);
-        }
 
         private static Issue resolve(String key, List<Issue> issues) {
             try {
@@ -314,6 +316,29 @@ public class ReviewCommits {
         }
     }
 
+    public static String v(String version) {
+        return version.replaceFirst("^[a-z]+-", "");
+    }
+
+    public static Issue trimIssue(Issue issue) throws NoSuchFieldException, 
IllegalAccessException {
+        toMap(issue).remove("votes");
+
+        for (Version version : issue.getFixVersions()) {
+            toMap(version).remove("archived");
+            toMap(version).remove("sequence");
+            toMap(version).remove("released");
+            toMap(version).remove("releaseDate");
+        }
+
+        return issue;
+    }
+
+    public static Map toMap(MapObject issue) throws NoSuchFieldException, 
IllegalAccessException {
+        final Field fields = MapObject.class.getDeclaredField("fields");
+        fields.setAccessible(true);
+        return (Map) fields.get(issue);
+    }
+
     public static interface Action {
 
         boolean perform(Commit commit);

Modified: 
openejb/trunk/sandbox/release-tools/src/main/java/org/apache/openejb/tools/release/util/ObjectList.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/sandbox/release-tools/src/main/java/org/apache/openejb/tools/release/util/ObjectList.java?rev=1234744&r1=1234743&r2=1234744&view=diff
==============================================================================
--- 
openejb/trunk/sandbox/release-tools/src/main/java/org/apache/openejb/tools/release/util/ObjectList.java
 (original)
+++ 
openejb/trunk/sandbox/release-tools/src/main/java/org/apache/openejb/tools/release/util/ObjectList.java
 Mon Jan 23 11:11:19 2012
@@ -17,15 +17,12 @@
 package org.apache.openejb.tools.release.util;
 
 
-import java.lang.reflect.Constructor;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 import java.util.regex.Pattern;
 
 /**
@@ -44,6 +41,14 @@ public class ObjectList<E> extends Array
         super(i);
     }
 
+    private static int compare(Object a, Object b) {
+        if (a instanceof Comparable) {
+            return ((Comparable) a).compareTo(b);
+        } else {
+            return a.toString().compareTo(b.toString());
+        }
+    }
+
     public Object min(String field) {
         return Collections.min(this, getComparator(field));
     }
@@ -337,25 +342,24 @@ public class ObjectList<E> extends Array
         return list;
     }
 
-    private ObjectList compareAndCollect(String field, Object data, int 
condition) {
+    private ObjectList compareAndCollect(String field, Object valueB, int 
condition) {
         if (size() == 0) return this;
         try {
-            Class type = get(0).getClass();
-            HashMap map = new HashMap();
-            Object base;
-
-            map.put(field, data);
-            Constructor constructor = type.getConstructor(new 
Class[]{Map.class});
-            base = constructor.newInstance(new Object[]{map});
 
-            Comparator comparator = getComparator(field);
+            final Accessor accessor = new Accessor(field, this);
+            final ObjectList subset = new ObjectList();
 
-            ObjectList subset = new ObjectList();
             for (int i = 0; i < size(); i++) {
-                Object object = get(i);
-                int value = comparator.compare(object, base);
-                if (value / condition > 0) {
-                    subset.add(object);
+                try {
+                    final Object object = get(i);
+                    final Object valueA = accessor.getValue(object);
+
+                    int result = ObjectList.compare(valueA, valueB);
+
+                    if (result / condition > 0) {
+                        subset.add(object);
+                    }
+                } catch (Exception e) {
                 }
             }
             return subset;
@@ -406,11 +410,7 @@ public class ObjectList<E> extends Array
             try {
                 Object a = accessor.getValue((Object) objectA);
                 Object b = accessor.getValue((Object) objectB);
-                if (a instanceof Comparable) {
-                    return ((Comparable) a).compareTo(b);
-                } else {
-                    return a.toString().compareTo(b.toString());
-                }
+                return ObjectList.compare(a, b);
             } catch (Exception e) {
                 return 0;
             }


Reply via email to