Jazz Forum Welcome to the Jazz Community Forum Connect and collaborate with IBM Engineering experts and users

[SOLVED] AssertionFailedException when try getvalue of enum

 Hi,

Any one knows how to get combobox (as a enum type) selected value? So, I have a work item that has a enum attribute and one advisor to get this enum value, but when I try to get it, I take a Assert failed like below:

Caused by: org.eclipse.core.runtime.AssertionFailedException: assertion failed: 
at org.eclipse.core.runtime.Assert.isTrue(Assert.java:110)
at org.eclipse.core.runtime.Assert.isTrue(Assert.java:96)
at com.ibm.team.workitem.common.internal.model.impl.WorkItemImpl.getValue(WorkItemImpl.java:2848)
at com.ibm.team.workitem.common.internal.attributeValueProviders.FallbackProvider.getValue(FallbackProvider.java:33)
at com.ibm.team.workitem.common.internal.model.impl.AttributeImpl.getValue(AttributeImpl.java:898)
at com.ibm.team.advisors.apf.APFAdvisor.runCommon(APFAdvisor.java:163)
at com.ibm.team.advisors.apf.APFAdvisor.run(APFAdvisor.java:39)
... 111 more

The interesting thing is that I can get the attribute but can not the selected value.. below my code:


IAttribute attribute = workItemService.findAttribute(wi.getProjectArea(), "tipoFuncaoComboBox", monitor);

Object test1 = ((IWorkItem) wi.getWorkingCopy()).getValue(attribute);  //fail
Object test2 = wi.getValue(attribute);  //fail
Object test3 = attribute.getValue(auditableCommon, wi, monitor);  //fail



The process template is: http://www.heypasteit.com/clip/0YIC

0 votes

Comments

enum's don't have 'values', you have to 'resolve' them

see my sample in
https://jazz.net/forum/questions/94776/assertionfailedexception-problem-with-getting-the-values-of-attributes

see the code following this line
" // this will throw exception if not enumeration"

1 vote


Accepted answer

Permanent link
This post should provide you with some examples, I believe: http://rsjazz.wordpress.com/2012/08/20/manipulationg-work-item-enumeration-values/
Joao Bosco Jares A. Chaves selected this answer as the correct answer

1 vote

Comments

 I was read this, but when ever I try the start point of this post that is: workItem.getValue(iAttribute); I get the org.eclipse.core.runtime.AssertionFailedException: assertion failed.


Why?

So I am using server side code, then I had to translate some code to the server side api, as below. However the same exception persists on the line that has this comment: //AssertionFailedException: assertion failed.

Is this possible that is caused by some bad process configuration, related with the enumeration?

Best Regards,


My Code:

// this will throw exception if not enumeration
IEnumeration<ILiteral> enumeration = (IEnumeration<ILiteral>) workItemService.resolveEnumeration(attribute, monitor);
if (enumeration != null) {
String[] iaval = attribute.getValue(auditableCommon, wi, monitor).toString().split(":"); //AssertionFailedException: assertion failed.
if (iaval.length > 1 && iaval[1] != null) {
List<ILiteral> enumerationLiterals = enumeration.getEnumerationLiterals();
for (ILiteral literal : enumerationLiterals) {
if (literal.getIdentifier2().getStringIdentifier().equalsIgnoreCase(iaval[1])) {
System.out.println("\t\t\t\t --> attribute id=" + attribute.getIdentifier() + ", type" + "=" + attribute.getAttributeType() + " literal=" + literal.getIdentifier2().getStringIdentifier() + " literal name=" + literal.getName());
break;
}

}

}

}

I can't debug your code. Here is some code I wrote on the server. It is basically the same as on the client, except the services IWorkitemServer and IWorkItemCommon used instead of Client Libraries.

        // Get the references for the trigger work item, we need it to add new
        // links
        IWorkItemReferences triggerItemReferences = iWorkItemServer
                .resolveWorkItemReferences(resolvedTriggerItem, monitor);

    // Iterate the enumeration literals and create
    IEnumeration<? extends ILiteral> targetEnumeration = iWorkItemCommon
            .resolveEnumeration(enumerationAttribute, monitor);
    List<? extends ILiteral> literals = targetEnumeration
            .getEnumerationLiterals();
    for (ILiteral targetLiteral : literals) {
        // Skip literals that are on the ignore list
        if (parsedConfig.fSkipLiterals.contains(targetLiteral
                .getIdentifier2().getStringIdentifier())) {
            continue;
        }

...........

I would suggest to look into the links provided in the answers and debug your code on Jetty as suggested in https://jazz.net/library/article/1000 to understand where your code is wrong.

1 vote


4 other answers

Permanent link
Below my code:




IWorkItem wi = (IWorkItem) entry.getValue().getWorkingCopy();
IAttribute attribute = workItemService.findAttribute(wi.getProjectArea(), "tipoFuncaoComboBox", monitor);
System.out.println(attribute);
int t = wi.getId();
System.out.println(t);



0 votes


Permanent link
Sam, thanks very much again =)

0 votes


Permanent link
 Hi friends, 

So, I discovered that enum resolver is to simple as explained by @Ralph Schoon and @sam detweiler. However, my case is a bit different, because I need the enum value of a work item child (second level), and when I try to get the enum value on the on save action of the parent of parent work item, I can not access the enum value of the second level child, as described below:

WI_A (parent);
WI_B (child first level);
WI_C (child scond level);

OR

WI_C is child of WI_B that is child of WI_A.

So, I have to obtain all the values from WIB_B and WI_C, at the on save (precondition advisor) of the WI_A. But, as mentioned above, I can not do it, or I can not know how to do it, and I am so glad if any one can help. But, I will close this thread as solved, and open another one more specific for this situation, that I think is different for this one.

0 votes

Comments

Joao,

how to iterate the children and get their values can be found here: https://rsjazz.wordpress.com/2012/07/31/rtc-update-parent-duration-estimation-and-effort-participant/

Please be aware that you are not supposed to modify the work item that is saved during a precondition/advisor, see https://rsjazz.wordpress.com/2012/12/14/do-not-modify-the-triggering-element-in-an-operationadvisor/ because the extension point assumes the item is unmodified.

Please spend a bit more time to talk about your use case and which context (client/server) it is supposed to run in, next time.

Finally please pick Sam's answer as the correct one, as it answers your initial question as far as I can tell, so he should get his credit for the effort of answering.

1 vote

Ohh sure.. thanks @Ralph. Sorry @sam, I will correct this mistake now. So I am working with a precondition (on save) server side advisor.


Permanent link
This thing is simple a lot, the sercret is how to obtain the children as my source code fragment below.. Look for this comment //SECRET :)
After, is just resolve de enumeration.. Thanks a lot @sam and @ralph  ;)

IWorkItemReferences processoElementarChildWorkItemAllRefs = workItemService.resolveWorkItemReferences(funcionalidadeWi, monitor);
List<IReference> processoElementarChildWorkItemAllRefschildList = getChildReferences(processoElementarChildWorkItemAllRefs);

IReference parentEndpoint = IReferenceFactory.INSTANCE.createReferenceToItem(funcionalidadeWi);

for (Object element : processoElementarChildWorkItemAllRefschildList) {
IReference iReference = (IReference) element;
ILink link = iReference.getLink();
if (link.getOtherEndpointDescriptor(parentEndpoint) == WorkItemEndPoints.CHILD_WORK_ITEMS) {
IWorkItem child = workItemServer.getAuditableCommon().resolveAuditable((IWorkItemHandle) link.getOtherRef(parentEndpoint).resolve(), WorkItem.FULL_PROFILE, monitor);//SECRET :)
IAttribute pf = workItemService.findAttribute(child.getProjectArea(), "pf", monitor);
String teste = getPF(child, pf, monitor);

IAttribute attributeT1enum_ = workItemService.findAttribute(child.getProjectArea(), "t1enum", monitor);
IAttribute attributeT1enumList_ = workItemService.findAttribute(child.getProjectArea(), "t1enumlist", monitor);

IEnumeration<ILiteral> enumerationT1enum_ = (IEnumeration<ILiteral>) workItemService.resolveEnumeration(attributeT1enum_, monitor);
IEnumeration<ILiteral> enumerationT1enumList_ = (IEnumeration<ILiteral>) workItemService.resolveEnumeration(attributeT1enumList_, monitor);

com.ibm.team.workitem.common.model.Identifier attributeT1enumiaval_ =  (Identifier) child.getValue(attributeT1enum_);
List attributeT1enumListiaval_ = (List) child.getValue(attributeT1enumList_);

System.out.println(teste);
}
}

0 votes

Your answer

Register or log in to post your answer.

Dashboards and work items are no longer publicly available, so some links may be invalid. We now provide similar information through other means. Learn more here.

Search context
Follow this question

By Email: 

Once you sign in you will be able to subscribe for any updates here.

By RSS:

Answers
Answers and Comments
Question details
× 10,938
× 343

Question asked: Sep 09 '13, 3:08 p.m.

Question was seen: 9,636 times

Last updated: Sep 18 '13, 10:56 a.m.

Confirmation Cancel Confirm