package org.odata4j.consumer; /* * #%L * interaction-commands-odata-bridge * %% * Copyright (C) 2012 - 2013 Temenos Holdings N.V. * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ import java.util.ArrayList; import java.util.List; import org.core4j.Enumerable; import org.odata4j.consumer.adapter.CallFunctionRequestAdapter; import org.odata4j.consumer.adapter.CreateEntityRequestAdapter; import org.odata4j.consumer.adapter.CreateLinkRequestAdapter; import org.odata4j.consumer.adapter.DeleteEntityRequestAdapter; import org.odata4j.consumer.adapter.DeleteLinkRequestAdapter; import org.odata4j.consumer.adapter.EntitySetInfoAdapter; import org.odata4j.consumer.adapter.GetEntitiesRequestAdapter; import org.odata4j.consumer.adapter.GetEntityRequestAdapter; import org.odata4j.consumer.adapter.GetLinksRequestAdapter; import org.odata4j.consumer.adapter.MergeEntityRequestAdapter; import org.odata4j.consumer.adapter.UpdateEntityRequestAdapter; import org.odata4j.consumer.adapter.UpdateLinkRequestAdapter; import org.odata4j.core.EntitySetInfo; import org.odata4j.core.OCreateRequest; import org.odata4j.core.OEntity; import org.odata4j.core.OEntityDeleteRequest; import org.odata4j.core.OEntityGetRequest; import org.odata4j.core.OEntityId; import org.odata4j.core.OEntityKey; import org.odata4j.core.OEntityRequest; import org.odata4j.core.OFunctionRequest; import org.odata4j.core.OModifyRequest; import org.odata4j.core.OObject; import org.odata4j.core.OQueryRequest; import org.odata4j.edm.EdmDataServices; import org.odata4j.edm.EdmEntitySet; import org.odata4j.producer.ODataProducer; /** * The goal of the class is to implement an ODataConsumer adapter over an * ODataProducer. This is to prevent any network access. It can also be useful * in unit tests. * * @author svt * */ public class ODataConsumerAdapter extends AbstractODataConsumer implements ODataConsumer { private static final String SERVICE_URI = "LOCAL"; private final ODataProducer producer; public ODataConsumerAdapter(ODataProducer producer) { super(SERVICE_URI); this.producer = producer; } @Override public Enumerable<EntitySetInfo> getEntitySets() { Iterable<EdmEntitySet> sets = producer.getMetadata().getEntitySets(); List<EntitySetInfo> result = new ArrayList<EntitySetInfo>(); for (EdmEntitySet edmEntitySet : sets) { EntitySetInfo setInfo = new EntitySetInfoAdapter(edmEntitySet.getName()); result.add(setInfo); } return Enumerable.create(result); } @Override public EdmDataServices getMetadata() { return producer.getMetadata(); } @Override public <T> OQueryRequest<T> getEntities(Class<T> entityType, String entitySetHref) { GetEntitiesRequestAdapter<T> request = new GetEntitiesRequestAdapter<T>( producer, getServiceRootUri(), entityType, entitySetHref); return request; } @Override public OQueryRequest<OEntityId> getLinks(OEntityId sourceEntity, String targetNavProp) { GetLinksRequestAdapter<OEntityId> request = new GetLinksRequestAdapter<OEntityId>( producer, getServiceRootUri(), sourceEntity, targetNavProp); return request; } @Override public <T> OEntityGetRequest<T> getEntity(Class<T> entityType, String entitySetName, OEntityKey key) { GetEntityRequestAdapter<T> request = new GetEntityRequestAdapter<T>( producer, entityType, entitySetName, key); return request; } @Override public OEntityRequest<Void> createLink(OEntityId sourceEntity, String targetNavProp, OEntityId targetEntity) { CreateLinkRequestAdapter<Void> request = new CreateLinkRequestAdapter<Void>( producer, sourceEntity, targetNavProp, targetEntity); return request; } @Override public OEntityRequest<Void> deleteLink(OEntityId sourceEntity, String targetNavProp, Object... targetKeyValues) { DeleteLinkRequestAdapter<Void> request = new DeleteLinkRequestAdapter<Void>( producer, sourceEntity, targetNavProp, targetKeyValues); return request; } @Override public OEntityRequest<Void> updateLink(OEntityId sourceEntity, OEntityId newTargetEntity, String targetNavProp, Object... oldTargetKeyValues) { UpdateLinkRequestAdapter<Void> request = new UpdateLinkRequestAdapter<Void>( producer, sourceEntity, newTargetEntity, targetNavProp, oldTargetKeyValues); return request; } @Override public OCreateRequest<OEntity> createEntity(String entitySetName) { CreateEntityRequestAdapter<OEntity> request = new CreateEntityRequestAdapter<OEntity>( producer, getServiceRootUri(), entitySetName); return request; } @Override public OModifyRequest<OEntity> updateEntity(OEntity entity) { UpdateEntityRequestAdapter<OEntity> request = new UpdateEntityRequestAdapter<OEntity>( producer, entity.getEntitySet().getName(), entity.getEntityKey()); return request; } @Override public OModifyRequest<OEntity> mergeEntity(OEntity entity) { return mergeEntity(entity.getEntitySet().getName(), entity.getEntityKey()); } @Override public OModifyRequest<OEntity> mergeEntity(String entitySetName, Object keyValue) { return mergeEntity(entitySetName, OEntityKey.create(keyValue)); } @Override public OModifyRequest<OEntity> mergeEntity(String entitySetName, OEntityKey key) { MergeEntityRequestAdapter<OEntity> request = new MergeEntityRequestAdapter<OEntity>(); return request; } @Override public OEntityDeleteRequest deleteEntity(OEntity entity) { DeleteEntityRequestAdapter<OEntityDeleteRequest> request = new DeleteEntityRequestAdapter<OEntityDeleteRequest>( producer, entity.getEntitySetName(), entity.getEntityKey()); return request.execute(); } @Override public OEntityDeleteRequest deleteEntity(String entitySetName, Object keyValue) { DeleteEntityRequestAdapter<OEntityDeleteRequest> request = new DeleteEntityRequestAdapter<OEntityDeleteRequest>( producer, entitySetName, OEntityKey.create(keyValue)); return request.execute(); } @Override public OEntityDeleteRequest deleteEntity(String entitySetName, OEntityKey key) { DeleteEntityRequestAdapter<OEntityDeleteRequest> request = new DeleteEntityRequestAdapter<OEntityDeleteRequest>( producer, entitySetName, key); return request.execute(); } @Override public OFunctionRequest<OObject> callFunction(String functionName) { CallFunctionRequestAdapter<OObject> request = new CallFunctionRequestAdapter<OObject>( producer, getServiceRootUri(), functionName); return request; } @Override protected ODataClient getClient() { // TODO : We need to implement this return null; } }