You can subscribe to this list here.
| 2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(42) |
Nov
|
Dec
|
|---|
|
From: <lac...@us...> - 2007-10-05 09:06:53
|
Revision: 57
http://td2jira.svn.sourceforge.net/td2jira/?rev=57&view=rev
Author: lacostej
Date: 2007-10-05 02:06:58 -0700 (Fri, 05 Oct 2007)
Log Message:
-----------
Take note of known issue
Modified Paths:
--------------
trunk/td2jira/docs/KnownIssues.txt
Modified: trunk/td2jira/docs/KnownIssues.txt
===================================================================
--- trunk/td2jira/docs/KnownIssues.txt 2007-10-05 08:46:29 UTC (rev 56)
+++ trunk/td2jira/docs/KnownIssues.txt 2007-10-05 09:06:58 UTC (rev 57)
@@ -21,4 +21,6 @@
at td2jira.Sync.run(Sync.java:111)
at td2jira.Sync.main(Sync.java:45)
-
\ No newline at end of file
+
+* Issue #2: the comments added to TD issues to poin to the Jira issue are written multiple times
+ (probably if there's already a comment on the TD issue)
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lac...@us...> - 2007-10-05 08:46:25
|
Revision: 56
http://td2jira.svn.sourceforge.net/td2jira/?rev=56&view=rev
Author: lacostej
Date: 2007-10-05 01:46:29 -0700 (Fri, 05 Oct 2007)
Log Message:
-----------
add a config parameter to fail if a mapping between a TD user and Jira user is missing
Modified Paths:
--------------
trunk/td2jira/docs/ReleaseNotes.txt
trunk/td2jira/etc/td2jira.properties.example
trunk/td2jira/src/td2jira/Config.java
Modified: trunk/td2jira/docs/ReleaseNotes.txt
===================================================================
--- trunk/td2jira/docs/ReleaseNotes.txt 2007-10-05 08:19:57 UTC (rev 55)
+++ trunk/td2jira/docs/ReleaseNotes.txt 2007-10-05 08:46:29 UTC (rev 56)
@@ -17,6 +17,7 @@
TODO document differences between both connectors
* FEATURE Add support for setting up priority when creating the issue and updating it.
The list of priorities is currently hardcoded to the default JIRA / TD settings. See Config class
+* FEATURE add a config parameter to fail if a mapping between a TD user and Jira user is missing
Old release
Modified: trunk/td2jira/etc/td2jira.properties.example
===================================================================
--- trunk/td2jira/etc/td2jira.properties.example 2007-10-05 08:19:57 UTC (rev 55)
+++ trunk/td2jira/etc/td2jira.properties.example 2007-10-05 08:46:29 UTC (rev 56)
@@ -33,6 +33,8 @@
jira.project=FILLME
jira.summary.prefix=FILLME
jira.assign.to=FILLME
+# uncomment if you want td2jira to fail when a mapping between a TD assignee and Jira is missing.
+#jira.assignee.required=true
# HTTP Proxy, if required
# http.proxyHost=myproxy.here.com
Modified: trunk/td2jira/src/td2jira/Config.java
===================================================================
--- trunk/td2jira/src/td2jira/Config.java 2007-10-05 08:19:57 UTC (rev 55)
+++ trunk/td2jira/src/td2jira/Config.java 2007-10-05 08:46:29 UTC (rev 56)
@@ -37,6 +37,7 @@
public static String TD_READ_ONLY = "td.readonly";
public static String TD_PASSWORD = "td.password";
public static String JIRA_ASSIGN_NEW_ISSUE_TO = "jira.assign.to";
+ public static String JIRA_ASSIGNEE_REQUIRED = "jira.assignee.required";
public static String TD_LEAD = "td.lead";
public static String SYNC_RULES = "sync.rules";
@@ -150,7 +151,12 @@
}
public static String getJIRADeveloperForTDDeveloper(String assignedInTD) {
- return tdDevelopersToJiraDevelopers.get(assignedInTD);
+ String jiraDeveloper = tdDevelopersToJiraDevelopers.get(assignedInTD);
+ boolean assigneeRequired = Config.JIRA_ASSIGNEE_REQUIRED.equals("true");
+ if (jiraDeveloper == null && assigneeRequired) {
+ throw new IllegalStateException("Missing Jira assignee mapping for TD assignee: " + assignedInTD);
+ }
+ return jiraDeveloper;
}
// public static String getProperty(String key, String defaultValue) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lac...@us...> - 2007-10-05 08:19:52
|
Revision: 55
http://td2jira.svn.sourceforge.net/td2jira/?rev=55&view=rev
Author: lacostej
Date: 2007-10-05 01:19:57 -0700 (Fri, 05 Oct 2007)
Log Message:
-----------
Document potential inconsistency between code and properties file
Modified Paths:
--------------
trunk/td2jira/etc/td2jira.properties.example
Modified: trunk/td2jira/etc/td2jira.properties.example
===================================================================
--- trunk/td2jira/etc/td2jira.properties.example 2007-10-05 08:17:33 UTC (rev 54)
+++ trunk/td2jira/etc/td2jira.properties.example 2007-10-05 08:19:57 UTC (rev 55)
@@ -52,8 +52,9 @@
# JIRA Connector Implementation
# more portable, but less powerful
#jira.connector.implementation=td2jira.jira.xmlrpc.JIRAXmlRpcConnector
-# more powerful, but needs fresh JIRA version and has troubles with attachments (TODO document problems)
+# more powerful, but needs fresh JIRA version and has troubles with attachments
#jira.connector.implementation=td2jira.jira.soap.JIRASoapConnector
+# TODO is this true ? the code shows that XmlRpc code doesn't support attachment. the SOAP connector does...
# Sync rules
# FIXME enable and configure
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lac...@us...> - 2007-10-05 08:17:32
|
Revision: 54
http://td2jira.svn.sourceforge.net/td2jira/?rev=54&view=rev
Author: lacostej
Date: 2007-10-05 01:17:33 -0700 (Fri, 05 Oct 2007)
Log Message:
-----------
Add debugging information related to closing issues with xmlrpc
Modified Paths:
--------------
trunk/td2jira/src/td2jira/jira/xmlrpc/JIRAXmlRpcConnector.java
Modified: trunk/td2jira/src/td2jira/jira/xmlrpc/JIRAXmlRpcConnector.java
===================================================================
--- trunk/td2jira/src/td2jira/jira/xmlrpc/JIRAXmlRpcConnector.java 2007-10-05 08:14:29 UTC (rev 53)
+++ trunk/td2jira/src/td2jira/jira/xmlrpc/JIRAXmlRpcConnector.java 2007-10-05 08:17:33 UTC (rev 54)
@@ -225,6 +225,7 @@
}
private void progressWorkflowAction(JIRAIssue jiraIssue, String actionId) {
+ logger.debug("Jira XML-RPC interface doesn't support changing the workflow.");
// not implemented in XML RPC
return;
/*
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lac...@us...> - 2007-10-05 08:14:28
|
Revision: 53
http://td2jira.svn.sourceforge.net/td2jira/?rev=53&view=rev
Author: lacostej
Date: 2007-10-05 01:14:29 -0700 (Fri, 05 Oct 2007)
Log Message:
-----------
Add support for setting up priority when creating the issue and updating it.
Modified Paths:
--------------
trunk/td2jira/docs/ReleaseNotes.txt
trunk/td2jira/src/td2jira/Config.java
trunk/td2jira/src/td2jira/jira/IJIRAConnector.java
trunk/td2jira/src/td2jira/jira/JIRAIssue.java
trunk/td2jira/src/td2jira/jira/soap/JIRASoapConnector.java
trunk/td2jira/src/td2jira/jira/xmlrpc/JIRAXmlRpcConnector.java
trunk/td2jira/src/td2jira/sync/SyncUtils.java
Modified: trunk/td2jira/docs/ReleaseNotes.txt
===================================================================
--- trunk/td2jira/docs/ReleaseNotes.txt 2007-10-04 13:14:57 UTC (rev 52)
+++ trunk/td2jira/docs/ReleaseNotes.txt 2007-10-05 08:14:29 UTC (rev 53)
@@ -15,6 +15,8 @@
* WORK-AROUND a failure to retrieve some attachments from TD. May be a TD issue or some sort of jacob/TD combination problem.
* FEATURE Supports closing of issues in Jira (only works for XML-RPC)
TODO document differences between both connectors
+* FEATURE Add support for setting up priority when creating the issue and updating it.
+ The list of priorities is currently hardcoded to the default JIRA / TD settings. See Config class
Old release
Modified: trunk/td2jira/src/td2jira/Config.java
===================================================================
--- trunk/td2jira/src/td2jira/Config.java 2007-10-04 13:14:57 UTC (rev 52)
+++ trunk/td2jira/src/td2jira/Config.java 2007-10-05 08:14:29 UTC (rev 53)
@@ -157,4 +157,19 @@
// String val = getProperty(key);
// return val == null? defaultValue:val.trim();
// }
+
+ /**
+ *
+ * @param tdPriority
+ * @return <code>null</code> when couldn't be mapped
+ */
+ public static String getJiraPrioriryForTDPriority(String tdPriority) {
+ Map<String, String> map = new HashMap<String,String>();
+ map.put("5-Urgent", "1"); // BLOCKER
+ map.put("4-Very High", "2"); // CRITICAL
+ map.put("3-High", "3"); // MAJOR
+ map.put("2-Medium", "4"); // MINOR
+ map.put("1-Low", "5"); // TRIVIAL
+ return map.get(tdPriority);
+ }
}
Modified: trunk/td2jira/src/td2jira/jira/IJIRAConnector.java
===================================================================
--- trunk/td2jira/src/td2jira/jira/IJIRAConnector.java 2007-10-04 13:14:57 UTC (rev 52)
+++ trunk/td2jira/src/td2jira/jira/IJIRAConnector.java 2007-10-05 08:14:29 UTC (rev 53)
@@ -30,4 +30,6 @@
List<String> getAttachmentsNames(JIRAIssue jiraIssue);
void addAttachment(JIRAIssue jiraIssue, String fileName, byte[] data);
+
+ void updatePriority(JIRAIssue jiraIssue);
}
\ No newline at end of file
Modified: trunk/td2jira/src/td2jira/jira/JIRAIssue.java
===================================================================
--- trunk/td2jira/src/td2jira/jira/JIRAIssue.java 2007-10-04 13:14:57 UTC (rev 52)
+++ trunk/td2jira/src/td2jira/jira/JIRAIssue.java 2007-10-05 08:14:29 UTC (rev 53)
@@ -12,6 +12,7 @@
private String id;
private String key;
private String status;
+ private String priority;
private String resolution;
private String summary;
private String assignee;
@@ -33,6 +34,14 @@
this.key = jiraId;
}
+ public String getPriority() {
+ return priority;
+ }
+
+ public void setPriority(String priority) {
+ this.priority = priority;
+ }
+
public String getSummary() {
return summary;
}
@@ -89,6 +98,7 @@
jt.setSummary((String) map.get("summary"));
jt.setResolution(resolutions.get((String) map.get("resolution")));
jt.setProjectId((String) map.get("project"));
+ jt.setPriority((String) map.get("priority"));
jt.setKey((String) map.get("key"));
jt.setId((String) map.get("id"));
jt.setStatus(statuses.get((String) map.get("status")));
Modified: trunk/td2jira/src/td2jira/jira/soap/JIRASoapConnector.java
===================================================================
--- trunk/td2jira/src/td2jira/jira/soap/JIRASoapConnector.java 2007-10-04 13:14:57 UTC (rev 52)
+++ trunk/td2jira/src/td2jira/jira/soap/JIRASoapConnector.java 2007-10-05 08:14:29 UTC (rev 53)
@@ -34,6 +34,18 @@
}
}
+ public void updatePriority(JIRAIssue jiraIssue) {
+ try {
+ RemoteFieldValue rfvPriority = new RemoteFieldValue();
+ rfvPriority.setId("priority");
+ rfvPriority.setValues(new String[]{jiraIssue.getPriority()});
+
+ svc.updateIssue(token, jiraIssue.getKey(), new RemoteFieldValue[]{rfvPriority});
+ } catch (Exception ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+
public void addComment(JIRAIssue jt, String comment) {
try {
logger.info("adding comment to " + jt.getKey());
@@ -76,6 +88,9 @@
issue.setSummary(jiraIssue.getSummary());
issue.setDescription(jiraIssue.getDescription());
issue.setAssignee(jiraIssue.getAssignee());
+ if (jiraIssue.getPriority() != null) {
+ issue.setPriority(jiraIssue.getPriority());
+ }
issue = svc.createIssue(token, issue);
logger.info("new JIRA issue " + issue.getKey() + " has been created");
@@ -96,6 +111,7 @@
ji.setAssignee(issue.getAssignee());
ji.setDescription(issue.getDescription());
ji.setProjectId(issue.getProject());
+ ji.setPriority(issue.getPriority());
// ji.setResolution(JIRAIssue.resolutions.get(issue.getResolution()));
// ji.setResolution(issue.getResolution());
ji.setStatus(JIRAIssue.statuses.get(issue.getStatus()));
Modified: trunk/td2jira/src/td2jira/jira/xmlrpc/JIRAXmlRpcConnector.java
===================================================================
--- trunk/td2jira/src/td2jira/jira/xmlrpc/JIRAXmlRpcConnector.java 2007-10-04 13:14:57 UTC (rev 52)
+++ trunk/td2jira/src/td2jira/jira/xmlrpc/JIRAXmlRpcConnector.java 2007-10-05 08:14:29 UTC (rev 53)
@@ -180,11 +180,13 @@
issue.put("project", jtd.getProjectId());
issue.put("type", 1);
issue.put("assignee", jtd.getAssignee());
+ if (jtd.getPriority() != null)
+ issue.put("priority", jtd.getPriority());
Map[] versions = getVersions();
for (Map map : versions) {
String name = (String) map.get("name");
- if (name.indexOf("Phase II - SIT") >= 0) {
+ if (name.indexOf("Phase II - SIT") >= 0) { // TODO project specific
Vector v = new Vector();
v.add(map);
issue.put("affectsVersions", v);
@@ -308,6 +310,17 @@
logger.error(jiraIssue.getKey() + ": adding attachment data for file " + fileName + " (" + data.length + " bytes) (NOT IMPLEMENTED IN XML-RPC)");
}
+ public void updatePriority(JIRAIssue jiraIssue) {
+ try {
+ Map issue = (Map) rpcClient.execute("jira1.getIssue", params(token, jiraIssue.getKey()));
+ issue.put("priority", jiraIssue.getPriority());
+ Map issue2 = vectorizeValues(issue);
+ Object o = rpcClient.execute("jira1.updateIssue", params(token, jiraIssue.getKey(), issue2));
+ } catch (Exception ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+
public List<String> getAttachmentsNames(JIRAIssue jiraIssue) {
return new ArrayList<String>();
}
Modified: trunk/td2jira/src/td2jira/sync/SyncUtils.java
===================================================================
--- trunk/td2jira/src/td2jira/sync/SyncUtils.java 2007-10-04 13:14:57 UTC (rev 52)
+++ trunk/td2jira/src/td2jira/sync/SyncUtils.java 2007-10-05 08:14:29 UTC (rev 53)
@@ -1,8 +1,6 @@
package td2jira.sync;
-import java.util.List;
-import java.util.Set;
-import java.util.Date;
+import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.text.SimpleDateFormat;
@@ -35,6 +33,8 @@
syncCommentsToJIRA(jc, pair, tdComments, jiraComments);
syncCommentsToTD(tc, pair, jiraComments, tdComments);
+ syncPriorityToJIRA(jc, pair);
+
// syncAttachmentsToJIRA(tc,jc,pair);
syncAssigneeToTD(tc, pair);
@@ -51,6 +51,25 @@
}
}
+ private static void syncPriorityToJIRA(IJIRAConnector jc, IssuePair pair) throws Exception {
+ JIRAIssue jiraIssue = pair.getJiraIssue();
+
+ String tdPriority = pair.getTdIssue().getPriority();
+ String jiraPriority = Config.getJiraPrioriryForTDPriority(tdPriority);
+ if (jiraPriority == null) {
+ logger.warn("Coudn't map TD priority " + tdPriority + " for issues " + pair);
+ return;
+ }
+ String oldJiraPriority = pair.getJiraIssue().getPriority();
+ if (jiraPriority.equals(oldJiraPriority)) {
+ return;
+ }
+ logger.info("Changing JIRA priority for issue " + jiraIssue.getKey()
+ + " from " + oldJiraPriority + " to " + jiraPriority);
+ jiraIssue.setPriority(jiraPriority);
+ jc.updatePriority(jiraIssue);
+ }
+
public static void syncAttachmentsToJIRA(ITDConnector tc, IJIRAConnector jc, IssuePair pair) {
if (!tc.hasAttachments(pair.getTdIssue())) return;
@@ -229,6 +248,7 @@
String at = Config.JIRA_ASSIGN_NEW_ISSUE_TO;
if (at != null && jt.getAssignee() == null) jt.setAssignee(at);
+ jt.setPriority(Config.getJiraPrioriryForTDPriority(tdIssue.getPriority()));
jiraConnector.createJIRATask(jt);
IssuePair pair = new IssuePair();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lac...@us...> - 2007-10-04 13:14:53
|
Revision: 52
http://td2jira.svn.sourceforge.net/td2jira/?rev=52&view=rev
Author: lacostej
Date: 2007-10-04 06:14:57 -0700 (Thu, 04 Oct 2007)
Log Message:
-----------
Hide jacob.dll from svn
Property Changed:
----------------
trunk/td2jira/
Property changes on: trunk/td2jira
___________________________________________________________________
Name: svn:ignore
- target
svnignore
BUG_*
*.log
*.iml
*.ipr
*.iws
+ target
*.dll
svnignore
BUG_*
*.log
*.iml
*.ipr
*.iws
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lac...@us...> - 2007-10-04 13:13:29
|
Revision: 51
http://td2jira.svn.sourceforge.net/td2jira/?rev=51&view=rev
Author: lacostej
Date: 2007-10-04 06:13:31 -0700 (Thu, 04 Oct 2007)
Log Message:
-----------
Support closing of issues in Jira (only works in XML-RPC connector)
Modified Paths:
--------------
trunk/td2jira/docs/ReleaseNotes.txt
trunk/td2jira/src/td2jira/jira/soap/JIRASoapConnector.java
trunk/td2jira/src/td2jira/jira/xmlrpc/JIRAXmlRpcConnector.java
Modified: trunk/td2jira/docs/ReleaseNotes.txt
===================================================================
--- trunk/td2jira/docs/ReleaseNotes.txt 2007-10-04 12:55:10 UTC (rev 50)
+++ trunk/td2jira/docs/ReleaseNotes.txt 2007-10-04 13:13:31 UTC (rev 51)
@@ -13,5 +13,9 @@
* FEATURE Create JIRA issues with the right assignee
* FEATURE allow to switch TD from read-only to read-write (defaults to read-only).
* WORK-AROUND a failure to retrieve some attachments from TD. May be a TD issue or some sort of jacob/TD combination problem.
+* FEATURE Supports closing of issues in Jira (only works for XML-RPC)
+ TODO document differences between both connectors
Old release
+
+TODO fill
\ No newline at end of file
Modified: trunk/td2jira/src/td2jira/jira/soap/JIRASoapConnector.java
===================================================================
--- trunk/td2jira/src/td2jira/jira/soap/JIRASoapConnector.java 2007-10-04 12:55:10 UTC (rev 50)
+++ trunk/td2jira/src/td2jira/jira/soap/JIRASoapConnector.java 2007-10-04 13:13:31 UTC (rev 51)
@@ -12,11 +12,7 @@
import td2jira.jira.JIRAComment;
import td2jira.jira.JIRAIssue;
-import com.atlassian.jira.rpc.soap.beans.RemoteAttachment;
-import com.atlassian.jira.rpc.soap.beans.RemoteComment;
-import com.atlassian.jira.rpc.soap.beans.RemoteField;
-import com.atlassian.jira.rpc.soap.beans.RemoteFieldValue;
-import com.atlassian.jira.rpc.soap.beans.RemoteIssue;
+import com.atlassian.jira.rpc.soap.beans.*;
import com.atlassian.jira.rpc.soap.jirasoapservice_v2.JiraSoapService;
import com.atlassian.jira.rpc.soap.jirasoapservice_v2.JiraSoapServiceService;
import com.atlassian.jira.rpc.soap.jirasoapservice_v2.JiraSoapServiceServiceLocator;
@@ -55,10 +51,18 @@
try {
final String closedMarker = "(CLOSED@TD)";
String summary = jiraIssue.getSummary();
- if (summary.indexOf(closedMarker) >= 0) return;
- jiraIssue.setSummary(closedMarker + summary);
+ String status = jiraIssue.getStatus();
+ if (status.equals("Closed"))
+ return;
logger.info("marking " + jiraIssue.getKey() + " issue as to be closed");
- updateSummary(jiraIssue);
+ jiraIssue.setStatus("Closed");
+ jiraIssue.setResolution("Fixed");
+ if (summary.indexOf(closedMarker) == -1) {
+ jiraIssue.setSummary(closedMarker + summary);
+ updateSummary(jiraIssue);
+ }
+ progressWorkflowAction(jiraIssue, "2");
+
} catch (Exception ex) {
throw new RuntimeException(ex);
}
@@ -92,7 +96,9 @@
ji.setAssignee(issue.getAssignee());
ji.setDescription(issue.getDescription());
ji.setProjectId(issue.getProject());
- ji.setStatus(issue.getStatus());
+ // ji.setResolution(JIRAIssue.resolutions.get(issue.getResolution()));
+ // ji.setResolution(issue.getResolution());
+ ji.setStatus(JIRAIssue.statuses.get(issue.getStatus()));
ji.setSummary(issue.getSummary());
ji.setId(issue.getId());
tasks.add(ji);
@@ -139,6 +145,16 @@
JiraSoapServiceService jiraSoapServiceGetter = new JiraSoapServiceServiceLocator();
svc = jiraSoapServiceGetter.getJirasoapserviceV2(new URL(url + "/rpc/soap/jirasoapservice-v2"));
token = svc.login(user, password);
+
+ RemoteStatus[] statuses = svc.getStatuses(token);
+ for (RemoteStatus status : statuses) {
+ JIRAIssue.statuses.put(status.getId(), status.getName());
+ }
+
+ RemoteResolution[] resolutions = svc.getResolutions(token);
+ for (RemoteResolution resolution : resolutions) {
+ JIRAIssue.resolutions.put(resolution.getId(), resolution.getName());
+ }
} catch (Exception ex) {
throw new RuntimeException(ex);
}
@@ -148,6 +164,7 @@
try {
svc.logout(token);
} catch (Exception ex) {
+ logger.warn("Couldn't properly logout from JIRA. Ignoring...", ex);
}
token = null;
svc = null;
@@ -176,19 +193,27 @@
private void updateSummary(JIRAIssue jiraIssue) {
try {
- RemoteField[] fields = svc.getFieldsForEdit(token, jiraIssue.getKey());
+ RemoteFieldValue rfvSummary = new RemoteFieldValue();
+ rfvSummary.setId("summary");
+ rfvSummary.setValues(new String[]{jiraIssue.getSummary()});
- RemoteFieldValue rfv = new RemoteFieldValue();
- rfv.setValues(new String[]{jiraIssue.getSummary()});
+ svc.updateIssue(token, jiraIssue.getKey(), new RemoteFieldValue[]{rfvSummary});
+ } catch (Exception ex) {
+ throw new RuntimeException(ex);
+ }
+ }
- for (RemoteField field : fields) {
- if (field.getName().equals("summary")) {
- rfv.setId(field.getId());
- break;
- }
- }
+ private void progressWorkflowAction(JIRAIssue jiraIssue, String actionId) {
+ try {
+ RemoteFieldValue rfvStatus = new RemoteFieldValue();
+ rfvStatus.setId("status");
+ rfvStatus.setValues(new String[]{jiraIssue.getStatus()});
- svc.updateIssue(token, jiraIssue.getKey(), new RemoteFieldValue[]{rfv});
+ RemoteFieldValue rfvAssignee = new RemoteFieldValue();
+ rfvAssignee.setId("assignee");
+ rfvAssignee.setValues(new String[]{jiraIssue.getAssignee()});
+
+ svc.progressWorkflowAction(token, jiraIssue.getKey(), actionId, new RemoteFieldValue[]{rfvStatus, rfvAssignee});
} catch (Exception ex) {
throw new RuntimeException(ex);
}
Modified: trunk/td2jira/src/td2jira/jira/xmlrpc/JIRAXmlRpcConnector.java
===================================================================
--- trunk/td2jira/src/td2jira/jira/xmlrpc/JIRAXmlRpcConnector.java 2007-10-04 12:55:10 UTC (rev 50)
+++ trunk/td2jira/src/td2jira/jira/xmlrpc/JIRAXmlRpcConnector.java 2007-10-04 13:13:31 UTC (rev 51)
@@ -213,6 +213,8 @@
try {
Map issue = (Map) rpcClient.execute("jira1.getIssue", params(token, jiraIssue.getKey()));
issue.put("summary", jiraIssue.getSummary());
+ // status cannot be updated here: http://jira.atlassian.com/browse/CONF-6959
+ // issue.put("status",jiraIssue.getStatus());
Map issue2 = vectorizeValues(issue);
Object o = rpcClient.execute("jira1.updateIssue", params(token, jiraIssue.getKey(), issue2));
} catch (Exception ex) {
@@ -220,6 +222,23 @@
}
}
+ private void progressWorkflowAction(JIRAIssue jiraIssue, String actionId) {
+ // not implemented in XML RPC
+ return;
+ /*
+ // see http://www.nabble.com/-JIRA-user--setting-a-resolution-and-status-when-creating-an-issue-using-SOAP-api-t2921588.html
+ // http://Your_Host:Port/secure/admin/workflows/ViewWorkflowSteps.jspa?workflowName=jira
+ try {
+ Map issue = (Map) rpcClient.execute("jira1.getIssue", params(token,jiraIssue.getKey()));
+ issue.put("status",jiraIssue.getStatus());
+ Map issue2 = vectorizeValues(issue);
+ Object o = rpcClient.execute("jira1.progressWorkflowAction", params(token,jiraIssue.getKey(),actionId,issue2));
+ } catch( Exception ex ) {
+ throw new RuntimeException(ex);
+ }
+ */
+ }
+
@SuppressWarnings("unchecked")
private Map<String, Object>[] convertToMapArray(Object[] objects) {
Map[] ret = new Map[objects.length];
@@ -243,10 +262,18 @@
try {
final String closedMarker = "(CLOSED@TD)";
String summary = jiraIssue.getSummary();
- if (summary.indexOf(closedMarker) >= 0) return;
- jiraIssue.setSummary(closedMarker + summary);
- logger.info("marking JIRA issue as closed: " + jiraIssue.getKey());
- updateSummary(jiraIssue);
+ String status = jiraIssue.getStatus();
+ if (status.equals("Closed"))
+ return;
+ logger.info("marking " + jiraIssue.getKey() + " issue as to be closed");
+ jiraIssue.setStatus("Closed");
+ jiraIssue.setResolution("Fixed");
+ if (summary.indexOf(closedMarker) == -1) {
+ jiraIssue.setSummary(closedMarker + summary);
+ updateSummary(jiraIssue);
+ }
+ progressWorkflowAction(jiraIssue, "2");
+
} catch (Exception ex) {
throw new RuntimeException(ex);
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lac...@us...> - 2007-10-04 12:55:06
|
Revision: 50
http://td2jira.svn.sourceforge.net/td2jira/?rev=50&view=rev
Author: lacostej
Date: 2007-10-04 05:55:10 -0700 (Thu, 04 Oct 2007)
Log Message:
-----------
Only print TD READ_ONLY changes
Modified Paths:
--------------
trunk/td2jira/src/td2jira/sync/SyncUtils.java
Modified: trunk/td2jira/src/td2jira/sync/SyncUtils.java
===================================================================
--- trunk/td2jira/src/td2jira/sync/SyncUtils.java 2007-10-04 12:54:23 UTC (rev 49)
+++ trunk/td2jira/src/td2jira/sync/SyncUtils.java 2007-10-04 12:55:10 UTC (rev 50)
@@ -25,7 +25,7 @@
/**
* only update TD is this is false
*/
- private static boolean readOnlyTD = true;
+ private static Boolean readOnlyTD = null;
public static void sync(ITDConnector tc, IJIRAConnector jc, IssuePair pair) throws Exception {
initTDReadOnly();
@@ -41,11 +41,14 @@
}
/**
- * only enable writing to TD if user really marked Config.TD_READ_ONLY as 'false'
+ * Only enable writing to TD if user really marked Config.TD_READ_ONLY as 'false'
*/
private static void initTDReadOnly() {
+ Boolean oldReadOnlyTD = readOnlyTD;
readOnlyTD = !Config.TD_READ_ONLY.equals("false");
- logger.info("TD is " + (readOnlyTD ? "read-only" : "read-write"));
+ if (oldReadOnlyTD != readOnlyTD) {
+ logger.info("TD is now " + (readOnlyTD ? "read-only" : "read-write"));
+ }
}
public static void syncAttachmentsToJIRA(ITDConnector tc, IJIRAConnector jc, IssuePair pair) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lac...@us...> - 2007-10-04 12:54:19
|
Revision: 49
http://td2jira.svn.sourceforge.net/td2jira/?rev=49&view=rev
Author: lacostej
Date: 2007-10-04 05:54:23 -0700 (Thu, 04 Oct 2007)
Log Message:
-----------
Copy jacob.dll locally before running
Modified Paths:
--------------
trunk/td2jira/build.xml
trunk/td2jira/src/td2jira/Sync.java
Modified: trunk/td2jira/build.xml
===================================================================
--- trunk/td2jira/build.xml 2007-10-04 12:41:54 UTC (rev 48)
+++ trunk/td2jira/build.xml 2007-10-04 12:54:23 UTC (rev 49)
@@ -22,7 +22,8 @@
<target name="run_sync">
<echo>Syncing TD to JIRA ...</echo>
- <java dir="${basedir}/lib" classname="td2jira.Sync" failonerror="true" fork="true" maxmemory="1024m">
+ <copy file="${basedir}/lib/jacob.dll" todir="."/>
+ <java dir="${basedir}" classname="td2jira.Sync" failonerror="true" fork="true" maxmemory="1024m">
<sysproperty key="com.jacob.autogc" value="true"/>
<classpath refid="build.path"/>
</java>
Modified: trunk/td2jira/src/td2jira/Sync.java
===================================================================
--- trunk/td2jira/src/td2jira/Sync.java 2007-10-04 12:41:54 UTC (rev 48)
+++ trunk/td2jira/src/td2jira/Sync.java 2007-10-04 12:54:23 UTC (rev 49)
@@ -22,6 +22,11 @@
import td2jira.td.api.IBug;
import td2jira.td.api.Utils;
+/**
+ * Start the synchronization.
+ *
+ * Jacob DLL must be available.
+ */
public class Sync {
private static Logger logger = Logger.getLogger(Sync.class);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lac...@us...> - 2007-10-04 12:41:50
|
Revision: 48
http://td2jira.svn.sourceforge.net/td2jira/?rev=48&view=rev
Author: lacostej
Date: 2007-10-04 05:41:54 -0700 (Thu, 04 Oct 2007)
Log Message:
-----------
Fix basedir for running application from ant
Modified Paths:
--------------
trunk/td2jira/build.xml
Modified: trunk/td2jira/build.xml
===================================================================
--- trunk/td2jira/build.xml 2007-10-04 12:41:32 UTC (rev 47)
+++ trunk/td2jira/build.xml 2007-10-04 12:41:54 UTC (rev 48)
@@ -22,7 +22,7 @@
<target name="run_sync">
<echo>Syncing TD to JIRA ...</echo>
- <java dir="${basedir}" classname="td2jira.Sync" failonerror="true" fork="true" maxmemory="1024m">
+ <java dir="${basedir}/lib" classname="td2jira.Sync" failonerror="true" fork="true" maxmemory="1024m">
<sysproperty key="com.jacob.autogc" value="true"/>
<classpath refid="build.path"/>
</java>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lac...@us...> - 2007-10-04 12:41:28
|
Revision: 47
http://td2jira.svn.sourceforge.net/td2jira/?rev=47&view=rev
Author: lacostej
Date: 2007-10-04 05:41:32 -0700 (Thu, 04 Oct 2007)
Log Message:
-----------
disable logging debug by default in console
Modified Paths:
--------------
trunk/td2jira/etc/log4j.properties
Modified: trunk/td2jira/etc/log4j.properties
===================================================================
--- trunk/td2jira/etc/log4j.properties 2007-10-04 11:25:51 UTC (rev 46)
+++ trunk/td2jira/etc/log4j.properties 2007-10-04 12:41:32 UTC (rev 47)
@@ -1,5 +1,5 @@
log4j.logger.org.apache=warn, CONSOLE
-log4j.logger.td2jira=debug, TD2JIRA, CONSOLE
+log4j.logger.td2jira=info, TD2JIRA, CONSOLE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lac...@us...> - 2007-10-04 11:25:47
|
Revision: 46
http://td2jira.svn.sourceforge.net/td2jira/?rev=46&view=rev
Author: lacostej
Date: 2007-10-04 04:25:51 -0700 (Thu, 04 Oct 2007)
Log Message:
-----------
remove obsolete TODO
Modified Paths:
--------------
trunk/td2jira/src/td2jira/sync/SyncUtils.java
Modified: trunk/td2jira/src/td2jira/sync/SyncUtils.java
===================================================================
--- trunk/td2jira/src/td2jira/sync/SyncUtils.java 2007-10-04 11:24:56 UTC (rev 45)
+++ trunk/td2jira/src/td2jira/sync/SyncUtils.java 2007-10-04 11:25:51 UTC (rev 46)
@@ -25,7 +25,7 @@
/**
* only update TD is this is false
*/
- private static boolean readOnlyTD = true; // TODO parametrize this
+ private static boolean readOnlyTD = true;
public static void sync(ITDConnector tc, IJIRAConnector jc, IssuePair pair) throws Exception {
initTDReadOnly();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lac...@us...> - 2007-10-04 11:24:52
|
Revision: 45
http://td2jira.svn.sourceforge.net/td2jira/?rev=45&view=rev
Author: lacostej
Date: 2007-10-04 04:24:56 -0700 (Thu, 04 Oct 2007)
Log Message:
-----------
workaround a failure to retrieve some attachments from TD. May be a TD issue or some sort of jacob/TD combination problem.
Modified Paths:
--------------
trunk/td2jira/docs/KnownIssues.txt
trunk/td2jira/docs/ReleaseNotes.txt
trunk/td2jira/src/td2jira/sync/SyncUtils.java
Modified: trunk/td2jira/docs/KnownIssues.txt
===================================================================
--- trunk/td2jira/docs/KnownIssues.txt 2007-10-04 11:17:49 UTC (rev 44)
+++ trunk/td2jira/docs/KnownIssues.txt 2007-10-04 11:24:56 UTC (rev 45)
@@ -1,3 +1,10 @@
+* Issue #1: sometimes it is not possible to invoke get attachment on some of the issues.
+ This is repeatable but couldn't identify the problem yet.
+
+ We have to ignore those failures for know at the rest of the synchronization works.
+
+ This problem was encountered against TD v8.2 SP1 using Jacob 1.13 (M5)
+
com.jacob.com.ComFailException: Invoke of: Data
Source:
Description: The Factory failed to create attachment storage object.
@@ -5,7 +12,7 @@
at com.jacob.com.Dispatch.invokev(Native Method)
at com.jacob.com.Dispatch.invokev(Dispatch.java:945)
at com.jacob.com.Dispatch.get(Dispatch.java:1312)
- at td2jira.td.api.dcom.Bug.retrieveAttachmentData(Bug.java:214)
+ at td2jira.td.api.dcomv8.Bug.retrieveAttachmentData(Bug.java:214)
at td2jira.td.TDConnector.getAttachmentData(TDConnector.java:88)
at td2jira.sync.SyncUtils.addAttachment(SyncUtils.java:68)
at td2jira.sync.SyncUtils.syncAttachmentsToJIRA(SyncUtils.java:46)
Modified: trunk/td2jira/docs/ReleaseNotes.txt
===================================================================
--- trunk/td2jira/docs/ReleaseNotes.txt 2007-10-04 11:17:49 UTC (rev 44)
+++ trunk/td2jira/docs/ReleaseNotes.txt 2007-10-04 11:24:56 UTC (rev 45)
@@ -12,5 +12,6 @@
The fixes in dcomv8/Bug.java might need to be backported to v9 support.
* FEATURE Create JIRA issues with the right assignee
* FEATURE allow to switch TD from read-only to read-write (defaults to read-only).
+* WORK-AROUND a failure to retrieve some attachments from TD. May be a TD issue or some sort of jacob/TD combination problem.
Old release
Modified: trunk/td2jira/src/td2jira/sync/SyncUtils.java
===================================================================
--- trunk/td2jira/src/td2jira/sync/SyncUtils.java 2007-10-04 11:17:49 UTC (rev 44)
+++ trunk/td2jira/src/td2jira/sync/SyncUtils.java 2007-10-04 11:24:56 UTC (rev 45)
@@ -56,8 +56,18 @@
List<String> tdAttachments = tc.getAttachmentsNames(pair.getTdIssue());
for (String attachmentName : tdAttachments) {
- if (hasAttachmentInJira(comments, attachmentName)) continue;
- addAttachment(tc, jc, pair, pair.getJiraIssue(), attachmentName);
+ if (hasAttachmentInJira(comments, attachmentName))
+ continue;
+ try {
+ addAttachment(tc, jc, pair, pair.getJiraIssue(), attachmentName);
+ } catch (com.jacob.com.ComFailException e) {
+ // work-around Known Issue #1
+ if (e.getMessage().contains("The Factory failed to create attachment storage object.")) {
+ logger.warn("Ignoring JACOB issue for attachment " + pair + " . To investigate...", e);
+ } else {
+ throw e;
+ }
+ }
}
// List<String> tdAttachments = tc.getAttachmentsNames(pair.getTdIssue());
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lac...@us...> - 2007-10-04 11:17:46
|
Revision: 44
http://td2jira.svn.sourceforge.net/td2jira/?rev=44&view=rev
Author: lacostej
Date: 2007-10-04 04:17:49 -0700 (Thu, 04 Oct 2007)
Log Message:
-----------
allow to switch TD from read-only to read-write (defaults to read-only).
Modified Paths:
--------------
trunk/td2jira/docs/ReleaseNotes.txt
trunk/td2jira/etc/td2jira.properties.example
trunk/td2jira/src/td2jira/Config.java
trunk/td2jira/src/td2jira/sync/SyncUtils.java
Modified: trunk/td2jira/docs/ReleaseNotes.txt
===================================================================
--- trunk/td2jira/docs/ReleaseNotes.txt 2007-10-04 11:12:18 UTC (rev 43)
+++ trunk/td2jira/docs/ReleaseNotes.txt 2007-10-04 11:17:49 UTC (rev 44)
@@ -11,5 +11,6 @@
to latest jacob to I am not sure these problems affect the v9 of the td API implementation.
The fixes in dcomv8/Bug.java might need to be backported to v9 support.
* FEATURE Create JIRA issues with the right assignee
+* FEATURE allow to switch TD from read-only to read-write (defaults to read-only).
Old release
Modified: trunk/td2jira/etc/td2jira.properties.example
===================================================================
--- trunk/td2jira/etc/td2jira.properties.example 2007-10-04 11:12:18 UTC (rev 43)
+++ trunk/td2jira/etc/td2jira.properties.example 2007-10-04 11:17:49 UTC (rev 44)
@@ -23,6 +23,8 @@
td.domain=FILLME
td.project=FILLME
td.lead=FILLME
+# comment this out to make td read-write.
+# td.readonly=false
# JIRA connection data (td2jira account won't probably exist; you'll need to Signup first!)
jira.url=http://FILLME:FILLME
Modified: trunk/td2jira/src/td2jira/Config.java
===================================================================
--- trunk/td2jira/src/td2jira/Config.java 2007-10-04 11:12:18 UTC (rev 43)
+++ trunk/td2jira/src/td2jira/Config.java 2007-10-04 11:17:49 UTC (rev 44)
@@ -34,6 +34,7 @@
public static String TD_DOMAIN = "td.domain";
public static String TD_PROJECT = "td.project";
public static String TD_USER = "td.user";
+ public static String TD_READ_ONLY = "td.readonly";
public static String TD_PASSWORD = "td.password";
public static String JIRA_ASSIGN_NEW_ISSUE_TO = "jira.assign.to";
public static String TD_LEAD = "td.lead";
Modified: trunk/td2jira/src/td2jira/sync/SyncUtils.java
===================================================================
--- trunk/td2jira/src/td2jira/sync/SyncUtils.java 2007-10-04 11:12:18 UTC (rev 43)
+++ trunk/td2jira/src/td2jira/sync/SyncUtils.java 2007-10-04 11:17:49 UTC (rev 44)
@@ -1,11 +1,11 @@
package td2jira.sync;
-import java.text.SimpleDateFormat;
-import java.util.Date;
import java.util.List;
import java.util.Set;
+import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import java.text.SimpleDateFormat;
import org.apache.log4j.Logger;
@@ -22,7 +22,13 @@
public class SyncUtils {
private static Logger logger = Logger.getLogger(SyncUtils.class);
+ /**
+ * only update TD is this is false
+ */
+ private static boolean readOnlyTD = true; // TODO parametrize this
+
public static void sync(ITDConnector tc, IJIRAConnector jc, IssuePair pair) throws Exception {
+ initTDReadOnly();
List<Comment> tdComments = tc.getComments(pair.getTdIssue());
List<JIRAComment> jiraComments = jc.getComments(pair.getJiraIssue());
@@ -34,6 +40,14 @@
syncAssigneeToTD(tc, pair);
}
+ /**
+ * only enable writing to TD if user really marked Config.TD_READ_ONLY as 'false'
+ */
+ private static void initTDReadOnly() {
+ readOnlyTD = !Config.TD_READ_ONLY.equals("false");
+ logger.info("TD is " + (readOnlyTD ? "read-only" : "read-write"));
+ }
+
public static void syncAttachmentsToJIRA(ITDConnector tc, IJIRAConnector jc, IssuePair pair) {
if (!tc.hasAttachments(pair.getTdIssue())) return;
@@ -71,6 +85,8 @@
// tell TD users up-to-date information on developers assignments
private static void syncAssigneeToTD(ITDConnector tc, IssuePair pair) {
+ if (readOnlyTD)
+ return;
IBug tdIssue = pair.getTdIssue();
if (!tdIssue.getStatus().equals("Assigned")) return;
@@ -93,6 +109,8 @@
}
private static void syncCommentsToTD(ITDConnector tc, IssuePair pair, List<JIRAComment> jiraComments, List<Comment> tdComments) throws Exception {
+ if (readOnlyTD)
+ return;
IBug tdIssue = pair.getTdIssue();
for (JIRAComment jiraComment : jiraComments) {
@@ -205,6 +223,8 @@
pair.setTdIssue(tdIssue);
sync(tdConnector, jiraConnector, pair);
+ if (readOnlyTD)
+ return jt;
Comment tdc = new Comment();
tdc.setAuthor(Config.TD_ROBOT_NAME);
tdc.setCreated(new SimpleDateFormat("yyyy-MM-dd HH:mm").format(new Date()));
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lac...@us...> - 2007-10-04 11:12:14
|
Revision: 43
http://td2jira.svn.sourceforge.net/td2jira/?rev=43&view=rev
Author: lacostej
Date: 2007-10-04 04:12:18 -0700 (Thu, 04 Oct 2007)
Log Message:
-----------
Prepare support for changing Jira issue resolutions
Modified Paths:
--------------
trunk/td2jira/src/td2jira/jira/JIRAIssue.java
Modified: trunk/td2jira/src/td2jira/jira/JIRAIssue.java
===================================================================
--- trunk/td2jira/src/td2jira/jira/JIRAIssue.java 2007-10-04 11:00:15 UTC (rev 42)
+++ trunk/td2jira/src/td2jira/jira/JIRAIssue.java 2007-10-04 11:12:18 UTC (rev 43)
@@ -2,7 +2,6 @@
import java.io.Serializable;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.Map;
public class JIRAIssue implements Serializable {
@@ -13,6 +12,7 @@
private String id;
private String key;
private String status;
+ private String resolution;
private String summary;
private String assignee;
private String description;
@@ -53,14 +53,20 @@
return status;
}
+ public String getResolution() {
+ return resolution;
+ }
+
public void setStatus(String status) {
this.status = status;
}
+ public void setResolution(String resolution) {
+ this.resolution = resolution;
+ }
+
public static String getStatusId(String name) {
- Iterator<String> it = statuses.keySet().iterator();
- while (it.hasNext()) {
- String id = it.next();
+ for (String id : statuses.keySet()) {
if (statuses.get(id).equals(name)) {
return id;
}
@@ -69,9 +75,7 @@
}
public static String getResolutionId(String name) {
- Iterator<String> it = resolutions.keySet().iterator();
- while (it.hasNext()) {
- String id = it.next();
+ for (String id : resolutions.keySet()) {
if (resolutions.get(id).equals(name)) {
return id;
}
@@ -83,6 +87,7 @@
JIRAIssue jt = new JIRAIssue();
jt.setDescription((String) map.get("description"));
jt.setSummary((String) map.get("summary"));
+ jt.setResolution(resolutions.get((String) map.get("resolution")));
jt.setProjectId((String) map.get("project"));
jt.setKey((String) map.get("key"));
jt.setId((String) map.get("id"));
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lac...@us...> - 2007-10-04 11:00:12
|
Revision: 42
http://td2jira.svn.sourceforge.net/td2jira/?rev=42&view=rev
Author: lacostej
Date: 2007-10-04 04:00:15 -0700 (Thu, 04 Oct 2007)
Log Message:
-----------
Create JIRA issues with the right assignee
Modified Paths:
--------------
trunk/td2jira/docs/ReleaseNotes.txt
trunk/td2jira/src/td2jira/sync/SyncUtils.java
Modified: trunk/td2jira/docs/ReleaseNotes.txt
===================================================================
--- trunk/td2jira/docs/ReleaseNotes.txt 2007-10-04 10:42:45 UTC (rev 41)
+++ trunk/td2jira/docs/ReleaseNotes.txt 2007-10-04 11:00:15 UTC (rev 42)
@@ -9,6 +9,7 @@
* FEATURE support both TD v8 and TD v9
* BUG fixed issues related to either jacob upgrade or support for TD v8. As I don't have TD v9, and already updated
to latest jacob to I am not sure these problems affect the v9 of the td API implementation.
- The fixes in dcomv8/Bug.java might need to be backported to v9 support.
+ The fixes in dcomv8/Bug.java might need to be backported to v9 support.
+* FEATURE Create JIRA issues with the right assignee
Old release
Modified: trunk/td2jira/src/td2jira/sync/SyncUtils.java
===================================================================
--- trunk/td2jira/src/td2jira/sync/SyncUtils.java 2007-10-04 10:42:45 UTC (rev 41)
+++ trunk/td2jira/src/td2jira/sync/SyncUtils.java 2007-10-04 11:00:15 UTC (rev 42)
@@ -194,8 +194,9 @@
jt.setSummary(prefix + " " + tdIssue.getId() + ": " + tdIssue.getSummary());
jt.setProjectId(jiraProject);
+ jt.setAssignee(Config.getJIRADeveloperForTDDeveloper(tdIssue.getAssignedTo()));
String at = Config.JIRA_ASSIGN_NEW_ISSUE_TO;
- if (at != null) jt.setAssignee(at);
+ if (at != null && jt.getAssignee() == null) jt.setAssignee(at);
jiraConnector.createJIRATask(jt);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lac...@us...> - 2007-10-04 10:42:40
|
Revision: 41
http://td2jira.svn.sourceforge.net/td2jira/?rev=41&view=rev
Author: lacostej
Date: 2007-10-04 03:42:45 -0700 (Thu, 04 Oct 2007)
Log Message:
-----------
add a helper method to the Config
Modified Paths:
--------------
trunk/td2jira/src/td2jira/Config.java
Modified: trunk/td2jira/src/td2jira/Config.java
===================================================================
--- trunk/td2jira/src/td2jira/Config.java 2007-10-04 10:01:12 UTC (rev 40)
+++ trunk/td2jira/src/td2jira/Config.java 2007-10-04 10:42:45 UTC (rev 41)
@@ -148,6 +148,10 @@
return null;
}
+ public static String getJIRADeveloperForTDDeveloper(String assignedInTD) {
+ return tdDevelopersToJiraDevelopers.get(assignedInTD);
+ }
+
// public static String getProperty(String key, String defaultValue) {
// String val = getProperty(key);
// return val == null? defaultValue:val.trim();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lac...@us...> - 2007-10-04 10:01:08
|
Revision: 40
http://td2jira.svn.sourceforge.net/td2jira/?rev=40&view=rev
Author: lacostej
Date: 2007-10-04 03:01:12 -0700 (Thu, 04 Oct 2007)
Log Message:
-----------
Let the CloseJiraIssue workflow decide itself whether or not it should close itself. This allows to support real closing later on (instead of just changing the summary)
Modified Paths:
--------------
trunk/td2jira/src/td2jira/sync/impl/CloseJiraIssue.java
Modified: trunk/td2jira/src/td2jira/sync/impl/CloseJiraIssue.java
===================================================================
--- trunk/td2jira/src/td2jira/sync/impl/CloseJiraIssue.java 2007-10-04 09:59:57 UTC (rev 39)
+++ trunk/td2jira/src/td2jira/sync/impl/CloseJiraIssue.java 2007-10-04 10:01:12 UTC (rev 40)
@@ -21,10 +21,8 @@
}
public ProcessingResult process(JIRAIssue jiraIssue, IBug tdIssue) throws Exception {
- //if( jiraIssue.getSummary().indexOf("(CLOSED@TD)") < 0 ) {
- logger.debug("JIRA issue " + jiraIssue.getKey() + " status is NOT CLOSED and TD " + tdIssue.getId() + " status is CLOSED; closing JIRA issue");
+ logger.debug("JIRA issue " + jiraIssue.getKey() + " is NOT CLOSED and TD " + tdIssue.getId() + " is CLOSED; closing JIRA issue");
jiraConnector.closeIssue(jiraIssue);
- //}
return ProcessingResult.PROCESS_NEXT_ISSUE;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lac...@us...> - 2007-10-04 09:59:53
|
Revision: 39
http://td2jira.svn.sourceforge.net/td2jira/?rev=39&view=rev
Author: lacostej
Date: 2007-10-04 02:59:57 -0700 (Thu, 04 Oct 2007)
Log Message:
-----------
Let the CloseJiraIssue workflow decide itself whether or not it should close itself. This allows to support real closing later on (instead of just changing the summary)
Modified Paths:
--------------
trunk/td2jira/src/td2jira/sync/impl/CloseJiraIssue.java
Modified: trunk/td2jira/src/td2jira/sync/impl/CloseJiraIssue.java
===================================================================
--- trunk/td2jira/src/td2jira/sync/impl/CloseJiraIssue.java 2007-10-04 09:54:55 UTC (rev 38)
+++ trunk/td2jira/src/td2jira/sync/impl/CloseJiraIssue.java 2007-10-04 09:59:57 UTC (rev 39)
@@ -21,10 +21,10 @@
}
public ProcessingResult process(JIRAIssue jiraIssue, IBug tdIssue) throws Exception {
- if (jiraIssue.getSummary().indexOf("(CLOSED@TD)") < 0) {
- logger.debug("JIRA issue " + jiraIssue.getKey() + " is NOT CLOSED and TD " + tdIssue.getId() + " is CLOSED; closing JIRA issue");
- jiraConnector.closeIssue(jiraIssue);
- }
+ //if( jiraIssue.getSummary().indexOf("(CLOSED@TD)") < 0 ) {
+ logger.debug("JIRA issue " + jiraIssue.getKey() + " status is NOT CLOSED and TD " + tdIssue.getId() + " status is CLOSED; closing JIRA issue");
+ jiraConnector.closeIssue(jiraIssue);
+ //}
return ProcessingResult.PROCESS_NEXT_ISSUE;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lac...@us...> - 2007-10-04 09:54:50
|
Revision: 38
http://td2jira.svn.sourceforge.net/td2jira/?rev=38&view=rev
Author: lacostej
Date: 2007-10-04 02:54:55 -0700 (Thu, 04 Oct 2007)
Log Message:
-----------
Identify potential issue
Modified Paths:
--------------
trunk/td2jira/src/td2jira/td/api/Utils.java
Modified: trunk/td2jira/src/td2jira/td/api/Utils.java
===================================================================
--- trunk/td2jira/src/td2jira/td/api/Utils.java 2007-10-04 09:53:01 UTC (rev 37)
+++ trunk/td2jira/src/td2jira/td/api/Utils.java 2007-10-04 09:54:55 UTC (rev 38)
@@ -121,6 +121,9 @@
if (html == null || html.trim().length() == 0) html = "<html><body></body></html>";
int notBody = html.indexOf("</body></html>");
+ if (notBody == -1) {
+ throw new IllegalStateException("html " + html + " is not a body.");
+ }
html = html.substring(0, notBody);
html += formatComment(comment);
html += "</body></html>";
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lac...@us...> - 2007-10-04 09:52:58
|
Revision: 37
http://td2jira.svn.sourceforge.net/td2jira/?rev=37&view=rev
Author: lacostej
Date: 2007-10-04 02:53:01 -0700 (Thu, 04 Oct 2007)
Log Message:
-----------
Implement support for TD v8. Also fixes some issues that may be related to latest JACOB use or to TD v8. Add a note in ReleaseNotes indicating that v9 may have the same issues
Modified Paths:
--------------
trunk/td2jira/docs/ReleaseNotes.txt
trunk/td2jira/etc/td2jira.properties.example
trunk/td2jira/src/td2jira/td/api/dcom/Connection.java
trunk/td2jira/src/td2jira/td/api/dcomv8/Bug.java
trunk/td2jira/src/td2jira/td/api/dcomv8/Connection.java
Modified: trunk/td2jira/docs/ReleaseNotes.txt
===================================================================
--- trunk/td2jira/docs/ReleaseNotes.txt 2007-10-04 09:47:42 UTC (rev 36)
+++ trunk/td2jira/docs/ReleaseNotes.txt 2007-10-04 09:53:01 UTC (rev 37)
@@ -3,7 +3,12 @@
* TASK migrated to SVN
* TASK reorganized project structure
* TASK reformated code
+* TASK upgraded to latest Jacob (1.13 M5)
* BUG fixed bug where matching Jira issue couldn't be identified due to line endings issues in reg.exp matcher.
+* FEATURE support both TD v8 and TD v9
+* BUG fixed issues related to either jacob upgrade or support for TD v8. As I don't have TD v9, and already updated
+ to latest jacob to I am not sure these problems affect the v9 of the td API implementation.
+ The fixes in dcomv8/Bug.java might need to be backported to v9 support.
Old release
Modified: trunk/td2jira/etc/td2jira.properties.example
===================================================================
--- trunk/td2jira/etc/td2jira.properties.example 2007-10-04 09:47:42 UTC (rev 36)
+++ trunk/td2jira/etc/td2jira.properties.example 2007-10-04 09:53:01 UTC (rev 37)
@@ -11,8 +11,10 @@
## TD connection Implementation
# mock one
td.implementation=td2jira.td.api.mock.Connection
-# real TD
+# real TD v9
#td.implementation=td2jira.td.api.dcom.Connection
+# real TD v8
+#td.implementation=td2jira.td.api.dcomv8.Connection
# TD connection data (disabled by default: mock TD is used; change td.implementation to DCOM one to enable)
td.user=FILLME
Modified: trunk/td2jira/src/td2jira/td/api/dcom/Connection.java
===================================================================
--- trunk/td2jira/src/td2jira/td/api/dcom/Connection.java 2007-10-04 09:47:42 UTC (rev 36)
+++ trunk/td2jira/src/td2jira/td/api/dcom/Connection.java 2007-10-04 09:53:01 UTC (rev 37)
@@ -63,7 +63,7 @@
public void disconnect() {
loggedIn = false;
- Dispatch.call(this, "DisconnectProject");
- Dispatch.call(this, "ReleaseConnection");
+ disconnectProject();
+ releaseConnection();
}
}
Modified: trunk/td2jira/src/td2jira/td/api/dcomv8/Bug.java
===================================================================
--- trunk/td2jira/src/td2jira/td/api/dcomv8/Bug.java 2007-10-04 09:47:42 UTC (rev 36)
+++ trunk/td2jira/src/td2jira/td/api/dcomv8/Bug.java 2007-10-04 09:53:01 UTC (rev 37)
@@ -1,10 +1,6 @@
package td2jira.td.api.dcomv8;
-import java.io.BufferedInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
+import java.io.*;
import java.util.ArrayList;
import java.util.List;
@@ -35,7 +31,7 @@
}
public String getId() {
- return getPropertyAsString("ID");
+ return getProperty("ID").toString();
}
public String getSummary() {
@@ -51,7 +47,6 @@
}
public String getDetectedBy() {
- // getFieldAsString("BG_DETECTED_BY")
return getPropertyAsString("DetectedBy");
}
@@ -61,7 +56,10 @@
public String getFieldAsString(String field) {
Variant res = Dispatch.call(this, "Field", field);
- if (res.getvt() != 8 && res.getvt() != 0)
+ if (res.getvt() == 0) {
+ return null;
+ }
+ if (res.getvt() != 8)
System.err.println("TD field is not a String type " + field + " " + res.getvt());
return res.getString();
}
@@ -128,10 +126,8 @@
public void lockObject() {
if (isLocked()) {
throw new RuntimeException("Bug locked by another user");
- } else {
- Dispatch.call(this, "LockObject");
- return;
}
+ Dispatch.call(this, "LockObject");
}
public void unlockObject() {
@@ -198,6 +194,7 @@
if (!fileName.endsWith(attachmentName)) continue;
Dispatch.get(item, "Data");
+
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
InputStream fis = new BufferedInputStream(new FileInputStream(fileName));
@@ -208,7 +205,7 @@
}
fis.close();
baos.close();
- } catch (Exception ex) {
+ } catch (IOException ex) {
throw new RuntimeException(ex);
}
Modified: trunk/td2jira/src/td2jira/td/api/dcomv8/Connection.java
===================================================================
--- trunk/td2jira/src/td2jira/td/api/dcomv8/Connection.java 2007-10-04 09:47:42 UTC (rev 36)
+++ trunk/td2jira/src/td2jira/td/api/dcomv8/Connection.java 2007-10-04 09:53:01 UTC (rev 37)
@@ -9,11 +9,14 @@
public class Connection extends ActiveXComponent implements IConnection {
public Connection(String server, String domain, String project, String user, String pass) {
super("TDApiOle80.TDConnection");
- initConnectionEx(server);
- login(user, pass);
- connect(domain, project);
+ this.initConnectionEx(server);
+ this.connectProjectEx(domain, project, user, pass);
}
+ public void connectProjectEx(String domain, String project, String user, String passw) {
+ Dispatch.call(this, "ConnectProjectEx", domain, project, user, passw);
+ }
+
boolean loggedIn = false;
public void login(String user, String pass) {
@@ -22,7 +25,8 @@
}
public void logout() {
- Dispatch.call(this, "Logout");
+ // TODO investigate how to achieve that in TD API v8.
+ //Dispatch.call(this, "Logout");
loggedIn = false;
}
@@ -38,11 +42,6 @@
Dispatch.call(this, "InitConnectionEx", serverName);
}
- public void connectProjectEx(String domain, String project, String user, String pass) {
- login(user, pass);
- connect(domain, project);
- }
-
public void disconnectProject() {
loggedIn = false;
Dispatch.call(this, "DisconnectProject");
@@ -62,8 +61,7 @@
}
public void disconnect() {
- loggedIn = false;
- Dispatch.call(this, "DisconnectProject");
- Dispatch.call(this, "ReleaseConnection");
+ disconnectProject();
+ releaseConnection();
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lac...@us...> - 2007-10-04 09:47:40
|
Revision: 36
http://td2jira.svn.sourceforge.net/td2jira/?rev=36&view=rev
Author: lacostej
Date: 2007-10-04 02:47:42 -0700 (Thu, 04 Oct 2007)
Log Message:
-----------
reformat site front page
Modified Paths:
--------------
trunk/td2jira/docs/index.html
Modified: trunk/td2jira/docs/index.html
===================================================================
--- trunk/td2jira/docs/index.html 2007-10-04 09:47:14 UTC (rev 35)
+++ trunk/td2jira/docs/index.html 2007-10-04 09:47:42 UTC (rev 36)
@@ -2,39 +2,40 @@
<html>
<head>
- <title>Vladimir.Dyuzhev - Test Director To JIRA Sync </title>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
- <style type="text/css">
- #g_title p, #g_footer p, #g_description p {
- margin: 0;
- }
+<title>Vladimir.Dyuzhev - Test Director To JIRA Sync </title>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<style type="text/css">
+#g_title p, #g_footer p, #g_description p {
+ margin: 0;
+}
+
/*
- -- -- -- -- -- -- --
- Browser Fixes
- -- -- -- -- -- -- --
-
- This file uses CSS filtering methods to fix various
- layout bugs.
+ -- -- -- -- -- -- --
+ Browser Fixes
+ -- -- -- -- -- -- --
- Each of the following three imported files is a
- separate, browser-specific CSS file that keeps all
- hacks out of the main style sheet.
-
- Over time, as supporting these browsers no longer
- remains a priority, cleaning up the hacks is as
- easy as deleting the @import statement below, or
- simply no longer linking this file from the HTML.
-
+ This file uses CSS filtering methods to fix various
+ layout bugs.
+
+ Each of the following three imported files is a
+ separate, browser-specific CSS file that keeps all
+ hacks out of the main style sheet.
+
+ Over time, as supporting these browsers no longer
+ remains a priority, cleaning up the hacks is as
+ easy as deleting the @import statement below, or
+ simply no longer linking this file from the HTML.
+
*/
/*
fix ie6 "peekaboo bug" using the "holly hack".
Note, this style only gets applied to ie6
*/
- * html .wrapper {
- height: 0.1%;
- }
+* html .wrapper {
+ height: 0.1%;
+}
/*
* IE5 mac - overrides the IE/Win hack
@@ -48,40 +49,48 @@
/**/
+ /*
+ * IE5/Win-specific CSS -ensures #container wraps all content on window resize
+ */
- /*
- * IE5/Win-specific CSS -ensures #container wraps all content on window resize
- */
+@media
+tty
+{
+i {
+ content: "\";/*" "*/}} * html #container { height: 1%; } /*";
+}
- @media tty {
- i{content:"\";/*" "*/}} * html #container { height: 1%; } /*";}
- }/* */
- /* Styling for editable elements. Eventually, this will be part of the style. */
- .editable {
- border: 1px dashed blue;
- }
-
- #footer {
- clear: both;
- }
-
- /* Extra divs hidden by default. The custom CSS can override this though */
- #extraDiv1, #extraDiv2, #extraDiv3, #extraDiv4, #extraDiv5, #extraDiv6 {
- display: none;
- }
-
- a img,:link img,:visited img {border: none;}
+}
+/* */
+/* Styling for editable elements. Eventually, this will be part of the style. */
+.editable {
+ border: 1px dashed blue;
+}
+#footer {
+ clear: both;
+}
- body {
- text-align: center;
- }
- #container {
- width: 718px;
- text-align: left;
- margin: 0 auto;
- }
- /** BEGIN CUSTOM SKIN **/
+/* Extra divs hidden by default. The custom CSS can override this though */
+#extraDiv1, #extraDiv2, #extraDiv3, #extraDiv4, #extraDiv5, #extraDiv6 {
+ display: none;
+}
+
+a img, :link img, :visited img {
+ border: none;
+}
+
+body {
+ text-align: center;
+}
+
+#container {
+ width: 718px;
+ text-align: left;
+ margin: 0 auto;
+}
+
+/** BEGIN CUSTOM SKIN **/
/*
-- -- -- -- -- -- --
@@ -93,158 +102,528 @@
*/
- h1,h2,h3,h4,h5,h6,pre,code,p {font-size: 1em;}
- dl,li,dt,dd,h1,h2,h3,h4,h5,h6,pre,form,body,html,p,blockquote,fieldset,input {margin: 0; padding: 0;}
- a img,:link img,:visited img {border: none;}
- address {font-style: normal;}html {background:#eee;}
- body {background:#eee;font-family:'Verdana','Helvetica', 'Arial', sans-serif;font-size:0.85em;}
- a {color:#00c;text-decoration:underline !important;}
- a:visited {color:#551a8b;}
- b, strong {font-weight:bold;}
- blockquote {border-left:1px solid #ccc;margin:1em 3em;padding-left:1em;font-size:0.9em;}
- blockquote p {line-height:1.45em;}
- em {font-style:italic;}
- h1, h2, h3, h4, h5, h6 {font-weight:normal;margin:1.5em 0 0.5em 0;}
- h1 {font-size:2.25em;color:#666;margin:0;}
- h2 {font-size:1.5em;color:#333;}
- h3 {font-size:1.3em;}
- h4 {font-size:1.15em;}
- h5 {font-size:1em;}
- h6 {font-size:0.8em;}
- p, li {color:#000;line-height:1.75em;margin:0 0 1.5em 0;}
- blockquote p, table p, dd p, li p, #header p {margin-bottom:0.5em;}
- ul, ol {margin:1em 0; padding-left: 1.6em;}
- li {margin:0.25em 0;}
- ul li {list-style-type:disc;}
- ol li {list-style-type:decimal;}
- table {border:1px solid #ccc;border-width:1px 1px 0 1px;}
- table caption {display:block;font-style:italic;white-space:nowrap;margin:0.5em 1em;}
- table td, table th {padding:0.5em 1em;text-align:left;vertical-align:top;}
- table th {font-weight:bold;border-bottom:1px solid #999;}
- table td {border-bottom:1px solid #ddd;}
+h1, h2, h3, h4, h5, h6, pre, code, p {
+ font-size: 1em;
+}
- dl {margin:1em;line-height:1.5em;list-style-type:disc;}
- dt {font-weight:bold;margin-top:0.5em;}
- dd {margin-left:2em;}
+dl, li, dt, dd, h1, h2, h3, h4, h5, h6, pre, form, body, html, p, blockquote, fieldset, input {
+ margin: 0;
+ padding: 0;
+}
- #adsense {text-align:center;}
- #container {
- padding: 25px 40px 10px 40px;
- border: 1px solid #ccc;
- background:#fff;
- margin:1em auto;
- }
- #footer {border-top:1px solid #ccc;margin-top:2em;}
- #header {border-bottom:1px solid #ccc;margin-bottom:2em;}
- #sidebar {font-size:1.0em;}
- #sidebar :first-child {margin-top:0;}
- #sidebar-alternate {font-size:1.0em;}
- #sidebar-alternate :first-child {margin-top:0;}
- #main-content {background:#fff;}
- #main-content h2:first-child {margin-top:0;}
+a img, :link img, :visited img {
+ border: none;
+}
- @media print {
- html {background:#fff !important;}
- #container {border-width:0px !important;padding:0 !important;}
- }
+address {
+ font-style: normal;
+}
+html {
+ background: #eee;
+}
+
+body {
+ background: #eee;
+ font-family: 'Verdana', 'Helvetica', 'Arial', sans-serif;
+ font-size: 0.85em;
+}
+
+a {
+ color: #00c;
+ text-decoration: underline !important;
+}
+
+a:visited {
+ color: #551a8b;
+}
+
+b, strong {
+ font-weight: bold;
+}
+
+blockquote {
+ border-left: 1px solid #ccc;
+ margin: 1em 3em;
+ padding-left: 1em;
+ font-size: 0.9em;
+}
+
+blockquote p {
+ line-height: 1.45em;
+}
+
+em {
+ font-style: italic;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ font-weight: normal;
+ margin: 1.5em 0 0.5em 0;
+}
+
+h1 {
+ font-size: 2.25em;
+ color: #666;
+ margin: 0;
+}
+
+h2 {
+ font-size: 1.5em;
+ color: #333;
+}
+
+h3 {
+ font-size: 1.3em;
+}
+
+h4 {
+ font-size: 1.15em;
+}
+
+h5 {
+ font-size: 1em;
+}
+
+h6 {
+ font-size: 0.8em;
+}
+
+p, li {
+ color: #000;
+ line-height: 1.75em;
+ margin: 0 0 1.5em 0;
+}
+
+blockquote p, table p, dd p, li p, #header p {
+ margin-bottom: 0.5em;
+}
+
+ul, ol {
+ margin: 1em 0;
+ padding-left: 1.6em;
+}
+
+li {
+ margin: 0.25em 0;
+}
+
+ul li {
+ list-style-type: disc;
+}
+
+ol li {
+ list-style-type: decimal;
+}
+
+table {
+ border: 1px solid #ccc;
+ border-width: 1px 1px 0 1px;
+}
+
+table caption {
+ display: block;
+ font-style: italic;
+ white-space: nowrap;
+ margin: 0.5em 1em;
+}
+
+table td, table th {
+ padding: 0.5em 1em;
+ text-align: left;
+ vertical-align: top;
+}
+
+table th {
+ font-weight: bold;
+ border-bottom: 1px solid #999;
+}
+
+table td {
+ border-bottom: 1px solid #ddd;
+}
+
+dl {
+ margin: 1em;
+ line-height: 1.5em;
+ list-style-type: disc;
+}
+
+dt {
+ font-weight: bold;
+ margin-top: 0.5em;
+}
+
+dd {
+ margin-left: 2em;
+}
+
+#adsense {
+ text-align: center;
+}
+
+#container {
+ padding: 25px 40px 10px 40px;
+ border: 1px solid #ccc;
+ background: #fff;
+ margin: 1em auto;
+}
+
+#footer {
+ border-top: 1px solid #ccc;
+ margin-top: 2em;
+}
+
+#header {
+ border-bottom: 1px solid #ccc;
+ margin-bottom: 2em;
+}
+
+#sidebar {
+ font-size: 1.0em;
+}
+
+#sidebar :first-child {
+ margin-top: 0;
+}
+
+#sidebar-alternate {
+ font-size: 1.0em;
+}
+
+#sidebar-alternate :first-child {
+ margin-top: 0;
+}
+
+#main-content {
+ background: #fff;
+}
+
+#main-content h2:first-child {
+ margin-top: 0;
+}
+
+@media
+print
+{
+html {
+ background: #fff !important;
+}
+
+#container {
+ border-width: 0px !important;
+ padding: 0 !important;
+}
+
+}
+
/* Tweaks for Three-column layout
----------------------------------------------- */
- #threecolumn #main-content .wrapper {padding:0 25px;}
+#threecolumn #main-content .wrapper {
+ padding: 0 25px;
+}
/* Tweaks for Two-column Left layout
----------------------------------------------- */
- #twocolumn-left #main-content .wrapper {padding-left:25px;}
+#twocolumn-left #main-content .wrapper {
+ padding-left: 25px;
+}
/* Tweaks for Two-column Right layout
----------------------------------------------- */
- #twocolumn-right #main-content .wrapper {padding-right:25px;}
+#twocolumn-right #main-content .wrapper {
+ padding-right: 25px;
+}
/* Tweaks for Two-column Liquid layout
----------------------------------------------- */
- #twocolumn-liquid-right #container {margin:1em 1em;}
- #twocolumn-liquid-right #main-content .wrapper {padding-right:25px;}
- #twocolumn-liquid-left #container {margin:1em 1em;}
- #twocolumn-liquid-left #main-content .wrapper {padding-left:25px;}
+#twocolumn-liquid-right #container {
+ margin: 1em 1em;
+}
+#twocolumn-liquid-right #main-content .wrapper {
+ padding-right: 25px;
+}
+
+#twocolumn-liquid-left #container {
+ margin: 1em 1em;
+}
+
+#twocolumn-liquid-left #main-content .wrapper {
+ padding-left: 25px;
+}
+
/* Tweaks for One-column Liquid layout
----------------------------------------------- */
/* Tweaks for One-column layout
----------------------------------------------- */
- #onecolumn #main-content .wrapper {padding-left:0;}
+#onecolumn #main-content .wrapper {
+ padding-left: 0;
+}
- /* ie5win */
- @media tty { i{content:"\";/*" "*/}} * html #container { padding: 25px 0px 10px 10px; } /*";}
- }/* */
+/* ie5win */
+@media
+tty
+{
+i {
+ content: "\";/*" "*/}} * html #container { padding: 25px 0px 10px 10px; } /*";
+}
- /** END CUSTOM SKIN **/
- </style>
+}
+/* */
- <!-- Hack to avoid flash of unstyled content in IE -->
- <script> </script>
+/** END CUSTOM SKIN **/
+</style>
+
+<!-- Hack to avoid flash of unstyled content in IE -->
+<script></script>
</head>
<body id="onecolumn">
- <div id="container">
- <div class="wrapper">
- <div id="header">
- <div class="wrapper">
- <h1 id="page-title"><div id='g_title'><p style="text-align: left;">Test Director To JIRA Sync </p></div></h1>
- <div style="clear: both;"></div>
- <p class="description"><div id='g_description'><p style="text-align: left;">Quick'n'Dirty Way to Share The Issues With Your QA Team<br> </p></div></p>
- <div style="clear: both"></div>
- </div>
+<div id="container">
+ <div class="wrapper">
+ <div id="header">
+ <div class="wrapper">
+ <h1 id="page-title">
+
+ <div id='g_title'><p style="text-align: left;">Test Director To JIRA Sync </p></div>
+ </h1>
+ <div style="clear: both;"></div>
+ <p class="description">
+
+ <div id='g_description'><p style="text-align: left;">Quick'n'Dirty Way to Share The Issues With Your QA
+ Team<br></p></div>
+ </p>
+ <div style="clear: both"></div>
</div>
- <!-- /editable --><!-- /wrapper --><!-- /header -->
- <div id="main-content">
-
- <div class="wrapper">
- <div class="content-item "><div id='g_body'><h2>What it is and How it works<br></h2><p>This is a small application that allows developers (who use JIRA issue tracker) and QA Team (who uses Test Director/Quality Center 9) to synchronize issues and comments. Typically during SIT or UAT cycle QA record found issues in TestDirector, and developers should take care of them. But developers prefer to use JIRA (which is superior as a <b>developer's </b>tool). Developers have workflows defined in JIRA. Developers also don't want to share all the internal communication happening during issues resolution (in fact, TD has a limit for dev comments field, so extensive conversations could not be stored in TD). TD2JIRA allows QA work with TD, and developers work with JIRA, while having the same issues information.<br></p><p>When TD2JIRA<b> </b>runs, it loads all the issues from specified TD project, and finds (or creates) a corresponding issue in JIRA project. New TD comments get copied into JIRA issue. New TD file attachments get copied into JIRA too. Specially marked JIRA comments (those that <b>should be</b> read by QA) are copied back into TD. TD2JIRA also updates AssignedTo field in TD to bring it in sync with JIRA, so management can see who's working on a particular task.<br></p><p>Only the issues created in TD get pushed into JIRA, not the other way around. It's TD2JIRA, not JIRA2TD.</p><p>TD2JIRA has a (primitive) rule-engine built-in, so every team can adjust the logic according to their workflow and requirements.</p><p>N.B. To track TD-based JIRA issues, TD2JIRA uses Summary prefix. By default, it's "DEFECT", so if we have a TD issue 123 with summary "A Bug", then JIRA issue would have a summary "DEFECT 123: A Bug". Please choose your prefix (jira.summary.prefix property) to be unique enough for a full-text search.<br></p><h2>Download</h2><p>Latest packaged version can be downloaded here: <a href="http://td2jira.sourceforge.net/td2jira.zip">td2jira.zip</a> </p><h2>Installation</h2><p>TD2JIRA runs <b>only</b> on Windows. Not my fault: TD remote interface is DCOM, and the only (free) way to talk DCOM from Java is to use native calls on Windows platform. Sorry.<br></p><p>TD2JIRA is distributed as an ant-based Java project. Default target is to start synchronization (a.k.a. <i>ant sync</i>). Once started, it will perform it's duty forever, with 5 min sync interval (by default).<br></p><p>There is a file called td2jira.properties, which can be modified to adjust to your environment. By default the file defines a fake TD project (a mock) connected to jira.atlassian.com TST project:</p><p><font size="2"><span style="font-family: courier new,monospace;"># JIRA connection data</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">jira.url=http://jira.atlassian.com</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">jira.user=myid</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">jira.password=mypassword</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">jira.project=TST</span></font><br style="font-family: courier new,monospace;"></p><p>but the jira.user and jira.password are not valid -- you'll have to register on http://jira.atlassian.com to make it work. TD settings, although specified in the property file, are not in effect because of another property:</p><p><font size="2"><span style="font-family: courier new,monospace;"># TD connection Implementation</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">td.implementation=td2jira.td.api.mock.Connection</span></font><br></p><p>This means that instead of connecting to "real" TD installation, TD2JIRA will generate TD issues internally, add comments and attachments to them, and walk them through workflow. This mode helps to play with TD2JIRA and your environment before bothering QA team. I recommend you to setup an empty test project in JIRA, and point TD2JIRA with mock connection there. When you're sure all information is propagated correctly (no duplicate issues or comments, files are not corrupted, ...) you may try connect TD2JIRA to real TD, still pointing to the test JIRA project (better create another, clean, one). And only when it's still OK, move into real-TD-to-real-JIRA mode.</p><p>There are a plenty of other configuration properties in td2jira.properties, but they are either self-describing, or have comments, so I'll skip them altogether.<br></p><h2>Default Rules<br></h2><p>There is a set of rules that comes with the distribution. These rules are not the best by any means, these are just the rules used in the company I'm currently working for. Nevertheless, I'll describe those rules here to give you an example:</p><p><font size="2">1. class=td2jira.sync.impl.SyncIssues;<br>2. class=td2jira.sync.impl.SyncAttachments;<br>3. td.status=Closed|Rejected,jira.status=Open|Assigned To Fix|Assigned To Merge|Assigned To Review|Resolved,class=td2jira.sync.impl.CloseJiraIssue;<br>4. td.status=Reopen|Assigned,jira=null,class=td2jira.sync.impl.CreateJiraIssue;<br>5. td.status=New|Open|Reopen|Assigned,jira.status=Resolved,class=td2jira.sync.impl.MarkTdIssueAsFixed; 6. td.status=Reopen|Assigned,jira.status=Closed,class=td2jira.sync.impl.RecreateJiraIssue;<br>7. td.status=Fixed,jira.status=Closed,class=td2jira.sync.impl.AskToRetest;</font><br></p><p>which means:</p><ul><li>sync issues comments first (regardless ofl statuses)</li><li>sync attachments (from TD issue to JIRA issue)</li><li>if TD issue is Closed or Rejected, and JIRA issue is Open or Assigned or ... then close JIRA issue</li><li>if TD issue is Reopened or Assigned, and no JIRA issue found, create JIRA issue</li><li>... and so on</li></ul><p>Basically, it's a simple rule engine. You may create your own handlers (implementing td2jira.sync.impl.IProcessIssuePair). See existing implementations for details.</p><h2>Two ways to access JIRA</h2><p>JIRA has SOAP and XML-RPC interfaces. Despite SOAP API is much more powerful, the default for TD2JIRA is XML-RPC. The reason is that SOAP API is not compatible among even minor versions of JIRA (new methods, new fields in types), while XML-RPC works almost always. In light of mentioned above bug with addAttachmentsToIssue, there is no real reason to use SOAP out of the box until Atlassian stabilize their SOAP API for major operations. </p><p>The access mode is switched by the property:</p><p><font size="2"><span style="font-family: courier new,monospace;"># Connector Implementation</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">jira.connector.implementation=td2jira.jira.xmlrpc.JIRAXmlRpcConnector</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"># jira.connector.implementation=td2jira.jira.soap.JIRASoapConnector</span></font><br></p><h2>Limitations</h2><p>Current version (1.0) doesn't support copying attachments via SOAP. Instead, it does a HTTP POST to AttachFile JSP. The reason is twofold. First, the JIRA WSDL file seems to be incorrect, and uses byte[][] instead of base64-encoded files. In fact, modern WS tools (including JAXB and .NET 2.0) refuse to compile the WSDL. Axis 1.4 happily compiles it though, but (it's second) resulting message is enormous in size (700K for 3K file, grows proportionally). Hence, the WSDL's addAttachmentToIssue() method is unusable. <br></p><h2>F.A.Q.</h2><p>Q1. Does TD2JIRA support HTTP proxy? </p><p>A1: It does. In fact, it even supports proxy authorization. I failed to use NTLM authentication in attach file though. The request comes through, it looks like, but something is still wrong, and JIRA fails.</p><p>Q2: How to make TD2JIRA copy a comment from JIRA to TD?</p><p>A2: Provide a "2qa:" prefix to your comment. TD2JIRA will create a matching comment in TD. To assign the task to someone in TD use "2qa:tduserid", like here:</p><p><span style="font-family: courier new,monospace;">2qa: Please retest<br>2qa:johnmk This works as documented, please reject</span></p><p><span style="font-family: arial,sans-serif;"></span>In fact, it's a hackish way. The Right Way (tm) would be to check the JIRA comment group (visible to developers, ...) and copy it to TD if it's visible to everyone. It's not hard to do. Anyone?</p><p>Q3: Can TD2JIRA be used to sync TD and/or JIRA with <insert your legacy tool here>?</p><p>A3: Not out of the box. But the logic and design (well, it's too simple for calling it "architecture") of the application can be used as a template for creating similar tools (or even plugging in more target applications into TD2JIRA itself).<br></p><h2>Support</h2><p>No support whatsoever. I can answer some general questions, but don't expect me to modify TD2JIRA for your needs. You're developers, figure it out yourselves!<br></p><h2>License</h2><p>BSD-Style:</p><p>
- Redistribution and use in source and binary forms,
- with or without modification, are permitted provided
- that the following conditions are met:
- </p>
+ </div>
+ <!-- /editable --><!-- /wrapper --><!-- /header -->
+ <div id="main-content">
- <ul><li>
- Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- </li><li>
- Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
- </li></ul>
+ <div class="wrapper">
+ <div class="content-item ">
+ <div id='g_body'><h2>What it is and How it works<br></h2>
- <p>
- <b>
- THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
- THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
- OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</b></p><h2><b>Author</b></h2><p>This software was designed and implemented by me, <a href="http://vladimir-dyuzhev.net">Vladimir Dyuzhev</a>. Feel free to <a href="mailto:Vla...@gm...">email</a> me.<br></p><p>
- </p><p></p></div></div>
- <div style="clear: both"></div>
+ <p>This is a small application that allows developers (who use JIRA issue tracker) and QA Team (who uses
+ Test Director/Quality Center 9) to synchronize issues and comments. Typically during SIT or UAT cycle QA
+ record found issues in TestDirector, and developers should take care of them. But developers prefer to use
+ JIRA (which is superior as a <b>developer's </b>tool). Developers have workflows defined in JIRA.
+ Developers also don't want to share all the internal communication happening during issues resolution
+ (in fact, TD has a limit for dev comments field, so extensive conversations could not be stored in TD).
+ TD2JIRA allows QA work with TD, and developers work with JIRA, while having the same issues
+ information.<br></p>
+
+ <p>When TD2JIRA<b> </b>runs, it loads all the issues from specified TD project, and finds (or creates) a
+ corresponding issue in JIRA project. New TD comments get copied into JIRA issue. New TD file attachments
+ get copied into JIRA too. Specially marked JIRA comments (those that <b>should be</b> read by QA) are
+ copied back into TD. TD2JIRA also updates AssignedTo field in TD to bring it in sync with JIRA, so
+ management can see who's working on a particular task.<br></p>
+
+ <p>Only the issues created in TD get pushed into JIRA, not the other way around. It's TD2JIRA, not
+ JIRA2TD.</p>
+
+ <p>TD2JIRA has a (primitive) rule-engine built-in, so every team can adjust the logic according to their
+ workflow and requirements.</p>
+
+ <p>N.B. To track TD-based JIRA issues, TD2JIRA uses Summary prefix. By default, it's "DEFECT",
+ so if we have a TD issue 123 with summary "A Bug", then JIRA issue would have a summary "DEFECT
+ 123: A Bug". Please choose your prefix (jira.summary.prefix property) to be unique enough for a
+ full-text search.<br></p>
+
+ <h2>Download</h2>
+
+ <p>Latest packaged version can be downloaded here: <a href="http://td2jira.sourceforge.net/td2jira.zip">td2jira.zip</a>
+ </p>
+
+ <h2>Installation</h2>
+
+ <p>TD2JIRA runs <b>only</b> on Windows. Not my fault: TD remote interface is DCOM, and the only (free) way
+ to talk DCOM from Java is to use native calls on Windows platform. Sorry.<br></p>
+
+ <p>TD2JIRA is distributed as an ant-based Java project. Default target is to start synchronization (a.k.a.
+ <i>ant sync</i>). Once started, it will perform it's duty forever, with 5 min sync interval (by
+ default).<br></p>
+
+ <p>There is a file called td2jira.properties, which can be modified to adjust to your environment. By
+ default the file defines a fake TD project (a mock) connected to jira.atlassian.com TST project:</p>
+
+ <p><font size="2"><span style="font-family: courier new,monospace;"># JIRA connection data</span><br
+ style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">jira.url=http://jira.atlassian.com</span><br
+ style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">jira.user=myid</span><br
+ style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">jira.password=mypassword</span><br
+ style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">jira.project=TST</span></font><br
+ style="font-family: courier new,monospace;"></p>
+
+ <p>but the jira.user and jira.password are not valid -- you'll have to register on
+ http://jira.atlassian.com to make it work. TD settings, although specified in the property file, are not
+ in effect because of another property:</p>
+
+ <p><font size="2"><span style="font-family: courier new,monospace;"># TD connection Implementation</span><br
+ style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">td.implementation=td2jira.td.api.mock.Connection</span></font><br>
+ </p>
+
+ <p>This means that instead of connecting to "real" TD installation, TD2JIRA will generate TD
+ issues internally, add comments and attachments to them, and walk them through workflow. This mode helps
+ to play with TD2JIRA and your environment before bothering QA team. I recommend you to setup an empty test
+ project in JIRA, and point TD2JIRA with mock connection there. When you're sure all information is
+ propagated correctly (no duplicate issues or comments, files are not corrupted, ...) you may try connect
+ TD2JIRA to real TD, still pointing to the test JIRA project (better create another, clean, one). And only
+ when it's still OK, move into real-TD-to-real-JIRA mode.</p>
+
+ <p>There are a plenty of other configuration properties in td2jira.properties, but they are either
+ self-describing, or have comments, so I'll skip them altogether.<br></p>
+
+ <h2>Default Rules<br></h2>
+
+ <p>There is a set of rules that comes with the distribution. These rules are not the best by any means,
+ these are just the rules used in the company I'm currently working for. Nevertheless, I'll
+ describe those rules here to give you an example:</p>
+
+ <p><font size="2">1. class=td2jira.sync.impl.SyncIssues;<br>2. class=td2jira.sync.impl.SyncAttachments;<br>3.
+ td.status=Closed|Rejected,jira.status=Open|Assigned To Fix|Assigned To Merge|Assigned To
+ Review|Resolved,class=td2jira.sync.impl.CloseJiraIssue;<br>4.
+ td.status=Reopen|Assigned,jira=null,class=td2jira.sync.impl.CreateJiraIssue;<br>5.
+ td.status=New|Open|Reopen|Assigned,jira.status=Resolved,class=td2jira.sync.impl.MarkTdIssueAsFixed; 6.
+ td.status=Reopen|Assigned,jira.status=Closed,class=td2jira.sync.impl.RecreateJiraIssue;<br>7.
+ td.status=Fixed,jira.status=Closed,class=td2jira.sync.impl.AskToRetest;</font><br></p>
+
+ <p>which means:</p>
+ <ul>
+ <li>sync issues comments first (regardless ofl statuses)</li>
+ <li>sync attachments (from TD issue to JIRA issue)</li>
+ <li>if TD issue is Closed or Rejected, and JIRA issue is Open or Assigned or ... then close JIRA issue
+ </li>
+ <li>if TD issue is Reopened or Assigned, and no JIRA issue found, create JIRA issue</li>
+ <li>... and so on</li>
+ </ul>
+ <p>Basically, it's a simple rule engine. You may create your own handlers (implementing
+ td2jira.sync.impl.IProcessIssuePair). See existing implementations for details.</p>
+
+ <h2>Two ways to access JIRA</h2>
+
+ <p>JIRA has SOAP and XML-RPC interfaces. Despite SOAP API is much more powerful, the default for TD2JIRA is
+ XML-RPC. The reason is that SOAP API is not compatible among even minor versions of JIRA (new methods, new
+ fields in types), while XML-RPC works almost always. In light of mentioned above bug with
+ addAttachmentsToIssue, there is no real reason to use SOAP out of the box until Atlassian stabilize their
+ SOAP API for major operations. </p>
+
+ <p>The access mode is switched by the property:</p>
+
+ <p><font size="2"><span style="font-family: courier new,monospace;"># Connector Implementation</span><br
+ style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">jira.connector.implementation=td2jira.jira.xmlrpc.JIRAXmlRpcConnector</span><br
+ style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"># jira.connector.implementation=td2jira.jira.soap.JIRASoapConnector</span></font><br>
+ </p>
+
+ <h2>Limitations</h2>
+
+ <p>Current version (1.0) doesn't support copying attachments via SOAP. Instead, it does a HTTP POST to
+ AttachFile JSP. The reason is twofold. First, the JIRA WSDL file seems to be incorrect, and uses byte[][]
+ instead of base64-encoded files. In fact, modern WS tools (including JAXB and .NET 2.0) refuse to compile
+ the WSDL. Axis 1.4 happily compiles it though, but (it's second) resulting message is enormous in size
+ (700K for 3K file, grows proportionally). Hence, the WSDL's addAttachmentToIssue() method is unusable.
+ <br></p>
+
+ <h2>F.A.Q.</h2>
+
+ <p>Q1. Does TD2JIRA support HTTP proxy? </p>
+
+ <p>A1: It does. In fact, it even supports proxy authorization. I failed to use NTLM authentication in attach
+ file though. The request comes through, it looks like, but something is still wrong, and JIRA fails.</p>
+
+ <p>Q2: How to make TD2JIRA copy a comment from JIRA to TD?</p>
+
+ <p>A2: Provide a "2qa:" prefix to your comment. TD2JIRA will create a matching comment in TD. To
+ assign the task to someone in TD use "2qa:tduserid", like here:</p>
+
+ <p><span style="font-family: courier new,monospace;">2qa: Please retest<br>2qa:johnmk This works as documented, please reject</span>
+ </p>
+
+ <p><span style="font-family: arial,sans-serif;"></span>In fact, it's a hackish way. The Right Way (tm)
+ would be to check the JIRA comment group (visible to developers, ...) and copy it to TD if it's
+ visible to everyone. It's not hard to do. Anyone?</p>
+
+ <p>Q3: Can TD2JIRA be used to sync TD and/or JIRA with <insert your legacy tool here>?</p>
+
+ <p>A3: Not out of the box. But the logic and design (well, it's too simple for calling it "architecture")
+ of the application can be used as a template for creating similar tools (or even plugging in more target
+ applications into TD2JIRA itself).<br></p>
+
+ <h2>Support</h2>
+
+ <p>No support whatsoever. I can answer some general questions, but don't expect me to modify TD2JIRA for
+ your needs. You're developers, figure it out yourselves!<br></p>
+
+ <h2>License</h2>
+
+ <p>BSD-Style:</p>
+
+ <p>
+ Redistribution and use in source and binary forms,
+ with or without modification, are permitted provided
+ that the following conditions are met:
+ </p>
+
+ <ul>
+ <li>
+ Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ </li>
+ <li>
+ Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ </li>
+ </ul>
+
+ <p>
+ <b>
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+ THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</b></p>
+
+ <h2><b>Author</b></h2>
+
+ <p>This software was designed and implemented by me, <a href="http://vladimir-dyuzhev.net">Vladimir
+ Dyuzhev</a>. Feel free to <a href="mailto:Vla...@gm...">email</a> me.<br></p>
+
+ <p>
+ </p>
+
+ <p></p></div>
</div>
+ <div style="clear: both"></div>
</div>
- <!-- /wrapper --><!-- /main-content -->
- <div id="footer"><div class="wrapper">
- <hr />
- <p><div id='g_footer'><p style="text-align: center;">(C) Vladimir Dyuzhev 2007 </p></div></p>
+ </div>
+ <!-- /wrapper --><!-- /main-content -->
+ <div id="footer">
+ <div class="wrapper">
+ <hr/>
+ <p>
+
+ <div id='g_footer'><p style="text-align: center;">(C) Vladimir Dyuzhev 2007 </p></div>
+ </p>
<div style="clear: both"></div>
- </div></div>
- <!-- /wrapper --><!-- /footer -->
+ </div>
</div>
+ <!-- /wrapper --><!-- /footer -->
</div>
+</div>
<!-- /wrapper --><!-- /container -->
-<div id="extraDiv1"><span></span></div><div id="extraDiv2"><span></span></div>
-<div id="extraDiv3"><span></span></div><div id="extraDiv4"><span></span></div>
-<div id="extraDiv5"><span></span></div><div id="extraDiv6"><span></span></div>
+<div id="extraDiv1"><span></span></div>
+<div id="extraDiv2"><span></span></div>
+<div id="extraDiv3"><span></span></div>
+<div id="extraDiv4"><span></span></div>
+<div id="extraDiv5"><span></span></div>
+<div id="extraDiv6"><span></span></div>
</body>
</html>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lac...@us...> - 2007-10-04 09:47:15
|
Revision: 35
http://td2jira.svn.sourceforge.net/td2jira/?rev=35&view=rev
Author: lacostej
Date: 2007-10-04 02:47:14 -0700 (Thu, 04 Oct 2007)
Log Message:
-----------
Document example td2jira.properties file
Added Paths:
-----------
trunk/td2jira/etc/td2jira.properties.example
Added: trunk/td2jira/etc/td2jira.properties.example
===================================================================
--- trunk/td2jira/etc/td2jira.properties.example (rev 0)
+++ trunk/td2jira/etc/td2jira.properties.example 2007-10-04 09:47:14 UTC (rev 35)
@@ -0,0 +1,75 @@
+# td2jira.properties example
+# to copy into etc/td2jira.properties and configure appropriately
+#
+# By default this config will do nothing real (it uses a mock TD connection and a single issue to synchronize)
+
+## For debug: process specific TD issue only
+# configure and test, then disable when happy
+sync.only.td.id=0
+
+
+## TD connection Implementation
+# mock one
+td.implementation=td2jira.td.api.mock.Connection
+# real TD
+#td.implementation=td2jira.td.api.dcom.Connection
+
+# TD connection data (disabled by default: mock TD is used; change td.implementation to DCOM one to enable)
+td.user=FILLME
+td.password=FILLME
+td.url=http://FILLME/qcbin
+td.domain=FILLME
+td.project=FILLME
+td.lead=FILLME
+
+# JIRA connection data (td2jira account won't probably exist; you'll need to Signup first!)
+jira.url=http://FILLME:FILLME
+jira.user=FILLME
+jira.password=FILLME
+jira.project=FILLME
+jira.summary.prefix=FILLME
+jira.assign.to=FILLME
+
+# HTTP Proxy, if required
+# http.proxyHost=myproxy.here.com
+# http.proxyPort=8081
+# http.proxyUser=AD\\vdyuzhev
+# http.proxyPassword=mypassword
+
+# Mapping between developer's ids in TD and JIRA
+# If an issue assigned to a developer in TD, then TD2JIRA syncs TD's AssignedTo
+# field according to JIRA AssignedTo field.
+# Otherwise TD issue is considered non-development one and ignored (subject to code in SyncIssues.java)
+td.developers.jira.developers=tduser1=jirauser1,tduser2=jirauser2
+
+# Repeat Sync every so minutes
+sync.minutes=1
+
+# JIRA Connector Implementation
+# more portable, but less powerful
+#jira.connector.implementation=td2jira.jira.xmlrpc.JIRAXmlRpcConnector
+# more powerful, but needs fresh JIRA version and has troubles with attachments (TODO document problems)
+#jira.connector.implementation=td2jira.jira.soap.JIRASoapConnector
+
+# Sync rules
+# FIXME enable and configure
+#sync.rules=class=td2jira.sync.impl.SyncIssues; \
+# class=td2jira.sync.impl.SyncAttachments; \
+# td.status=Closed|Rejected,jira.status=Open|Assigned To Fix|Assigned To Merge|Assigned To Review|Resolved,class=td2jira.sync.impl.CloseJiraIssue; \
+# td.status=Reopen|Assigned,jira=null,class=td2jira.sync.impl.CreateJiraIssue; \
+# td.status=Reopen|Assigned,jira.status=Closed,class=td2jira.sync.impl.RecreateJiraIssue; \
+# td.status=New|Open|Reopen|Assigned,jira.status=Resolved,class=td2jira.sync.impl.MarkTdIssueAsFixed; \
+# td.status=Fixed,jira.status=Closed,class=td2jira.sync.impl.AskToRetest;
+
+# TD mock connection settings
+# Allowed TD workflow transitions; e.g. New issue can become Open or Rejected
+td.mock.transitions=New>Open,New>Rejected,Open>Assigned,Open>Rejected,Assigned>Fixed,Assigned>Rejected,Fixed>Closed,Rejected>Closed,Closed>Reopen,Reopen>Assigned,Reopen>Rejected
+# Probability to create a new TD issue per run
+td.mock.new.issue.probability=5
+# Probability to add a comment to TD issue per run
+td.mock.new.comment.probability=5
+# Probability to create an attachment to TD issue per run
+td.mock.new.attachment.probability=5
+
+
+
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lac...@us...> - 2007-10-04 09:24:13
|
Revision: 34
http://td2jira.svn.sourceforge.net/td2jira/?rev=34&view=rev
Author: lacostej
Date: 2007-10-04 02:24:09 -0700 (Thu, 04 Oct 2007)
Log Message:
-----------
Copy TD dcom API into DCOM v8 to prepare support for TD v8
Modified Paths:
--------------
trunk/td2jira/src/td2jira/td/api/dcomv8/Bug.java
trunk/td2jira/src/td2jira/td/api/dcomv8/Connection.java
trunk/td2jira/src/td2jira/td/api/dcomv8/Factory.java
trunk/td2jira/src/td2jira/td/api/dcomv8/FactoryList.java
trunk/td2jira/src/td2jira/td/api/dcomv8/Filter.java
Added Paths:
-----------
trunk/td2jira/src/td2jira/td/api/dcomv8/
Copied: trunk/td2jira/src/td2jira/td/api/dcomv8 (from rev 30, trunk/td2jira/src/td2jira/td/api/dcom)
Modified: trunk/td2jira/src/td2jira/td/api/dcomv8/Bug.java
===================================================================
--- trunk/td2jira/src/td2jira/td/api/dcom/Bug.java 2007-10-04 09:07:37 UTC (rev 30)
+++ trunk/td2jira/src/td2jira/td/api/dcomv8/Bug.java 2007-10-04 09:24:09 UTC (rev 34)
@@ -1,4 +1,4 @@
-package td2jira.td.api.dcom;
+package td2jira.td.api.dcomv8;
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
Modified: trunk/td2jira/src/td2jira/td/api/dcomv8/Connection.java
===================================================================
--- trunk/td2jira/src/td2jira/td/api/dcom/Connection.java 2007-10-04 09:07:37 UTC (rev 30)
+++ trunk/td2jira/src/td2jira/td/api/dcomv8/Connection.java 2007-10-04 09:24:09 UTC (rev 34)
@@ -1,4 +1,4 @@
-package td2jira.td.api.dcom;
+package td2jira.td.api.dcomv8;
import td2jira.td.api.IConnection;
import td2jira.td.api.IFactory;
Modified: trunk/td2jira/src/td2jira/td/api/dcomv8/Factory.java
===================================================================
--- trunk/td2jira/src/td2jira/td/api/dcom/Factory.java 2007-10-04 09:07:37 UTC (rev 30)
+++ trunk/td2jira/src/td2jira/td/api/dcomv8/Factory.java 2007-10-04 09:24:09 UTC (rev 34)
@@ -1,4 +1,4 @@
-package td2jira.td.api.dcom;
+package td2jira.td.api.dcomv8;
import td2jira.td.api.IFactory;
import td2jira.td.api.IFilter;
Modified: trunk/td2jira/src/td2jira/td/api/dcomv8/FactoryList.java
===================================================================
--- trunk/td2jira/src/td2jira/td/api/dcom/FactoryList.java 2007-10-04 09:07:37 UTC (rev 30)
+++ trunk/td2jira/src/td2jira/td/api/dcomv8/FactoryList.java 2007-10-04 09:24:09 UTC (rev 34)
@@ -1,4 +1,4 @@
-package td2jira.td.api.dcom;
+package td2jira.td.api.dcomv8;
import td2jira.td.api.IFactoryList;
Modified: trunk/td2jira/src/td2jira/td/api/dcomv8/Filter.java
===================================================================
--- trunk/td2jira/src/td2jira/td/api/dcom/Filter.java 2007-10-04 09:07:37 UTC (rev 30)
+++ trunk/td2jira/src/td2jira/td/api/dcomv8/Filter.java 2007-10-04 09:24:09 UTC (rev 34)
@@ -1,4 +1,4 @@
-package td2jira.td.api.dcom;
+package td2jira.td.api.dcomv8;
import td2jira.td.api.IFactoryList;
import td2jira.td.api.IFilter;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lac...@us...> - 2007-10-04 09:17:33
|
Revision: 33
http://td2jira.svn.sourceforge.net/td2jira/?rev=33&view=rev
Author: lacostej
Date: 2007-10-04 02:17:37 -0700 (Thu, 04 Oct 2007)
Log Message:
-----------
Improve debugging for rules triggering
Modified Paths:
--------------
trunk/td2jira/src/td2jira/Sync.java
Modified: trunk/td2jira/src/td2jira/Sync.java
===================================================================
--- trunk/td2jira/src/td2jira/Sync.java 2007-10-04 09:15:43 UTC (rev 32)
+++ trunk/td2jira/src/td2jira/Sync.java 2007-10-04 09:17:37 UTC (rev 33)
@@ -142,6 +142,7 @@
}
if (matches && ruleClass != null) {
+ logger.debug("Using rule " + rule + " to handle TD issue " + tdIssue.getId() + " Jira issue " + (latestJiraIssue == null ? "none" : latestJiraIssue.getId()));
IProcessIssuePair processor = (IProcessIssuePair) Class.forName(ruleClass).newInstance();
processor.setJiraConnector(jc);
processor.setTdConnector(tc);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|