It's all about the answers!

Ask a question

[SOLVED] AssertionFailedException when try getvalue of enum


Joao Bosco Jares A. Chaves (324813) | asked Sep 09 '13, 3:08 p.m.
edited Sep 16 '13, 10:18 a.m.
 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

Comments
1
sam detweiler commented Sep 10 '13, 9:55 a.m. | edited Sep 10 '13, 9:57 a.m.

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"

Accepted answer


permanent link
Ralph Schoon (63.1k33646) | answered Sep 10 '13, 1:52 a.m.
FORUM ADMINISTRATOR / FORUM MODERATOR / JAZZ DEVELOPER
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

Comments
Joao Bosco Jares A. Chaves commented Sep 10 '13, 9:00 a.m.

 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?


Joao Bosco Jares A. Chaves commented Sep 11 '13, 3:04 p.m. | edited Sep 11 '13, 3:33 p.m.

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

}

}

}


1
Ralph Schoon commented Sep 12 '13, 4:37 a.m.
FORUM ADMINISTRATOR / FORUM MODERATOR / JAZZ DEVELOPER

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.

4 other answers



permanent link
Joao Bosco Jares A. Chaves (324813) | answered Sep 18 '13, 10:56 a.m.
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);
}
}

permanent link
Joao Bosco Jares A. Chaves (324813) | answered Sep 16 '13, 10:18 a.m.
 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.

Comments
1
Ralph Schoon commented Sep 16 '13, 10:27 a.m.
FORUM ADMINISTRATOR / FORUM MODERATOR / JAZZ DEVELOPER

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.


Joao Bosco Jares A. Chaves commented Sep 16 '13, 10:33 a.m.

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
Joao Bosco Jares A. Chaves (324813) | answered Sep 11 '13, 3:04 p.m.
Sam, thanks very much again =)


permanent link
Joao Bosco Jares A. Chaves (324813) | answered Sep 10 '13, 9:06 a.m.
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);



Your answer


Register or 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.