package tr.com.srdc.mdr.web.html.api; import java.util.ArrayList; import java.util.List; import javax.ws.rs.Consumes; import javax.ws.rs.CookieParam; import javax.ws.rs.DefaultValue; import javax.ws.rs.GET; import javax.ws.rs.POST; 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 tr.com.srdc.mdr.core.api.ai.ConceptualDomain; import tr.com.srdc.mdr.core.api.ai.Context; import tr.com.srdc.mdr.core.api.ai.DataElement; import tr.com.srdc.mdr.core.api.ai.DataElementConcept; import tr.com.srdc.mdr.core.api.ai.EnumeratedValueDomain; import tr.com.srdc.mdr.core.api.ai.NonEnumeratedValueDomain; import tr.com.srdc.mdr.core.api.ai.ObjectClass; import tr.com.srdc.mdr.core.api.ai.Property; import tr.com.srdc.mdr.core.api.ai.ValueDomain; import tr.com.srdc.mdr.core.impl.Repository; import tr.com.srdc.mdr.core.impl.RepositoryManager; import tr.com.srdc.mdr.core.store.query.ResourceQueryFactory.TextSearchType; import tr.com.srdc.mdr.web.html.models.ContextModel; import tr.com.srdc.mdr.web.html.models.DataElementModel; import tr.com.srdc.mdr.web.html.models.ObjectClassModel; import tr.com.srdc.mdr.web.html.models.PropertyModel; import tr.com.srdc.mdr.web.html.models.ValueDomainModel; import tr.com.srdc.mdr.web.html.util.WebUtil; /** * @author anil * */ @Path("/context/{contextid}") public class ContextService { @GET @Produces(MediaType.APPLICATION_JSON) public Response getContext( @CookieParam(AuthenticationService.SID) String sessionID, @PathParam("contextid") String contextID) { WebUtil.checkUserSession(sessionID); Repository repository = RepositoryManager.getInstance().getRepository(); Context context = repository.getContext(contextID); return Response.ok(new ContextModel(context)).build(); } @GET @Path("/oc") @Produces(MediaType.APPLICATION_JSON) public Response listObjectClasses( @CookieParam(AuthenticationService.SID) String sessionID, @PathParam("contextid") String contextID, @QueryParam("limit") @DefaultValue("10") Integer limit, @QueryParam("offset") @DefaultValue("0") Integer offset) { WebUtil.checkUserSession(sessionID); Repository repository = RepositoryManager.getInstance().getRepository(); Context context = repository.getContext(contextID); List<ObjectClass> ocList = context.getObjectClasses(limit, offset); List<ObjectClassModel> ocModelList = new ArrayList<ObjectClassModel>(); for (ObjectClass oc : ocList) { ocModelList.add(new ObjectClassModel(oc)); } return Response.ok(ocModelList).build(); } @GET @Path("/oc") @Produces(MediaType.TEXT_PLAIN) public Response getNumberOfObjectClasses( @CookieParam(AuthenticationService.SID) String sessionID, @PathParam("contextid") String contextID) { WebUtil.checkUserSession(sessionID); Repository repository = RepositoryManager.getInstance().getRepository(); Context context = repository.getContext(contextID); int size = context.getNumberOfObjectClasses(); return Response.ok(String.valueOf(size)).build(); } @POST @Path("/oc") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public Response createObjectClass( @CookieParam(AuthenticationService.SID) String sessionID, @PathParam("contextid") String contextID, ObjectClassModel objectClassModel) { WebUtil.checkUserSession(sessionID); Repository repository = RepositoryManager.getInstance().getRepository(); Context context = repository.getContext(contextID); ObjectClass objectClass = context.createObjectClass( objectClassModel.getName(), objectClassModel.getDefinition()); return Response.ok(new ObjectClassModel(objectClass)).build(); } @PUT @Path("/oc") @Consumes(MediaType.APPLICATION_JSON) public Response updateObjectClass( @CookieParam(AuthenticationService.SID) String sessionID, @PathParam("contextid") String contextID, ObjectClassModel objectClassModel) { WebUtil.checkUserSession(sessionID); Repository repository = RepositoryManager.getInstance().getRepository(); Context context = repository.getContext(contextID); ObjectClass objectClass = context.getObjectClass(objectClassModel .getId()); // Currently, only name and definition can be updated objectClass.setName(objectClassModel.getName()); objectClass.setDefinition(objectClassModel.getDefinition()); return Response.ok().build(); } @GET @Path("/oc/search") @Produces(MediaType.APPLICATION_JSON) public Response searchObjectClasses( @CookieParam(AuthenticationService.SID) String sessionID, @PathParam("contextid") String contextID, @QueryParam("q") String keyword) { // TODO Currently, we accept a single keyword as the query string return null; } @GET @Path("/property") @Produces(MediaType.APPLICATION_JSON) public Response listProperties( @CookieParam(AuthenticationService.SID) String sessionID, @PathParam("contextid") String contextID) { WebUtil.checkUserSession(sessionID); Repository repository = RepositoryManager.getInstance().getRepository(); Context context = repository.getContext(contextID); List<Property> properties = context.getProperties(); List<PropertyModel> propertyList = new ArrayList<PropertyModel>(); for (Property prop : properties) { propertyList.add(new PropertyModel(prop)); } return Response.ok(propertyList).build(); } @PUT @Path("/property") @Consumes(MediaType.APPLICATION_JSON) public Response updateProperty( @CookieParam(AuthenticationService.SID) String sessionID, @PathParam("contextid") String contextID, PropertyModel propertyModel) { WebUtil.checkUserSession(sessionID); Repository repository = RepositoryManager.getInstance().getRepository(); Context context = repository.getContext(contextID); Property property = context.getProperty(propertyModel.getId()); // Currently, only name and definition can be updated property.setName(propertyModel.getName()); property.setDefinition(propertyModel.getDefinition()); return Response.ok().build(); } @GET @Path("/property/search") @Produces(MediaType.APPLICATION_JSON) public Response searchProperty( @CookieParam(AuthenticationService.SID) String sessionID, @PathParam("contextid") String contextID, @QueryParam("q") String keyword) { WebUtil.checkUserSession(sessionID); Repository repository = RepositoryManager.getInstance().getRepository(); Context context = repository.getContext(contextID); List<Property> propertyList = context.searchProperty(keyword, TextSearchType.WildCard); List<PropertyModel> pList = new ArrayList<PropertyModel>(); for (Property p : propertyList) { pList.add(new PropertyModel(p)); } return Response.ok(pList).build(); } @GET @Path("/de") @Produces(MediaType.APPLICATION_JSON) public Response listDataElements( @CookieParam(AuthenticationService.SID) String sessionID, @PathParam("contextid") String contextID, @QueryParam("limit") @DefaultValue("10") Integer limit, @QueryParam("offset") @DefaultValue("0") Integer offset) { WebUtil.checkUserSession(sessionID); Repository repository = RepositoryManager.getInstance().getRepository(); Context context = repository.getContext(contextID); List<DataElement> dataElements = context.getDataElements(limit, offset); List<DataElementModel> dataElementList = new ArrayList<DataElementModel>(); for (DataElement de : dataElements) { dataElementList.add(new DataElementModel(de)); } return Response.ok(dataElementList).build(); } @GET @Path("/de") @Produces(MediaType.TEXT_PLAIN) public Response getNumberOfDataElements( @CookieParam(AuthenticationService.SID) String sessionID, @PathParam("contextid") String contextID) { WebUtil.checkUserSession(sessionID); Repository repository = RepositoryManager.getInstance().getRepository(); Context context = repository.getContext(contextID); int size = context.getNumberOfDataElements(); return Response.ok(String.valueOf(size)).build(); } @POST @Path("/de") @Produces(MediaType.APPLICATION_JSON) public Response createDataElement( @CookieParam(AuthenticationService.SID) String sessionID, @PathParam("contextid") String contextID, DataElementModel deModel) { WebUtil.checkUserSession(sessionID); Repository repository = RepositoryManager.getInstance().getRepository(); Context context = repository.getContext(contextID); // WARN ValueDomain and DataElementConcept's should exist in repository // before calling this service DataElementConcept dec = context.getDataElementConcept(deModel .getDataElementConceptID()); ConceptualDomain conceptualDomain = repository.getConceptualDomain(dec .asMDRResource() .getHavingDataElementConceptConceptualDomainRelationship() .getUniqueID()); ValueDomain vd = conceptualDomain.getValueDomain(deModel .getValueDomainID()); DataElement de = context.createDataElement(deModel.getName(), deModel.getDefinition(), dec, vd); return Response.ok(new DataElementModel(de)).build(); } @PUT @Path("/de") @Consumes(MediaType.APPLICATION_JSON) public Response updateDataElement( @CookieParam(AuthenticationService.SID) String sessionID, @PathParam("contextid") String contextID, DataElementModel deModel) { WebUtil.checkUserSession(sessionID); Repository repository = RepositoryManager.getInstance().getRepository(); DataElement de = repository.getDataElement(deModel.getId()); // TODO which properties of DataElement should be updatable, just name // and definition is updateable de.setDefinition(deModel.getDefinition()); de.setName(deModel.getName()); return Response.ok().build(); } @GET @Path("/de/search") @Produces(MediaType.APPLICATION_JSON) public Response searchDataElements( @CookieParam(AuthenticationService.SID) String sessionID, @PathParam("contextid") String contextID, @QueryParam("q") String keyword, @QueryParam("limit") @DefaultValue("10") Integer limit, @QueryParam("offset") @DefaultValue("0") Integer offset) { WebUtil.checkUserSession(sessionID); Repository repository = RepositoryManager.getInstance().getRepository(); Context context = repository.getContext(contextID); List<DataElement> deList = context.searchDataElement(keyword, TextSearchType.WildCard, limit, offset); List<DataElementModel> deModelList = new ArrayList<DataElementModel>(); for (DataElement de : deList) { deModelList.add(new DataElementModel(de)); } return Response.ok(deModelList).build(); } @GET @Path("/de/search") @Produces(MediaType.TEXT_PLAIN) public Response searchDataElements( @CookieParam(AuthenticationService.SID) String sessionID, @PathParam("contextid") String contextID, @QueryParam("q") String keyword) { WebUtil.checkUserSession(sessionID); Repository repository = RepositoryManager.getInstance().getRepository(); Context context = repository.getContext(contextID); int size = context.getNumberOfDataElementSearch(keyword, TextSearchType.WildCard); return Response.ok(String.valueOf(size)).build(); } @GET @Path("/vd") @Produces(MediaType.APPLICATION_JSON) public Response listValueDomains( @CookieParam(AuthenticationService.SID) String sessionID, @PathParam("contextid") String contextID, @QueryParam("limit") @DefaultValue("10") Integer limit, @QueryParam("offset") @DefaultValue("0") Integer offset) { WebUtil.checkUserSession(sessionID); Repository repository = RepositoryManager.getInstance().getRepository(); Context context = repository.getContext(contextID); List<ValueDomain> vdList = context.getValueDomains(limit, offset); List<ValueDomainModel> vdModelList = new ArrayList<ValueDomainModel>(); for (ValueDomain vd : vdList) { if (vd instanceof EnumeratedValueDomain) { vdModelList.add(new ValueDomainModel(vd, true)); } else if (vd instanceof NonEnumeratedValueDomain) { vdModelList.add(new ValueDomainModel(vd, false)); } } return Response.ok(vdModelList).build(); } @GET @Path("/vd/search") @Produces(MediaType.APPLICATION_JSON) public Response searchValueDomains( @CookieParam(AuthenticationService.SID) String sessionID, @PathParam("contextid") String contextID, @QueryParam("q") String keyword) { WebUtil.checkUserSession(sessionID); Repository repository = RepositoryManager.getInstance().getRepository(); Context context = repository.getContext(contextID); List<ValueDomain> vdList = context.searchValueDomain(keyword, TextSearchType.WildCard); List<ValueDomainModel> vdModelList = new ArrayList<ValueDomainModel>(); for (ValueDomain vd : vdList) { if (vd instanceof EnumeratedValueDomain) { vdModelList.add(new ValueDomainModel(vd, true)); } else { vdModelList.add(new ValueDomainModel(vd, false)); } } return Response.ok(vdModelList).build(); } }