From 5a9995570f17d1964a128db40fc546f2d5bffd72 Mon Sep 17 00:00:00 2001 From: Christian Amend Date: Wed, 22 Oct 2014 11:54:16 +0200 Subject: [PATCH] [OLINGO-466] First sample draft --- pom.xml | 1 + samples/client/pom.xml | 4 +- samples/pom.xml | 41 +++ samples/server/pom.xml | 77 ++++ .../olingo/server/sample/CarsServlet.java | 67 ++++ .../server/sample/data/DataProvider.java | 170 +++++++++ .../sample/edmprovider/CarsEdmProvider.java | 183 ++++++++++ .../sample/processor/CarsProcessor.java | 242 +++++++++++++ .../src/main/resources/META-INF/LICENSE | 331 ++++++++++++++++++ .../main/resources/simplelogger.properties | 20 ++ samples/server/src/main/version/version.html | 37 ++ .../server/src/main/webapp/WEB-INF/web.xml | 42 +++ samples/server/src/main/webapp/css/olingo.css | 91 +++++ .../src/main/webapp/img/OlingoOrangeTM.png | Bin 0 -> 113360 bytes samples/server/src/main/webapp/index.jsp | 55 +++ 15 files changed, 1359 insertions(+), 2 deletions(-) create mode 100644 samples/pom.xml create mode 100644 samples/server/pom.xml create mode 100644 samples/server/src/main/java/org/apache/olingo/server/sample/CarsServlet.java create mode 100644 samples/server/src/main/java/org/apache/olingo/server/sample/data/DataProvider.java create mode 100644 samples/server/src/main/java/org/apache/olingo/server/sample/edmprovider/CarsEdmProvider.java create mode 100644 samples/server/src/main/java/org/apache/olingo/server/sample/processor/CarsProcessor.java create mode 100644 samples/server/src/main/resources/META-INF/LICENSE create mode 100644 samples/server/src/main/resources/simplelogger.properties create mode 100644 samples/server/src/main/version/version.html create mode 100644 samples/server/src/main/webapp/WEB-INF/web.xml create mode 100644 samples/server/src/main/webapp/css/olingo.css create mode 100644 samples/server/src/main/webapp/img/OlingoOrangeTM.png create mode 100644 samples/server/src/main/webapp/index.jsp diff --git a/pom.xml b/pom.xml index db2e9fc92..d9872a025 100644 --- a/pom.xml +++ b/pom.xml @@ -62,6 +62,7 @@ ext fit dist + samples diff --git a/samples/client/pom.xml b/samples/client/pom.xml index 52f929976..fab03f64c 100644 --- a/samples/client/pom.xml +++ b/samples/client/pom.xml @@ -30,9 +30,9 @@ org.apache.olingo - odata-parent + odata-samples 4.0.0-beta-02-SNAPSHOT - ../.. + .. diff --git a/samples/pom.xml b/samples/pom.xml new file mode 100644 index 000000000..aeb8dc9e6 --- /dev/null +++ b/samples/pom.xml @@ -0,0 +1,41 @@ + + + + 4.0.0 + + org.apache.olingo + odata-samples + pom + ${project.artifactId} + + + org.apache.olingo + odata-parent + 4.0.0-beta-02-SNAPSHOT + .. + + + + server + + diff --git a/samples/server/pom.xml b/samples/server/pom.xml new file mode 100644 index 000000000..0589e65bc --- /dev/null +++ b/samples/server/pom.xml @@ -0,0 +1,77 @@ + + + + 4.0.0 + + org.apache.olingo + odata-server-sample + war + ${project.artifactId} + + + org.apache.olingo + odata-samples + 4.0.0-beta-02-SNAPSHOT + .. + + + + + javax.servlet + servlet-api + 2.5 + provided + + + + org.apache.olingo + odata-server-api + ${project.version} + + + org.apache.olingo + odata-server-core + ${project.version} + runtime + + + + org.apache.olingo + odata-commons-api + ${project.version} + + + org.apache.olingo + odata-commons-core + ${project.version} + + + + org.slf4j + slf4j-simple + 1.7.7 + runtime + + + + diff --git a/samples/server/src/main/java/org/apache/olingo/server/sample/CarsServlet.java b/samples/server/src/main/java/org/apache/olingo/server/sample/CarsServlet.java new file mode 100644 index 000000000..f6a17dc7b --- /dev/null +++ b/samples/server/src/main/java/org/apache/olingo/server/sample/CarsServlet.java @@ -0,0 +1,67 @@ +/* + * 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.sample; + +import java.io.IOException; +import java.util.ArrayList; + +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.sample.data.DataProvider; +import org.apache.olingo.server.sample.edmprovider.CarsEdmProvider; +import org.apache.olingo.server.sample.processor.CarsProcessor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class CarsServlet extends HttpServlet { + + private static final long serialVersionUID = 1L; + private static final Logger LOG = LoggerFactory.getLogger(CarsServlet.class); + + @Override + protected void service(final HttpServletRequest req, final HttpServletResponse resp) + throws ServletException, IOException { + try { + 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."); + } + + OData odata = OData.newInstance(); + ServiceMetadata edm = odata.createServiceMetadata(new CarsEdmProvider(), new ArrayList()); + ODataHttpHandler handler = odata.createHandler(edm); + handler.register(new CarsProcessor(dataProvider)); + handler.process(req, resp); + } catch (RuntimeException e) { + LOG.error("Server Error", e); + throw new ServletException(e); + } + } +} diff --git a/samples/server/src/main/java/org/apache/olingo/server/sample/data/DataProvider.java b/samples/server/src/main/java/org/apache/olingo/server/sample/data/DataProvider.java new file mode 100644 index 000000000..80609aaa8 --- /dev/null +++ b/samples/server/src/main/java/org/apache/olingo/server/sample/data/DataProvider.java @@ -0,0 +1,170 @@ +/* + * 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.sample.data; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import org.apache.olingo.commons.api.ODataException; +import org.apache.olingo.commons.api.data.Entity; +import org.apache.olingo.commons.api.data.EntitySet; +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.core.data.EntityImpl; +import org.apache.olingo.commons.core.data.EntitySetImpl; +import org.apache.olingo.commons.core.data.PropertyImpl; +import org.apache.olingo.server.api.uri.UriParameter; + +public class DataProvider { + + private static final UUID GUID = UUID.fromString("01234567-89ab-cdef-0123-456789abcdef"); + + private Map data; + + public DataProvider() { + data = new HashMap(); + data.put("Cars", createCars()); + data.put("Manufacturers", createManufacturers()); + } + + public EntitySet readAll(EdmEntitySet edmEntitySet) { + return data.get(edmEntitySet.getName()); + } + + public Entity read(final EdmEntitySet edmEntitySet, final List 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(); + if (!type.valueToString(entity.getProperty(key.getName()).getValue(), + property.isNullable(), property.getMaxLength(), property.getPrecision(), property.getScale(), + property.isUnicode()) + .equals(key.getText())) { + found = false; + break; + } + } + if (found) { + return entity; + } + } + return null; + } catch (final EdmPrimitiveTypeException e) { + throw new DataProviderException("Wrong key!", e); + } + } + } + + public static class DataProviderException extends ODataException { + private static final long serialVersionUID = 5098059649321796156L; + + public DataProviderException(String message, Throwable throwable) { + super(message, throwable); + } + + public DataProviderException(String message) { + super(message); + } + } + + private EntitySet createCars() { + EntitySet entitySet = new EntitySetImpl(); + + entitySet.getEntities().add(new EntityImpl() + .addProperty(createPrimitive("Id", 1)) + .addProperty(createPrimitive("Model", "F1 W03")) + .addProperty(createPrimitive("ModelYear", "2012")) + .addProperty(createPrimitive("Price", 189189.43)) + .addProperty(createPrimitive("Currency", "EUR"))); + + entitySet.getEntities().add(new EntityImpl() + .addProperty(createPrimitive("Id", 2)) + .addProperty(createPrimitive("Model", "F1 W04")) + .addProperty(createPrimitive("ModelYear", "2013")) + .addProperty(createPrimitive("Price", 199999.99)) + .addProperty(createPrimitive("Currency", "EUR"))); + + entitySet.getEntities().add(new EntityImpl() + .addProperty(createPrimitive("Id", 3)) + .addProperty(createPrimitive("Model", "F2012")) + .addProperty(createPrimitive("ModelYear", "2012")) + .addProperty(createPrimitive("Price", 137285.33)) + .addProperty(createPrimitive("Currency", "EUR"))); + + entitySet.getEntities().add(new EntityImpl() + .addProperty(createPrimitive("Id", 4)) + .addProperty(createPrimitive("Model", "F2013")) + .addProperty(createPrimitive("ModelYear", "2013")) + .addProperty(createPrimitive("Price", 145285.00)) + .addProperty(createPrimitive("Currency", "EUR"))); + + entitySet.getEntities().add(new EntityImpl() + .addProperty(createPrimitive("Id", 5)) + .addProperty(createPrimitive("Model", "F1 W02")) + .addProperty(createPrimitive("ModelYear", "2011")) + .addProperty(createPrimitive("Price", 167189.00)) + .addProperty(createPrimitive("Currency", "EUR"))); + + return entitySet; + } + + private EntitySet createManufacturers() { + EntitySet entitySet = new EntitySetImpl(); + + entitySet.getEntities().add(new EntityImpl() + .addProperty(createPrimitive("Id", 1)) + .addProperty(createPrimitive("Name", "Star Powered Racing")) + .addProperty(createAddress("Star Street 137", "Stuttgart", "70173", "Germany"))); + + entitySet.getEntities().add(new EntityImpl() + .addProperty(createPrimitive("Id", 2)) + .addProperty(createPrimitive("Name", "Horse Powered Racing")) + .addProperty(createAddress("Horse Street 1", "Maranello", "41053", "Italy"))); + + return entitySet; + } + + private Property createAddress(final String street, final String city, final String zipCode, final String country) { + List addressProperties = new ArrayList(); + addressProperties.add(createPrimitive("Street", street)); + addressProperties.add(createPrimitive("City", city)); + addressProperties.add(createPrimitive("ZipCode", zipCode)); + addressProperties.add(createPrimitive("Country", country)); + return new PropertyImpl(null, "Address", ValueType.COMPLEX, addressProperties); + } + + private Property createPrimitive(final String name, final Object value) { + return new PropertyImpl(null, name, ValueType.PRIMITIVE, value); + } +} diff --git a/samples/server/src/main/java/org/apache/olingo/server/sample/edmprovider/CarsEdmProvider.java b/samples/server/src/main/java/org/apache/olingo/server/sample/edmprovider/CarsEdmProvider.java new file mode 100644 index 000000000..8f1b24848 --- /dev/null +++ b/samples/server/src/main/java/org/apache/olingo/server/sample/edmprovider/CarsEdmProvider.java @@ -0,0 +1,183 @@ +/* + * 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.sample.edmprovider; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.apache.olingo.commons.api.ODataException; +import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind; +import org.apache.olingo.commons.api.edm.FullQualifiedName; +import org.apache.olingo.commons.api.edm.Target; +import org.apache.olingo.server.api.edm.provider.ComplexType; +import org.apache.olingo.server.api.edm.provider.EdmProvider; +import org.apache.olingo.server.api.edm.provider.EntityContainer; +import org.apache.olingo.server.api.edm.provider.EntityContainerInfo; +import org.apache.olingo.server.api.edm.provider.EntitySet; +import org.apache.olingo.server.api.edm.provider.EntityType; +import org.apache.olingo.server.api.edm.provider.NavigationProperty; +import org.apache.olingo.server.api.edm.provider.NavigationPropertyBinding; +import org.apache.olingo.server.api.edm.provider.Property; +import org.apache.olingo.server.api.edm.provider.PropertyRef; +import org.apache.olingo.server.api.edm.provider.Schema; + +public class CarsEdmProvider extends EdmProvider { + + // Service Namespace + public static final String NAMESPACE = "olingo.odata.sample"; + + // EDM Container + public static final String CONTAINER_NAME = "Container"; + public static final FullQualifiedName CONTAINER_FQN = new FullQualifiedName(NAMESPACE, CONTAINER_NAME); + + // Entity Types Names + public static final FullQualifiedName ET_CAR = new FullQualifiedName(NAMESPACE, "Car"); + public static final FullQualifiedName ET_MANUFACTURER = new FullQualifiedName(NAMESPACE, "Manufacturer"); + + // Complex Type Names + public static final FullQualifiedName CT_ADDRESS = new FullQualifiedName(NAMESPACE, "Address"); + + // Entity Set Names + public static final String ES_CARS_NAME = "Cars"; + public static final String ES_MANUFACTURER_NAME = "Manufacturers"; + + @Override + public EntityType getEntityType(final FullQualifiedName entityTypeName) throws ODataException { + if (ET_CAR.equals(entityTypeName)) { + return new EntityType() + .setName(ET_CAR.getName()) + .setKey(Arrays.asList( + new PropertyRef().setPropertyName("Id"))) + .setProperties( + Arrays.asList( + new Property().setName("Id").setType(EdmPrimitiveTypeKind.Int16.getFullQualifiedName()), + new Property().setName("Model").setType(EdmPrimitiveTypeKind.String.getFullQualifiedName()), + new Property().setName("ModelYear").setType(EdmPrimitiveTypeKind.String.getFullQualifiedName()) + .setMaxLength(4), + new Property().setName("Price").setType(EdmPrimitiveTypeKind.Decimal.getFullQualifiedName()) + .setScale(2), + new Property().setName("Currency").setType(EdmPrimitiveTypeKind.String.getFullQualifiedName()) + .setMaxLength(3) + ) + ).setNavigationProperties(Arrays.asList( + new NavigationProperty().setName("Manufacturer").setType(ET_MANUFACTURER) + ) + ); + + } else if (ET_MANUFACTURER.equals(entityTypeName)) { + return new EntityType() + .setName(ET_MANUFACTURER.getName()) + .setKey(Arrays.asList( + new PropertyRef().setPropertyName("Id"))) + .setProperties(Arrays.asList( + new Property().setName("Id").setType(EdmPrimitiveTypeKind.Int16.getFullQualifiedName()), + new Property().setName("Name").setType(EdmPrimitiveTypeKind.String.getFullQualifiedName()), + new Property().setName("Address").setType(CT_ADDRESS)) + ).setNavigationProperties(Arrays.asList( + new NavigationProperty().setName("Cars").setType(ET_CAR).setCollection(true) + ) + ); + } + + return null; + } + + public ComplexType getComplexType(final FullQualifiedName complexTypeName) throws ODataException { + if (CT_ADDRESS.equals(complexTypeName)) { + return new ComplexType().setName(CT_ADDRESS.getName()).setProperties(Arrays.asList( + new Property().setName("Street").setType(EdmPrimitiveTypeKind.String.getFullQualifiedName()), + new Property().setName("City").setType(EdmPrimitiveTypeKind.String.getFullQualifiedName()), + new Property().setName("ZipCode").setType(EdmPrimitiveTypeKind.String.getFullQualifiedName()), + new Property().setName("Country").setType(EdmPrimitiveTypeKind.String.getFullQualifiedName()) + )); + } + return null; + } + + @Override + public EntitySet getEntitySet(final FullQualifiedName entityContainer, final String entitySetName) + throws ODataException { + if (CONTAINER_FQN.equals(entityContainer)) { + if (ES_CARS_NAME.equals(entitySetName)) { + return new EntitySet() + .setName(ES_CARS_NAME) + .setType(ET_CAR) + .setNavigationPropertyBindings( + Arrays.asList( + new NavigationPropertyBinding().setPath("Manufacturer").setTarget( + new Target().setTargetName(ES_MANUFACTURER_NAME).setEntityContainer(CONTAINER_FQN)))); + } else if (ES_MANUFACTURER_NAME.equals(entitySetName)) { + return new EntitySet() + .setName(ES_MANUFACTURER_NAME) + .setType(ET_MANUFACTURER).setNavigationPropertyBindings( + Arrays.asList( + new NavigationPropertyBinding().setPath("Cars").setTarget( + new Target().setTargetName(ES_CARS_NAME).setEntityContainer(CONTAINER_FQN)))); + } + } + + return null; + } + + @Override + public List getSchemas() throws ODataException { + List schemas = new ArrayList(); + Schema schema = new Schema(); + schema.setNamespace(NAMESPACE); + // EntityTypes + List entityTypes = new ArrayList(); + entityTypes.add(getEntityType(ET_CAR)); + entityTypes.add(getEntityType(ET_MANUFACTURER)); + schema.setEntityTypes(entityTypes); + + // ComplexTypes + List complexTypes = new ArrayList(); + complexTypes.add(getComplexType(CT_ADDRESS)); + schema.setComplexTypes(complexTypes); + + // EntityContainer + schema.setEntityContainer(getEntityContainer()); + schemas.add(schema); + + return schemas; + } + + @Override + public EntityContainer getEntityContainer() throws ODataException { + EntityContainer container = new EntityContainer(); + container.setName(CONTAINER_FQN.getName()); + + // EntitySets + List entitySets = new ArrayList(); + container.setEntitySets(entitySets); + entitySets.add(getEntitySet(CONTAINER_FQN, ES_CARS_NAME)); + entitySets.add(getEntitySet(CONTAINER_FQN, ES_MANUFACTURER_NAME)); + + return container; + } + + @Override + public EntityContainerInfo getEntityContainerInfo(final FullQualifiedName entityContainerName) throws ODataException { + if (entityContainerName == null || CONTAINER_FQN.equals(entityContainerName)) { + return new EntityContainerInfo().setContainerName(CONTAINER_FQN); + } + return null; + } +} diff --git a/samples/server/src/main/java/org/apache/olingo/server/sample/processor/CarsProcessor.java b/samples/server/src/main/java/org/apache/olingo/server/sample/processor/CarsProcessor.java new file mode 100644 index 000000000..2c57cba2e --- /dev/null +++ b/samples/server/src/main/java/org/apache/olingo/server/sample/processor/CarsProcessor.java @@ -0,0 +1,242 @@ +/* + * 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.sample.processor; + +import java.io.InputStream; +import java.util.List; +import java.util.Locale; + +import org.apache.olingo.commons.api.data.ContextURL; +import org.apache.olingo.commons.api.data.ContextURL.Suffix; +import org.apache.olingo.commons.api.data.Entity; +import org.apache.olingo.commons.api.data.EntitySet; +import org.apache.olingo.commons.api.data.Property; +import org.apache.olingo.commons.api.edm.EdmEntitySet; +import org.apache.olingo.commons.api.edm.EdmProperty; +import org.apache.olingo.commons.api.format.ContentType; +import org.apache.olingo.commons.api.format.ODataFormat; +import org.apache.olingo.commons.api.http.HttpHeader; +import org.apache.olingo.commons.api.http.HttpStatusCode; +import org.apache.olingo.server.api.OData; +import org.apache.olingo.server.api.ODataApplicationException; +import org.apache.olingo.server.api.ODataRequest; +import org.apache.olingo.server.api.ODataResponse; +import org.apache.olingo.server.api.ServiceMetadata; +import org.apache.olingo.server.api.processor.EntityProcessor; +import org.apache.olingo.server.api.processor.EntitySetProcessor; +import org.apache.olingo.server.api.processor.PropertyProcessor; +import org.apache.olingo.server.api.serializer.ODataSerializer; +import org.apache.olingo.server.api.serializer.ODataSerializerOptions; +import org.apache.olingo.server.api.serializer.SerializerException; +import org.apache.olingo.server.api.uri.UriInfo; +import org.apache.olingo.server.api.uri.UriInfoResource; +import org.apache.olingo.server.api.uri.UriResource; +import org.apache.olingo.server.api.uri.UriResourceEntitySet; +import org.apache.olingo.server.api.uri.UriResourceProperty; +import org.apache.olingo.server.api.uri.queryoption.ExpandOption; +import org.apache.olingo.server.api.uri.queryoption.SelectOption; +import org.apache.olingo.server.sample.data.DataProvider; +import org.apache.olingo.server.sample.data.DataProvider.DataProviderException; + +/** + * This processor will deliver entity collections, single entities as well as properties of an entity. + * This is a very simple example which should give you a rough guideline on how to implement such an processor. + * See the JavaDoc of the server.api interfaces for more information. + */ +public class CarsProcessor implements EntitySetProcessor, EntityProcessor, PropertyProcessor { + + private OData odata; + private DataProvider dataProvider; + + // This constructor is application specific and not mandatory for the olingo library. We use it here to simulate the + // database access + public CarsProcessor(final DataProvider dataProvider) { + this.dataProvider = dataProvider; + } + + @Override + public void init(OData odata, ServiceMetadata edm) { + this.odata = odata; + } + + @Override + public void readEntitySet(final ODataRequest request, ODataResponse response, final UriInfo uriInfo, + final ContentType requestedContentType) throws ODataApplicationException, SerializerException { + // First we have to figure out which entity set to use + final EdmEntitySet edmEntitySet = getEdmEntitySet(uriInfo.asUriInfoResource()); + + // Second we fetch the data for this specific entity set from the mock database and transform it into an EntitySet + // object which is understood by our serialization + EntitySet entitySet = dataProvider.readAll(edmEntitySet); + + // Next we create a serializer based on the requested format. This could also be a custom format but we do not + // support them in this example + final ODataFormat format = ODataFormat.fromContentType(requestedContentType); + ODataSerializer serializer = odata.createSerializer(format); + + // Now the content is serialized using the serializer. + final ExpandOption expand = uriInfo.getExpandOption(); + final SelectOption select = uriInfo.getSelectOption(); + InputStream serializedContent = serializer.entitySet(edmEntitySet, entitySet, + ODataSerializerOptions.with() + .contextURL(format == ODataFormat.JSON_NO_METADATA ? null : + getContextUrl(serializer, edmEntitySet, false, expand, select, null)) + .count(uriInfo.getCountOption()) + .expand(expand).select(select) + .build()); + + // Finally we set the response data, headers and status code + response.setContent(serializedContent); + response.setStatusCode(HttpStatusCode.OK.getStatusCode()); + response.setHeader(HttpHeader.CONTENT_TYPE, requestedContentType.toContentTypeString()); + } + + @Override + public void readEntity(final ODataRequest request, ODataResponse response, final UriInfo uriInfo, + final ContentType requestedContentType) throws ODataApplicationException, SerializerException { + // First we have to figure out which entity set the requested entity is in + final EdmEntitySet edmEntitySet = getEdmEntitySet(uriInfo.asUriInfoResource()); + + // Next we fetch the requested entity from the database + Entity entity = null; + try { + entity = readEntityInternal(uriInfo.asUriInfoResource(), edmEntitySet); + } catch (DataProviderException e) { + throw new ODataApplicationException(e.getMessage(), 500, Locale.ENGLISH); + } + + if (entity == null) { + // If no entity was found for the given key we throw an exception. + throw new ODataApplicationException("No entity found for this key", HttpStatusCode.NOT_FOUND + .getStatusCode(), Locale.ENGLISH); + } else { + // If an entity was found we proceed by serializing it and sending it to the client. + final ODataFormat format = ODataFormat.fromContentType(requestedContentType); + ODataSerializer serializer = odata.createSerializer(format); + final ExpandOption expand = uriInfo.getExpandOption(); + final SelectOption select = uriInfo.getSelectOption(); + InputStream serializedContent = serializer.entity(edmEntitySet, entity, + ODataSerializerOptions.with() + .contextURL(format == ODataFormat.JSON_NO_METADATA ? null : + getContextUrl(serializer, edmEntitySet, true, expand, select, null)) + .count(uriInfo.getCountOption()) + .expand(expand).select(select) + .build()); + response.setContent(serializedContent); + response.setStatusCode(HttpStatusCode.OK.getStatusCode()); + response.setHeader(HttpHeader.CONTENT_TYPE, requestedContentType.toContentTypeString()); + } + } + + @Override + public void readProperty(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType contentType) + throws ODataApplicationException, SerializerException { + // To read a property we have to first get the entity out of the entity set + final EdmEntitySet edmEntitySet = getEdmEntitySet(uriInfo.asUriInfoResource()); + Entity entity; + try { + entity = readEntityInternal(uriInfo.asUriInfoResource(), edmEntitySet); + } catch (DataProviderException e) { + throw new ODataApplicationException(e.getMessage(), 500, Locale.ENGLISH); + } + + if (entity == null) { + // If no entity was found for the given key we throw an exception. + throw new ODataApplicationException("No entity found for this key", HttpStatusCode.NOT_FOUND + .getStatusCode(), Locale.ENGLISH); + } else { + // Next we get the property value from the entity and pass the value to serialization + UriResourceProperty uriProperty = (UriResourceProperty) uriInfo + .getUriResourceParts().get(uriInfo.getUriResourceParts().size() - 1); + EdmProperty edmProperty = uriProperty.getProperty(); + Property property = entity.getProperty(edmProperty.getName()); + if (property == null) { + throw new ODataApplicationException("No porperty found", HttpStatusCode.NOT_FOUND + .getStatusCode(), Locale.ENGLISH); + } else { + if (property.getValue() == null) { + response.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode()); + } else { + final ODataFormat format = ODataFormat.fromContentType(contentType); + ODataSerializer serializer = odata.createSerializer(format); + InputStream serializerContent = serializer.entityProperty(edmProperty, property, + ODataSerializerOptions.with() + .contextURL(format == ODataFormat.JSON_NO_METADATA ? null : + getContextUrl(serializer, edmEntitySet, true, null, null, edmProperty.getName())) + .build()); + response.setContent(serializerContent); + response.setStatusCode(HttpStatusCode.OK.getStatusCode()); + response.setHeader(HttpHeader.CONTENT_TYPE, contentType.toContentTypeString()); + } + } + } + } + + @Override + public void readPropertyValue(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType contentType) + throws ODataApplicationException, SerializerException { + throw new ODataApplicationException("Not implemented for this sample", HttpStatusCode.NOT_IMPLEMENTED + .getStatusCode(), Locale.ENGLISH); + } + + @Override + public void countEntitySet(ODataRequest request, ODataResponse response, UriInfo uriInfo) + throws ODataApplicationException, SerializerException { + // In this example we do not support the count system query option so we throw an exception + throw new ODataApplicationException("Not implemented for this sample", HttpStatusCode.NOT_IMPLEMENTED + .getStatusCode(), Locale.ENGLISH); + } + + private Entity readEntityInternal(final UriInfoResource uriInfo, final EdmEntitySet entitySet) + throws DataProvider.DataProviderException { + // This method will extract the key values and pass them to the data provider + final UriResourceEntitySet resourceEntitySet = (UriResourceEntitySet) uriInfo.getUriResourceParts().get(0); + return dataProvider.read(entitySet, resourceEntitySet.getKeyPredicates()); + } + + private EdmEntitySet getEdmEntitySet(final UriInfoResource uriInfo) throws ODataApplicationException { + final List resourcePaths = uriInfo.getUriResourceParts(); + /* + * To get the entity set we have to interpret all URI segments + */ + if (!(resourcePaths.get(0) instanceof UriResourceEntitySet)) { + throw new ODataApplicationException("Invalid resource type for first segment.", + HttpStatusCode.NOT_IMPLEMENTED.getStatusCode(), Locale.ENGLISH); + } + + /* + * Here we should interpret the whole URI but in this example we do not support navigation so we throw an exception + */ + + final UriResourceEntitySet uriResource = (UriResourceEntitySet) resourcePaths.get(0); + return uriResource.getEntitySet(); + } + + private ContextURL getContextUrl(final ODataSerializer serializer, + final EdmEntitySet entitySet, final boolean isSingleEntity, + final ExpandOption expand, final SelectOption select, final String navOrPropertyPath) + throws SerializerException { + + return ContextURL.with().entitySet(entitySet) + .selectList(serializer.buildContextURLSelectList(entitySet, expand, select)) + .suffix(isSingleEntity ? Suffix.ENTITY : null) + .navOrPropertyPath(navOrPropertyPath) + .build(); + } +} diff --git a/samples/server/src/main/resources/META-INF/LICENSE b/samples/server/src/main/resources/META-INF/LICENSE new file mode 100644 index 000000000..715ff3074 --- /dev/null +++ b/samples/server/src/main/resources/META-INF/LICENSE @@ -0,0 +1,331 @@ +Licenses for TecSvc artifact + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed 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. + + +From: 'abego Software GmbH, Germany' (http://abego-software.de) - abego +TreeLayout Core (http://code.google.com/p/treelayout/) +org.abego.treelayout:org.abego.treelayout.core:jar:1.0.1 License: BSD 3-Clause +"New" or "Revised" License (BSD-3-Clause) +(http://treelayout.googlecode.com/files/LICENSE.TXT) + +[The "BSD license"] +Copyright (c) 2011, abego Software GmbH, Germany (http://www.abego.org) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +3. Neither the name of the abego Software GmbH nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + + +From: 'ANTLR' (http://www.antlr.org) - ANTLR 4 Runtime +(http://www.antlr.org/antlr4-runtime) org.antlr:antlr4-runtime:jar:4.1 License: +The BSD License (http://www.antlr.org/license.html) + +[The BSD License] +Copyright (c) 2012 Terence Parr and Sam Harwell +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. Redistributions in binary + form must reproduce the above copyright notice, this list of conditions and + the following disclaimer in the documentation and/or other materials + provided with the distribution. Neither the name of the author nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +From: 'fasterxml.com' (http://fasterxml.com) - Stax2 API +(http://wiki.fasterxml.com/WoodstoxStax2) +org.codehaus.woodstox:stax2-api:bundle:3.1.4 License: The BSD License +(http://www.opensource.org/licenses/bsd-license.php) + +Copyright (c) 2004-2010, Woodstox Project (http://woodstox.codehaus.org/) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +3. Neither the name of the Woodstox XML Processor nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + + +From: 'QOS.ch' (http://www.qos.ch) + - SLF4J API Module (http://www.slf4j.org) org.slf4j:slf4j-api:jar:1.7.7 + License: MIT License (http://www.opensource.org/licenses/mit-license.php) + - SLF4J Simple Binding (http://www.slf4j.org) org.slf4j:slf4j-simple:jar:1.7.7 + License: MIT License (http://www.opensource.org/licenses/mit-license.php) + + +Copyright (c) 2004-2013 QOS.ch + +All rights reserved. Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated documentation files +(the "Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, distribute, +sublicense, and/or sell copies of the Software, and to permit persons to whom +the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/samples/server/src/main/resources/simplelogger.properties b/samples/server/src/main/resources/simplelogger.properties new file mode 100644 index 000000000..2a3350c78 --- /dev/null +++ b/samples/server/src/main/resources/simplelogger.properties @@ -0,0 +1,20 @@ +# +# 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 diff --git a/samples/server/src/main/version/version.html b/samples/server/src/main/version/version.html new file mode 100644 index 000000000..7bc2ddd9f --- /dev/null +++ b/samples/server/src/main/version/version.html @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + +
Version Information
HomeApache Olingo
name${name}
version${version}
timestamp${timestamp}
diff --git a/samples/server/src/main/webapp/WEB-INF/web.xml b/samples/server/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 000000000..2a263678f --- /dev/null +++ b/samples/server/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,42 @@ + + + + + Apache Olingo OData 4.0 Sample Service + + + index.jsp + + + + CarsServlet + org.apache.olingo.server.sample.CarsServlet + 1 + + + + CarsServlet + /cars.svc/* + + + diff --git a/samples/server/src/main/webapp/css/olingo.css b/samples/server/src/main/webapp/css/olingo.css new file mode 100644 index 000000000..5b9deec04 --- /dev/null +++ b/samples/server/src/main/webapp/css/olingo.css @@ -0,0 +1,91 @@ +/* + 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. +*/ +body { + font-family: Arial, sans-serif; + font-size: 13px; + line-height: 18px; + color: #8904B1; + background-color: #ffffff; +} + +a { + color: #8904B1; +} + +a:VISITED { + color: #D358F7; +} + +td { + padding: 5px; +} + +h1,h2,h3,h4,h5,h6 { + font-family: inherit; + font-weight: bold; + line-height: 1; + color: #8904B1; +} + +h1 { + font-size: 36px; + line-height: 40px; +} + +h2 { + font-size: 30px; + line-height: 40px; +} + +h3 { + font-size: 24px; + line-height: 40px; +} + +h4 { + font-size: 18px; + line-height: 20px; +} + +h5 { + font-size: 14px; + line-height: 20px; +} + +h6 { + font-size: 12px; + line-height: 20px; +} + +.logo { + float: right; +} + +hr, thead, tfoot { + margin: 9px 0; + border-top: 1px solid #8904B1; + border-bottom: 1px solid #8904B1; +} + +table { border-collapse: collapse; border: 1px solid #8904B1; } + +.version { + font-family: "Courier New", monospace; + font-size: 10px; +} \ No newline at end of file diff --git a/samples/server/src/main/webapp/img/OlingoOrangeTM.png b/samples/server/src/main/webapp/img/OlingoOrangeTM.png new file mode 100644 index 0000000000000000000000000000000000000000..4878e8a5c258ae1c1dc48f5f10a4268e63b11756 GIT binary patch literal 113360 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 z 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 l4l(!&7fD4BDjE+v$*n&XV(>iU=#u37Izu> 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 Um`B3+@#Fgv6OtCJ=GXQAKeK)?8UO$Q literal 0 HcmV?d00001 diff --git a/samples/server/src/main/webapp/index.jsp b/samples/server/src/main/webapp/index.jsp new file mode 100644 index 000000000..791c43332 --- /dev/null +++ b/samples/server/src/main/webapp/index.jsp @@ -0,0 +1,55 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + + + + + + + + Apache Olingo - OData 4.0 + + + + +

+

Olingo OData 4.0

+
+

Cars Sample Service

+
+
+
+ <% String version = "gen/version.html"; + try { + %> + + <%} catch (Exception e) { + %> +

IDE Build

+ <%}%> +
+ +