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

Reply via email to