package tr.com.srdc.mdr.web.html.api;
import java.util.List;
import javax.ws.rs.CookieParam;
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.MediaType;
import javax.ws.rs.core.Response;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import tr.com.srdc.mdr.core.MDRConstants;
import tr.com.srdc.mdr.core.api.ai.DataElement;
import tr.com.srdc.mdr.core.api.composite.ClassificationSchemeItem;
import tr.com.srdc.mdr.core.impl.Repository;
import tr.com.srdc.mdr.core.impl.RepositoryManager;
import tr.com.srdc.mdr.core.util.MappingRelation;
import tr.com.srdc.mdr.web.html.models.DataElementModel;
import tr.com.srdc.mdr.web.html.models.ExtractionSpecificationModel;
import tr.com.srdc.mdr.web.html.models.MappingModel;
import tr.com.srdc.mdr.web.html.util.WebUtil;
@Path("/de/{deid}")
public class DataElementService {
private static final Logger logger = LoggerFactory
.getLogger(DataElementService.class);
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getDataElement(
@CookieParam(AuthenticationService.SID) String sessionID,
@PathParam("deid") String dataElementID) {
WebUtil.checkUserSession(sessionID);
Repository repository = RepositoryManager.getInstance().getRepository();
DataElement de = repository.getDataElement(dataElementID);
if (de == null) {
return Response.noContent().build();
}
return Response.ok(new DataElementModel(de)).build();
}
@DELETE
public Response deleteDataElement(
@CookieParam(AuthenticationService.SID) String sessionID,
@PathParam("deid") String dataElementID) {
WebUtil.checkUserSession(sessionID);
Repository repository = RepositoryManager.getInstance().getRepository();
DataElement de = repository.getDataElement(dataElementID);
// TODO which relations of Data Element is to be deleted, decide on that
try {
de.delete();
} catch (Exception e) {
return Response.serverError().build();
}
return Response.ok().build();
}
@POST
@Path("/mapping")
public Response addMapping(
@CookieParam(AuthenticationService.SID) String sessionID,
@PathParam("deid") String dataElementID, MappingModel mapping) {
WebUtil.checkUserSession(sessionID);
Repository repository = RepositoryManager.getInstance().getRepository();
DataElement de = repository.getDataElement(dataElementID);
DataElement mappedDE = repository.getDataElement(mapping.getTermUUID());
MappingRelation relation = new MappingRelation();
relation.setSubjectOID(MDRConstants.getOIDFromContentModel(de.getContext().getName()));
relation.setRelationType(mapping.getMatchType());
relation.setObjectOID(mapping.getTermSystemOID());
de.addMapping(relation, mappedDE);
logger.debug("{} --> {} mapping is added", dataElementID,
mapping.getTermUUID());
return Response.ok().build();
}
@DELETE
@Path("/mapping")
public Response deleteMApping(
@CookieParam(AuthenticationService.SID) String sessionID,
@PathParam("deid") String dataElementID, MappingModel mapping) {
// TODO mapping deleteion should be implemented
return Response.ok().build();
}
@POST
@Path("/extractionspecification")
public Response addExtractionSpecification(
@CookieParam(AuthenticationService.SID) String sessionID,
@PathParam("deid") String dataElementID,
ExtractionSpecificationModel extractionSpecification) {
WebUtil.checkUserSession(sessionID);
Repository repository = RepositoryManager.getInstance().getRepository();
DataElement de = repository.getDataElement(dataElementID);
de.addExtractionSpecification(extractionSpecification.getModelOID(),
extractionSpecification.getType(),
extractionSpecification.getValue());
logger.debug("{} is added to {} as Extraction Specification",
extractionSpecification.getValue(), dataElementID);
return Response.ok().build();
}
@DELETE
@Path("/extractionspecification")
public Response deleteExtractionSpecification(
@CookieParam(AuthenticationService.SID) String sessionID,
@PathParam("deid") String dataElementID,
ExtractionSpecificationModel extractionSpecification) {
WebUtil.checkUserSession(sessionID);
Repository repository = RepositoryManager.getInstance().getRepository();
DataElement de = repository.getDataElement(dataElementID);
List<ClassificationSchemeItem> extractionSpecifications = de
.getExtractionSpecifications();
ClassificationSchemeItem csi2Delete = null;
// if all three values are equal, then that is the one looked for
for (ClassificationSchemeItem csi : extractionSpecifications) {
if (csi.getItemValue().equals(extractionSpecification.getValue())
&& csi.getTypeName().equals(
extractionSpecification.getType())
&& csi.getClassificationScheme().getUniqueID()
.equals(extractionSpecification.getModelOID())) {
csi2Delete = csi;
break;
}
}
if (csi2Delete != null) {
csi2Delete.delete();
}
logger.debug("Extraction specification {} is deleted from {}",
extractionSpecification.getValue(), de.getName());
return Response.ok().build();
}
}