/*
* Copyright (c) 2014 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.api.service.impl.resource;
import java.net.URI;
import java.util.Iterator;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.emc.storageos.db.client.model.VirtualDataCenter;
import com.emc.storageos.db.client.model.VirtualDataCenterInUse;
import com.emc.storageos.model.vdc.VirtualDataCenterList;
import com.emc.storageos.model.vdc.VirtualDataCenterRestRep;
import static com.emc.storageos.api.mapper.DbObjectMapper.toNamedRelatedResource;
import static com.emc.storageos.api.mapper.VirtualDataCenterMapper.map;
/**
* Internal API for maintaining Vdc information
*/
@Path("/internal/vdc")
public class InternalVdcService extends ResourceService {
private static final Logger log = LoggerFactory.getLogger(InternalVdcService.class);
private static final String EVENT_SERVICE_TYPE = "internalVdcService";
public String getServiceType() {
return EVENT_SERVICE_TYPE;
}
@GET
@Path("/{id}")
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public VirtualDataCenterRestRep getVdc(@PathParam("id") URI id) {
ArgValidator.checkUri(id);
VirtualDataCenter vdc = _dbClient.queryObject(VirtualDataCenter.class, id);
return map(vdc);
}
@GET
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public VirtualDataCenterList listVdc() {
VirtualDataCenterList vdcList = new VirtualDataCenterList();
List<URI> ids = _dbClient.queryByType(VirtualDataCenter.class, true);
Iterator<VirtualDataCenter> iter = _dbClient.queryIterativeObjects(VirtualDataCenter.class, ids);
while (iter.hasNext()) {
vdcList.getVirtualDataCenters().add(toNamedRelatedResource(iter.next()));
}
return vdcList;
}
@PUT
@Path("/{id}")
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public Response setVdcInUse(@PathParam("id") URI id, @QueryParam("inuse") Boolean inUse) {
ArgValidator.checkUri(id);
VirtualDataCenterInUse vdcInUse = _dbClient.queryObject(VirtualDataCenterInUse.class, id);
if (vdcInUse == null) {
vdcInUse = new VirtualDataCenterInUse();
vdcInUse.setId(id);
vdcInUse.setInUse(inUse);
_dbClient.createObject(vdcInUse);
} else {
vdcInUse.setInUse(inUse);
_dbClient.updateAndReindexObject(vdcInUse);
}
return Response.ok().build();
}
}