/* * Copyright (c) 2008-2016 EMC Corporation * All Rights Reserved */ package com.emc.storageos.api.service.impl.resource; import static com.emc.storageos.api.mapper.DbObjectMapper.toNamedRelatedResource; import static com.emc.storageos.api.mapper.SystemsMapper.map; import java.net.URI; import java.util.List; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.emc.storageos.coordinator.client.service.CoordinatorClient; import com.emc.storageos.db.client.DbClient; import com.emc.storageos.db.client.model.DataObject; import com.emc.storageos.db.client.model.ObjectNamespace; import com.emc.storageos.model.ResourceTypeEnum; import com.emc.storageos.model.object.ObjectNamespaceList; import com.emc.storageos.model.object.ObjectNamespaceRestRep; import com.emc.storageos.security.authorization.CheckPermission; import com.emc.storageos.security.authorization.DefaultPermissions; import com.emc.storageos.security.authorization.Role; /** * Object storage namespace implementation */ @Path("/vdc/object-namespaces") @DefaultPermissions(readRoles = { Role.SYSTEM_ADMIN, Role.SYSTEM_MONITOR }, writeRoles = { Role.SYSTEM_ADMIN, Role.RESTRICTED_SYSTEM_ADMIN }) public class ObjectNamespaceService extends TaggedResource { private static final Logger _log = LoggerFactory.getLogger(ObjectNamespaceService.class); private int _retry_attempts; /** * Get IDs of all object storage namespaces * * @return object namespace list */ @GET @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) @CheckPermission(roles = { Role.SYSTEM_ADMIN, Role.SYSTEM_MONITOR, Role.TENANT_ADMIN, Role.SECURITY_ADMIN }) public ObjectNamespaceList getObjectNamespaces() { _log.info("Getting namespaces from all object storage systesm"); ObjectNamespaceList objNamespaceList = new ObjectNamespaceList(); List<URI> ids = _dbClient.queryByType(ObjectNamespace.class, true); for (URI id : ids) { ObjectNamespace objNamespace = _dbClient.queryObject(ObjectNamespace.class, id); if (objNamespace != null) { objNamespaceList.getNamespaces().add(toNamedRelatedResource(objNamespace, objNamespace.getNativeGuid())); } } return objNamespaceList; } /** * Get details of the object storage namespace specified * * @param id object storage namespace id * @return details of the namespace */ @GET @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) @Path("/{id}") @CheckPermission(roles = { Role.SYSTEM_ADMIN, Role.SYSTEM_MONITOR, Role.TENANT_ADMIN, Role.SECURITY_ADMIN }) public ObjectNamespaceRestRep getObjectNamespace(@PathParam("id") URI id) { _log.info("Getting details for the namespace: {}", id); ArgValidator.checkFieldUriType(id, ObjectNamespace.class, "id"); ArgValidator.checkUri(id); ObjectNamespace objNamespace = _dbClient.queryObject(ObjectNamespace.class, id); ArgValidator.checkEntity(objNamespace, id, isIdEmbeddedInURL(id)); ObjectNamespaceRestRep restRep = toObjectNamespaceRestRep(objNamespace, _dbClient, _coordinator); return restRep; } private ObjectNamespaceRestRep toObjectNamespaceRestRep(ObjectNamespace objNamespace, DbClient dbClient, CoordinatorClient coordinator) { return map(objNamespace); } @Override protected DataObject queryResource(URI id) { // TODO Auto-generated method stub return null; } @Override protected URI getTenantOwner(URI id) { // TODO Auto-generated method stub return null; } @Override protected ResourceTypeEnum getResourceType() { return ResourceTypeEnum.OBJECT_NAMESPACE; } public void setRetryAttempts(int retries) { _retry_attempts = retries; } }