http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f7a7b484/lib/server-core/src/test/resources/batchWithContent.batch ---------------------------------------------------------------------- diff --git a/lib/server-core/src/test/resources/batchWithContent.batch b/lib/server-core/src/test/resources/batchWithContent.batch deleted file mode 100644 index 834857d..0000000 --- a/lib/server-core/src/test/resources/batchWithContent.batch +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f7a7b484/lib/server-core/src/test/resources/batchWithPost.batch ---------------------------------------------------------------------- diff --git a/lib/server-core/src/test/resources/batchWithPost.batch b/lib/server-core/src/test/resources/batchWithPost.batch deleted file mode 100644 index 227c3d3..0000000 --- a/lib/server-core/src/test/resources/batchWithPost.batch +++ /dev/null @@ -1,39 +0,0 @@ ---batch_8194-cf13-1f56 -Content-Type: application/http -Content-Transfer-Encoding: binary - -GET Employees('2')/EmployeeName?$format=json HTTP/1.1 -Accept: application/atomsvc+xml;q=0.8, application/json;odata=verbose;q=0.5, */*;q=0.1 -Accept-Language:en-US,en;q=0.7,en-UK;q=0.9 -MaxDataServiceVersion: 2.0 - - ---batch_8194-cf13-1f56 -Content-Type: multipart/mixed; boundary=changeset_f980-1cb6-94dd - ---changeset_f980-1cb6-94dd -Content-Type: application/http -Content-Transfer-Encoding: binary -Content-ID: changeRequest1 - -PUT Employees('2')/EmployeeName HTTP/1.1 -Content-Length: 100000 -Accept: application/atomsvc+xml;q=0.8, application/json;odata=verbose;q=0.5, */*;q=0.1 -DataServiceVersion: 1.0 -Content-Type: application/json;odata=verbose -MaxDataServiceVersion: 2.0 - -{"EmployeeName":"Frederic Fall MODIFIED"} - ---changeset_f980-1cb6-94dd-- - ---batch_8194-cf13-1f56 -Content-Type: application/http -Content-Transfer-Encoding: binary - -GET Employees('2')/EmployeeName?$format=json HTTP/1.1 -Accept: application/atomsvc+xml;q=0.8, application/json;odata=verbose;q=0.5, */*;q=0.1 -MaxDataServiceVersion: 2.0 - - ---batch_8194-cf13-1f56-- http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f7a7b484/lib/server-core/src/test/resources/simplelogger.properties ---------------------------------------------------------------------- diff --git a/lib/server-core/src/test/resources/simplelogger.properties b/lib/server-core/src/test/resources/simplelogger.properties deleted file mode 100644 index 2a3350c..0000000 --- a/lib/server-core/src/test/resources/simplelogger.properties +++ /dev/null @@ -1,20 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# -org.slf4j.simpleLogger.defaultLogLevel=debug -org.slf4j.simpleLogger.logFile=System.out \ No newline at end of file http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f7a7b484/lib/server-tecsvc/pom.xml ---------------------------------------------------------------------- diff --git a/lib/server-tecsvc/pom.xml b/lib/server-tecsvc/pom.xml deleted file mode 100644 index 60220e9..0000000 --- a/lib/server-tecsvc/pom.xml +++ /dev/null @@ -1,159 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. - ---> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - - <artifactId>odata-server-tecsvc</artifactId> - <packaging>war</packaging> - <name>${project.artifactId}</name> - - <parent> - <groupId>org.apache.olingo</groupId> - <artifactId>odata-lib</artifactId> - <version>4.0.0-beta-02</version> - <relativePath>..</relativePath> - </parent> - - <build> - - <resources> - <resource> - <directory>src/main/version</directory> - <filtering>true</filtering> - <targetPath>../${project.build.finalName}/gen</targetPath> - </resource> - <resource> - <directory>src/main/resources</directory> - <filtering>true</filtering> - </resource> - <resource> - <directory>target/maven-shared-archive-resources</directory> - </resource> - </resources> - - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-jar-plugin</artifactId> - <executions> - <execution> - <id>make-a-jar</id> - <phase>compile</phase> - <goals> - <goal>jar</goal> - </goals> - </execution> - </executions> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-install-plugin</artifactId> - <executions> - <execution> - <phase>install</phase> - <goals> - <goal>install-file</goal> - </goals> - <configuration> - <packaging>jar</packaging> - <artifactId>${project.artifactId}</artifactId> - <groupId>${project.groupId}</groupId> - <version>${project.version}</version> - <file> - ${project.build.directory}/${project.artifactId}-${project.version}.jar - </file> - </configuration> - </execution> - </executions> - </plugin> - <plugin> - <groupId>com.keyboardsamurais.maven</groupId> - <artifactId>maven-timestamp-plugin</artifactId> - <configuration> - <propertyName>timestamp</propertyName> - <timestampPattern>dd.MM.yyyy HH:mm</timestampPattern> - </configuration> - <executions> - <execution> - <goals> - <goal>create</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - - <dependencies> - <dependency> - <groupId>javax.servlet</groupId> - <artifactId>servlet-api</artifactId> - <version>2.5</version> - <scope>provided</scope> - </dependency> - - <dependency> - <groupId>org.apache.olingo</groupId> - <artifactId>odata-server-api</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>org.apache.olingo</groupId> - <artifactId>odata-server-core</artifactId> - <version>${project.version}</version> - <scope>runtime</scope> - </dependency> - - <dependency> - <groupId>org.apache.olingo</groupId> - <artifactId>odata-commons-api</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>org.apache.olingo</groupId> - <artifactId>odata-commons-core</artifactId> - <version>${project.version}</version> - </dependency> - - <dependency> - <groupId>org.slf4j</groupId> - <artifactId>slf4j-simple</artifactId> - <scope>runtime</scope> - </dependency> - - <dependency> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - </dependency> - <dependency> - <groupId>org.mockito</groupId> - <artifactId>mockito-all</artifactId> - </dependency> - <dependency> - <groupId>commons-io</groupId> - <artifactId>commons-io</artifactId> - <scope>test</scope> - </dependency> - </dependencies> - -</project> http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f7a7b484/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/TechnicalServlet.java ---------------------------------------------------------------------- diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/TechnicalServlet.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/TechnicalServlet.java deleted file mode 100644 index 7fa981b..0000000 --- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/TechnicalServlet.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.olingo.server.tecsvc; - -import java.io.IOException; -import java.net.URI; -import java.util.Arrays; -import java.util.List; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.apache.olingo.server.api.OData; -import org.apache.olingo.server.api.ODataHttpHandler; -import org.apache.olingo.server.api.ServiceMetadata; -import org.apache.olingo.server.api.edmx.EdmxReference; -import org.apache.olingo.server.api.edmx.EdmxReferenceInclude; -import org.apache.olingo.server.tecsvc.data.DataProvider; -import org.apache.olingo.server.tecsvc.processor.TechnicalBatchProcessor; -import org.apache.olingo.server.tecsvc.processor.TechnicalEntityProcessor; -import org.apache.olingo.server.tecsvc.processor.TechnicalPrimitiveComplexProcessor; -import org.apache.olingo.server.tecsvc.provider.EdmTechProvider; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class TechnicalServlet extends HttpServlet { - - private static final long serialVersionUID = 1L; - private static final Logger LOG = LoggerFactory.getLogger(TechnicalServlet.class); - - @Override - protected void service(final HttpServletRequest req, final HttpServletResponse resp) - throws ServletException, IOException { - try { - OData odata = OData.newInstance(); - EdmxReference reference = new EdmxReference(URI.create("../v4.0/cs02/vocabularies/Org.OData.Core.V1.xml")); - reference.addInclude(new EdmxReferenceInclude("Org.OData.Core.V1", "Core")); - final List<EdmxReference> references = Arrays.asList(reference); - final ServiceMetadata serviceMetadata = odata.createServiceMetadata(new EdmTechProvider(references), references); - - HttpSession session = req.getSession(true); - DataProvider dataProvider = (DataProvider) session.getAttribute(DataProvider.class.getName()); - if (dataProvider == null) { - dataProvider = new DataProvider(); - session.setAttribute(DataProvider.class.getName(), dataProvider); - LOG.info("Created new data provider."); - } - - ODataHttpHandler handler = odata.createHandler(serviceMetadata); - handler.register(new TechnicalEntityProcessor(dataProvider)); - handler.register(new TechnicalPrimitiveComplexProcessor(dataProvider)); - handler.register(new TechnicalBatchProcessor(dataProvider)); - handler.process(req, resp); - } catch (RuntimeException e) { - LOG.error("Server Error", e); - throw new ServletException(e); - } - } -} http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f7a7b484/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/DataProvider.java ---------------------------------------------------------------------- diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/DataProvider.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/DataProvider.java deleted file mode 100644 index 07b748d..0000000 --- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/DataProvider.java +++ /dev/null @@ -1,610 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.olingo.server.tecsvc.data; - -import java.nio.charset.Charset; -import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.TimeZone; -import java.util.UUID; - -import org.apache.olingo.commons.api.data.Entity; -import org.apache.olingo.commons.api.data.EntitySet; -import org.apache.olingo.commons.api.data.Link; -import org.apache.olingo.commons.api.data.LinkedComplexValue; -import org.apache.olingo.commons.api.data.Property; -import org.apache.olingo.commons.api.data.ValueType; -import org.apache.olingo.commons.api.edm.EdmEntitySet; -import org.apache.olingo.commons.api.edm.EdmEntityType; -import org.apache.olingo.commons.api.edm.EdmPrimitiveType; -import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException; -import org.apache.olingo.commons.api.edm.EdmProperty; -import org.apache.olingo.commons.api.http.HttpStatusCode; -import org.apache.olingo.commons.core.data.EntityImpl; -import org.apache.olingo.commons.core.data.EntitySetImpl; -import org.apache.olingo.commons.core.data.LinkImpl; -import org.apache.olingo.commons.core.data.LinkedComplexValueImpl; -import org.apache.olingo.commons.core.data.PropertyImpl; -import org.apache.olingo.server.api.ODataApplicationException; -import org.apache.olingo.server.api.uri.UriParameter; - -public class DataProvider { - - private static final UUID GUID = UUID.fromString("01234567-89ab-cdef-0123-456789abcdef"); - private static final String MEDIA_PROPERTY_NAME = "$value"; - - private Map<String, EntitySet> data; - - public DataProvider() { - data = new HashMap<String, EntitySet>(); - data.put("ESTwoPrim", createESTwoPrim()); - data.put("ESAllPrim", createESAllPrim()); - data.put("ESCompAllPrim", createESCompAllPrim()); - data.put("ESCollAllPrim", createESCollAllPrim()); - data.put("ESMixPrimCollComp", createESMixPrimCollComp()); - data.put("ESAllKey", createESAllKey()); - data.put("ESCompComp", createESCompComp()); - data.put("ESMedia", createESMedia()); - - linkESTwoPrim(); - linkESAllPrim(); - } - - public EntitySet readAll(final EdmEntitySet edmEntitySet) throws DataProviderException { - return data.get(edmEntitySet.getName()); - } - - public Entity read(final EdmEntitySet edmEntitySet, final List<UriParameter> keys) throws DataProviderException { - final EdmEntityType entityType = edmEntitySet.getEntityType(); - final EntitySet entitySet = data.get(edmEntitySet.getName()); - if (entitySet == null) { - return null; - } else { - try { - for (final Entity entity : entitySet.getEntities()) { - boolean found = true; - for (final UriParameter key : keys) { - final EdmProperty property = (EdmProperty) entityType.getProperty(key.getName()); - final EdmPrimitiveType type = (EdmPrimitiveType) property.getType(); - final Object value = entity.getProperty(key.getName()).getValue(); - final Object keyValue = type.valueOfString(type.fromUriLiteral(key.getText()), - property.isNullable(), property.getMaxLength(), property.getPrecision(), property.getScale(), - property.isUnicode(), - Calendar.class.isAssignableFrom(value.getClass()) ? Calendar.class : value.getClass()); - if (!value.equals(keyValue)) { - found = false; - break; - } - } - if (found) { - return entity; - } - } - return null; - } catch (final EdmPrimitiveTypeException e) { - throw new DataProviderException("Wrong key!", e); - } - } - } - - public void delete(final EdmEntitySet edmEntitySet, final Entity entity) throws DataProviderException { - deleteLinksTo(entity); - data.get(edmEntitySet.getName()).getEntities().remove(entity); - } - - public void deleteLinksTo(final Entity to) throws DataProviderException { - for (final String entitySet : data.keySet()) { - for (final Entity entity : data.get(entitySet).getEntities()) { - for (Iterator<Link> linkIterator = entity.getNavigationLinks().iterator(); linkIterator.hasNext();) { - final Link link = linkIterator.next(); - if (to.equals(link.getInlineEntity())) { - linkIterator.remove(); - } else if (link.getInlineEntitySet() != null) { - for (Iterator<Entity> iterator = link.getInlineEntitySet().getEntities().iterator(); iterator.hasNext();) { - if (to.equals(iterator.next())) { - iterator.remove(); - } - } - if (link.getInlineEntitySet().getEntities().isEmpty()) { - linkIterator.remove(); - } - } - } - } - } - } - - public Entity create(final EdmEntitySet edmEntitySet) throws DataProviderException { - List<Entity> entities = readAll(edmEntitySet).getEntities(); - Entity entity = new EntityImpl(); - final List<String> keyNames = edmEntitySet.getEntityType().getKeyPredicateNames(); - if (keyNames.size() == 1 && keyNames.get(0).equals("PropertyInt16")) { - entity.addProperty(createPrimitive("PropertyInt16", - entities.isEmpty() ? 1 : - (Integer) entities.get(entities.size() - 1).getProperty("PropertyInt16").getValue() + 1)); - } else { - throw new DataProviderException("Key construction not supported!"); - } - entities.add(entity); - return entity; - } - - public byte[] readMedia(final Entity entity) { - return (byte[]) entity.getProperty(MEDIA_PROPERTY_NAME).asPrimitive(); - } - - public void setMedia(Entity entity, byte[] media, String type) { - entity.getProperties().remove(entity.getProperty(MEDIA_PROPERTY_NAME)); - entity.addProperty(createPrimitive(MEDIA_PROPERTY_NAME, media)); - entity.setMediaContentType(type); - } - - public static class DataProviderException extends ODataApplicationException { - private static final long serialVersionUID = 5098059649321796156L; - - public DataProviderException(final String message, final Throwable throwable) { - super(message, HttpStatusCode.INTERNAL_SERVER_ERROR.getStatusCode(), Locale.ROOT, throwable); - } - - public DataProviderException(final String message) { - super(message, HttpStatusCode.INTERNAL_SERVER_ERROR.getStatusCode(), Locale.ROOT); - } - } - - private EntitySet createESTwoPrim() { - EntitySet entitySet = new EntitySetImpl(); - - entitySet.getEntities().add(new EntityImpl() - .addProperty(createPrimitive("PropertyInt16", 32766)) - .addProperty(createPrimitive("PropertyString", "Test String1"))); - - entitySet.getEntities().add(new EntityImpl() - .addProperty(createPrimitive("PropertyInt16", -365)) - .addProperty(createPrimitive("PropertyString", "Test String2"))); - - entitySet.getEntities().add(new EntityImpl() - .addProperty(createPrimitive("PropertyInt16", -32766)) - .addProperty(createPrimitive("PropertyString", null))); - - entitySet.getEntities().add(new EntityImpl() - .addProperty(createPrimitive("PropertyInt16", Short.MAX_VALUE)) - .addProperty(createPrimitive("PropertyString", "Test String4"))); - - return entitySet; - } - - private EntitySet createESAllPrim() { - EntitySet entitySet = new EntitySetImpl(); - - entitySet.getEntities().add(new EntityImpl() - .addProperty(createPrimitive("PropertyInt16", Short.MAX_VALUE)) - .addProperty(createPrimitive("PropertyString", "First Resource - positive values")) - .addProperty(createPrimitive("PropertyBoolean", true)) - .addProperty(createPrimitive("PropertyByte", 255)) - .addProperty(createPrimitive("PropertySByte", Byte.MAX_VALUE)) - .addProperty(createPrimitive("PropertyInt32", Integer.MAX_VALUE)) - .addProperty(createPrimitive("PropertyInt64", Long.MAX_VALUE)) - .addProperty(createPrimitive("PropertySingle", 1.79000000E+20)) - .addProperty(createPrimitive("PropertyDouble", -1.7900000000000000E+19)) - .addProperty(createPrimitive("PropertyDecimal", 34)) - .addProperty(createPrimitive("PropertyBinary", - new byte[] { 0x01, 0x23, 0x45, 0x67, (byte) 0x89, (byte) 0xAB, (byte) 0xCD, (byte) 0xEF })) - .addProperty(createPrimitive("PropertyDate", getDateTime(2012, 12, 3, 0, 0, 0))) - .addProperty(createPrimitive("PropertyDateTimeOffset", getDateTime(2012, 12, 3, 7, 16, 23))) - .addProperty(createPrimitive("PropertyDuration", 6)) - .addProperty(createPrimitive("PropertyGuid", GUID)) - .addProperty(createPrimitive("PropertyTimeOfDay", getTime(3, 26, 5)))); - - entitySet.getEntities().add(new EntityImpl() - .addProperty(createPrimitive("PropertyInt16", Short.MIN_VALUE)) - .addProperty(createPrimitive("PropertyString", "Second Resource - negative values")) - .addProperty(createPrimitive("PropertyBoolean", false)) - .addProperty(createPrimitive("PropertyByte", 0)) - .addProperty(createPrimitive("PropertySByte", Byte.MIN_VALUE)) - .addProperty(createPrimitive("PropertyInt32", Integer.MIN_VALUE)) - .addProperty(createPrimitive("PropertyInt64", Long.MIN_VALUE)) - .addProperty(createPrimitive("PropertySingle", -1.79000000E+08)) - .addProperty(createPrimitive("PropertyDouble", -1.7900000000000000E+05)) - .addProperty(createPrimitive("PropertyDecimal", -34)) - .addProperty(createPrimitive("PropertyBinary", - new byte[] { 0x01, 0x23, 0x45, 0x67, (byte) 0x89, (byte) 0xAB, (byte) 0xCD, (byte) 0xEF })) - .addProperty(createPrimitive("PropertyDate", getDateTime(2015, 11, 5, 0, 0, 0))) - .addProperty(createPrimitive("PropertyDateTimeOffset", getDateTime(2005, 12, 3, 7, 17, 8))) - .addProperty(createPrimitive("PropertyDuration", 9)) - .addProperty(createPrimitive("PropertyGuid", UUID.fromString("76543201-23ab-cdef-0123-456789dddfff"))) - .addProperty(createPrimitive("PropertyTimeOfDay", getTime(23, 49, 14)))); - - entitySet.getEntities().add(new EntityImpl() - .addProperty(createPrimitive("PropertyInt16", 0)) - .addProperty(createPrimitive("PropertyString", "")) - .addProperty(createPrimitive("PropertyBoolean", false)) - .addProperty(createPrimitive("PropertyByte", 0)) - .addProperty(createPrimitive("PropertySByte", 0)) - .addProperty(createPrimitive("PropertyInt32", 0)) - .addProperty(createPrimitive("PropertyInt64", 0)) - .addProperty(createPrimitive("PropertySingle", 0)) - .addProperty(createPrimitive("PropertyDouble", 0)) - .addProperty(createPrimitive("PropertyDecimal", 0)) - .addProperty(createPrimitive("PropertyBinary", new byte[] {})) - .addProperty(createPrimitive("PropertyDate", getDateTime(1970, 1, 1, 0, 0, 0))) - .addProperty(createPrimitive("PropertyDateTimeOffset", getDateTime(2005, 12, 3, 0, 0, 0))) - .addProperty(createPrimitive("PropertyDuration", 0)) - .addProperty(createPrimitive("PropertyGuid", UUID.fromString("76543201-23ab-cdef-0123-456789cccddd"))) - .addProperty(createPrimitive("PropertyTimeOfDay", getTime(0, 1, 1)))); - - return entitySet; - } - - private EntitySet createESCompAllPrim() { - EntitySet entitySet = new EntitySetImpl(); - - Entity entity = new EntityImpl(); - entity.addProperty(createPrimitive("PropertyInt16", Short.MAX_VALUE)); - LinkedComplexValue complexValue = new LinkedComplexValueImpl(); - complexValue.getValue().add(createPrimitive("PropertyString", "First Resource - first")); - complexValue.getValue().add(createPrimitive("PropertyBinary", - new byte[] { 0x01, 0x23, 0x45, 0x67, (byte) 0x89, (byte) 0xAB, (byte) 0xCD, (byte) 0xEF })); - complexValue.getValue().add(createPrimitive("PropertyBoolean", true)); - complexValue.getValue().add(createPrimitive("PropertyByte", 255)); - complexValue.getValue().add(createPrimitive("PropertyDate", getDateTime(2012, 10, 3, 0, 0, 0))); - complexValue.getValue().add(createPrimitive("PropertyDateTimeOffset", - getTimestamp(2012, 10, 3, 7, 16, 23, 123456700))); - complexValue.getValue().add(createPrimitive("PropertyDecimal", 34.27)); - complexValue.getValue().add(createPrimitive("PropertySingle", 1.79000000E+20)); - complexValue.getValue().add(createPrimitive("PropertyDouble", -1.7900000000000000E+19)); - complexValue.getValue().add(createPrimitive("PropertyDuration", 6)); - complexValue.getValue().add(createPrimitive("PropertyGuid", GUID)); - complexValue.getValue().add(createPrimitive("PropertyInt16", Short.MAX_VALUE)); - complexValue.getValue().add(createPrimitive("PropertyInt32", Integer.MAX_VALUE)); - complexValue.getValue().add(createPrimitive("PropertyInt64", Long.MAX_VALUE)); - complexValue.getValue().add(createPrimitive("PropertySByte", Byte.MAX_VALUE)); - complexValue.getValue().add(createPrimitive("PropertyTimeOfDay", getTime(1, 0, 1))); - entity.addProperty(new PropertyImpl(null, "PropertyComp", ValueType.LINKED_COMPLEX, complexValue)); - entitySet.getEntities().add(entity); - - entity = new EntityImpl(); - entity.addProperty(createPrimitive("PropertyInt16", 7)); - complexValue = new LinkedComplexValueImpl(); - complexValue.getValue().add(createPrimitive("PropertyString", "Second Resource - second")); - complexValue.getValue().add(createPrimitive("PropertyBinary", - new byte[] { 0x01, 0x23, 0x45, 0x67, (byte) 0x89, (byte) 0xAB, (byte) 0xCD, (byte) 0xEF })); - complexValue.getValue().add(createPrimitive("PropertyBoolean", true)); - complexValue.getValue().add(createPrimitive("PropertyByte", 255)); - complexValue.getValue().add(createPrimitive("PropertyDate", getDateTime(2013, 11, 4, 0, 0, 0))); - complexValue.getValue().add(createPrimitive("PropertyDateTimeOffset", - getDateTime(2013, 11, 4, 7, 16, 23))); - complexValue.getValue().add(createPrimitive("PropertyDecimal", 34.27)); - complexValue.getValue().add(createPrimitive("PropertySingle", 1.79000000E+20)); - complexValue.getValue().add(createPrimitive("PropertyDouble", -1.7900000000000000E+02)); - complexValue.getValue().add(createPrimitive("PropertyDuration", 6)); - complexValue.getValue().add(createPrimitive("PropertyGuid", GUID)); - complexValue.getValue().add(createPrimitive("PropertyInt16", 25)); - complexValue.getValue().add(createPrimitive("PropertyInt32", Integer.MAX_VALUE)); - complexValue.getValue().add(createPrimitive("PropertyInt64", Long.MAX_VALUE)); - complexValue.getValue().add(createPrimitive("PropertySByte", Byte.MAX_VALUE)); - complexValue.getValue().add(createPrimitive("PropertyTimeOfDay", getTimestamp(1, 1, 1, 7, 45, 12, 765432100))); - entity.addProperty(new PropertyImpl(null, "PropertyComp", ValueType.LINKED_COMPLEX, complexValue)); - entitySet.getEntities().add(entity); - - entity = new EntityImpl(); - entity.addProperty(createPrimitive("PropertyInt16", 0)); - complexValue = new LinkedComplexValueImpl(); - complexValue.getValue().add(createPrimitive("PropertyString", "Third Resource - third")); - complexValue.getValue().add(createPrimitive("PropertyBinary", - new byte[] { 0x01, 0x23, 0x45, 0x67, (byte) 0x89, (byte) 0xAB, (byte) 0xCD, (byte) 0xEF })); - complexValue.getValue().add(createPrimitive("PropertyBoolean", true)); - complexValue.getValue().add(createPrimitive("PropertyByte", 255)); - complexValue.getValue().add(createPrimitive("PropertyDate", getDateTime(2014, 12, 5, 0, 0, 0))); - complexValue.getValue().add(createPrimitive("PropertyDateTimeOffset", - getTimestamp(2014, 12, 5, 8, 17, 45, 123456700))); - complexValue.getValue().add(createPrimitive("PropertyDecimal", 17.98)); - complexValue.getValue().add(createPrimitive("PropertySingle", 1.79000000E+20)); - complexValue.getValue().add(createPrimitive("PropertyDouble", -1.7900000000000000E+02)); - complexValue.getValue().add(createPrimitive("PropertyDuration", 6)); - complexValue.getValue().add(createPrimitive("PropertyGuid", GUID)); - complexValue.getValue().add(createPrimitive("PropertyInt16", -25)); - complexValue.getValue().add(createPrimitive("PropertyInt32", Integer.MAX_VALUE)); - complexValue.getValue().add(createPrimitive("PropertyInt64", Long.MAX_VALUE)); - complexValue.getValue().add(createPrimitive("PropertySByte", Byte.MAX_VALUE)); - complexValue.getValue().add(createPrimitive("PropertyTimeOfDay", getTime(13, 27, 45))); - entity.addProperty(new PropertyImpl(null, "PropertyComp", ValueType.LINKED_COMPLEX, complexValue)); - entitySet.getEntities().add(entity); - - return entitySet; - } - - private EntitySet createESCollAllPrim() { - EntitySet entitySet = new EntitySetImpl(); - - entitySet.getEntities().add(new EntityImpl() - .addProperty(createPrimitive("PropertyInt16", 1)) - .addProperty(createCollection("CollPropertyString", - "[email protected]", "[email protected]", "[email protected]")) - .addProperty(createCollection("CollPropertyBoolean", true, false, true)) - .addProperty(createCollection("CollPropertyByte", 50, 200, 249)) - .addProperty(createCollection("CollPropertySByte", -120, 120, 126)) - .addProperty(createCollection("CollPropertyInt16", 1000, 2000, 30112)) - .addProperty(createCollection("CollPropertyInt32", 23232323, 11223355, 10000001)) - .addProperty(createCollection("CollPropertyInt64", 929292929292L, 333333333333L, 444444444444L)) - .addProperty(createCollection("CollPropertySingle", 1.79000000E+03, 2.66000000E+04, 3.21000000E+03)) - .addProperty(createCollection("CollPropertyDouble", - -1.7900000000000000E+04, -2.7800000000000000E+07, 3.2100000000000000E+03)) - .addProperty(createCollection("CollPropertyDecimal", 12, -2, 1234)) - .addProperty(createCollection("CollPropertyBinary", - new byte[] { (byte) 0xAB, (byte) 0xCD, (byte) 0xEF }, - new byte[] { 0x01, 0x23, 0x45 }, - new byte[] { 0x54, 0x67, (byte) 0x89 })) - .addProperty(createCollection("CollPropertyDate", - getDateTime(1958, 12, 3, 0, 0, 0), - getDateTime(1999, 8, 5, 0, 0, 0), - getDateTime(2013, 6, 25, 0, 0, 0))) - .addProperty(createCollection("CollPropertyDateTimeOffset", - getDateTime(2015, 8, 12, 3, 8, 34), - getDateTime(1970, 3, 28, 12, 11, 10), - getDateTime(1948, 2, 17, 9, 9, 9))) - .addProperty(createCollection("CollPropertyDuration", 13, 19680, 3600)) - .addProperty(createCollection("CollPropertyGuid", - UUID.fromString("ffffff67-89ab-cdef-0123-456789aaaaaa"), - UUID.fromString("eeeeee67-89ab-cdef-0123-456789bbbbbb"), - UUID.fromString("cccccc67-89ab-cdef-0123-456789cccccc"))) - .addProperty(createCollection("CollPropertyTimeOfDay", - getTime(4, 14, 13), getTime(23, 59, 59), getTime(1, 12, 33)))); - - Entity entity = new EntityImpl(); - entity.getProperties().addAll(entitySet.getEntities().get(0).getProperties()); - entity.getProperties().set(0, createPrimitive("PropertyInt16", 2)); - entitySet.getEntities().add(entity); - - entity = new EntityImpl(); - entity.getProperties().addAll(entitySet.getEntities().get(0).getProperties()); - entity.getProperties().set(0, createPrimitive("PropertyInt16", 3)); - entitySet.getEntities().add(entity); - - return entitySet; - } - - private EntitySet createESMixPrimCollComp() { - EntitySet entitySet = new EntitySetImpl(); - - Entity entity = new EntityImpl(); - entity.addProperty(createPrimitive("PropertyInt16", Short.MAX_VALUE)); - entity.addProperty(createCollection("CollPropertyString", - "[email protected]", "[email protected]", "[email protected]")); - LinkedComplexValue complexValue = new LinkedComplexValueImpl(); - complexValue.getValue().add(createPrimitive("PropertyInt16", 111)); - complexValue.getValue().add(createPrimitive("PropertyString", "TEST A")); - entity.addProperty(new PropertyImpl(null, "PropertyComp", ValueType.LINKED_COMPLEX, complexValue)); - List<LinkedComplexValue> complexCollection = new ArrayList<LinkedComplexValue>(); - complexValue = new LinkedComplexValueImpl(); - complexValue.getValue().add(createPrimitive("PropertyInt16", 123)); - complexValue.getValue().add(createPrimitive("PropertyString", "TEST 1")); - complexCollection.add(complexValue); - complexValue = new LinkedComplexValueImpl(); - complexValue.getValue().add(createPrimitive("PropertyInt16", 456)); - complexValue.getValue().add(createPrimitive("PropertyString", "TEST 2")); - complexCollection.add(complexValue); - complexValue = new LinkedComplexValueImpl(); - complexValue.getValue().add(createPrimitive("PropertyInt16", 789)); - complexValue.getValue().add(createPrimitive("PropertyString", "TEST 3")); - complexCollection.add(complexValue); - entity.addProperty(new PropertyImpl(null, "CollPropertyComp", ValueType.COLLECTION_LINKED_COMPLEX, - complexCollection)); - entitySet.getEntities().add(entity); - - entity = new EntityImpl(); - entity.addProperty(createPrimitive("PropertyInt16", 7)); - entity.addProperty(createCollection("CollPropertyString", - "[email protected]", "[email protected]", "[email protected]")); - complexValue = new LinkedComplexValueImpl(); - complexValue.getValue().add(createPrimitive("PropertyInt16", 222)); - complexValue.getValue().add(createPrimitive("PropertyString", "TEST B")); - entity.addProperty(new PropertyImpl(null, "PropertyComp", ValueType.LINKED_COMPLEX, complexValue)); - entity.addProperty(new PropertyImpl(null, "CollPropertyComp", ValueType.COLLECTION_LINKED_COMPLEX, - complexCollection)); - entitySet.getEntities().add(entity); - - entity = new EntityImpl(); - entity.addProperty(createPrimitive("PropertyInt16", 0)); - entity.addProperty(createCollection("CollPropertyString", - "[email protected]", "[email protected]", "[email protected]")); - complexValue = new LinkedComplexValueImpl(); - complexValue.getValue().add(createPrimitive("PropertyInt16", 333)); - complexValue.getValue().add(createPrimitive("PropertyString", "TEST C")); - entity.addProperty(new PropertyImpl(null, "PropertyComp", ValueType.LINKED_COMPLEX, complexValue)); - entity.addProperty(new PropertyImpl(null, "CollPropertyComp", ValueType.COLLECTION_LINKED_COMPLEX, - complexCollection)); - entitySet.getEntities().add(entity); - - return entitySet; - } - - private EntitySet createESAllKey() { - EntitySet entitySet = new EntitySetImpl(); - - entitySet.getEntities().add(new EntityImpl() - .addProperty(createPrimitive("PropertyString", "First")) - .addProperty(createPrimitive("PropertyBoolean", true)) - .addProperty(createPrimitive("PropertyByte", 255)) - .addProperty(createPrimitive("PropertySByte", Byte.MAX_VALUE)) - .addProperty(createPrimitive("PropertyInt16", Short.MAX_VALUE)) - .addProperty(createPrimitive("PropertyInt32", Integer.MAX_VALUE)) - .addProperty(createPrimitive("PropertyInt64", Long.MAX_VALUE)) - .addProperty(createPrimitive("PropertyDecimal", 34)) - .addProperty(createPrimitive("PropertyDate", getDateTime(2012, 12, 3, 0, 0, 0))) - .addProperty(createPrimitive("PropertyDateTimeOffset", getDateTime(2012, 12, 3, 7, 16, 23))) - .addProperty(createPrimitive("PropertyDuration", 6)) - .addProperty(createPrimitive("PropertyGuid", GUID)) - .addProperty(createPrimitive("PropertyTimeOfDay", getTime(2, 48, 21)))); - - entitySet.getEntities().add(new EntityImpl() - .addProperty(createPrimitive("PropertyString", "Second")) - .addProperty(createPrimitive("PropertyBoolean", true)) - .addProperty(createPrimitive("PropertyByte", 254)) - .addProperty(createPrimitive("PropertySByte", 124)) - .addProperty(createPrimitive("PropertyInt16", 32764)) - .addProperty(createPrimitive("PropertyInt32", 2147483644)) - .addProperty(createPrimitive("PropertyInt64", 9223372036854775804L)) - .addProperty(createPrimitive("PropertyDecimal", 34)) - .addProperty(createPrimitive("PropertyDate", getDateTime(2012, 12, 3, 0, 0, 0))) - .addProperty(createPrimitive("PropertyDateTimeOffset", getDateTime(2012, 12, 3, 7, 16, 23))) - .addProperty(createPrimitive("PropertyDuration", 6)) - .addProperty(createPrimitive("PropertyGuid", GUID)) - .addProperty(createPrimitive("PropertyTimeOfDay", getTime(2, 48, 21)))); - - return entitySet; - } - - private EntitySet createESCompComp() { - EntitySet entitySet = new EntitySetImpl(); - - Entity entity = new EntityImpl(); - entity.addProperty(createPrimitive("PropertyInt16", 1)); - LinkedComplexValue complexValueInner = new LinkedComplexValueImpl(); - complexValueInner.getValue().add(createPrimitive("PropertyInt16", 123)); - complexValueInner.getValue().add(createPrimitive("PropertyString", "String 1")); - LinkedComplexValue complexValueOuter = new LinkedComplexValueImpl(); - complexValueOuter.getValue().add( - new PropertyImpl(null, "PropertyComp", ValueType.LINKED_COMPLEX, complexValueInner)); - entity.addProperty(new PropertyImpl(null, "PropertyComp", ValueType.LINKED_COMPLEX, complexValueOuter)); - entitySet.getEntities().add(entity); - - entity = new EntityImpl(); - entity.addProperty(createPrimitive("PropertyInt16", 2)); - complexValueInner = new LinkedComplexValueImpl(); - complexValueInner.getValue().add(createPrimitive("PropertyInt16", 987)); - complexValueInner.getValue().add(createPrimitive("PropertyString", "String 2")); - complexValueOuter = new LinkedComplexValueImpl(); - complexValueOuter.getValue().add( - new PropertyImpl(null, "PropertyComp", ValueType.LINKED_COMPLEX, complexValueInner)); - entity.addProperty(new PropertyImpl(null, "PropertyComp", ValueType.LINKED_COMPLEX, complexValueOuter)); - entitySet.getEntities().add(entity); - - return entitySet; - } - - private EntitySet createESMedia() { - EntitySet entitySet = new EntitySetImpl(); - - Entity entity = new EntityImpl(); - entity.addProperty(createPrimitive("PropertyInt16", 1)); - setMedia(entity, createImage("darkturquoise"), "image/svg+xml"); - entitySet.getEntities().add(entity); - - entity = new EntityImpl(); - entity.addProperty(createPrimitive("PropertyInt16", 2)); - setMedia(entity, createImage("royalblue"), "image/svg+xml"); - entitySet.getEntities().add(entity); - - entity = new EntityImpl(); - entity.addProperty(createPrimitive("PropertyInt16", 3)); - setMedia(entity, createImage("crimson"), "image/svg+xml"); - entitySet.getEntities().add(entity); - - entity = new EntityImpl(); - entity.addProperty(createPrimitive("PropertyInt16", 4)); - setMedia(entity, createImage("black"), "image/svg+xml"); - entitySet.getEntities().add(entity); - - return entitySet; - } - - private static byte[] createImage(final String color) { - return ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" - + "<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" viewBox=\"0 0 100 100\">\n" - + " <g stroke=\"darkmagenta\" stroke-width=\"16\" fill=\"" + color + "\">\n" - + " <circle cx=\"50\" cy=\"50\" r=\"42\"/>\n" - + " </g>\n" - + "</svg>\n").getBytes(Charset.forName("UTF-8")); - } - - private void linkESTwoPrim() { - EntitySet entitySet = data.get("ESTwoPrim"); - final List<Entity> targetEntities = data.get("ESAllPrim").getEntities(); - - setLinks(entitySet.getEntities().get(1), "NavPropertyETAllPrimMany", targetEntities.subList(1, 3)); - - setLink(entitySet.getEntities().get(3), "NavPropertyETAllPrimOne", targetEntities.get(0)); - } - - private void linkESAllPrim() { - EntitySet entitySet = data.get("ESAllPrim"); - final List<Entity> targetEntities = data.get("ESTwoPrim").getEntities(); - - setLinks(entitySet.getEntities().get(0), "NavPropertyETTwoPrimMany", targetEntities.subList(1, 2)); - setLink(entitySet.getEntities().get(0), "NavPropertyETTwoPrimOne", targetEntities.get(3)); - - setLinks(entitySet.getEntities().get(2), "NavPropertyETTwoPrimMany", - Arrays.asList(targetEntities.get(0), targetEntities.get(2), targetEntities.get(3))); - } - - private Property createPrimitive(final String name, final Object value) { - return new PropertyImpl(null, name, ValueType.PRIMITIVE, value); - } - - private Property createCollection(final String name, final Object... values) { - return new PropertyImpl(null, name, ValueType.COLLECTION_PRIMITIVE, Arrays.asList(values)); - } - - private Calendar getDateTime(final int year, final int month, final int day, - final int hour, final int minute, final int second) { - Calendar dateTime = Calendar.getInstance(TimeZone.getTimeZone("GMT")); - dateTime.clear(); - dateTime.set(year, month - 1, day, hour, minute, second); - return dateTime; - } - - private Calendar getTime(final int hour, final int minute, final int second) { - Calendar time = Calendar.getInstance(TimeZone.getTimeZone("GMT")); - time.clear(); - time.set(Calendar.HOUR_OF_DAY, hour); - time.set(Calendar.MINUTE, minute); - time.set(Calendar.SECOND, second); - return time; - } - - private Timestamp getTimestamp(final int year, final int month, final int day, - final int hour, final int minute, final int second, final int nanosecond) { - Timestamp timestamp = new Timestamp(getDateTime(year, month, day, hour, minute, second).getTimeInMillis()); - timestamp.setNanos(nanosecond); - return timestamp; - } - - private void setLink(Entity entity, final String navigationPropertyName, final Entity target) { - Link link = new LinkImpl(); - link.setTitle(navigationPropertyName); - link.setInlineEntity(target); - entity.getNavigationLinks().add(link); - } - - private void setLinks(Entity entity, final String navigationPropertyName, final List<Entity> targets) { - Link link = new LinkImpl(); - link.setTitle(navigationPropertyName); - EntitySet target = new EntitySetImpl(); - target.getEntities().addAll(targets); - link.setInlineEntitySet(target); - entity.getNavigationLinks().add(link); - } -} http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f7a7b484/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalBatchProcessor.java ---------------------------------------------------------------------- diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalBatchProcessor.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalBatchProcessor.java deleted file mode 100644 index 37884be..0000000 --- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalBatchProcessor.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.olingo.server.tecsvc.processor; - -import java.io.InputStream; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; - -import org.apache.olingo.commons.api.format.ContentType; -import org.apache.olingo.commons.api.http.HttpHeader; -import org.apache.olingo.commons.api.http.HttpStatusCode; -import org.apache.olingo.server.api.ODataRequest; -import org.apache.olingo.server.api.ODataResponse; -import org.apache.olingo.server.api.batch.BatchFacade; -import org.apache.olingo.server.api.batch.exception.BatchDeserializerException; -import org.apache.olingo.server.api.batch.exception.BatchSerializerException; -import org.apache.olingo.server.api.deserializer.batch.BatchOptions; -import org.apache.olingo.server.api.deserializer.batch.BatchRequestPart; -import org.apache.olingo.server.api.deserializer.batch.ODataResponsePart; -import org.apache.olingo.server.api.processor.BatchProcessor; -import org.apache.olingo.server.tecsvc.data.DataProvider; - -public class TechnicalBatchProcessor extends TechnicalProcessor implements BatchProcessor { - private static final String PREFERENCE_CONTINUE_ON_ERROR = "odata.continue-on-error"; - - public TechnicalBatchProcessor(DataProvider dataProvider) { - super(dataProvider); - } - - @Override - public void processBatch(BatchFacade fascade, ODataRequest request, ODataResponse response) - throws BatchSerializerException, BatchDeserializerException { - boolean continueOnError = isContinueOnError(request); - - final String boundary = fascade.extractBoundaryFromContentType(request.getHeader(HttpHeader.CONTENT_TYPE)); - final BatchOptions options = BatchOptions.with() - .rawBaseUri(request.getRawBaseUri()) - .rawServiceResolutionUri(request.getRawServiceResolutionUri()).build(); - final List<BatchRequestPart> parts = odata.createFixedFormatDeserializer().parseBatchRequest(request.getBody(), - boundary, options); - final List<ODataResponsePart> responseParts = new ArrayList<ODataResponsePart>(); - - for (BatchRequestPart part : parts) { - final ODataResponsePart responsePart = fascade.handleBatchRequest(part); - responseParts.add(responsePart); // Also add failed responses - final int statusCode = responsePart.getResponses().get(0).getStatusCode(); - - if ((statusCode >= 400 && statusCode <= 600) && !continueOnError) { - - // Perform some additions actions - // ... - - break; // Stop processing, but serialize all recent requests - } - } - - final String responseBoundary = "batch_" + UUID.randomUUID().toString();; - final InputStream responseContent = - odata.createFixedFormatSerializer().batchResponse(responseParts, responseBoundary); - response.setHeader(HttpHeader.CONTENT_TYPE, ContentType.MULTIPART_MIXED + ";boundary=" + responseBoundary); - response.setContent(responseContent); - response.setStatusCode(HttpStatusCode.ACCEPTED.getStatusCode()); - } - - private boolean isContinueOnError(ODataRequest request) { - final List<String> preferValues = request.getHeaders(HttpHeader.PREFER); - - if (preferValues != null) { - for (final String preference : preferValues) { - if (PREFERENCE_CONTINUE_ON_ERROR.equals(preference)) { - return true; - } - } - } - return false; - } - - @Override - public ODataResponsePart processChangeSet(BatchFacade fascade, List<ODataRequest> requests) - throws BatchDeserializerException { - List<ODataResponse> responses = new ArrayList<ODataResponse>(); - - for (ODataRequest request : requests) { - final ODataResponse oDataResponse = fascade.handleODataRequest(request); - final int statusCode = oDataResponse.getStatusCode(); - - if (statusCode < 400) { - responses.add(oDataResponse); - } else { - // Rollback - // ... - - // OData Version 4.0 Part 1: Protocol Plus Errata 01 - // 11.7.4 Responding to a Batch Request - // - // When a request within a change set fails, the change set response is not represented using - // the multipart/mixed media type. Instead, a single response, using the application/http media type - // and a Content-Transfer-Encoding header with a value of binary, is returned that applies to all requests - // in the change set and MUST be formatted according to the Error Handling defined - // for the particular response format. - - return new ODataResponsePart(oDataResponse, false); - } - } - - return new ODataResponsePart(responses, true); - } - -}
