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;
}