/** ReceivedMessageのPort用Edm 定義体. */ public class ReceivedMessagePort extends ReceivedMessage { private ReceivedMessagePort() { super(); } /** Schemaプロパティの定義体. */ public static final EdmProperty.Builder P_SCHEMA = EdmProperty.newBuilder("Schema") .setType(EdmSimpleType.BOOLEAN) .setNullable(true) .setDefaultValue("false"); /** EntityType Builder. */ public static final EdmEntityType.Builder EDM_TYPE_BUILDER = EdmEntityType.newBuilder() .setNamespace(Common.EDM_NS_CELL_CTL) .setName(EDM_TYPE_NAME) .addProperties( Enumerable.create( P_ID, P_SCHEMA, P_IN_REPLY_TO, P_FROM, P_MULTICAST_TO, P_TYPE, P_TITLE, P_BODY, P_PRIORITY, P_STATUS, P_REQUEST_RELATION, P_REQUEST_RELATION_TARGET, P_BOX_NAME, Common.P_PUBLISHED, Common.P_UPDATED) .toList()) .addKeys(P_ID.getName()); }
private static void buildFunctionImports(MetadataStore metadataStore, List<Builder> edmSchemas) { for (Schema schema : metadataStore.getSchemaList()) { EdmSchema.Builder odataSchema = findSchema(edmSchemas, schema.getName()); EdmEntityContainer.Builder entityContainer = findEntityContainer(edmSchemas, schema.getName()); // procedures for (Procedure proc : schema.getProcedures().values()) { EdmFunctionImport.Builder edmProcedure = EdmFunctionImport.newBuilder(); edmProcedure.setName(proc.getName()); String httpMethod = "POST"; for (ProcedureParameter pp : proc.getParameters()) { if (pp.getName().equals("return")) { httpMethod = "GET"; edmProcedure.setReturnType( ODataTypeManager.odataType(pp.getDatatype().getRuntimeTypeName())); continue; } EdmFunctionParameter.Builder param = EdmFunctionParameter.newBuilder(); param.setName(pp.getName()); param.setType(ODataTypeManager.odataType(pp.getDatatype().getRuntimeTypeName())); if (pp.getType() == ProcedureParameter.Type.In) { param.setMode(Mode.In); } else if (pp.getType() == ProcedureParameter.Type.InOut) { param.setMode(Mode.InOut); } else if (pp.getType() == ProcedureParameter.Type.Out) { param.setMode(Mode.Out); } param.setNullable(pp.getNullType() == NullType.Nullable); edmProcedure.addParameters(param); } // add a complex type for return resultset. ColumnSet<Procedure> returnColumns = proc.getResultSet(); if (returnColumns != null) { httpMethod = "GET"; EdmComplexType.Builder complexType = EdmComplexType.newBuilder(); complexType.setName(proc.getName() + "_" + returnColumns.getName()); complexType.setNamespace(schema.getName()); for (Column c : returnColumns.getColumns()) { EdmProperty.Builder property = EdmProperty.newBuilder(c.getName()) .setType(ODataTypeManager.odataType(c.getDatatype().getRuntimeTypeName())) .setNullable(c.getNullType() == NullType.Nullable); if (c.getDatatype() .getRuntimeTypeName() .equals(DataTypeManager.DefaultDataTypes.STRING)) { property .setFixedLength(c.isFixedLength()) .setMaxLength(c.getLength()) .setUnicode(true); } complexType.addProperties(property); } odataSchema.addComplexTypes(complexType); edmProcedure.setIsCollection(true); edmProcedure.setReturnType( EdmCollectionType.newBuilder() .setCollectionType(complexType) .setKind(CollectionKind.Collection)); } edmProcedure.setHttpMethod(httpMethod); entityContainer.addFunctionImports(edmProcedure); } } }
private static void buildEntityTypes( MetadataStore metadataStore, List<EdmSchema.Builder> edmSchemas) { for (Schema schema : metadataStore.getSchemaList()) { List<EdmEntitySet.Builder> entitySets = new ArrayList<EdmEntitySet.Builder>(); List<EdmEntityType.Builder> entityTypes = new ArrayList<EdmEntityType.Builder>(); for (Table table : schema.getTables().values()) { KeyRecord primaryKey = table.getPrimaryKey(); List<KeyRecord> uniques = table.getUniqueKeys(); if (primaryKey == null && uniques.isEmpty()) { LogManager.logDetail( LogConstants.CTX_ODATA, ODataPlugin.Util.gs(ODataPlugin.Event.TEIID16002, table.getFullName())); continue; } EdmEntityType.Builder entityType = EdmEntityType.newBuilder().setName(table.getName()).setNamespace(schema.getName()); // adding key if (primaryKey != null) { for (Column c : primaryKey.getColumns()) { entityType.addKeys(c.getName()); } } else { for (Column c : uniques.get(0).getColumns()) { entityType.addKeys(c.getName()); } } // adding properties for (Column c : table.getColumns()) { EdmProperty.Builder property = EdmProperty.newBuilder(c.getName()) .setType(ODataTypeManager.odataType(c.getDatatype().getRuntimeTypeName())) .setNullable(c.getNullType() == NullType.Nullable); if (c.getDatatype() .getRuntimeTypeName() .equals(DataTypeManager.DefaultDataTypes.STRING)) { property.setFixedLength(c.isFixedLength()).setMaxLength(c.getLength()).setUnicode(true); } entityType.addProperties(property); } // entity set one for one entity type EdmEntitySet.Builder entitySet = EdmEntitySet.newBuilder().setName(table.getName()).setEntityType(entityType); entityType.setNamespace(schema.getName()); entitySets.add(entitySet); // add enitity types for entity schema entityTypes.add(entityType); } // entity container is holder entity sets, association sets, function imports EdmEntityContainer.Builder entityContainer = EdmEntityContainer.newBuilder() .setName(schema.getName()) .setIsDefault(false) .addEntitySets(entitySets); // build entity schema EdmSchema.Builder modelSchema = EdmSchema.newBuilder() .setNamespace(schema.getName()) .addEntityTypes(entityTypes) .addEntityContainers(entityContainer); edmSchemas.add(modelSchema); } }
private EdmProperty.Builder parseEdmProperty(XMLEventReader2 reader, XMLEvent2 event) { List<EdmAnnotation<?>> annotElements = new ArrayList<EdmAnnotation<?>>(); StartElement2 startElement = event.asStartElement(); String propertyName = getAttributeValueIfExists(startElement, "Name"); String propertyType = getAttributeValueIfExists(startElement, "Type"); String propertyNullable = getAttributeValueIfExists(startElement, "Nullable"); String maxLength = getAttributeValueIfExists(startElement, "MaxLength"); String unicode = getAttributeValueIfExists(startElement, "Unicode"); String fixedLength = getAttributeValueIfExists(startElement, "FixedLength"); String collation = getAttributeValueIfExists(startElement, "Collation"); String collectionKindS = getAttributeValueIfExists(startElement, "CollectionKind"); CollectionKind ckind = CollectionKind.NONE; if (collectionKindS != null) { ckind = Enum.valueOf(CollectionKind.class, collectionKindS); } String defaultValue = getAttributeValueIfExists(startElement, "DefaultValue"); String precision = getAttributeValueIfExists(startElement, "Precision"); String scale = getAttributeValueIfExists(startElement, "Scale"); String storeGeneratedPattern = getAttributeValueIfExists( startElement, new QName2(NS_EDMANNOTATION, "StoreGeneratedPattern")); String concurrencyMode = getAttributeValueIfExists(startElement, "ConcurrencyMode"); String mimeType = getAttributeValueIfExists(startElement, M_MIMETYPE); String fcTargetPath = getAttributeValueIfExists(startElement, M_FC_TARGETPATH); String fcContentKind = getAttributeValueIfExists(startElement, M_FC_CONTENTKIND); String fcKeepInContent = getAttributeValueIfExists(startElement, M_FC_KEEPINCONTENT); String fcEpmContentKind = getAttributeValueIfExists(startElement, M_FC_EPMCONTENTKIND); String fcEpmKeepInContent = getAttributeValueIfExists(startElement, M_FC_EPMKEEPINCONTENT); String fcNsPrefix = getAttributeValueIfExists(startElement, M_FC_NSPREFIX); String fcNsUri = getAttributeValueIfExists(startElement, M_FC_NSURI); while (reader.hasNext()) { XMLEvent2 event2 = reader.nextEvent(); if (event2.isStartElement()) { EdmAnnotation<?> anElement = getAnnotationElements(event2, reader); if (anElement != null) { annotElements.add(anElement); } } if (isEndElement(event2, startElement.getName())) { return EdmProperty.newBuilder(propertyName) .setType(EdmType.newDeferredBuilder(propertyType, dataServices)) .setNullable("true".equalsIgnoreCase(propertyNullable)) .setMaxLength( maxLength == null ? null : maxLength.equals("Max") ? Integer.MAX_VALUE : Integer.parseInt(maxLength)) .setUnicode(unicode == null ? null : "true".equalsIgnoreCase(unicode)) .setFixedLength(fixedLength == null ? null : "true".equalsIgnoreCase(fixedLength)) .setCollation(collation) .setConcurrencyMode(concurrencyMode) .setStoreGeneratedPattern(storeGeneratedPattern) .setMimeType(mimeType) .setFcTargetPath(fcTargetPath) .setFcContentKind(fcContentKind) .setFcKeepInContent(fcKeepInContent) .setFcEpmContentKind(fcEpmContentKind) .setFcEpmKeepInContent(fcEpmKeepInContent) .setFcNsPrefix(fcNsPrefix) .setFcNsUri(fcNsUri) .setCollectionKind(ckind) .setDefaultValue(defaultValue) .setPrecision(precision == null ? null : Integer.parseInt(precision)) .setScale(scale == null ? null : Integer.parseInt(scale)) .setAnnotations(getAnnotations(startElement)) .setAnnotationElements(annotElements.isEmpty() ? null : annotElements); } } throw new UnsupportedOperationException(); }