List<OProperty<?>> refProps = new ArrayList<OProperty<?>>(); refProps.add(OProperties.string(Edm.PropertyRef.Name, key)); builder.add(OComplexObjects.create(propRefType, refProps)); EdmProperty keysProp = entityKeyType.findProperty(Edm.EntityKey.Keys); EdmType collectionItemType = entityKeyType.findProperty(Edm.EntityKey.Keys).getType(); keyProps.add(OProperties.collection(Edm.EntityKey.Keys, new EdmCollectionType(keysProp.getCollectionKind(), collectionItemType), builder.build()));
List<OProperty<?>> refProps = new ArrayList<OProperty<?>>(); refProps.add(OProperties.string(Edm.PropertyRef.Name, key)); builder.add(OComplexObjects.create(propRefType, refProps)); EdmProperty keysProp = entityKeyType.findProperty(Edm.EntityKey.Keys); EdmType collectionItemType = entityKeyType.findProperty(Edm.EntityKey.Keys).getType(); keyProps.add(OProperties.collection(Edm.EntityKey.Keys, new EdmCollectionType(keysProp.getCollectionKind(), collectionItemType), builder.build()));
b.add(OSimpleObjects.create((EdmSimpleType<?>) property.getType(), v)); } else { List<OProperty<?>> cprops = new ArrayList<OProperty<?>>(); addPropertiesFromObject(v, typeInfo.getPropertyModel(), (EdmComplexType) property.getType(), cprops, pathHelper); b.add(OComplexObjects.create((EdmComplexType) property.getType(), cprops)); property.getType()), b.build()));
private static OProperty<?> readCollection(String name, EdmCollectionType collectionType, XMLEventReader2 reader, StartElement2 collectionElement, EdmDataServices metadata, EdmStructuralType structuralType) { EdmType componentType = collectionType.getItemType(); OCollection.Builder<OObject> b = OCollections.newBuilder(componentType); while (reader.hasNext()) { XMLEvent2 event = reader.nextEvent(); if (event.isEndElement() && event.asEndElement().getName().equals(collectionElement.getName())) { break; } if (event.isStartElement() && event.asStartElement().getName().getNamespaceUri().equals(NS_DATASERVICES)) { OProperty<?> op = null; Attribute2 nullAttribute = event.asStartElement().getAttributeByName(M_NULL); boolean isNull = nullAttribute != null && "true".equals(nullAttribute.getValue()); if (!componentType.isSimple()) { EdmStructuralType est = (EdmStructuralType) componentType; op = OProperties.complex(name, (EdmComplexType) componentType, isNull ? null : Enumerable.create(parseProperties(reader, event.asStartElement(), metadata, est)).toList()); } else { op = OProperties.parseSimple(name, (EdmSimpleType<?>) componentType, isNull ? null : reader.getElementText()); } b.add(OSimpleObjects.create((EdmSimpleType<?>)componentType, op.getValue())); } } return OProperties.collection(name, collectionType, b.build()); }
protected OCollection<? extends OObject> parseFunctionFeed(Reader reader) { // entitySetName is a function // this really reveals a fundamental flaw in the parsers being driven by EdmEntitySets // instead of EdmEntityTypes. EdmEntitySet entitySet = this.metadata.getEdmEntitySet((EdmEntityType) returnType.getItemType()); Settings settings = new Settings( // someone really needs to spend some time on service version negotiation.... ODataVersion.V2, this.metadata, entitySet.getName(), this.entityKey, this.isResponse, this.returnType.getItemType()); JsonFeedFormatParser parser = new JsonFeedFormatParser(settings); JsonFeed feed = parser.parse(reader); OCollection.Builder<OObject> c = newCollectionBuilder(); for (Entry e : feed.getEntries()) { c.add(e.getEntity()); } return c.build(); }
private OProperty<?> readProperty(Column column, Object value) { if (value instanceof Array) { EdmType componentType = ODataTypeManager.odataType(column.getRuntimeType()); if (componentType instanceof EdmCollectionType) { componentType = ((EdmCollectionType)componentType).getItemType(); } OCollection.Builder<OObject> b = OCollections.newBuilder(componentType); List<Expression> values = ((Array)value).getExpressions(); for (int i = 0; i < values.size(); i++) { Literal literal = (Literal)values.get(i); b.add(OSimpleObjects.create((EdmSimpleType<?>)componentType, literal.getValue())); } return OProperties.collection(column.getName(), new EdmCollectionType(CollectionKind.Collection, componentType), b.build()); } else { Literal literal = (Literal)value; return OProperties.simple(column.getName(), literal.getValue()); } }
protected OCollection<? extends OObject> parseFunctionFeed(Reader reader) { // entitySetName is a function // this really reveals a fundamental flaw in the parsers being driven by EdmEntitySets // instead of EdmEntityTypes. EdmEntitySet entitySet = this.metadata.getEdmEntitySet((EdmEntityType) returnType.getItemType()); Settings settings = new Settings( // someone really needs to spend some time on service version negotiation.... ODataVersion.V2, this.metadata, entitySet.getName(), this.entityKey, this.isResponse, this.returnType.getItemType()); JsonFeedFormatParser parser = new JsonFeedFormatParser(settings); JsonFeed feed = parser.parse(reader); OCollection.Builder<OObject> c = newCollectionBuilder(); for (Entry e : feed.getEntries()) { c.add(e.getEntity()); } return c.build(); }
@Override public List<EdmAnnotation<?>> getAnnotationsForSchema(String namespace) { List<EdmAnnotation<?>> annots = new ArrayList<EdmAnnotation<?>>(); annots.add(new EdmAnnotationAttribute(namespace, prefix, "Version", "1.0 early experience pre-alpha")); List<OProperty<?>> p = new ArrayList<OProperty<?>>(); p.add(OProperties.string("Author", "Xavier S. Dumont")); p.add(OProperties.string("SeeAlso", "InMemoryProducerExample.java")); annots.add(EdmAnnotation.element(namespace, prefix, "SchemaInfo", OComplexObject.class, OComplexObjects.create(schemaInfoType, p))); annots.add(EdmAnnotation.element(namespace, prefix, "Tags", OCollection.class, OCollections.newBuilder(EdmSimpleType.STRING) .add(OSimpleObjects.create(EdmSimpleType.STRING, "tag1")) .add(OSimpleObjects.create(EdmSimpleType.STRING, "tag2")) .build())); return annots; }
protected void parseCollectionOfSimple(OCollection.Builder<OObject> builder, JsonStreamReader jsr) { while (jsr.hasNext()) { JsonEvent e = jsr.nextEvent(); if (e.isValue()) { JsonValueEvent ve = e.asValue(); builder.add(OSimpleObjects.parse((EdmSimpleType<?>) this.returnType.getItemType(), ve.getValue())); } else if (e.isEndArray()) { break; } else { throw new RuntimeException("invalid JSON content"); } } }
protected void parseCollectionOfSimple(OCollection.Builder<OObject> builder, JsonStreamReader jsr) { while (jsr.hasNext()) { JsonEvent e = jsr.nextEvent(); if (e.isValue()) { JsonValueEvent ve = e.asValue(); builder.add(OSimpleObjects.parse((EdmSimpleType<?>) this.returnType.getItemType(), ve.getValue())); } else if (e.isEndArray()) { break; } else { throw new RuntimeException("invalid JSON content"); } } }