It's all about the answers!

Ask a question

To set custom enum attribute value in WI


Joseph Simon Arokiaraj (21414745) | asked Dec 19 '11, 11:58 a.m.
Hi All,

Here is my sample code.

I have some enum attributes on my Work item. Could you please update me how to set the value for the userdefined enum attributes?

package rtctestlogin;

import java.net.URI;
import java.util.Arrays;
import java.util.List;

import org.eclipse.core.runtime.IProgressMonitor;

import com.ibm.team.foundation.common.text.XMLString;
import com.ibm.team.process.client.IProcessClientService;
import com.ibm.team.process.common.IProjectArea;
import com.ibm.team.repository.client.ITeamRepository;
import com.ibm.team.repository.client.TeamPlatform;
import com.ibm.team.repository.client.ITeamRepository.ILoginHandler;
import com.ibm.team.repository.client.ITeamRepository.ILoginHandler.ILoginInfo;
import com.ibm.team.repository.common.TeamRepositoryException;

import com.ibm.team.workitem.client.IAuditableClient;
import com.ibm.team.workitem.client.IWorkItemClient;
import com.ibm.team.workitem.client.WorkItemOperation;
import com.ibm.team.workitem.client.WorkItemWorkingCopy;
import com.ibm.team.workitem.common.model.IAttribute;
import com.ibm.team.workitem.common.model.ICategoryHandle;
import com.ibm.team.workitem.common.model.IWorkItem;
import com.ibm.team.workitem.common.model.IWorkItemHandle;
import com.ibm.team.workitem.common.model.IWorkItemType;


/**
* Example code, see https://jazz.net/wiki/bin/view/Main/ProgrammaticWorkItemCreation.
*/
public class CreateWI {

private static class LoginHandler implements ILoginHandler, ILoginInfo {

private String fUserId;
private String fPassword;

private LoginHandler(String userId, String password) {
fUserId= userId;
fPassword= password;
}

public String getUserId() {
return fUserId;
}

public String getPassword() {
return fPassword;
}

public ILoginInfo challenge(ITeamRepository repository) {
return this;
}
}

private static class WorkItemInitialization extends WorkItemOperation {

private String fSummary;
private ICategoryHandle fCategory;


public WorkItemInitialization(String summary, ICategoryHandle category) {
super("Initializing Work Item");
fSummary= summary;
fCategory= category;

}

@Override
protected void execute(WorkItemWorkingCopy workingCopy, IProgressMonitor monitor) throws TeamRepositoryException {
IWorkItem workItem= workingCopy.getWorkItem();
workItem.setHTMLSummary(XMLString.createFromPlainText(fSummary));
workItem.setCategory(fCategory);
}
}

public static void main(String[] args) {

boolean result;
TeamPlatform.startup();
try {
result= run(args);
} catch (TeamRepositoryException x) {
x.printStackTrace();
result= false;
} finally {
TeamPlatform.shutdown();
}

if (!result)
System.exit(1);

}

private static boolean run(String[] args) throws TeamRepositoryException {

if (args.length != 7) {
System.out.println("Usage: CreateWI <repositoryURI> <userId> <password> <projectArea> <workItemType> <summary> <category>");
return false;
}

String repositoryURI= args;
String userId= args;
String password= args;
String projectAreaName= args;
String typeIdentifier= args;
String summary= args;
String categoryName= args;


ITeamRepository teamRepository= TeamPlatform.getTeamRepositoryService().getTeamRepository(repositoryURI);
teamRepository.registerLoginHandler(new LoginHandler(userId, password));
teamRepository.login(null);

IProcessClientService processClient= (IProcessClientService) teamRepository.getClientLibrary(IProcessClientService.class);
IAuditableClient auditableClient= (IAuditableClient) teamRepository.getClientLibrary(IAuditableClient.class);
IWorkItemClient workItemClient= (IWorkItemClient) teamRepository.getClientLibrary(IWorkItemClient.class);

URI uri= URI.create(projectAreaName.replaceAll(" ", "%20"));
IProjectArea projectArea= (IProjectArea) processClient.findProcessArea(uri, null, null);
if (projectArea == null) {
System.out.println("Project area not found.");
return false;
}

IWorkItemType workItemType= workItemClient.findWorkItemType(projectArea, typeIdentifier, null);
if (workItemType == null) {
System.out.println("Work item type not found.");
return false;
}

List<String> path= Arrays.asList(categoryName.split("/"));
ICategoryHandle category= workItemClient.findCategoryByNamePath(projectArea, path, null);
if (category == null) {
System.out.println("Category not found.");
return false;
}



WorkItemInitialization operation= new WorkItemInitialization(summary, category);
IWorkItemHandle handle= operation.run(workItemType, null);
IWorkItem workItem= auditableClient.resolveAuditable(handle, IWorkItem.FULL_PROFILE, null);
System.out.println("Created work item " + workItem.getId() + ".");

teamRepository.logout();

return true;
}
}

Cheers,
Jose

6 answers



permanent link
Jared Russell (1.3k12019) | answered Dec 20 '11, 7:07 a.m.
The general approach is:

- Get a handle to the work item client

IWorkItemClient workItemClient = 

(IWorkItemClient) repository.getClientLibrary(IWorkItemClient.class);


- Get a handle to the attribute in question (the attribute id is the id in the process configuration)

IAttribute myAttribute =

workItemClient.findAttribute(projectAreaHandle, "myAttributeId", monitor);


- Resolve the attribute as an enumeration to get the literals

IEnumeration<? extends ILiteral> myEnumeration = 

workItemClient.resolveEnumeration(myAttribute, monitor);


- Iterate over the literals to find the one you want to set

ILiteral targetLiteral = null;

for(ILiteral literal : myEnumeration.getEnumerationLiterals()) {
if(literal.getName().equals("My Value")) {
targetLiteral = literal;
}
}


- Find the work item you want to update

IWorkItem workItem = workItemClient.findWorkItemById(id, IWorkItem.FULL_PROFILE, monitor);



- Get a working copy of the work item

IWorkItemWorkingCopyManager wcm = workItemClient.getWorkItemWorkingCopyManager();

wcm.connect((IWorkItemHandle) workItem.getItemHandle(), IWorkItem.FULL_PROFILE, monitor);
WorkItemWorkingCopy workingCopy = wcm.getWorkingCopy((IWorkItemHandle) workItem.getItemHandle());
IWorkItem workItemCopy = workingCopy.getWorkItem();


- Update the working copy and save it

workItemCopy.setValue(myAttribute, targetLiteral.getIdentifier2().getStringIdentifier());

workingCopy.save(monitor);

permanent link
Joseph Simon Arokiaraj (21414745) | answered Dec 20 '11, 7:31 a.m.
Hi Jrussell,

Thanks for your detailed update.

Could you please update me how these snippets will fit into my program?

Thanks in advance.

Cheers,
Jose

The general approach is:

- Get a handle to the work item client

IWorkItemClient workItemClient = 

(IWorkItemClient) repository.getClientLibrary(IWorkItemClient.class);


- Get a handle to the attribute in question (the attribute id is the id in the process configuration)

IAttribute myAttribute =

workItemClient.findAttribute(projectAreaHandle, "myAttributeId", monitor);


- Resolve the attribute as an enumeration to get the literals

IEnumeration<extends> myEnumeration = 

workItemClient.resolveEnumeration(myAttribute, monitor);


- Iterate over the literals to find the one you want to set

ILiteral targetLiteral = null;

for(ILiteral literal : myEnumeration.getEnumerationLiterals()) {
if(literal.getName().equals("My Value")) {
targetLiteral = literal;
}
}


- Find the work item you want to update

IWorkItem workItem = workItemClient.findWorkItemById(id, IWorkItem.FULL_PROFILE, monitor);



- Get a working copy of the work item

IWorkItemWorkingCopyManager wcm = workItemClient.getWorkItemWorkingCopyManager();

wcm.connect((IWorkItemHandle) workItem.getItemHandle(), IWorkItem.FULL_PROFILE, monitor);
WorkItemWorkingCopy workingCopy = wcm.getWorkingCopy((IWorkItemHandle) workItem.getItemHandle());
IWorkItem workItemCopy = workingCopy.getWorkItem();


- Update the working copy and save it

workItemCopy.setValue(myAttribute, targetLiteral.getIdentifier2().getStringIdentifier());

workingCopy.save(monitor);

permanent link
Joseph Simon Arokiaraj (21414745) | answered Dec 20 '11, 8:02 a.m.
Hi,

I tied to plugin your snippets to my java program and getting some exceptions.

CreateWI.java:

package rtctestlogin;

import java.net.URI;
import java.util.Arrays;
import java.util.List;

import org.eclipse.core.runtime.IProgressMonitor;

import com.ibm.team.foundation.common.text.XMLString;
import com.ibm.team.process.client.IProcessClientService;
import com.ibm.team.process.common.IProjectArea;
import com.ibm.team.repository.client.ITeamRepository;
import com.ibm.team.repository.client.TeamPlatform;
import com.ibm.team.repository.client.ITeamRepository.ILoginHandler;
import com.ibm.team.repository.client.ITeamRepository.ILoginHandler.ILoginInfo;
import com.ibm.team.repository.common.TeamRepositoryException;

import com.ibm.team.workitem.client.IAuditableClient;
import com.ibm.team.workitem.client.IWorkItemClient;
import com.ibm.team.workitem.client.WorkItemOperation;
import com.ibm.team.workitem.client.WorkItemWorkingCopy;
import com.ibm.team.workitem.common.model.IAttribute;
import com.ibm.team.workitem.common.model.IAttributeHandle;
import com.ibm.team.workitem.common.model.ICategoryHandle;
import com.ibm.team.workitem.common.model.IEnumeration;
import com.ibm.team.workitem.common.model.ILiteral;
import com.ibm.team.workitem.common.model.IWorkItem;
import com.ibm.team.workitem.common.model.IWorkItemHandle;
import com.ibm.team.workitem.common.model.IWorkItemType;


public class CreateWI {

private static class LoginHandler implements ILoginHandler, ILoginInfo {

private String fUserId;
private String fPassword;

private LoginHandler(String userId, String password) {
fUserId= userId;
fPassword= password;
}

public String getUserId() {
return fUserId;
}

public String getPassword() {
return fPassword;
}

public ILoginInfo challenge(ITeamRepository repository) {
return this;
}
}

private static class WorkItemInitialization extends WorkItemOperation {

private String fSummary;
private String fDesc;
private ICategoryHandle fCategory;
private IAttribute fRole;
private ILiteral fRoleliteral;



public WorkItemInitialization(String summary, ICategoryHandle category, String description, IAttribute roleAttribute, ILiteral targetLiteral) {
super("Initializing Work Item");
fSummary= summary;
fCategory= category;
fDesc= description;
fRole = roleAttribute;
fRoleliteral = targetLiteral;

}

@Override
protected void execute(WorkItemWorkingCopy workingCopy, IProgressMonitor monitor) throws TeamRepositoryException {
IWorkItem workItem= workingCopy.getWorkItem();
workItem.setHTMLSummary(XMLString.createFromPlainText(fSummary));
workItem.setCategory(fCategory);
workItem.setHTMLDescription(XMLString.createFromPlainText(fDesc));
workItem.setValue(fRole, fRoleliteral.getIdentifier2().getStringIdentifier());

}


}

public static void main(String[] args) {

boolean result;
TeamPlatform.startup();
try {
result= run(args);
} catch (TeamRepositoryException x) {
x.printStackTrace();
result= false;
} finally {
TeamPlatform.shutdown();
}

if (!result)
System.exit(1);

}

private static boolean run(String[] args) throws TeamRepositoryException {

if (args.length != 9) {
System.out.println("Usage: CreateWI <repositoryURI> <userId> <password> <projectArea> <workItemType> <summary> <category> <description> <role>");
return false;
}

String repositoryURI= args;
String userId= args;
String password= args;
String projectAreaName= args;
String typeIdentifier= args;
String summary= args;
String categoryName= args;
String desc= args;
String sdsrole= args;



ITeamRepository teamRepository= TeamPlatform.getTeamRepositoryService().getTeamRepository(repositoryURI);
teamRepository.registerLoginHandler(new LoginHandler(userId, password));
teamRepository.login(null);

IProcessClientService processClient= (IProcessClientService) teamRepository.getClientLibrary(IProcessClientService.class);
IAuditableClient auditableClient= (IAuditableClient) teamRepository.getClientLibrary(IAuditableClient.class);
IWorkItemClient workItemClient= (IWorkItemClient) teamRepository.getClientLibrary(IWorkItemClient.class);

URI uri= URI.create(projectAreaName.replaceAll(" ", "%20"));
IProjectArea projectArea= (IProjectArea) processClient.findProcessArea(uri, null, null);
if (projectArea == null) {
System.out.println("Project area not found.");
return false;
}

IWorkItemType workItemType= workItemClient.findWorkItemType(projectArea, typeIdentifier, null);
if (workItemType == null) {
System.out.println("Work item type not found.");
return false;
}

List<String> path= Arrays.asList(categoryName.split("/"));
ICategoryHandle category= workItemClient.findCategoryByNamePath(projectArea, path, null);
if (category == null) {
System.out.println("Category not found.");
return false;
}

IAttribute roleAttribute = workItemClient.findAttribute(projectArea, "rolelist_a", null);
IEnumeration<extends> myEnumeration = workItemClient.resolveEnumeration(roleAttribute, null);
ILiteral targetLiteral = null;
for(ILiteral literal : myEnumeration.getEnumerationLiterals()) {
if(literal.getName().equals(sdsrole)) {
targetLiteral = literal;
}
}


WorkItemInitialization operation= new WorkItemInitialization(summary, category, desc, roleAttribute, targetLiteral);
IWorkItemHandle handle= operation.run(workItemType, null);
IWorkItem workItem= auditableClient.resolveAuditable(handle, IWorkItem.FULL_PROFILE, null);
System.out.println("Created work item " + workItem.getId() + ".");

teamRepository.logout();

return true;
}
}

Error:

Exception in thread "main" java.lang.ClassCastException: java.lang.String incompatible with com.ibm.team.workitem.common.model.Identifier
at com.ibm.team.workitem.common.internal.model.impl.WorkItemImpl.setValue(WorkItemImpl.java:2945)
at rtctestlogin.CreateWI$WorkItemInitialization.execute(CreateWI.java:83)
at com.ibm.team.workitem.client.WorkItemOperation.execute(WorkItemOperation.java:85)
at com.ibm.team.workitem.client.WorkItemOperation.doRun(WorkItemOperation.java:272)
at com.ibm.team.workitem.client.WorkItemOperation.run(WorkItemOperation.java:242)
at com.ibm.team.workitem.client.WorkItemOperation.run(WorkItemOperation.java:189)
at rtctestlogin.CreateWI.run(CreateWI.java:165)
at rtctestlogin.CreateWI.main(CreateWI.java:95)

Run Command:

CreateWI xxxxxx joel xxxxx SDAgile Request TestingSummary SD Testingdescrioption Tester

Have you got any update on this error?

Cheers,
Jose
Hi Jrussell,

Thanks for your detailed update.

Could you please update me how these snippets will fit into my program?

Thanks in advance.

Cheers,
Jose

The general approach is:

- Get a handle to the work item client

IWorkItemClient workItemClient = 

(IWorkItemClient) repository.getClientLibrary(IWorkItemClient.class);


- Get a handle to the attribute in question (the attribute id is the id in the process configuration)

IAttribute myAttribute =

workItemClient.findAttribute(projectAreaHandle, "myAttributeId", monitor);


- Resolve the attribute as an enumeration to get the literals

IEnumeration<extends> myEnumeration = 

workItemClient.resolveEnumeration(myAttribute, monitor);


- Iterate over the literals to find the one you want to set

ILiteral targetLiteral = null;

for(ILiteral literal : myEnumeration.getEnumerationLiterals()) {
if(literal.getName().equals("My Value")) {
targetLiteral = literal;
}
}


- Find the work item you want to update

IWorkItem workItem = workItemClient.findWorkItemById(id, IWorkItem.FULL_PROFILE, monitor);



- Get a working copy of the work item

IWorkItemWorkingCopyManager wcm = workItemClient.getWorkItemWorkingCopyManager();

wcm.connect((IWorkItemHandle) workItem.getItemHandle(), IWorkItem.FULL_PROFILE, monitor);
WorkItemWorkingCopy workingCopy = wcm.getWorkingCopy((IWorkItemHandle) workItem.getItemHandle());
IWorkItem workItemCopy = workingCopy.getWorkItem();


- Update the working copy and save it

workItemCopy.setValue(myAttribute, targetLiteral.getIdentifier2().getStringIdentifier());

workingCopy.save(monitor);

permanent link
Joseph Simon Arokiaraj (21414745) | answered Dec 20 '11, 9:23 a.m.
Hi,

I am getting the exception while saving the enum literal.

workItem.setValue(fRole, fRoleliteral.getIdentifier2().getStringIdentifier());

Error:

workItem.setValue(fRole, fRoleliteral.getIdentifier2().getStringIdentifier());

Full source code:
package rtctestlogin;

import java.net.URI;
import java.util.Arrays;
import java.util.List;

import org.eclipse.core.runtime.IProgressMonitor;

import com.ibm.team.foundation.common.text.XMLString;
import com.ibm.team.process.client.IProcessClientService;
import com.ibm.team.process.common.IProjectArea;
import com.ibm.team.repository.client.ITeamRepository;
import com.ibm.team.repository.client.TeamPlatform;
import com.ibm.team.repository.client.ITeamRepository.ILoginHandler;
import com.ibm.team.repository.client.ITeamRepository.ILoginHandler.ILoginInfo;
import com.ibm.team.repository.common.TeamRepositoryException;


import com.ibm.team.workitem.client.IAuditableClient;
import com.ibm.team.workitem.client.IWorkItemClient;
import com.ibm.team.workitem.client.WorkItemOperation;
import com.ibm.team.workitem.client.WorkItemWorkingCopy;
import com.ibm.team.workitem.common.model.IAttribute;
//import com.ibm.team.workitem.common.model.IAttributeHandle;
import com.ibm.team.workitem.common.model.ICategoryHandle;
import com.ibm.team.workitem.common.model.IEnumeration;
import com.ibm.team.workitem.common.model.ILiteral;
import com.ibm.team.workitem.common.model.IWorkItem;
import com.ibm.team.workitem.common.model.IWorkItemHandle;
import com.ibm.team.workitem.common.model.IWorkItemType;


public class CreateWI {

private static class LoginHandler implements ILoginHandler, ILoginInfo {

private String fUserId;
private String fPassword;

private LoginHandler(String userId, String password) {
fUserId= userId;
fPassword= password;
}

public String getUserId() {
return fUserId;
}

public String getPassword() {
return fPassword;
}

public ILoginInfo challenge(ITeamRepository repository) {
return this;
}
}

private static class WorkItemInitialization extends WorkItemOperation {

private String fSummary;
private String fDesc;
private ICategoryHandle fCategory;
private IAttribute fRole;
private ILiteral fRoleliteral;



public WorkItemInitialization(String summary, ICategoryHandle category, String description, IAttribute roleAttribute, ILiteral targetLiteral) {
super("Initializing Work Item");
fSummary= summary;
fCategory= category;
fDesc= description;
fRole = roleAttribute;
fRoleliteral = targetLiteral;

}

@Override
protected void execute(WorkItemWorkingCopy workingCopy, IProgressMonitor monitor) throws TeamRepositoryException {
IWorkItem workItem= workingCopy.getWorkItem();
workItem.setHTMLSummary(XMLString.createFromPlainText(fSummary));
workItem.setCategory(fCategory);
workItem.setHTMLDescription(XMLString.createFromPlainText(fDesc));
System.out.println("Going to Save Literal");
//workItem.setValue(fRole, fRoleliteral.getIdentifier2().getStringIdentifier());
workItem.setValue(fRole, fRoleliteral.getIdentifier2().getStringIdentifier());
System.out.println("Saved Literal");
workingCopy.save(monitor);
}


}

public static void main(String[] args) {

boolean result;
TeamPlatform.startup();
try {
result= run(args);
} catch (TeamRepositoryException x) {
x.printStackTrace();
result= false;
} finally {
TeamPlatform.shutdown();
}

if (!result)
System.exit(1);

}

private static boolean run(String[] args) throws TeamRepositoryException {

if (args.length != 9) {
System.out.println("Usage: CreateWI <repositoryURI> <userId> <password> <projectArea> <workItemType> <summary> <category> <description> <role>");
return false;
}

String repositoryURI= args;
String userId= args;
String password= args;
String projectAreaName= args;
String typeIdentifier= args;
String summary= args;
String categoryName= args;
String desc= args;
String sdsrole= args;


System.out.println("XCHECKING");
ITeamRepository teamRepository= TeamPlatform.getTeamRepositoryService().getTeamRepository(repositoryURI);
teamRepository.registerLoginHandler(new LoginHandler(userId, password));
teamRepository.login(null);

IProcessClientService processClient= (IProcessClientService) teamRepository.getClientLibrary(IProcessClientService.class);
IAuditableClient auditableClient= (IAuditableClient) teamRepository.getClientLibrary(IAuditableClient.class);
IWorkItemClient workItemClient= (IWorkItemClient) teamRepository.getClientLibrary(IWorkItemClient.class);

URI uri= URI.create(projectAreaName.replaceAll(" ", "%20"));
IProjectArea projectArea= (IProjectArea) processClient.findProcessArea(uri, null, null);
if (projectArea == null) {
System.out.println("Project area not found.");
return false;
}

IWorkItemType workItemType= workItemClient.findWorkItemType(projectArea, typeIdentifier, null);
if (workItemType == null) {
System.out.println("Work item type not found.");
return false;
}

List<String> path= Arrays.asList(categoryName.split("/"));
ICategoryHandle category= workItemClient.findCategoryByNamePath(projectArea, path, null);
if (category == null) {
System.out.println("Category not found.");
return false;
}
System.out.println("XCHECKING1");
IAttribute roleAttribute = workItemClient.findAttribute(projectArea, "rolelist_a", null);
IEnumeration<extends> myEnumeration = workItemClient.resolveEnumeration(roleAttribute, null);
ILiteral targetLiteral = null;
for(ILiteral literal : myEnumeration.getEnumerationLiterals()) {
if(literal.getName().equals(sdsrole)) {
targetLiteral = literal;
}
}
System.out.println("XCHECKING");

WorkItemInitialization operation= new WorkItemInitialization(summary, category, desc, roleAttribute, targetLiteral);
IWorkItemHandle handle= operation.run(workItemType, null);
IWorkItem workItem= auditableClient.resolveAuditable(handle, IWorkItem.FULL_PROFILE, null);
System.out.println("Created work item " + workItem.getId() + ".");

teamRepository.logout();

return true;
}
}

Cheers,
Jose








Hi,

I tied to plugin your snippets to my java program and getting some exceptions.

CreateWI.java:

package rtctestlogin;

import java.net.URI;
import java.util.Arrays;
import java.util.List;

import org.eclipse.core.runtime.IProgressMonitor;

import com.ibm.team.foundation.common.text.XMLString;
import com.ibm.team.process.client.IProcessClientService;
import com.ibm.team.process.common.IProjectArea;
import com.ibm.team.repository.client.ITeamRepository;
import com.ibm.team.repository.client.TeamPlatform;
import com.ibm.team.repository.client.ITeamRepository.ILoginHandler;
import com.ibm.team.repository.client.ITeamRepository.ILoginHandler.ILoginInfo;
import com.ibm.team.repository.common.TeamRepositoryException;

import com.ibm.team.workitem.client.IAuditableClient;
import com.ibm.team.workitem.client.IWorkItemClient;
import com.ibm.team.workitem.client.WorkItemOperation;
import com.ibm.team.workitem.client.WorkItemWorkingCopy;
import com.ibm.team.workitem.common.model.IAttribute;
import com.ibm.team.workitem.common.model.IAttributeHandle;
import com.ibm.team.workitem.common.model.ICategoryHandle;
import com.ibm.team.workitem.common.model.IEnumeration;
import com.ibm.team.workitem.common.model.ILiteral;
import com.ibm.team.workitem.common.model.IWorkItem;
import com.ibm.team.workitem.common.model.IWorkItemHandle;
import com.ibm.team.workitem.common.model.IWorkItemType;


public class CreateWI {

private static class LoginHandler implements ILoginHandler, ILoginInfo {

private String fUserId;
private String fPassword;

private LoginHandler(String userId, String password) {
fUserId= userId;
fPassword= password;
}

public String getUserId() {
return fUserId;
}

public String getPassword() {
return fPassword;
}

public ILoginInfo challenge(ITeamRepository repository) {
return this;
}
}

private static class WorkItemInitialization extends WorkItemOperation {

private String fSummary;
private String fDesc;
private ICategoryHandle fCategory;
private IAttribute fRole;
private ILiteral fRoleliteral;



public WorkItemInitialization(String summary, ICategoryHandle category, String description, IAttribute roleAttribute, ILiteral targetLiteral) {
super("Initializing Work Item");
fSummary= summary;
fCategory= category;
fDesc= description;
fRole = roleAttribute;
fRoleliteral = targetLiteral;

}

@Override
protected void execute(WorkItemWorkingCopy workingCopy, IProgressMonitor monitor) throws TeamRepositoryException {
IWorkItem workItem= workingCopy.getWorkItem();
workItem.setHTMLSummary(XMLString.createFromPlainText(fSummary));
workItem.setCategory(fCategory);
workItem.setHTMLDescription(XMLString.createFromPlainText(fDesc));
workItem.setValue(fRole, fRoleliteral.getIdentifier2().getStringIdentifier());

}


}

public static void main(String[] args) {

boolean result;
TeamPlatform.startup();
try {
result= run(args);
} catch (TeamRepositoryException x) {
x.printStackTrace();
result= false;
} finally {
TeamPlatform.shutdown();
}

if (!result)
System.exit(1);

}

private static boolean run(String[] args) throws TeamRepositoryException {

if (args.length != 9) {
System.out.println("Usage: CreateWI <repositoryURI> <userId> <password> <projectArea> <workItemType> <summary> <category> <description> <role>");
return false;
}

String repositoryURI= args;
String userId= args;
String password= args;
String projectAreaName= args;
String typeIdentifier= args;
String summary= args;
String categoryName= args;
String desc= args;
String sdsrole= args;



ITeamRepository teamRepository= TeamPlatform.getTeamRepositoryService().getTeamRepository(repositoryURI);
teamRepository.registerLoginHandler(new LoginHandler(userId, password));
teamRepository.login(null);

IProcessClientService processClient= (IProcessClientService) teamRepository.getClientLibrary(IProcessClientService.class);
IAuditableClient auditableClient= (IAuditableClient) teamRepository.getClientLibrary(IAuditableClient.class);
IWorkItemClient workItemClient= (IWorkItemClient) teamRepository.getClientLibrary(IWorkItemClient.class);

URI uri= URI.create(projectAreaName.replaceAll(" ", "%20"));
IProjectArea projectArea= (IProjectArea) processClient.findProcessArea(uri, null, null);
if (projectArea == null) {
System.out.println("Project area not found.");
return false;
}

IWorkItemType workItemType= workItemClient.findWorkItemType(projectArea, typeIdentifier, null);
if (workItemType == null) {
System.out.println("Work item type not found.");
return false;
}

List<String> path= Arrays.asList(categoryName.split("/"));
ICategoryHandle category= workItemClient.findCategoryByNamePath(projectArea, path, null);
if (category == null) {
System.out.println("Category not found.");
return false;
}

IAttribute roleAttribute = workItemClient.findAttribute(projectArea, "rolelist_a", null);
IEnumeration<extends> myEnumeration = workItemClient.resolveEnumeration(roleAttribute, null);
ILiteral targetLiteral = null;
for(ILiteral literal : myEnumeration.getEnumerationLiterals()) {
if(literal.getName().equals(sdsrole)) {
targetLiteral = literal;
}
}


WorkItemInitialization operation= new WorkItemInitialization(summary, category, desc, roleAttribute, targetLiteral);
IWorkItemHandle handle= operation.run(workItemType, null);
IWorkItem workItem= auditableClient.resolveAuditable(handle, IWorkItem.FULL_PROFILE, null);
System.out.println("Created work item " + workItem.getId() + ".");

teamRepository.logout();

return true;
}
}

Error:

Exception in thread "main" java.lang.ClassCastException: java.lang.String incompatible with com.ibm.team.workitem.common.model.Identifier
at com.ibm.team.workitem.common.internal.model.impl.WorkItemImpl.setValue(WorkItemImpl.java:2945)
at rtctestlogin.CreateWI$WorkItemInitialization.execute(CreateWI.java:83)
at com.ibm.team.workitem.client.WorkItemOperation.execute(WorkItemOperation.java:85)
at com.ibm.team.workitem.client.WorkItemOperation.doRun(WorkItemOperation.java:272)
at com.ibm.team.workitem.client.WorkItemOperation.run(WorkItemOperation.java:242)
at com.ibm.team.workitem.client.WorkItemOperation.run(WorkItemOperation.java:189)
at rtctestlogin.CreateWI.run(CreateWI.java:165)
at rtctestlogin.CreateWI.main(CreateWI.java:95)

Run Command:

CreateWI xxxxxx joel xxxxx SDAgile Request TestingSummary SD Testingdescrioption Tester

Have you got any update on this error?

Cheers,
Jose
Hi Jrussell,

Thanks for your detailed update.

Could you please update me how these snippets will fit into my program?

Thanks in advance.

Cheers,
Jose

The general approach is:

- Get a handle to the work item client

IWorkItemClient workItemClient = 

(IWorkItemClient) repository.getClientLibrary(IWorkItemClient.class);


- Get a handle to the attribute in question (the attribute id is the id in the process configuration)

IAttribute myAttribute =

workItemClient.findAttribute(projectAreaHandle, "myAttributeId", monitor);


- Resolve the attribute as an enumeration to get the literals

IEnumeration<extends> myEnumeration = 

workItemClient.resolveEnumeration(myAttribute, monitor);


- Iterate over the literals to find the one you want to set

ILiteral targetLiteral = null;

for(ILiteral literal : myEnumeration.getEnumerationLiterals()) {
if(literal.getName().equals("My Value")) {
targetLiteral = literal;
}
}


- Find the work item you want to update

IWorkItem workItem = workItemClient.findWorkItemById(id, IWorkItem.FULL_PROFILE, monitor);



- Get a working copy of the work item

IWorkItemWorkingCopyManager wcm = workItemClient.getWorkItemWorkingCopyManager();

wcm.connect((IWorkItemHandle) workItem.getItemHandle(), IWorkItem.FULL_PROFILE, monitor);
WorkItemWorkingCopy workingCopy = wcm.getWorkingCopy((IWorkItemHandle) workItem.getItemHandle());
IWorkItem workItemCopy = workingCopy.getWorkItem();


- Update the working copy and save it

workItemCopy.setValue(myAttribute, targetLiteral.getIdentifier2().getStringIdentifier());

workingCopy.save(monitor);

permanent link
Joseph Simon Arokiaraj (21414745) | answered Dec 20 '11, 11:22 a.m.
Hi,

Thanks a lot.

Its working now.

Cheers,
Simon

Hi,

I am getting the exception while saving the enum literal.

workItem.setValue(fRole, fRoleliteral.getIdentifier2().getStringIdentifier());

Error:

workItem.setValue(fRole, fRoleliteral.getIdentifier2().getStringIdentifier());

Full source code:
package rtctestlogin;

import java.net.URI;
import java.util.Arrays;
import java.util.List;

import org.eclipse.core.runtime.IProgressMonitor;

import com.ibm.team.foundation.common.text.XMLString;
import com.ibm.team.process.client.IProcessClientService;
import com.ibm.team.process.common.IProjectArea;
import com.ibm.team.repository.client.ITeamRepository;
import com.ibm.team.repository.client.TeamPlatform;
import com.ibm.team.repository.client.ITeamRepository.ILoginHandler;
import com.ibm.team.repository.client.ITeamRepository.ILoginHandler.ILoginInfo;
import com.ibm.team.repository.common.TeamRepositoryException;


import com.ibm.team.workitem.client.IAuditableClient;
import com.ibm.team.workitem.client.IWorkItemClient;
import com.ibm.team.workitem.client.WorkItemOperation;
import com.ibm.team.workitem.client.WorkItemWorkingCopy;
import com.ibm.team.workitem.common.model.IAttribute;
//import com.ibm.team.workitem.common.model.IAttributeHandle;
import com.ibm.team.workitem.common.model.ICategoryHandle;
import com.ibm.team.workitem.common.model.IEnumeration;
import com.ibm.team.workitem.common.model.ILiteral;
import com.ibm.team.workitem.common.model.IWorkItem;
import com.ibm.team.workitem.common.model.IWorkItemHandle;
import com.ibm.team.workitem.common.model.IWorkItemType;


public class CreateWI {

private static class LoginHandler implements ILoginHandler, ILoginInfo {

private String fUserId;
private String fPassword;

private LoginHandler(String userId, String password) {
fUserId= userId;
fPassword= password;
}

public String getUserId() {
return fUserId;
}

public String getPassword() {
return fPassword;
}

public ILoginInfo challenge(ITeamRepository repository) {
return this;
}
}

private static class WorkItemInitialization extends WorkItemOperation {

private String fSummary;
private String fDesc;
private ICategoryHandle fCategory;
private IAttribute fRole;
private ILiteral fRoleliteral;



public WorkItemInitialization(String summary, ICategoryHandle category, String description, IAttribute roleAttribute, ILiteral targetLiteral) {
super("Initializing Work Item");
fSummary= summary;
fCategory= category;
fDesc= description;
fRole = roleAttribute;
fRoleliteral = targetLiteral;

}

@Override
protected void execute(WorkItemWorkingCopy workingCopy, IProgressMonitor monitor) throws TeamRepositoryException {
IWorkItem workItem= workingCopy.getWorkItem();
workItem.setHTMLSummary(XMLString.createFromPlainText(fSummary));
workItem.setCategory(fCategory);
workItem.setHTMLDescription(XMLString.createFromPlainText(fDesc));
System.out.println("Going to Save Literal");
//workItem.setValue(fRole, fRoleliteral.getIdentifier2().getStringIdentifier());
workItem.setValue(fRole, fRoleliteral.getIdentifier2().getStringIdentifier());
System.out.println("Saved Literal");
workingCopy.save(monitor);
}


}

public static void main(String[] args) {

boolean result;
TeamPlatform.startup();
try {
result= run(args);
} catch (TeamRepositoryException x) {
x.printStackTrace();
result= false;
} finally {
TeamPlatform.shutdown();
}

if (!result)
System.exit(1);

}

private static boolean run(String[] args) throws TeamRepositoryException {

if (args.length != 9) {
System.out.println("Usage: CreateWI <repositoryURI> <userId> <password> <projectArea> <workItemType> <summary> <category> <description> <role>");
return false;
}

String repositoryURI= args;
String userId= args;
String password= args;
String projectAreaName= args;
String typeIdentifier= args;
String summary= args;
String categoryName= args;
String desc= args;
String sdsrole= args;


System.out.println("XCHECKING");
ITeamRepository teamRepository= TeamPlatform.getTeamRepositoryService().getTeamRepository(repositoryURI);
teamRepository.registerLoginHandler(new LoginHandler(userId, password));
teamRepository.login(null);

IProcessClientService processClient= (IProcessClientService) teamRepository.getClientLibrary(IProcessClientService.class);
IAuditableClient auditableClient= (IAuditableClient) teamRepository.getClientLibrary(IAuditableClient.class);
IWorkItemClient workItemClient= (IWorkItemClient) teamRepository.getClientLibrary(IWorkItemClient.class);

URI uri= URI.create(projectAreaName.replaceAll(" ", "%20"));
IProjectArea projectArea= (IProjectArea) processClient.findProcessArea(uri, null, null);
if (projectArea == null) {
System.out.println("Project area not found.");
return false;
}

IWorkItemType workItemType= workItemClient.findWorkItemType(projectArea, typeIdentifier, null);
if (workItemType == null) {
System.out.println("Work item type not found.");
return false;
}

List<String> path= Arrays.asList(categoryName.split("/"));
ICategoryHandle category= workItemClient.findCategoryByNamePath(projectArea, path, null);
if (category == null) {
System.out.println("Category not found.");
return false;
}
System.out.println("XCHECKING1");
IAttribute roleAttribute = workItemClient.findAttribute(projectArea, "rolelist_a", null);
IEnumeration<extends> myEnumeration = workItemClient.resolveEnumeration(roleAttribute, null);
ILiteral targetLiteral = null;
for(ILiteral literal : myEnumeration.getEnumerationLiterals()) {
if(literal.getName().equals(sdsrole)) {
targetLiteral = literal;
}
}
System.out.println("XCHECKING");

WorkItemInitialization operation= new WorkItemInitialization(summary, category, desc, roleAttribute, targetLiteral);
IWorkItemHandle handle= operation.run(workItemType, null);
IWorkItem workItem= auditableClient.resolveAuditable(handle, IWorkItem.FULL_PROFILE, null);
System.out.println("Created work item " + workItem.getId() + ".");

teamRepository.logout();

return true;
}
}

Cheers,
Jose








Hi,

I tied to plugin your snippets to my java program and getting some exceptions.

CreateWI.java:

package rtctestlogin;

import java.net.URI;
import java.util.Arrays;
import java.util.List;

import org.eclipse.core.runtime.IProgressMonitor;

import com.ibm.team.foundation.common.text.XMLString;
import com.ibm.team.process.client.IProcessClientService;
import com.ibm.team.process.common.IProjectArea;
import com.ibm.team.repository.client.ITeamRepository;
import com.ibm.team.repository.client.TeamPlatform;
import com.ibm.team.repository.client.ITeamRepository.ILoginHandler;
import com.ibm.team.repository.client.ITeamRepository.ILoginHandler.ILoginInfo;
import com.ibm.team.repository.common.TeamRepositoryException;

import com.ibm.team.workitem.client.IAuditableClient;
import com.ibm.team.workitem.client.IWorkItemClient;
import com.ibm.team.workitem.client.WorkItemOperation;
import com.ibm.team.workitem.client.WorkItemWorkingCopy;
import com.ibm.team.workitem.common.model.IAttribute;
import com.ibm.team.workitem.common.model.IAttributeHandle;
import com.ibm.team.workitem.common.model.ICategoryHandle;
import com.ibm.team.workitem.common.model.IEnumeration;
import com.ibm.team.workitem.common.model.ILiteral;
import com.ibm.team.workitem.common.model.IWorkItem;
import com.ibm.team.workitem.common.model.IWorkItemHandle;
import com.ibm.team.workitem.common.model.IWorkItemType;


public class CreateWI {

private static class LoginHandler implements ILoginHandler, ILoginInfo {

private String fUserId;
private String fPassword;

private LoginHandler(String userId, String password) {
fUserId= userId;
fPassword= password;
}

public String getUserId() {
return fUserId;
}

public String getPassword() {
return fPassword;
}

public ILoginInfo challenge(ITeamRepository repository) {
return this;
}
}

private static class WorkItemInitialization extends WorkItemOperation {

private String fSummary;
private String fDesc;
private ICategoryHandle fCategory;
private IAttribute fRole;
private ILiteral fRoleliteral;



public WorkItemInitialization(String summary, ICategoryHandle category, String description, IAttribute roleAttribute, ILiteral targetLiteral) {
super("Initializing Work Item");
fSummary= summary;
fCategory= category;
fDesc= description;
fRole = roleAttribute;
fRoleliteral = targetLiteral;

}

@Override
protected void execute(WorkItemWorkingCopy workingCopy, IProgressMonitor monitor) throws TeamRepositoryException {
IWorkItem workItem= workingCopy.getWorkItem();
workItem.setHTMLSummary(XMLString.createFromPlainText(fSummary));
workItem.setCategory(fCategory);
workItem.setHTMLDescription(XMLString.createFromPlainText(fDesc));
workItem.setValue(fRole, fRoleliteral.getIdentifier2().getStringIdentifier());

}


}

public static void main(String[] args) {

boolean result;
TeamPlatform.startup();
try {
result= run(args);
} catch (TeamRepositoryException x) {
x.printStackTrace();
result= false;
} finally {
TeamPlatform.shutdown();
}

if (!result)
System.exit(1);

}

private static boolean run(String[] args) throws TeamRepositoryException {

if (args.length != 9) {
System.out.println("Usage: CreateWI <repositoryURI> <userId> <password> <projectArea> <workItemType> <summary> <category> <description> <role>");
return false;
}

String repositoryURI= args;
String userId= args;
String password= args;
String projectAreaName= args;
String typeIdentifier= args;
String summary= args;
String categoryName= args;
String desc= args;
String sdsrole= args;



ITeamRepository teamRepository= TeamPlatform.getTeamRepositoryService().getTeamRepository(repositoryURI);
teamRepository.registerLoginHandler(new LoginHandler(userId, password));
teamRepository.login(null);

IProcessClientService processClient= (IProcessClientService) teamRepository.getClientLibrary(IProcessClientService.class);
IAuditableClient auditableClient= (IAuditableClient) teamRepository.getClientLibrary(IAuditableClient.class);
IWorkItemClient workItemClient= (IWorkItemClient) teamRepository.getClientLibrary(IWorkItemClient.class);

URI uri= URI.create(projectAreaName.replaceAll(" ", "%20"));
IProjectArea projectArea= (IProjectArea) processClient.findProcessArea(uri, null, null);
if (projectArea == null) {
System.out.println("Project area not found.");
return false;
}

IWorkItemType workItemType= workItemClient.findWorkItemType(projectArea, typeIdentifier, null);
if (workItemType == null) {
System.out.println("Work item type not found.");
return false;
}

List<String> path= Arrays.asList(categoryName.split("/"));
ICategoryHandle category= workItemClient.findCategoryByNamePath(projectArea, path, null);
if (category == null) {
System.out.println("Category not found.");
return false;
}

IAttribute roleAttribute = workItemClient.findAttribute(projectArea, "rolelist_a", null);
IEnumeration<extends> myEnumeration = workItemClient.resolveEnumeration(roleAttribute, null);
ILiteral targetLiteral = null;
for(ILiteral literal : myEnumeration.getEnumerationLiterals()) {
if(literal.getName().equals(sdsrole)) {
targetLiteral = literal;
}
}


WorkItemInitialization operation= new WorkItemInitialization(summary, category, desc, roleAttribute, targetLiteral);
IWorkItemHandle handle= operation.run(workItemType, null);
IWorkItem workItem= auditableClient.resolveAuditable(handle, IWorkItem.FULL_PROFILE, null);
System.out.println("Created work item " + workItem.getId() + ".");

teamRepository.logout();

return true;
}
}

Error:

Exception in thread "main" java.lang.ClassCastException: java.lang.String incompatible with com.ibm.team.workitem.common.model.Identifier
at com.ibm.team.workitem.common.internal.model.impl.WorkItemImpl.setValue(WorkItemImpl.java:2945)
at rtctestlogin.CreateWI$WorkItemInitialization.execute(CreateWI.java:83)
at com.ibm.team.workitem.client.WorkItemOperation.execute(WorkItemOperation.java:85)
at com.ibm.team.workitem.client.WorkItemOperation.doRun(WorkItemOperation.java:272)
at com.ibm.team.workitem.client.WorkItemOperation.run(WorkItemOperation.java:242)
at com.ibm.team.workitem.client.WorkItemOperation.run(WorkItemOperation.java:189)
at rtctestlogin.CreateWI.run(CreateWI.java:165)
at rtctestlogin.CreateWI.main(CreateWI.java:95)

Run Command:

CreateWI xxxxxx joel xxxxx SDAgile Request TestingSummary SD Testingdescrioption Tester

Have you got any update on this error?

Cheers,
Jose
Hi Jrussell,

Thanks for your detailed update.

Could you please update me how these snippets will fit into my program?

Thanks in advance.

Cheers,
Jose

The general approach is:

- Get a handle to the work item client

IWorkItemClient workItemClient = 

(IWorkItemClient) repository.getClientLibrary(IWorkItemClient.class);


- Get a handle to the attribute in question (the attribute id is the id in the process configuration)

IAttribute myAttribute =

workItemClient.findAttribute(projectAreaHandle, "myAttributeId", monitor);


- Resolve the attribute as an enumeration to get the literals

IEnumeration<extends> myEnumeration = 

workItemClient.resolveEnumeration(myAttribute, monitor);


- Iterate over the literals to find the one you want to set

ILiteral targetLiteral = null;

for(ILiteral literal : myEnumeration.getEnumerationLiterals()) {
if(literal.getName().equals("My Value")) {
targetLiteral = literal;
}
}


- Find the work item you want to update

IWorkItem workItem = workItemClient.findWorkItemById(id, IWorkItem.FULL_PROFILE, monitor);



- Get a working copy of the work item

IWorkItemWorkingCopyManager wcm = workItemClient.getWorkItemWorkingCopyManager();

wcm.connect((IWorkItemHandle) workItem.getItemHandle(), IWorkItem.FULL_PROFILE, monitor);
WorkItemWorkingCopy workingCopy = wcm.getWorkingCopy((IWorkItemHandle) workItem.getItemHandle());
IWorkItem workItemCopy = workingCopy.getWorkItem();


- Update the working copy and save it

workItemCopy.setValue(myAttribute, targetLiteral.getIdentifier2().getStringIdentifier());

workingCopy.save(monitor);

permanent link
Querier Q (11) | answered Apr 04 '17, 7:12 a.m.

 The only difference for above code that will resolve the issue(Exception in thread "main" java.lang.ClassCastException: java.lang.String incompatible with com.ibm.team.workitem.common.model.Identifier) is use 'fRoleliteral.getIdentifier2()' in place of 'fRoleliteral.getIdentifier2().getStringIdentifier()'.

Your answer


Register or to post your answer.