public SqlStatement generate(JdbcMetadataMapping mapping, EdmEntitySet entitySet, OEntity entity) { JdbcTable table = mapping.getMappedTable(entitySet); StringBuilder sql = new StringBuilder("INSERT INTO " + table.tableName + "("); StringBuilder columns = new StringBuilder(); StringBuilder values = new StringBuilder(); List<SqlParameter> params = new ArrayList<SqlParameter>(); for (OProperty<?> prop : entity.getProperties()) { if (columns.length() > 0) columns.append(", "); if (values.length() > 0) values.append(", "); EdmProperty edmProp = entitySet.getType().findProperty(prop.getName()); JdbcColumn column = mapping.getMappedColumn(edmProp); columns.append(column.columnName); values.append("?"); params.add(new SqlParameter(prop.getValue(), null)); } sql.append(columns); sql.append(") VALUES ("); sql.append(values); sql.append(")"); return new SqlStatement(sql.toString(), ImmutableList.copyOf(params)); }
protected static void reportEntity(String caption, OEntity entity) { report(caption); if (entity.getEntityTag() != null) report(" ETag: %s", entity.getEntityTag()); for (OProperty<?> p : entity.getProperties()) { Object v = p.getValue(); if (p.getType().equals(EdmSimpleType.BINARY) && v != null) v = org.odata4j.repack.org.apache.commons.codec.binary.Base64.encodeBase64String((byte[]) v).trim(); report(" %s: %s", p.getName(), v); } }
writeEntry(writer, entity, entity.getProperties(), entity.getLinks(), baseUri, updated, ees, true); writer.endElement("entry");
for (OProperty<?> op : oe.getProperties()) { if (beanModel.canWrite(op.getName())) beanModel.setPropertyValue(rt, op.getName(), op.getValue());
@Override public void execute() throws ODataProducerException { List<OProperty<?>> requestProps = props; if (updateRoot != null) { OEntity updateRootEntity = (OEntity) updateRoot; requestProps = Enumerable.create(updateRootEntity.getProperties()).toList(); for (final OProperty<?> prop : props) { OProperty<?> requestProp = Enumerable.create(requestProps).firstOrNull(new Predicate1<OProperty<?>>() { public boolean apply(OProperty<?> input) { return input.getName().equals(prop.getName()); } }); requestProps.remove(requestProp); requestProps.add(prop); } } OEntityKey entityKey = Enumerable.create(segments).last().key; Entry entry = client.createRequestEntry(entitySet, entityKey, requestProps, links); String path = Enumerable.create(segments).join("/"); ODataClientRequest request = updateRoot != null ? ODataClientRequest.put(serviceRootUri + path, entry) : ODataClientRequest.merge(serviceRootUri + path, entry); if (ifMatch != null) request.header(Headers.IF_MATCH, ifMatch); client.updateEntity(request); }
for (OProperty<?> op : oe.getProperties()) { if (beanModel.canWrite(op.getName())) beanModel.setPropertyValue(rt, op.getName(), op.getValue());
@Override public void execute() throws ODataProducerException { List<OProperty<?>> requestProps = props; if (updateRoot != null) { OEntity updateRootEntity = (OEntity) updateRoot; requestProps = Enumerable.create(updateRootEntity.getProperties()).toList(); for (final OProperty<?> prop : props) { OProperty<?> requestProp = Enumerable.create(requestProps).firstOrNull(new Predicate1<OProperty<?>>() { public boolean apply(OProperty<?> input) { return input.getName().equals(prop.getName()); } }); requestProps.remove(requestProp); requestProps.add(prop); } } OEntityKey entityKey = Enumerable.create(segments).last().key; Entry entry = client.createRequestEntry(entitySet, entityKey, requestProps, links); String path = Enumerable.create(segments).join("/"); ODataClientRequest request = updateRoot != null ? ODataClientRequest.put(serviceRootUri + path, entry) : ODataClientRequest.merge(serviceRootUri + path, entry); if (ifMatch != null) request.header(Headers.IF_MATCH, ifMatch); client.updateEntity(request); }
writeEntry(writer, entity, entity.getProperties(), entity.getLinks(), baseUri, updated, ees, true); writer.endElement("entry");
public void writeRequestEntry(Writer w, Entry entry) { DateTime utc = new DateTime().withZone(DateTimeZone.UTC); String updated = InternalUtil.toString(utc); XMLWriter2 writer = XMLFactoryProvider2.getInstance().newXMLWriterFactory2().createXMLWriter(w); writer.startDocument(); writer.startElement(new QName2("entry"), atom); writer.writeNamespace("d", d); writer.writeNamespace("m", m); OEntity entity = entry.getEntity(); writeEntry(writer, null, entity.getProperties(), entity.getLinks(), null, updated, entity.getEntitySet(), false); writer.endDocument(); }
public void writeRequestEntry(Writer w, Entry entry) { DateTime utc = new DateTime().withZone(DateTimeZone.UTC); String updated = InternalUtil.toString(utc); XMLWriter2 writer = XMLFactoryProvider2.getInstance().newXMLWriterFactory2().createXMLWriter(w); writer.startDocument(); writer.startElement(new QName2("entry"), atom); writer.writeNamespace("d", d); writer.writeNamespace("m", m); OEntity entity = entry.getEntity(); writeEntry(writer, null, entity.getProperties(), entity.getLinks(), null, updated, entity.getEntitySet(), false); writer.endDocument(); }
@Override public boolean execute(JPAContext context) { EntityManager em = context.getEntityManager(); EntityType<?> jpaEntityType = context.getEntity() .getJPAEntityType(); Object jpaEntity = context.getEntity().getJpaEntity(); OEntity entity = context.getEntity().getOEntity(); JPAProducer.applyOProperties(em, jpaEntityType, entity.getProperties(), jpaEntity); JPAProducer.applyOLinks(em, jpaEntityType, entity.getLinks(), jpaEntity); return false; } }
@Override public void write(UriInfo uriInfo, Writer w, EntityResponse target) { String baseUri = uriInfo.getBaseUri().toString(); EdmEntitySet ees = target.getEntity().getEntitySet(); DateTime utc = new DateTime().withZone(DateTimeZone.UTC); String updated = InternalUtil.toString(utc); XMLWriter2 writer = XMLFactoryProvider2.getInstance().newXMLWriterFactory2().createXMLWriter(w); writer.startDocument(); writer.startElement(new QName2("entry"), atom); writer.writeNamespace("m", m); writer.writeNamespace("d", d); writer.writeAttribute("xml:base", baseUri); writeEntry(writer, target.getEntity(), target.getEntity().getProperties(), target.getEntity().getLinks(), baseUri, updated, ees, true); writer.endDocument(); }
@Override public void write(UriInfo uriInfo, Writer w, EntityResponse target) { String baseUri = uriInfo.getBaseUri().toString(); EdmEntitySet ees = target.getEntity().getEntitySet(); DateTime utc = new DateTime().withZone(DateTimeZone.UTC); String updated = InternalUtil.toString(utc); XMLWriter2 writer = XMLFactoryProvider2.getInstance().newXMLWriterFactory2().createXMLWriter(w); writer.startDocument(); writer.startElement(new QName2("entry"), atom); writer.writeNamespace("m", m); writer.writeNamespace("d", d); writer.writeAttribute("xml:base", baseUri); writeEntry(writer, target.getEntity(), target.getEntity().getProperties(), target.getEntity().getLinks(), baseUri, updated, ees, true); writer.endDocument(); }
private void run(String[] args) { ODataConsumer c = ODataConsumers.create(ODataEndpoints.NETFLIX); // locate the netflix id for Morgan Spurlock int morganSpurlockId = c.getEntities("People").filter("substringof('Spurlock',Name)").execute().first().getProperty("Id", Integer.class).getValue(); // lookup and print all titles he's acted in List<OEntity> titlesActedIn = c.getEntities("People").nav(morganSpurlockId, "TitlesActedIn").execute().toList(); for (OEntity title : titlesActedIn) { for (OProperty<?> p : title.getProperties()) { report("%s: %s", p.getName(), p.getValue()); } report("\n"); } report("count: " + titlesActedIn.size()); }
writer.startElement("entry"); writeEntry(writer, entity, entity.getProperties(), entity.getLinks(), baseUri, updated, entity.getEntitySet(), isResponse); writer.startElement("entry"); writeEntry(writer, entity, entity.getProperties(), entity.getLinks(), baseUri, updated, entity.getEntitySet(), isResponse);
writer.startElement("entry"); writeEntry(writer, entity, entity.getProperties(), entity.getLinks(), baseUri, updated, entity.getEntitySet(), isResponse); writer.startElement("entry"); writeEntry(writer, entity, entity.getProperties(), entity.getLinks(), baseUri, updated, entity.getEntitySet(), isResponse);
protected void writeOEntity(UriInfo uriInfo, JsonWriter jw, OEntity oe, EdmEntitySet ees, boolean isResponse) { jw.startObject(); { String baseUri = null; // TODO: I'm keeping this pattern of writing the __metadata if we have a non-null type..it seems like we could still // write the uri even if we don't have a type. Also, are there any scenarios where the entity type would be null? Not sure. if (isResponse && oe.getEntityType() != null) { baseUri = uriInfo.getBaseUri().toString(); jw.writeName("__metadata"); jw.startObject(); { String absId = baseUri + InternalUtil.getEntityRelId(oe); jw.writeName("uri"); jw.writeString(absId); jw.writeSeparator(); jw.writeName("type"); jw.writeString(oe.getEntityType().getFullyQualifiedTypeName()); } jw.endObject(); jw.writeSeparator(); } writeOProperties(jw, oe.getProperties()); writeLinks(jw, oe, uriInfo, isResponse); } jw.endObject(); }
protected void writeOEntity(UriInfo uriInfo, JsonWriter jw, OEntity oe, EdmEntitySet ees, boolean isResponse) { jw.startObject(); { String baseUri = null; // TODO: I'm keeping this pattern of writing the __metadata if we have a non-null type..it seems like we could still // write the uri even if we don't have a type. Also, are there any scenarios where the entity type would be null? Not sure. if (isResponse && oe.getEntityType() != null) { baseUri = uriInfo.getBaseUri().toString(); jw.writeName("__metadata"); jw.startObject(); { String absId = baseUri + InternalUtil.getEntityRelId(oe); jw.writeName("uri"); jw.writeString(absId); jw.writeSeparator(); jw.writeName("type"); jw.writeString(oe.getEntityType().getFullyQualifiedTypeName()); } jw.endObject(); jw.writeSeparator(); } writeOProperties(jw, oe.getProperties()); writeLinks(jw, oe, uriInfo, isResponse); } jw.endObject(); }
static Object createNewJPAEntity( EntityManager em, EntityType<?> jpaEntityType, OEntity oEntity, boolean withLinks) { Object jpaEntity = newInstance(jpaEntityType.getJavaType()); if (jpaEntityType.getIdType().getPersistenceType() == PersistenceType.EMBEDDABLE) { EmbeddableType<?> et = (EmbeddableType<?>) jpaEntityType .getIdType(); JPAMember idMember = JPAMember.create( jpaEntityType.getId(et.getJavaType()), jpaEntity); Object idValue = newInstance(et.getJavaType()); idMember.set(idValue); } applyOProperties(em, jpaEntityType, oEntity.getProperties(), jpaEntity); if (withLinks) applyOLinks(em, jpaEntityType, oEntity.getLinks(), jpaEntity); return jpaEntity; }
@Override public CommandResult execute(CreateEntityCommandContext context) throws Exception { JdbcProducerCommandContext jdbcContext = (JdbcProducerCommandContext) context; String entitySetName = context.getEntitySetName(); final JdbcMetadataMapping mapping = jdbcContext.getBackend().getMetadataMapping(); final EdmEntitySet entitySet = mapping.getMetadata().findEdmEntitySet(entitySetName); if (entitySet == null) throw new NotFoundException(); GenerateSqlInsert insertGen = jdbcContext.get(GenerateSqlInsert.class); final SqlStatement sqlStatement = insertGen.generate(mapping, entitySet, context.getEntity()); jdbcContext.getJdbc().execute(new ThrowingFunc1<Connection, Void>() { @Override public Void apply(Connection conn) throws Exception { PreparedStatement stmt = sqlStatement.asPreparedStatement(conn); int updated = stmt.executeUpdate(); if (updated == 0) throw new BadRequestException("Entity not inserted"); return null; } }); // now re-query for inserted entity OEntityKey entityKey = OEntityKey.infer(entitySet, context.getEntity().getProperties()); GetEntityCommandContext getEntityCommandContext = jdbcContext.getBackend().newGetEntityCommandContext(entitySetName, entityKey, null); jdbcContext.getBackend().getCommand(GetEntityCommandContext.class).execute(getEntityCommandContext); OEntity newEntity = getEntityCommandContext.getResult().getEntity(); EntityResponse response = Responses.entity(newEntity); context.setResult(response); return CommandResult.CONTINUE; }