Commit dd1c2804 authored by akucera's avatar akucera
Browse files

Refactoring before implementing trend and address insert

parent cb262d1e
......@@ -15,9 +15,15 @@
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>net.sourceforge.metrics.builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
<nature>net.sourceforge.metrics.nature</nature>
</natures>
</projectDescription>
......@@ -20,11 +20,12 @@ import javax.ws.rs.core.UriInfo;
import org.apache.log4j.Logger;
import cz.muni.fi.lasaris.sbms.api.entities.DataPoint;
import cz.muni.fi.lasaris.sbms.api.entities.Influence;
import cz.muni.fi.lasaris.sbms.api.entities.ObservedProperty;
import cz.muni.fi.lasaris.sbms.api.entities.Scope;
import cz.muni.fi.lasaris.sbms.api.entities.Sensing;
import cz.muni.fi.lasaris.sbms.api.entities.Source;
import cz.muni.fi.lasaris.sbms.api.request.DataPointInsert;
import cz.muni.fi.lasaris.sbms.api.request.Insert;
import cz.muni.fi.lasaris.sbms.api.request.DataPointsRequest;
import cz.muni.fi.lasaris.sbms.api.response.GroupedResponse;
import cz.muni.fi.lasaris.sbms.model.ModelUpdater;
......@@ -36,8 +37,6 @@ public class DataPointsEndpoint {
final static Logger logger = Logger.getLogger(DataPointsEndpoint.class);
@Context
private UriInfo uriInfo;
@RolesAllowed({"user","admin"})
@GET
......@@ -50,12 +49,12 @@ public class DataPointsEndpoint {
@QueryParam("source.location") String sourceLocP,
@QueryParam("scope.bimId") String scopeIdP,
@QueryParam("scope.type") String scopeTypeP,
//@QueryParam("scopeDevType") String scopeDevTypeP,
@QueryParam("scope.location") String scopeLocP,
@QueryParam("sensing.type") String sensingTypeP,
@QueryParam("sensing.window") String sensingWindowP,
@QueryParam("property.domain") String propDomP,
@QueryParam("property.quality") String propQualityP,
@QueryParam("publisher.bimId") String publisherP,
@QueryParam("influenced.scope.bimId") String inflScopeIdP,
@QueryParam("influenced.property.quality") String inflQualityP,
@QueryParam("influenced.property.domain") String inflDomainP,
......@@ -94,6 +93,10 @@ public class DataPointsEndpoint {
dp.setProperty(p);
}
if(publisherP !=null) {
dp.setPublisher(new Source(publisherP, null, null));
}
ObservedProperty ip = null;
Scope is = null;
if(inflScopeIdP != null) {
......@@ -104,9 +107,7 @@ public class DataPointsEndpoint {
}
if(ip != null || is != null) {
dp.setInfluenced();
dp.getInfluenced().setProperty(ip);
dp.getInfluenced().setScope(is);
dp.setInfluenced(new Influence(ip, is));
}
dpr.setGrouping(groupingP);
......@@ -143,13 +144,16 @@ public class DataPointsEndpoint {
}
}
@Context
private UriInfo uriInfo;
@RolesAllowed("admin")
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response InsertDataPointInfo(DataPointInsert insert) {
public Response InsertDataPointInfo(Insert insert) {
try {
URI createdUri = new URI(uriInfo.getAbsolutePath().toString() + DataPoint.getResourceId(insert.getDataPoint().getBmsId()));
if(ModelUpdater.insertDataPoint(insert)) {
if(insert.getDataPoint() != null && ModelUpdater.insertDataPoint(insert)) {
URI createdUri = new URI(uriInfo.getAbsolutePath().toString() + insert.getDataPoint().getResourceId());
return Response.created(createdUri).build();
} else {
return Response.status(Response.Status.BAD_REQUEST).entity("Invalid JSON data - see server log").build();
......
package cz.muni.fi.lasaris.sbms.api;
import java.net.URI;
import javax.annotation.security.PermitAll;
import javax.annotation.security.RolesAllowed;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import cz.muni.fi.lasaris.sbms.api.entities.Address;
import cz.muni.fi.lasaris.sbms.api.entities.DataPoint;
import cz.muni.fi.lasaris.sbms.api.entities.Influence;
import cz.muni.fi.lasaris.sbms.api.entities.ObservedProperty;
import cz.muni.fi.lasaris.sbms.api.entities.Scope;
import cz.muni.fi.lasaris.sbms.api.request.AddressRequest;
import cz.muni.fi.lasaris.sbms.api.request.DataPointsRequest;
import cz.muni.fi.lasaris.sbms.api.request.Insert;
import cz.muni.fi.lasaris.sbms.api.response.AddressResponse;
import cz.muni.fi.lasaris.sbms.api.response.GroupedResponse;
import cz.muni.fi.lasaris.sbms.api.response.InfluenceResponse;
import cz.muni.fi.lasaris.sbms.model.Fields;
import cz.muni.fi.lasaris.sbms.model.ModelUpdater;
import cz.muni.fi.lasaris.sbms.model.QueryParser;
@Path("influence")
@PermitAll
public class InfluencesEndpoint {
final static Logger logger = Logger.getLogger(InfluencesEndpoint.class);
@GET
@Path("/influencing")
@Produces(MediaType.APPLICATION_JSON)
public GroupedResponse getInfluencing(
public AddressResponse getInfluencing(
@QueryParam("influenced.scope.bimId") String scopeBimIdP,
@QueryParam("influenced.property.domain") String propDomP,
@QueryParam("influenced.property.quality") String propQualityP,
@QueryParam("grouping") String groupingP,
@QueryParam("fields") String fieldsP) {
@QueryParam("influenced.property.quality") String propQualityP//,
//@QueryParam("grouping") String groupingP,
//@QueryParam("fields") String fieldsP
) {
if(scopeBimIdP == null && propDomP == null && propQualityP == null) {
return GroupedResponse.getErrorResponse("Parameters must be set");
return AddressResponse.getErrorResponse("Parameters must be set");
}
if(!(propDomP == null && propQualityP == null)
&& (propDomP == null || propQualityP == null)) {
return GroupedResponse.getErrorResponse("Both parameters (domain, quality) must be set");
return AddressResponse.getErrorResponse("Both parameters (domain, quality) must be set");
}
if(propDomP != null && scopeBimIdP == null) {
return GroupedResponse.getErrorResponse("Scope must be set when property is set");
return AddressResponse.getErrorResponse("Scope must be set when property is set");
}
DataPointsRequest r = new DataPointsRequest();
AddressRequest r = new AddressRequest();
DataPoint dp = new DataPoint();
r.setDataPoint(dp);
Address a = new Address();
r.setAddress(a);
dp.setInfluenced();
Influence i = new Influence();
if(StringUtils.isNotBlank(scopeBimIdP)) {
dp.getInfluenced().setScope(new Scope());
dp.getInfluenced().getScope().setBimId(scopeBimIdP);
i.setScope(new Scope());
i.getScope().setBimId(scopeBimIdP);
}
if(StringUtils.isNotBlank(propDomP)) {
dp.getInfluenced().setProperty(new ObservedProperty());
dp.getInfluenced().getProperty().setDomain(propDomP);
i.setProperty(new ObservedProperty());
i.getProperty().setDomain(propDomP);
}
if(StringUtils.isNotBlank(propQualityP)){
if(dp.getInfluenced().getProperty() == null) {
dp.getInfluenced().setProperty(new ObservedProperty());
if(i.getProperty() == null) {
i.setProperty(new ObservedProperty());
}
dp.getInfluenced().getProperty().setQuality(propQualityP);
i.getProperty().setQuality(propQualityP);
}
r.parseResponseFields(fieldsP);
a.setInfluenced(i);
//r.parseResponseFields(fieldsP);
r.getResponseFields().addAll(Fields.INFLUENCE_FIELDS);
r.setGrouping(groupingP);
//r.setGrouping(groupingP);
return QueryParser.getInfluencingResponse(r);
}
@GET
@Path("/influenced")
@Produces(MediaType.APPLICATION_JSON)
public GroupedResponse getInfluenced(
public InfluenceResponse getInfluenced(
@QueryParam("bmsId") String bmsIdP) {
if(StringUtils.isBlank(bmsIdP)) {
......@@ -86,8 +100,25 @@ public class InfluencesEndpoint {
r.getResponseFields().addAll(Fields.INFLUENCE_FIELDS);
return QueryParser.getInfluencedResponse(r);
}
// Inserting and Removing of influence is performed by DataPointsEndpoint
@Context
private UriInfo uriInfo;
@RolesAllowed("admin")
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response InsertAddressInfo(Insert insert) {
try {
if(insert.getAddress() != null && ModelUpdater.insertAddress(insert)) {
URI createdUri = new URI(uriInfo.getAbsolutePath().toString() + insert.getAddress().getResourceId());
return Response.created(createdUri).build();
} else {
return Response.status(Response.Status.BAD_REQUEST).entity("Invalid JSON data - see server log").build();
}
} catch (Exception e) {
logger.error(e);
return Response.serverError().build();
}
}
}
package cz.muni.fi.lasaris.sbms.api;
import java.net.URI;
import javax.annotation.security.PermitAll;
import javax.annotation.security.RolesAllowed;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import org.apache.log4j.Logger;
import cz.muni.fi.lasaris.sbms.api.entities.DataPoint;
import cz.muni.fi.lasaris.sbms.api.entities.Influence;
import cz.muni.fi.lasaris.sbms.api.entities.ObservedProperty;
import cz.muni.fi.lasaris.sbms.api.entities.Scope;
import cz.muni.fi.lasaris.sbms.api.entities.Sensing;
import cz.muni.fi.lasaris.sbms.api.entities.Source;
import cz.muni.fi.lasaris.sbms.api.request.DataPointsRequest;
import cz.muni.fi.lasaris.sbms.api.entities.Trend;
import cz.muni.fi.lasaris.sbms.api.request.Insert;
import cz.muni.fi.lasaris.sbms.api.request.TrendsRequest;
import cz.muni.fi.lasaris.sbms.api.response.GroupedResponse;
import cz.muni.fi.lasaris.sbms.model.ModelUpdater;
import cz.muni.fi.lasaris.sbms.model.QueryParser;
@Path("trends")
@PermitAll
public class TrendsEndpoint {
final static Logger logger = Logger.getLogger(DataPointsEndpoint.class);
@Context
private UriInfo uriInfo;
final static Logger logger = Logger.getLogger(TrendsEndpoint.class);
@RolesAllowed({"user","admin"})
@GET
......@@ -44,15 +50,18 @@ final static Logger logger = Logger.getLogger(DataPointsEndpoint.class);
@QueryParam("sensing.window") String sensingWindowP,
@QueryParam("property.domain") String propDomP,
@QueryParam("property.quality") String propQualityP,
@QueryParam("publisher.bimId") String publisherP,
@QueryParam("influenced.scope.bimId") String inflScopeIdP,
@QueryParam("influenced.property.quality") String inflQualityP,
@QueryParam("influenced.property.domain") String inflDomainP,
@QueryParam("fields") String fieldsP,
@QueryParam("grouping") String groupingP
) {
DataPointsRequest dpr = new DataPointsRequest();
TrendsRequest dpr = new TrendsRequest();
Trend t = new Trend();
DataPoint dp = new DataPoint();
dpr.setDataPoint(dp);
t.setDataPoint(dp);
dpr.setTrend(t);
if(dpIdP != null) {
dp.setBmsId(dpIdP);
......@@ -82,6 +91,10 @@ final static Logger logger = Logger.getLogger(DataPointsEndpoint.class);
dp.setProperty(p);
}
if(publisherP !=null) {
dp.setPublisher(new Source(publisherP, null, null));
}
ObservedProperty ip = null;
Scope is = null;
if(inflScopeIdP != null) {
......@@ -92,9 +105,7 @@ final static Logger logger = Logger.getLogger(DataPointsEndpoint.class);
}
if(ip != null || is != null) {
dp.setInfluenced();
dp.getInfluenced().setProperty(ip);
dp.getInfluenced().setScope(is);
dp.setInfluenced(new Influence(ip, is));
}
dpr.setGrouping(groupingP);
......@@ -108,5 +119,24 @@ final static Logger logger = Logger.getLogger(DataPointsEndpoint.class);
}
}
// TODO Inserting and Removing of trends must be performed by DataPointsEndpoint????
@Context
private UriInfo uriInfo;
@RolesAllowed("admin")
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response InsertTrendInfo(Insert insert) {
try {
if(insert.getTrend() != null && ModelUpdater.insertTrend(insert)) {
URI createdUri = new URI(uriInfo.getAbsolutePath().toString() + insert.getTrend().getResourceId());
return Response.created(createdUri).build();
} else {
return Response.status(Response.Status.BAD_REQUEST).entity("Invalid JSON data - see server log").build();
}
} catch (Exception e) {
logger.error(e);
return Response.serverError().build();
}
}
}
......@@ -22,6 +22,8 @@ public class TypesEndpoint {
return TypesProvider.getDataPointTypes();
}
// TODO getAddressTypes
@GET
@Path("/sensing.type")
@Produces(MediaType.APPLICATION_JSON)
......
......@@ -49,9 +49,9 @@ public class Address {
this.influence = influence;
}
public void setInfluenced() {
public void setInfluenced(Influence i) {
this.influence = new TreeSet<Influence>();
this.influence.add(new Influence());
this.influence.add(i);
}
public Source getPublisher() {
......
......@@ -2,7 +2,7 @@ package cz.muni.fi.lasaris.sbms.api.request;
import cz.muni.fi.lasaris.sbms.api.entities.Address;
public class AddressRequest extends GroupableRequest {
public class AddressRequest extends Request {
private Address address;
public AddressRequest() {
......
......@@ -6,10 +6,6 @@ import cz.muni.fi.lasaris.sbms.api.entities.DataPoint;
@XmlRootElement
public class DataPointsRequest extends GroupableRequest {
public DataPointsRequest() {
}
private DataPoint dataPoint;
......
package cz.muni.fi.lasaris.sbms.api.request;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import cz.muni.fi.lasaris.sbms.model.Fields;
public abstract class GroupableRequest {
public abstract class GroupableRequest extends Request {
protected List<String> responseFields;
private String grouping;
private String[] g;
public GroupableRequest() {
responseFields = new ArrayList<String>();
}
public List<String> getResponseFields() {
return responseFields;
}
public String getGrouping() {
return grouping;
}
......@@ -42,17 +29,5 @@ public abstract class GroupableRequest {
this.g = new String[] { Fields.DEFAULT_GROUPING, Fields.DEFAULT_GROUPING };
}
}
public void parseResponseFields(String fields) {
if(fields != null) {
for(String f : fields.split(",")) {
if(StringUtils.isNotBlank(f)) {
responseFields.add(f);
}
}
}
}
public abstract String getIdentityField();
}
\ No newline at end of file
......@@ -2,13 +2,20 @@ package cz.muni.fi.lasaris.sbms.api.request;
import javax.xml.bind.annotation.XmlRootElement;
import cz.muni.fi.lasaris.sbms.api.entities.Address;
import cz.muni.fi.lasaris.sbms.api.entities.Algorithm;
import cz.muni.fi.lasaris.sbms.api.entities.DataPoint;
import cz.muni.fi.lasaris.sbms.api.entities.Trend;
@XmlRootElement
public class DataPointInsert {
public class Insert {
private DataPoint dataPoint;
private Trend trend;
private Algorithm algorithm;
private Address address;
public DataPoint getDataPoint() {
return dataPoint;
}
......@@ -17,10 +24,37 @@ public class DataPointInsert {
this.dataPoint = dataPoint;
}
public Trend getTrend() {
return trend;
}
public void setTrend(Trend trend) {
this.trend = trend;
}
public Algorithm getAlgorithm() {
return algorithm;
}
public void setAlgorithm(Algorithm algorithm) {
this.algorithm = algorithm;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
@Override
public String toString() {
return "DataPointInsert [dataPoint=" + dataPoint + "]";
return "Insert [dataPoint=" + dataPoint + ", trend=" + trend + ", algorithm=" + algorithm + ", address="
+ address + "]";
}
/*
@Override
......
package cz.muni.fi.lasaris.sbms.api.request;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
public abstract class Request {
protected List<String> responseFields;
public Request() {
responseFields = new ArrayList<String>();
}
public List<String> getResponseFields() {
return responseFields;
}
public void parseResponseFields(String fields) {
if(fields != null) {
for(String f : fields.split(",")) {
if(StringUtils.isNotBlank(f)) {
responseFields.add(f);
}
}
}
}
public abstract String getIdentityField();
}
package cz.muni.fi.lasaris.sbms.api.request;
import cz.muni.fi.lasaris.sbms.api.entities.Trend;
public class TrendsRequest extends GroupableRequest {
private Trend trend;
public Trend getTrend() {
return trend;
}
public void setTrend(Trend trend) {
this.trend = trend;
}
@Override
public String getIdentityField() {
return "bmsId";
}
}
package cz.muni.fi.lasaris.sbms.api.response;
import java.util.ArrayList;
import java.util.List;
import cz.muni.fi.lasaris.sbms.api.entities.Address;