[英]How to create an enum entity type in Olingo OData V4 java API
I have created an enumeration:我创建了一个枚举:
public enum ROLECATEGORY {
LOW ("Low Risk", 0),
MEDIUM ("Medium Risk", 1),
public final String attrname;
public final int value;
ROLECATEGORY(String attrname, int value) {
this.attrname = attrname;
this.value = value;
}
public static ROLECATEGORY valueOf(int val){
switch(val){
case 0: return LOW;
case 1: return MEDIUM;
default: throw new IllegalArgumentException("blablabla");
}
}
public int toInt() { return value; }
}
According to the starter tutorial I've created the normal ODataProvider Class.根据入门教程,我创建了普通的 ODataProvider 类。 All I'm missing is a peace of code to get the enum as FQDN type for the property instantiation:
我所缺少的只是将枚举作为属性实例化的 FQDN 类型的代码和平:
CsdlProperty p = new CsdlProperty().setName("MYENUM").setType( ?getEnumType("MYENUM")? )
OK, I found a simple solution myself.好的,我自己找到了一个简单的解决方案。 But it's probably not the best one:
但这可能不是最好的:
1.) I've added a new static FullQualifiedName: 1.) 我添加了一个新的静态 FullQualifiedName:
public static final FullQualifiedName CET_ROLECAT = new FullQualifiedName(NAMESPACE, "RoleCategory");
2.) I've created the member getEnumType() 2.) 我创建了成员 getEnumType()
public CsdlEnumType getEnumType(final FullQualifiedName enmuTypeName){
if (CET_ROLECAT.equals(enmuTypeName)) {
return new CsdlEnumType()
.setName(CET_ROLECAT.getName())
.setMembers(Arrays.asList(
new CsdlEnumMember().setName("LOW").setValue("0"),
new CsdlEnumMember().setName("MEDIUM").setValue("1")
))
.setUnderlyingType(EdmPrimitiveTypeKind.Int32.getFullQualifiedName())
;
}
return null;
}
3.) I've added the FQDN from 1.) to my Entity Property: 3.) 我已将 1.) 中的 FQDN 添加到我的实体属性中:
// ...
CsdlProperty p = new CsdlProperty().setName("RoleCategory").setType(CET_ROLECAT));
//...
4.) Finally I've added the EnumType the my schema: 4.) 最后,我在我的架构中添加了 EnumType:
public List<CsdlSchema> getSchemas() throws ODataException {
CsdlSchema schema = new CsdlSchema();
// ...
List<CsdlEnumType> enumTypes = new ArrayList<CsdlEnumType>();
enumTypes.add(getEnumType(CET_ROLECAT));
schema.setEnumTypes(enumTypes);
// ...
List<CsdlSchema> schemas = new ArrayList<CsdlSchema>();
schemas.add(schema);
return schemas;
}
FYI: 'NAMESPACE' is just a public static final String member in my EdmODataProvider class.仅供参考:'NAMESPACE' 只是 EdmODataProvider 类中的公共静态最终字符串成员。
Unfortunately it was only possible for me to add Strings in the name and value parts in 2.) at the CsdlEnumMember.不幸的是,我只能在 CsdlEnumMember 的 2.) 的名称和值部分添加字符串。 Neither I'm sure what's setUnderlyningType() for.
我也不确定 setUnderlyningType() 是做什么用的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.