gpt4 book ai didi

java - IBM RTC Java 提供的属性。修改工作项时无法转换为 IAttribute

转载 作者:行者123 更新时间:2023-11-30 07:54:00 26 4
gpt4 key购买 nike

我为工作项创建了一个 Java 提供的属性,该属性通过查看同一/当前工作项中的其他两个属性(枚举)来提供一个值集,这两个属性一起形成一个目录路径,java 提供的属性将创建一个目录路径使用嵌套在该目录中的文件名称设置的值。如果第一次创建工作项,它会很好地工作,但是在修改工作项时,它无法填充该集合,因此可以选择新值。

我发现当谈到这个声明时:

IAttribute currentAttribute=(IAttribute)句柄;

产生异常。它无法转换为 IAttribute 句柄,因为新的 Wotk 项和修改后的工作项之间的 workItem.getCustomAttributes() 返回项不同。

异常消息是:

com.ibm.team.workitem.common.internal.model.impl.AttributeHandleImpl 与 com.ibm.team.workitem.common.model.IAttribute 不兼容

我不确定为什么在修改工作项时使用如何获取 com.ibm.team.workitem.common.internal.model.impl.AttributeHandleImpl ,并且...在首次创建工作时使用 AttributeHandle项目。

我不知道如何解决这个问题或将其转换为我需要的 IAttribute。

public class SpecificArtifactType implements IValueSetProvider<String> {

private List<String> list;

public SpecificArtifactType() {

}

@Override
public List<String> getValueSet(IAttribute attribute, IWorkItem workItem,
IWorkItemCommon workItemCommon, IConfiguration configuration,
IProgressMonitor monitor) throws TeamRepositoryException {

String idValue= "";
String deliverableArtifactTypeValue= "";



List<IAttributeHandle> customAttributeHandles= workItem.getCustomAttributes();

/*
* THE DELIVERABLE ARTIFACT AND ID VALUES ARE BOTH USED TO BUILD
* THE DIRECTORY PATH WHICH THIS ATTRIBUTE WILL USE TO POPULATE
* ITS VALUE SET WITH THE ARTIFACTS LOCATED AT THAT LOCATION.
*/

for (IAttributeHandle handle: customAttributeHandles)
{
IAttribute currentAttribute= (IAttribute) handle;

if (currentAttribute.getDisplayName()
.equals(ICustomAttributeDefinitions.ID))
{
idValue= getValue(currentAttribute, monitor, workItemCommon, workItem);
}
else if (currentAttribute.getDisplayName()
.equals(ICustomAttributeDefinitions.DELIVERABLE_ARTIFACT_TYPE))
{
deliverableArtifactTypeValue= getValue(currentAttribute, monitor, workItemCommon, workItem);
}
}

// BUILD THE DIRECTORY PATH

String directory = ICustomAttributeDefinitions.STREAM_ROOT_DIRECTORY
+deliverableArtifactTypeValue +"\\"+ idValue;

File folderPath = new File(directory);

/*
* NEED A VALID PATH TO CONTINUE AND ALSO PREVENT TRYING TO
* LIST CHILD ITEMS IF IT'S A FILE.
*/

if (folderPath.exists() && folderPath.isDirectory())
{
if (folderPath.list().length == 0)
{
directoryEmpty();
return list;
}

list= new ArrayList<String>();

for (String name: folderPath.list())
list.add(name);
}
else invalidDirectoryPath();

return list;

}
/*
* CONVERT VALUE FROM MODEL IDENTIFIER (EG ID.literal.l01) TO ACTUAL VALUE
*/

private String getValue(IAttribute attribute,
IProgressMonitor monitor,
IWorkItemCommon workItemCommon,
IWorkItem workItem) throws TeamRepositoryException
{
IEnumeration<? extends ILiteral> enumeration= workItemCommon
.resolveEnumeration(attribute, monitor);

String value= "";

List<? extends ILiteral> literals= enumeration.getEnumerationLiterals();

for (Iterator<? extends ILiteral> iterator= literals.iterator(); iterator.hasNext(); )
{
ILiteral iLiteral= (ILiteral) iterator.next();

if (iLiteral.getIdentifier2().equals(workItem.getValue(attribute)))
{
value= iLiteral.getName().toString();
break;
}
}
return value;
}


private void directoryEmpty(){
list= new ArrayList<String>(1);
list.add(ICustomAttributeDefinitions.DIRECTORY_EMPTY);

}

private void invalidDirectoryPath()
{
list= new ArrayList<String>(1);
list.add(ICustomAttributeDefinitions.INVALID_DIRECTORY_PATH);
}

}

最佳答案

此问题可能有三种解决方案:

1) 当你创建workItem并保存workItem实例时,它的状态发生了变化,所以现在当你调用workItem.getCustomAttributes()时,它不会返回所需的结果所以你需要添加这个前一行:

IWorkItem workItem = (IWorkItem) getWorkItemServer()
.getAuditableCommon()
.resolveAuditable(savedWorkItem, IWorkItem.FULL_PROFILE, null);

您可以根据此服务器代码轻松获取客户端代码,这将获取 workItem 的保存状态

2) 您可以通过在将其转换为 IAttribute 之前检查 instanceof 来防止发生此异常

3) 通过标识符获取 IAttribute,然后通过以下方式获取 IAttribute:

WorkItemUIWorkingCopy uiWorkingCopy = (WorkItemUIWorkingCopy)
workingCopy.getAdapter(IWorkItemUIWorkingCopy.class);
IAttribute attribute =
uiWorkingCopy.getResolvedWorkItem().findAttribute(fAttribute.getIdentifier());

希望对你有帮助

关于java - IBM RTC Java 提供的属性。修改工作项时无法转换为 IAttribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32940687/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com