Mike Kolesnik has uploaded a new change for review. Change subject: restapi: WIP Added providers resources ......................................................................
restapi: WIP Added providers resources Added top level resource collection and a sub resource for the single provider. Change-Id: I5a6aec2fb27280761b5d7c91c903772e14fe619a Signed-off-by: Mike Kolesnik <[email protected]> --- M backend/manager/modules/restapi/interface/common/jaxrs/src/main/java/org/ovirt/engine/api/common/util/LinkHelper.java A backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/ProviderResource.java A backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/ProvidersResource.java M backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/BackendApplication.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendApiResource.java A backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendProviderResource.java A backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendProvidersResource.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendApiResourceTest.java A backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/ProviderMapper.java 10 files changed, 285 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/49/10849/1 diff --git a/backend/manager/modules/restapi/interface/common/jaxrs/src/main/java/org/ovirt/engine/api/common/util/LinkHelper.java b/backend/manager/modules/restapi/interface/common/jaxrs/src/main/java/org/ovirt/engine/api/common/util/LinkHelper.java index e854ef1..01478fe 100644 --- a/backend/manager/modules/restapi/interface/common/jaxrs/src/main/java/org/ovirt/engine/api/common/util/LinkHelper.java +++ b/backend/manager/modules/restapi/interface/common/jaxrs/src/main/java/org/ovirt/engine/api/common/util/LinkHelper.java @@ -51,6 +51,7 @@ import org.ovirt.engine.api.model.ParametersSet; import org.ovirt.engine.api.model.Permission; import org.ovirt.engine.api.model.Permit; +import org.ovirt.engine.api.model.Provider; import org.ovirt.engine.api.model.Quota; import org.ovirt.engine.api.model.Request; import org.ovirt.engine.api.model.Role; @@ -105,6 +106,8 @@ import org.ovirt.engine.api.resource.PermissionResource; import org.ovirt.engine.api.resource.PermitResource; import org.ovirt.engine.api.resource.PermitsResource; +import org.ovirt.engine.api.resource.ProviderResource; +import org.ovirt.engine.api.resource.ProvidersResource; import org.ovirt.engine.api.resource.QuotaResource; import org.ovirt.engine.api.resource.QuotasResource; import org.ovirt.engine.api.resource.ReadOnlyDeviceResource; @@ -301,6 +304,9 @@ map = new ParentToCollectionMap(CapabiliyResource.class, CapabilitiesResource.class); TYPES.put(VersionCaps.class, map); + + map = new ParentToCollectionMap(ProviderResource.class, ProvidersResource.class); + TYPES.put(Provider.class, map); } /** diff --git a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/ProviderResource.java b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/ProviderResource.java new file mode 100644 index 0000000..63aebd7 --- /dev/null +++ b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/ProviderResource.java @@ -0,0 +1,9 @@ +package org.ovirt.engine.api.resource; + +import javax.ws.rs.Produces; + +import org.ovirt.engine.api.model.Provider; + +@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, MediaType.APPLICATION_X_YAML}) +public interface ProviderResource extends UpdatableResource<Provider> { +} diff --git a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/ProvidersResource.java b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/ProvidersResource.java new file mode 100644 index 0000000..f498755 --- /dev/null +++ b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/ProvidersResource.java @@ -0,0 +1,35 @@ +package org.ovirt.engine.api.resource; + +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Response; + +import org.jboss.resteasy.annotations.providers.jaxb.Formatted; +import org.ovirt.engine.api.model.Provider; +import org.ovirt.engine.api.model.Providers; + +@Path("/providers") +@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, MediaType.APPLICATION_X_YAML}) +public interface ProvidersResource { + + @GET + @Formatted + public Providers list(); + + @POST + @Formatted + @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, MediaType.APPLICATION_X_YAML}) + public Response add(Provider provider); + + @DELETE + @Path("{id}") + public Response remove(@PathParam("id") String id); + + @Path("{id}") + public ProviderResource getProviderSubResource(@PathParam("id") String id); +} diff --git a/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd b/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd index 3d73940..9c4cf7d 100644 --- a/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd +++ b/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd @@ -1728,6 +1728,37 @@ </xs:complexContent> </xs:complexType> + <!-- Providers --> + + <xs:element name="provider" type="Provider"/> + + <xs:element name="providers" type="Providers" /> + + <xs:complexType name="Provider"> + <xs:complexContent> + <xs:extension base="BaseResource"> + <xs:sequence> + <xs:element name="api_address" type="xs:string" minOccurs="0"/> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + <xs:complexType name="Providers"> + <xs:complexContent> + <xs:extension base="BaseResources"> + <xs:sequence> + <xs:annotation> + <xs:appinfo> + <jaxb:property name="Providers"/> + </xs:appinfo> + </xs:annotation> + <xs:element ref="provider" minOccurs="0" maxOccurs="unbounded"/> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <!-- Storage Domains --> <xs:element name="storage_domain" type="StorageDomain"/> diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/BackendApplication.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/BackendApplication.java index 5c6d243..3bb1dd4 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/BackendApplication.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/BackendApplication.java @@ -46,6 +46,7 @@ import org.ovirt.engine.api.restapi.resource.BackendGroupsResource; import org.ovirt.engine.api.restapi.resource.BackendHostsResource; import org.ovirt.engine.api.restapi.resource.BackendNetworksResource; +import org.ovirt.engine.api.restapi.resource.BackendProvidersResource; import org.ovirt.engine.api.restapi.resource.BackendResource; import org.ovirt.engine.api.restapi.resource.BackendRolesResource; import org.ovirt.engine.api.restapi.resource.BackendStorageDomainsResource; @@ -128,6 +129,7 @@ addResource(new BackendUsersResource()); addResource(new BackendGroupsResource()); addResource(new BackendDomainsResource()); + addResource(new BackendProvidersResource()); // Authentication singletons: final BasicAuthorizationScheme scheme = new BasicAuthorizationScheme(); diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendApiResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendApiResource.java index 1b2cc84..7a2e0cc 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendApiResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendApiResource.java @@ -98,6 +98,7 @@ links.add(createLink("events", LinkFlags.SEARCHABLE, getEventParams())); links.add(createLink("hosts", LinkFlags.SEARCHABLE)); links.add(createLink("networks", LinkFlags.SEARCHABLE)); + links.add(createLink("providers")); links.add(createLink("roles")); links.add(createLink("storagedomains", LinkFlags.SEARCHABLE)); links.add(createLink("tags")); diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendProviderResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendProviderResource.java new file mode 100644 index 0000000..ca4e1d5 --- /dev/null +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendProviderResource.java @@ -0,0 +1,61 @@ +package org.ovirt.engine.api.restapi.resource; + + +import org.ovirt.engine.api.model.Provider; +import org.ovirt.engine.api.resource.ProviderResource; +import org.ovirt.engine.core.common.action.ProviderParameters; +import org.ovirt.engine.core.common.action.VdcActionParametersBase; +import org.ovirt.engine.core.common.action.VdcActionType; +import org.ovirt.engine.core.common.businessentities.network.NetworkProvider; + +public class BackendProviderResource + extends AbstractBackendSubResource<Provider, org.ovirt.engine.core.common.businessentities.network.NetworkProvider> + implements ProviderResource { + + private BackendProvidersResource parent; + + public BackendProviderResource(String id, BackendProvidersResource parent) { + super(id, Provider.class, org.ovirt.engine.core.common.businessentities.network.NetworkProvider.class); + this.parent = parent; + } + + @Override + public Provider get() { + org.ovirt.engine.core.common.businessentities.network.NetworkProvider entity = parent.lookupProvider(guid); + if (entity == null) { + return notFound(); + } + Provider provider = map(entity); + return addLinks(provider); + } + + @Override + public Provider update(Provider incoming) { + return performUpdate(incoming, + parent.getEntityIdResolver(), + VdcActionType.UpdateProvider, + new UpdateParametersProvider()); + } + + protected class UpdateParametersProvider implements ParametersProvider<Provider, org.ovirt.engine.core.common.businessentities.network.NetworkProvider> { + @Override + public VdcActionParametersBase getParameters(Provider incoming, org.ovirt.engine.core.common.businessentities.network.NetworkProvider entity) { + org.ovirt.engine.core.common.businessentities.network.NetworkProvider updated = getMapper(modelType, org.ovirt.engine.core.common.businessentities.network.NetworkProvider.class).map(incoming, entity); + return new ProviderParameters(updated); + } + } + +// @Override +// public AssignedPermissionsResource getPermissionsResource() { +// return inject(new BackendAssignedPermissionsResource(guid, +// VdcQueryType.GetPermissionsForObject, +// new GetPermissionsForObjectParameters(guid), +// Network.class, +// VdcObjectType.Network)); +// } + + @Override + protected Provider doPopulate(Provider model, NetworkProvider entity) { + return model; + } +} diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendProvidersResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendProvidersResource.java new file mode 100644 index 0000000..809dc31 --- /dev/null +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendProvidersResource.java @@ -0,0 +1,98 @@ +package org.ovirt.engine.api.restapi.resource; + +import java.util.List; + +import javax.ws.rs.core.Response; + +import org.ovirt.engine.api.model.Provider; +import org.ovirt.engine.api.model.Providers; +import org.ovirt.engine.api.resource.ProviderResource; +import org.ovirt.engine.api.resource.ProvidersResource; +import org.ovirt.engine.core.common.action.ProviderParameters; +import org.ovirt.engine.core.common.action.VdcActionType; +import org.ovirt.engine.core.common.businessentities.network.NetworkProvider; +import org.ovirt.engine.core.common.queries.VdcQueryParametersBase; +import org.ovirt.engine.core.common.queries.VdcQueryType; +import org.ovirt.engine.core.compat.Guid; + +public class BackendProvidersResource extends AbstractBackendCollectionResource<Provider, org.ovirt.engine.core.common.businessentities.network.NetworkProvider> implements ProvidersResource { + + static final String[] SUB_COLLECTIONS = {"permissions"}; + + public BackendProvidersResource() { + super(Provider.class, org.ovirt.engine.core.common.businessentities.network.NetworkProvider.class); + } + + @Override + public Response add(Provider provider) { + validateParameters(provider, getRequiredAddFields()); + org.ovirt.engine.core.common.businessentities.network.NetworkProvider entity = map(provider); + ProviderParameters params = new ProviderParameters(entity); + return performCreate(VdcActionType.AddProvider, + params, + new ProviderIdResolver()); + } + + protected String[] getRequiredAddFields() { + return new String[] { "name", "apiAddress" }; + } + + @Override + public Providers list() { + return mapCollection(getAllProviders()); + } + + private List<NetworkProvider> getAllProviders() { + return getBackendCollection(VdcQueryType.GetAllProviders, new VdcQueryParametersBase()); + } + + protected Providers mapCollection(List<org.ovirt.engine.core.common.businessentities.network.NetworkProvider> entities) { + Providers collection = new Providers(); + for (org.ovirt.engine.core.common.businessentities.network.NetworkProvider entity : entities) { + collection.getProviders().add(addLinks(map(entity))); + } + return collection; + } + + @Override + protected Response performRemove(String id) { + org.ovirt.engine.core.common.businessentities.network.NetworkProvider entity = lookupProvider(asGuidOr404(id)); + if (entity == null) { + notFound(); + return null; + } + return performAction(VdcActionType.RemoveProvider, new ProviderParameters(entity)); + } + + protected NetworkProvider lookupProvider(Guid id) { + for (NetworkProvider provider : getAllProviders()) { + if (provider.getId().equals(id)) { + return provider; + } + } + + return null; + } + + @Override + protected Provider doPopulate(Provider model, NetworkProvider entity) { + return model; + } + + @Override + @SingleEntityResource + public ProviderResource getProviderSubResource(String id) { + return inject(new BackendProviderResource(id, this)); + } + + protected EntityIdResolver<Guid> getEntityIdResolver() { + return new ProviderIdResolver(); + } + + private final class ProviderIdResolver extends EntityIdResolver<Guid> { + @Override + public NetworkProvider lookupEntity(Guid id) throws BackendFailureException { + return lookupProvider(id); + } + } +} diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendApiResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendApiResourceTest.java index d5f5070..df682bc 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendApiResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendApiResourceTest.java @@ -99,6 +99,7 @@ "hosts/search", "networks", "networks/search", + "providers", "roles", "storagedomains", "storagedomains/search", @@ -149,6 +150,7 @@ BASE_PATH + "/hosts?search={query}", BASE_PATH + "/networks", BASE_PATH + "/networks?search={query}", + BASE_PATH + "/providers", BASE_PATH + "/roles", BASE_PATH + "/storagedomains", BASE_PATH + "/storagedomains?search={query}", diff --git a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/ProviderMapper.java b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/ProviderMapper.java new file mode 100644 index 0000000..bdcae7f --- /dev/null +++ b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/ProviderMapper.java @@ -0,0 +1,40 @@ +package org.ovirt.engine.api.restapi.types; + +import org.ovirt.engine.api.model.Provider; +import org.ovirt.engine.core.compat.Guid; + +public class ProviderMapper { + + @Mapping(from = Provider.class, to = org.ovirt.engine.core.common.businessentities.network.NetworkProvider.class) + public static org.ovirt.engine.core.common.businessentities.network.NetworkProvider map(Provider model, org.ovirt.engine.core.common.businessentities.network.NetworkProvider template) { + org.ovirt.engine.core.common.businessentities.network.NetworkProvider entity = template != null ? template : new org.ovirt.engine.core.common.businessentities.network.NetworkProvider(); + + if (model.isSetId()) { + entity.setId(Guid.createGuidFromString(model.getId())); + } + if (model.isSetName()) { + entity.setName(model.getName()); + } + if (model.isSetDescription()) { + entity.setDescription(model.getDescription()); + } + if (model.isSetApiAddress()) { + entity.setApiAddress(model.getApiAddress()); + } + + return entity; + } + + + @Mapping(from = org.ovirt.engine.core.common.businessentities.network.NetworkProvider.class, to = Provider.class ) + public static Provider map(org.ovirt.engine.core.common.businessentities.network.NetworkProvider entity, Provider template) { + Provider model = template != null ? template : new Provider(); + + model.setId(entity.getId().toString()); + model.setName(entity.getName()); + model.setDescription(entity.getDescription()); + model.setApiAddress(entity.getApiAddress()); + + return model; + } +} -- To view, visit http://gerrit.ovirt.org/10849 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I5a6aec2fb27280761b5d7c91c903772e14fe619a Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Mike Kolesnik <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
