pax_global_header 0000666 0000000 0000000 00000000064 13076062304 0014513 g ustar 00root root 0000000 0000000 52 comment=6df346635765fc32db3fb21aa69d76b054d4b089
semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/ 0000775 0000000 0000000 00000000000 13076062304 0020610 5 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/.gitignore 0000664 0000000 0000000 00000000073 13076062304 0022600 0 ustar 00root root 0000000 0000000 /deployToDatel.bat
**/.classpath
**/.project
**/.settings
semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/CommonComponents/ 0000775 0000000 0000000 00000000000 13076062304 0024106 5 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/CommonComponents/.gitignore 0000664 0000000 0000000 00000000025 13076062304 0026073 0 ustar 00root root 0000000 0000000 /target/
/.settings/
semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/CommonComponents/pom.xml 0000664 0000000 0000000 00000004625 13076062304 0025432 0 ustar 00root root 0000000 0000000
4.0.0
cz.muni.fi.lasaris.sbms
CommonComponents
0.0.1-SNAPSHOT
jar
CommonComponents
https://gitlab.fi.muni.cz/xkucer16/semanticBMS
log4j
log4j
1.2.17
org.glassfish.jersey.core
jersey-server
${jersey.version}
javax.ws.rs
javax.ws.rs-api
2.0.1
junit
junit
4.12
test
cz.muni.fi.lasaris.sbms
ProviderInterfaces
0.0.1-SNAPSHOT
compile
org.apache.maven.plugins
maven-compiler-plugin
3.1
1.8
2.25.1
UTF-8
semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/CommonComponents/src/ 0000775 0000000 0000000 00000000000 13076062304 0024675 5 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/CommonComponents/src/main/ 0000775 0000000 0000000 00000000000 13076062304 0025621 5 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/CommonComponents/src/main/java/ 0000775 0000000 0000000 00000000000 13076062304 0026542 5 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/CommonComponents/src/main/java/cz/ 0000775 0000000 0000000 00000000000 13076062304 0027156 5 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/CommonComponents/src/main/java/cz/muni/ 0000775 0000000 0000000 00000000000 13076062304 0030126 5 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/CommonComponents/src/main/java/cz/muni/fi/ 0000775 0000000 0000000 00000000000 13076062304 0030524 5 ustar 00root root 0000000 0000000 lasaris/ 0000775 0000000 0000000 00000000000 13076062304 0032103 5 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/CommonComponents/src/main/java/cz/muni/fi sbms/ 0000775 0000000 0000000 00000000000 13076062304 0033047 5 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/CommonComponents/src/main/java/cz/muni/fi/lasaris auth/ 0000775 0000000 0000000 00000000000 13076062304 0034010 5 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/CommonComponents/src/main/java/cz/muni/fi/lasaris/sbms AuthenticationFilter.java 0000664 0000000 0000000 00000010252 13076062304 0041000 0 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/CommonComponents/src/main/java/cz/muni/fi/lasaris/sbms/auth package cz.muni.fi.lasaris.sbms.auth;
import java.io.IOException;
import java.security.Principal;
import java.util.Properties;
import javax.annotation.Priority;
import javax.ws.rs.Priorities;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.core.SecurityContext;
import org.apache.log4j.Logger;
import org.glassfish.jersey.internal.util.Base64;
//http://stackoverflow.com/questions/17068528/authorization-with-rolesalloweddynamicfeature-and-jersey
@Priority(Priorities.AUTHENTICATION)
public class AuthenticationFilter implements ContainerRequestFilter {
final static Logger logger = Logger.getLogger(AuthenticationFilter.class);
private AuthProvider ap;
private Properties props = null;
private String appName;
public AuthenticationFilter(String appName, Properties props) {
super();
this.props = props;
this.appName = appName;
if (props.getProperty("auth.enable") == null || !Boolean.parseBoolean(props.getProperty("auth.enable"))) {
logger.debug("Initing allowAll provider for app " + this.appName);
ap = getAllowAllProvider();
return;
}
try {
String className = this.props.getProperty("auth.provider");
if(className != null) {
Class> c = Class.forName(className);
this.ap = (AuthProvider)c.newInstance();
this.ap.init(this.props);
logger.debug("Initing custom auth provider for app " + this.appName);
} else {
throw new IllegalArgumentException(appName + ": customAuth is required but no AuthProvider implementation is provided.");
}
} catch(Exception ex) {
logger.error(ex);
logger.error(appName + ": Unable to load AuthProvider - allowing all users.");
ap = getAllowAllProvider();
}
}
public void filter(final ContainerRequestContext requestContext) throws IOException {
requestContext.setSecurityContext(new SecurityContext() {
private Principal user;
{
String auth = requestContext.getHeaderString("authorization");
final String[] creds = decodeAuth(auth);
if(ap.authenticate(creds[0], creds[1])) {
logger.debug(appName + ": Authenticated.");
user = new Principal() {
public String getName() {
return creds[0];
}
};
} else {
logger.debug(appName + ": Auth failed.");
user = null;
}
}
public Principal getUserPrincipal() {
return user;
}
public boolean isUserInRole(String role) {
if(getUserPrincipal() == null) {
return false;
}
String user = getUserPrincipal().getName();
if(ap.authorize(user, role)) {
logger.debug(appName + ": Authorized: " + user + " in " + role);
return true;
} else {
logger.debug(appName + ": Not authorized: " + user + " in " + role);
return false;
}
}
public boolean isSecure() {
return requestContext.getSecurityContext().isSecure();
}
public String getAuthenticationScheme() {
return requestContext.getSecurityContext().getAuthenticationScheme();
}
});
}
// https://simplapi.wordpress.com/2013/01/24/jersey-jax-rs-implements-a-http-basic-auth-decoder/
private String[] decodeAuth(String header) {
if (header == null) {
return new String[] {"", ""};
}
String auth = header.replaceFirst("[B|b]asic ", "");
//Decode the Base64 into byte[]
//Base64 decoder =
//byte[] decodedBytes = DatatypeConverter.parseBase64Binary(auth);
byte[] decodedBytes = Base64.decode(auth.getBytes());
//If the decode fails in any case
if(decodedBytes == null || decodedBytes.length == 0){
return null;
}
//Now we can convert the byte[] into a splitted array :
// - the first one is login,
// - the second one password
return new String(decodedBytes).split(":", 2);
}
private AuthProvider getAllowAllProvider() {
return new AuthProvider() {
public boolean authenticate(String user, String password) {
return true;
}
public boolean authorize(String user, String role) {
return true;
}
public void init(Properties props) {
}
};
}
}
PropertiesAuthProvider.java 0000664 0000000 0000000 00000002720 13076062304 0041345 0 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/CommonComponents/src/main/java/cz/muni/fi/lasaris/sbms/auth package cz.muni.fi.lasaris.sbms.auth;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
public class PropertiesAuthProvider implements AuthProvider {
Map passwords;
Map roles;
public PropertiesAuthProvider() {
}
public boolean authenticate(String user, String password) {
return passwords.containsKey(user) && passwords.get(user).equals(password);
}
public boolean authorize(String user, String role) {
return roles.containsKey("user") && roles.get(user).equals(role);
}
public void init(Properties props) {
this.passwords = new HashMap();
this.roles = new HashMap();
String usersProp = props.getProperty("auth.propertiesAuth.users");
String roleUProp = props.getProperty("auth.propertiesAuth.roles.user");
String roleAProp = props.getProperty("auth.propertiesAuth.roles.admin");
if(usersProp != null) {
String[] ups = usersProp.split("\\|");
for(int i = 0; i < ups.length; i++) {
String[] u = ups[i].split(":");
this.passwords.put(u[0],u[1]);
}
}
if(roleUProp != null) {
String[] rps = roleUProp.split("\\|");
for(int i = 0; i < rps.length; i++) {
this.roles.put(rps[i],"user");
}
}
if(roleAProp != null) {
String[] rps = roleAProp.split("\\|");
for(int i = 0; i < rps.length; i++) {
this.roles.put(rps[i],"admin");
}
}
}
}
semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/ 0000775 0000000 0000000 00000000000 13076062304 0023135 5 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/.gitignore 0000664 0000000 0000000 00000000025 13076062304 0025122 0 ustar 00root root 0000000 0000000 /target/
/.settings/
semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/pom.xml 0000664 0000000 0000000 00000006060 13076062304 0024454 0 ustar 00root root 0000000 0000000
4.0.0
cz.muni.fi.lasaris.sbms
DataAccessAPI
0.0.1-SNAPSHOT
war
DataAccessAPI
https://gitlab.fi.muni.cz/xkucer16/semanticBMS
javax.servlet
javax.servlet-api
3.1.0
org.glassfish.jersey.core
jersey-server
${jersey.version}
org.glassfish.jersey.containers
jersey-container-servlet
${jersey.version}
org.glassfish.jersey.media
jersey-media-json-jackson
${jersey.version}
junit
junit
4.12
test
cz.muni.fi.lasaris.sbms
CommonComponents
0.0.1-SNAPSHOT
compile
org.apache.maven.plugins
maven-compiler-plugin
3.1
1.8
org.apache.maven.plugins
maven-war-plugin
3.0.0
false
2.25.1
UTF-8
semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/ 0000775 0000000 0000000 00000000000 13076062304 0023724 5 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/main/ 0000775 0000000 0000000 00000000000 13076062304 0024650 5 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/main/java/ 0000775 0000000 0000000 00000000000 13076062304 0025571 5 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/main/java/cz/ 0000775 0000000 0000000 00000000000 13076062304 0026205 5 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/main/java/cz/muni/ 0000775 0000000 0000000 00000000000 13076062304 0027155 5 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/main/java/cz/muni/fi/ 0000775 0000000 0000000 00000000000 13076062304 0027553 5 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/main/java/cz/muni/fi/lasaris/0000775 0000000 0000000 00000000000 13076062304 0031211 5 ustar 00root root 0000000 0000000 sbms/ 0000775 0000000 0000000 00000000000 13076062304 0032076 5 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/main/java/cz/muni/fi/lasaris data/ 0000775 0000000 0000000 00000000000 13076062304 0033007 5 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/main/java/cz/muni/fi/lasaris/sbms Application.java 0000664 0000000 0000000 00000003645 13076062304 0036125 0 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/main/java/cz/muni/fi/lasaris/sbms/data package cz.muni.fi.lasaris.sbms.data;
import java.io.InputStream;
import java.util.Properties;
import javax.servlet.ServletContext;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Context;
import org.apache.log4j.Logger;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.server.filter.RolesAllowedDynamicFeature;
import cz.muni.fi.lasaris.sbms.auth.AuthenticationFilter;
import cz.muni.fi.lasaris.sbms.data.logic.ProviderManager;
@ApplicationPath("data/")
public class Application extends ResourceConfig {
final static Logger logger = Logger.getLogger(Application.class);
private Properties prop;
@Context ServletContext context;
public Application() {
super();
setApplicationName("Semantic BMS Data Access API");
// http://crunchify.com/java-properties-file-how-to-read-config-properties-values-in-java/
this.prop = new Properties();
try {
String propFileName = "data.properties";
InputStream inputStream = Application.class.getClassLoader().getResourceAsStream(propFileName);
if (inputStream != null) {
this.prop.load(inputStream);
} else {
logger.error("property file '" + propFileName + "' not found in the classpath");
}
} catch (Exception ex) {
logger.error(ex);
logger.error("Error occured when reading properties");
}
packages("cz.muni.fi.lasaris.sbms.data.api");
register(RolesAllowedDynamicFeature.class);
registerInstances(new AuthenticationFilter("data", prop));
// TODO: data-level auth (data API)
try {
ProviderManager.init(prop);
} catch(Throwable e) {
logger.error("Initialization error", e);
}
}
public Properties getSBMSProperties() {
return prop;
}
public static void close() {
logger.debug("Closing connectors...");
ProviderManager.close();
logger.debug("Connectors closed.");
}
public void finalize() {
close();
}
}
ContextListener.java 0000664 0000000 0000000 00000001312 13076062304 0037001 0 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/main/java/cz/muni/fi/lasaris/sbms/data package cz.muni.fi.lasaris.sbms.data;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import org.apache.log4j.Logger;
@WebListener
public class ContextListener implements ServletContextListener {
final static Logger logger = Logger.getLogger(ContextListener.class);
public ContextListener() {
logger.debug("Custom ContextListener initialized.");
}
@Override
public void contextDestroyed(ServletContextEvent c) {
logger.debug("Closing the SBMS Data API...");
Application.close();
logger.debug("Closed.");
}
@Override
public void contextInitialized(ServletContextEvent c) {
}
}
api/ 0000775 0000000 0000000 00000000000 13076062304 0033560 5 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/main/java/cz/muni/fi/lasaris/sbms/data DataPointsEndpoint.java 0000664 0000000 0000000 00000011427 13076062304 0040177 0 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/main/java/cz/muni/fi/lasaris/sbms/data/api package cz.muni.fi.lasaris.sbms.data.api;
import java.io.IOException;
import javax.annotation.security.PermitAll;
import javax.annotation.security.RolesAllowed;
import javax.ws.rs.GET;
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 org.apache.log4j.Logger;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import cz.muni.fi.lasaris.sbms.data.api.request.GroupedSnapshotRequest;
import cz.muni.fi.lasaris.sbms.data.api.request.SnapshotRequest;
import cz.muni.fi.lasaris.sbms.data.api.response.AggregationResponse;
import cz.muni.fi.lasaris.sbms.data.api.response.GroupedSnapshotResponse;
import cz.muni.fi.lasaris.sbms.data.api.response.SnapshotResponse;
import cz.muni.fi.lasaris.sbms.data.entities.Address;
import cz.muni.fi.lasaris.sbms.data.entities.values.RawValue;
import cz.muni.fi.lasaris.sbms.data.logic.ProviderManager;
import cz.muni.fi.lasaris.sbms.data.logic.DataCollector;
import cz.muni.fi.lasaris.sbms.data.util.Aggregator;
@Path("datapoints")
@PermitAll
public class DataPointsEndpoint {
final static Logger logger = Logger.getLogger(DataPointsEndpoint.class);
private DataCollector dc = new DataCollector();
@RolesAllowed({"user","admin"})
@GET
@Produces(MediaType.APPLICATION_JSON)
public SnapshotResponse getDataPoints(
@QueryParam("json") String json,
@QueryParam("cache") String cache
) {
ObjectMapper m = new ObjectMapper();
m.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
try {
logger.debug("Processing request...");
logger.debug(json);
SnapshotRequest readSpecs = m.readValue(json, SnapshotRequest.class);
logger.debug(readSpecs);
SnapshotResponse result = dc.getDataPointValues(readSpecs, allowCache(cache));
logger.debug(result);
return result;
} catch (IOException e) {
return SnapshotResponse.getErrorResponse("Unable to parse query:" + e);
}
}
@RolesAllowed({"user","admin"})
@GET
@Path("/aggregated")
@Produces(MediaType.APPLICATION_JSON)
public AggregationResponse getAggregatedDataPoints(
@QueryParam("json") String json,
@QueryParam("aggregation") String agg,
@QueryParam("cache") String cache
) {
ObjectMapper m = new ObjectMapper();
try {
logger.debug("Processing request...");
logger.debug(json);
SnapshotRequest readSpecs = m.readValue(json, SnapshotRequest.class);
logger.debug(readSpecs);
return dc.getDataPointsAggregation(readSpecs, Aggregator.getAggregation(agg), allowCache(cache));
} catch (IOException e) {
return AggregationResponse.getErrorResponse("Unable to parse query:" + e);
}
}
@RolesAllowed({"user","admin"})
@GET
@Path("/grouped")
@Produces(MediaType.APPLICATION_JSON)
public GroupedSnapshotResponse getGroupedDataPoints(
@QueryParam("json") String json,
@QueryParam("cache") String cache
) {
ObjectMapper m = new ObjectMapper();
try {
logger.debug("Processing request...");
logger.debug(json);
GroupedSnapshotRequest readSpecs = m.readValue(json,GroupedSnapshotRequest.class);
logger.debug(readSpecs);
return dc.getDataPointGroupedValues(readSpecs, allowCache(cache));
} catch (IOException e) {
return GroupedSnapshotResponse.getErrorResponse("Unable to parse query:" + e);
}
}
@RolesAllowed({"user","admin"})
@GET
@Path("/group-aggregated")
@Produces(MediaType.APPLICATION_JSON)
public AggregationResponse getGroupedAggregatedDataPoints(
@QueryParam("json") String json,
@QueryParam("aggregation") String agg,
@QueryParam("cache") String cache
) {
ObjectMapper m = new ObjectMapper();
try {
logger.debug("Processing request...");
logger.debug(json);
GroupedSnapshotRequest readSpecs = m.readValue(json, GroupedSnapshotRequest.class);
logger.debug(readSpecs);
AggregationResponse result = dc.getDataPointGroupAggregations(readSpecs, Aggregator.getAggregation(agg), allowCache(cache));
logger.debug(result);
return result;
} catch (IOException e) {
return AggregationResponse.getErrorResponse("Unable to parse query:" + e);
}
}
@RolesAllowed({"user","admin"})
@GET
@Path("/{id}")
@Produces(MediaType.APPLICATION_JSON)
public SnapshotResponse getDataPoint(
@PathParam("id") String idP,
@QueryParam("cache") String cache) {
Address a = new Address(idP);
RawValue v = ProviderManager.getDataPointsProvider(a.getProtocol()).getDataPointValue(a, allowCache(cache));
return new SnapshotResponse(a, v);
}
private boolean allowCache(String cache) {
return cache == null || cache.toLowerCase().equals("true") || cache.toLowerCase().equals("cache");
}
}
LogAllExceptions.java 0000664 0000000 0000000 00000004046 13076062304 0037643 0 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/main/java/cz/muni/fi/lasaris/sbms/data/api // http://stackoverflow.com/questions/19621653/how-should-i-log-uncaught-exceptions-in-my-restful-jax-rs-web-service
// (last answer)
package cz.muni.fi.lasaris.sbms.data.api;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status.Family;
import javax.ws.rs.ext.Provider;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.glassfish.jersey.spi.ExtendedExceptionMapper;
/**
* The purpose of this exception mapper is to log any exception that occurs.
* Contrary to the purpose of the interface it implements, it does not change or determine
* the response that is returned to the client.
* It does this by logging all exceptions passed to the isMappable and then always returning false.
*
*/
@Provider
public class LogAllExceptions implements ExtendedExceptionMapper {
private static final Logger logger = Logger.getLogger(LogAllExceptions.class);
@Override
public boolean isMappable(Throwable thro) {
/* Primarily, we don't want to log client errors (i.e. 400's) as an error. */
Level level = isServerError(thro) ? Level.ERROR : Level.INFO;
logger.log(level, "ThrowableLogger_ExceptionMapper logging error.", thro);
return false;
}
private boolean isServerError(Throwable thro) {
/* Note: We consider anything that is not an instance of WebApplicationException a server error. */
return thro instanceof WebApplicationException
&& isServerError((WebApplicationException)thro);
}
private boolean isServerError(WebApplicationException exc) {
return exc.getResponse().getStatusInfo().getFamily().equals(Family.SERVER_ERROR);
}
@Override
public Response toResponse(Throwable throwable) {
//assert false;
logger.fatal("ThrowableLogger_ExceptionMapper.toResponse: This should not have been called.");
throw new RuntimeException("This should not have been called");
}
}
request/ 0000775 0000000 0000000 00000000000 13076062304 0035250 5 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/main/java/cz/muni/fi/lasaris/sbms/data/api GroupedSnapshotRequest.java 0000664 0000000 0000000 00000004144 13076062304 0042614 0 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/main/java/cz/muni/fi/lasaris/sbms/data/api/request package cz.muni.fi.lasaris.sbms.data.api.request;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.NavigableMap;
import java.util.TreeMap;
import cz.muni.fi.lasaris.sbms.data.entities.Address;
public class GroupedSnapshotRequest {
private Map> groups;
public Map> getGroups() {
return groups;
}
public void setGroups(Map> groups) {
this.groups = groups;
}
/*
@JsonIgnore
public List getReadSpecs() {
List result = new ArrayList(groups.size());
for(String key : groups.keySet()) {
AddressGroup g = new AddressGroup(groups.get(key), key);
}
return result;
}
*/
public NavigableMap getProtocols() {
NavigableMap result = new TreeMap();
for(String group : groups.keySet()) {
for(Address a : groups.get(group)) {
String p = a.getProtocol();
if(p == null) {
// TreeMap does not allow null keys
p = "";
}
if(!result.containsKey(p)) {
result.put(p, null);
}
}
}
// we suppose in most cases the data sources won't be mixed
// therefore we decided to go with this two-phase process that saves the creation of a new structures
// when not needed
if(result.size() == 1) {
result.put(result.firstKey(), this);
return result;
}
for(String group : groups.keySet()) {
for(Address a : groups.get(group)) {
String p = a.getProtocol();
if(p == null) {
// TreeMap does not allow null keys
p = "";
}
GroupedSnapshotRequest g = result.get(p);
if(g == null) {
g = new GroupedSnapshotRequest();
g.setGroups(new LinkedHashMap>());
result.put(p, g);
}
if(!g.getGroups().containsKey(group)) {
g.getGroups().put(group, new LinkedList());
}
g.getGroups().get(group).add(a);
}
}
return result;
}
}
SnapshotRequest.java 0000664 0000000 0000000 00000003076 13076062304 0041271 0 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/main/java/cz/muni/fi/lasaris/sbms/data/api/request package cz.muni.fi.lasaris.sbms.data.api.request;
import java.util.LinkedList;
import java.util.List;
import java.util.NavigableMap;
import java.util.TreeMap;
import cz.muni.fi.lasaris.sbms.data.entities.Address;
public class SnapshotRequest {
private List addresses;
public List getAddresses() {
return addresses;
}
public void setAddresses(List addresses) {
this.addresses = addresses;
}
public NavigableMap getProtocols() {
NavigableMap result = new TreeMap();
for(Address a : addresses) {
String p = a.getProtocol();
if(p == null) {
// TreeMap does not allow null keys
p = "";
}
if(!result.containsKey(p)) {
result.put(p, null);
}
}
// we suppose in most cases the data sources won't be mixed
// therefore we decided to go with this two-phase process that saves the creation of a new structures
// when not needed
if(result.size() == 1) {
result.put(result.firstKey(), this);
return result;
}
for(Address a : addresses) {
String p = a.getProtocol();
if(p == null) {
// TreeMap does not allow null keys
p = "";
}
SnapshotRequest g = result.get(p);
if(g == null) {
g = new SnapshotRequest();
g.setAddresses(new LinkedList());
result.put(p, g);
}
g.getAddresses().add(a);
}
return result;
}
@Override
public String toString() {
return "SnapshotRequest [addresses=" + addresses + "]";
}
}
response/ 0000775 0000000 0000000 00000000000 13076062304 0035416 5 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/main/java/cz/muni/fi/lasaris/sbms/data/api AggregationResponse.java 0000664 0000000 0000000 00000002422 13076062304 0042227 0 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/main/java/cz/muni/fi/lasaris/sbms/data/api/response package cz.muni.fi.lasaris.sbms.data.api.response;
import java.util.LinkedHashMap;
import java.util.Map;
import cz.muni.fi.lasaris.sbms.data.entities.AddressGroup;
import cz.muni.fi.lasaris.sbms.data.entities.containers.Aggregation;
import cz.muni.fi.lasaris.sbms.data.entities.values.AggregatedValue;
public class AggregationResponse {
private String error;
private Map results;
public Map getResults() {
return this.results;
}
public static AggregationResponse getErrorResponse(String error) {
AggregationResponse r = new AggregationResponse();
r.setError(error);
return r;
}
private AggregationResponse() {
this.results = null;
}
public AggregationResponse(Map data) {
this.results = data;
}
public AggregationResponse(AggregatedValue v) {
this.results = new LinkedHashMap();
this.results.put("value", v);
}
public AggregationResponse(Aggregation a) {
this.results = new LinkedHashMap();
a.forEach((k,v) -> this.results.put(k.getName(), v));
}
public String getError() {
return error;
}
public void setError(String error) {
this.error = error;
}
}
GroupedSnapshotResponse.java 0000664 0000000 0000000 00000001432 13076062304 0043125 0 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/main/java/cz/muni/fi/lasaris/sbms/data/api/response package cz.muni.fi.lasaris.sbms.data.api.response;
import java.util.Map;
import cz.muni.fi.lasaris.sbms.data.entities.containers.Snapshot;
public class GroupedSnapshotResponse {
private String error;
private Map results;
public Map getResults() {
return this.results;
}
public static GroupedSnapshotResponse getErrorResponse(String error) {
GroupedSnapshotResponse r = new GroupedSnapshotResponse();
r.setError(error);
return r;
}
private GroupedSnapshotResponse() {
this.results = null;
}
public GroupedSnapshotResponse(Map data) {
this.results = data;
}
public String getError() {
return error;
}
public void setError(String error) {
this.error = error;
}
}
SnapshotResponse.java 0000664 0000000 0000000 00000002236 13076062304 0041602 0 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/main/java/cz/muni/fi/lasaris/sbms/data/api/response package cz.muni.fi.lasaris.sbms.data.api.response;
import java.util.Map;
import javax.xml.bind.annotation.XmlRootElement;
import com.fasterxml.jackson.annotation.JsonInclude;
import cz.muni.fi.lasaris.sbms.data.entities.Address;
import cz.muni.fi.lasaris.sbms.data.entities.containers.Snapshot;
import cz.muni.fi.lasaris.sbms.data.entities.values.RawValue;
@XmlRootElement
@JsonInclude(JsonInclude.Include.NON_NULL)
public class SnapshotResponse {
private String error;
private Snapshot results;
public Map getResults() {
if(this.results == null) return null;
return this.results.getData();
}
public static SnapshotResponse getErrorResponse(String error) {
SnapshotResponse r = new SnapshotResponse();
r.setError(error);
return r;
}
private SnapshotResponse() {
this.results = null;
}
public SnapshotResponse(Address a, RawValue v) {
this.results = new Snapshot();
this.results.add(a, v);
}
public SnapshotResponse(Snapshot s) {
this.results = s;
}
public String getError() {
return error;
}
public void setError(String error) {
this.error = error;
}
}
logic/ 0000775 0000000 0000000 00000000000 13076062304 0034104 5 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/main/java/cz/muni/fi/lasaris/sbms/data DataCollector.java 0000664 0000000 0000000 00000014666 13076062304 0037504 0 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/main/java/cz/muni/fi/lasaris/sbms/data/logic package cz.muni.fi.lasaris.sbms.data.logic;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.NavigableMap;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.log4j.Logger;
import cz.muni.fi.lasaris.sbms.data.api.request.GroupedSnapshotRequest;
import cz.muni.fi.lasaris.sbms.data.api.request.SnapshotRequest;
import cz.muni.fi.lasaris.sbms.data.api.response.AggregationResponse;
import cz.muni.fi.lasaris.sbms.data.api.response.GroupedSnapshotResponse;
import cz.muni.fi.lasaris.sbms.data.api.response.SnapshotResponse;
import cz.muni.fi.lasaris.sbms.data.entities.Address;
import cz.muni.fi.lasaris.sbms.data.entities.AggregationFunction;
import cz.muni.fi.lasaris.sbms.data.entities.containers.Snapshot;
import cz.muni.fi.lasaris.sbms.data.entities.values.AggregatedValue;
import cz.muni.fi.lasaris.sbms.data.entities.values.RawValue;
import cz.muni.fi.lasaris.sbms.data.util.Aggregator;
public class DataCollector {
final static Logger logger = Logger.getLogger(DataCollector.class);
public SnapshotResponse getDataPointValues(SnapshotRequest readSpecs, boolean allowCache) {
return new SnapshotResponse(getDataPointValuesSnapshot(readSpecs, allowCache));
}
private Snapshot getDataPointValuesSnapshot(SnapshotRequest readSpecs, boolean allowCache) {
NavigableMap protocols = readSpecs.getProtocols();
if(protocols.size() == 1) {
return ProviderManager.getDataPointsProvider(protocols.firstKey())
.getDataPointValues(protocols.get(protocols.firstKey()).getAddresses(), allowCache);
}
AtomicInteger counter = new AtomicInteger(0);
int count = protocols.keySet().size();
List results = Collections.synchronizedList(new LinkedList());
for(String protocol : protocols.keySet()) {
new Thread(new Runnable() {
@Override
public void run() {
Snapshot rs = (ProviderManager.getDataPointsProvider(protocol)
.getDataPointValues(protocols.get(protocol).getAddresses(), allowCache));
synchronized(results) {
results.add(rs);
counter.incrementAndGet();
results.notifyAll();
}
}}).start();
}
synchronized(results) {
while(counter.get() < count) {
try {
results.wait();
} catch (InterruptedException e) {
logger.error("Exception while waiting for completion.", e);
}
}
}
Snapshot result = new Snapshot();
synchronized(results) {
for(Snapshot r : results) {
result.addAll(r.getData());
}
}
return result;
}
public AggregationResponse getDataPointsAggregation(SnapshotRequest readSpecs, AggregationFunction aggregation,
boolean allowCache) {
NavigableMap protocols = readSpecs.getProtocols();
if(protocols.size() == 1) {
return new AggregationResponse(ProviderManager.getDataPointsProvider(protocols.firstKey())
.getDataPointsAggregation(protocols.get(protocols.firstKey()).getAddresses(), aggregation, allowCache));
}
Snapshot data = getDataPointValuesSnapshot(readSpecs, allowCache);
return new AggregationResponse(computeAggregation(data.getData(), aggregation));
}
public GroupedSnapshotResponse getDataPointGroupedValues(GroupedSnapshotRequest readSpecs,
boolean allowCache) {
return new GroupedSnapshotResponse(getDataPointGroupedValuesMap(readSpecs, allowCache));
}
private Map getDataPointGroupedValuesMap(GroupedSnapshotRequest readSpecs,
boolean allowCache) {
NavigableMap protocols = readSpecs.getProtocols();
if(protocols.size() == 1) {
return ProviderManager.getDataPointsProvider(protocols.firstKey())
.getDataPointGroupedValues(protocols.get(protocols.firstKey()).getGroups(), allowCache);
}
AtomicInteger counter = new AtomicInteger(0);
int count = protocols.keySet().size();
List results = Collections.synchronizedList(new LinkedList());
for(String protocol : protocols.keySet()) {
new Thread(new Runnable() {
@Override
public void run() {
GroupedSnapshotResponse rs = new GroupedSnapshotResponse(ProviderManager.getDataPointsProvider(protocol).getDataPointGroupedValues(protocols.get(protocol).getGroups(), allowCache));
synchronized(results) {
results.add(rs);
counter.incrementAndGet();
results.notifyAll();
}
}}).start();
}
synchronized(results) {
while(counter.get() < count) {
try {
results.wait();
} catch (InterruptedException e) {
logger.error("Exception while waiting for completion.", e);
}
}
}
Map result = new LinkedHashMap();
for(String group : readSpecs.getGroups().keySet()) {
result.put(group, new Snapshot());
}
synchronized(results) {
for(GroupedSnapshotResponse r : results) {
for(String group : r.getResults().keySet()) {
result.get(group).addAll(r.getResults().get(group).getData());
}
}
}
return result;
}
public AggregationResponse getDataPointGroupAggregations(GroupedSnapshotRequest readSpecs,
AggregationFunction aggregation, boolean allowCache) {
NavigableMap protocols = readSpecs.getProtocols();
if(protocols.size() == 1) {
return new AggregationResponse(ProviderManager.getDataPointsProvider(protocols.firstKey())
.getDataPointGroupAggregations(protocols.get(protocols.firstKey()).getGroups(), aggregation, allowCache));
}
Map data = getDataPointGroupedValuesMap(readSpecs, allowCache);
return new AggregationResponse(computeGroupAggregations(data, aggregation));
}
private Map computeGroupAggregations(Map data, AggregationFunction aggregation) {
Map result = new LinkedHashMap();
for(String group : data.keySet()) {
AggregatedValue value = Aggregator.computeAggregation(data.get(group).getData(), aggregation);
result.put(group, value);
}
return result;
}
private AggregatedValue computeAggregation(Map data, AggregationFunction aggregation) {
return Aggregator.computeAggregation(data, aggregation);
}
}
ProviderManager.java 0000664 0000000 0000000 00000007461 13076062304 0040044 0 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/main/java/cz/muni/fi/lasaris/sbms/data/logic package cz.muni.fi.lasaris.sbms.data.logic;
import java.util.NavigableMap;
import java.util.Properties;
import java.util.TreeMap;
import org.apache.log4j.Logger;
import cz.muni.fi.lasaris.sbms.data.providers.TrendsProvider;
import cz.muni.fi.lasaris.sbms.data.providers.DataPointsProvider;
public class ProviderManager {
final static Logger logger = Logger.getLogger(ProviderManager.class);
private static NavigableMap trendsProviders;
private static NavigableMap dpsProviders;
public static void init(Properties props) {
trendsProviders = new TreeMap();
dpsProviders = new TreeMap();
String bcs = props.getProperty("data.providers.datapoints");
// starting DP providers first - some archive connectors might be dependent on them
if(bcs != null) {
for(String bc : bcs.split(",")) {
String bct = bc.trim();
String bcc = props.getProperty(String.format("data.providers.datapoints.%s.class", bct));
//String prefix = props.getProperty(String.format("data.providers.bas.$s.prefix", bc.trim()));
try {
if(bcc == null) {
throw new IllegalArgumentException(String.format("Class for the BAS connector %s is not set.", bct));
}
Class>c = Class.forName(bcc);
DataPointsProvider bci = (DataPointsProvider)c.newInstance();
ProviderManager.dpsProviders.put(bct, bci);
bci.init(props, bct, String.format("data.providers.datapoints.%s", bct));
logger.debug(String.format("BAS connector %s initialized.", bct));
} catch (Exception e) {
logger.error(String.format("Unable to create BAS connector %s.", bct), e);
}
}
} else {
throw new IllegalArgumentException(String.format("Unable to initialize BAS data providers - none specified"));
}
String acs = props.getProperty("data.providers.trends");
if(acs != null) {
for(String ac : acs.split(",")) {
String act = ac.trim();
String acc = props.getProperty(String.format("data.providers.trends.%s.class", act));
try {
if(acc == null) {
throw new IllegalArgumentException(String.format("Class for the Archive connector %s is not set.", act));
}
//String prefix = props.getProperty(String.format("data.providers.bas.$s.prefix", bc.trim()));
Class> c = Class.forName(acc);
TrendsProvider aci = (TrendsProvider)c.newInstance();
ProviderManager.trendsProviders.put(act, aci);
aci.init(props, act, String.format("data.providers.trends.%s", act));
logger.debug(String.format("Archive connector %s initialized.", act));
} catch (Exception e) {
logger.error(String.format("Unable to create Archive connector %s.", act), e);
}
}
} else {
throw new IllegalArgumentException(String.format("Unable to initialize Archive data providers - none specified"));
}
}
public static DataPointsProvider getDataPointsProvider(String name) {
if(ProviderManager.dpsProviders == null) {
throw new IllegalStateException("Data points connectors not set");
}
if(name == null || dpsProviders.size() == 1 || name.equals("") || !dpsProviders.containsKey(name)) name = dpsProviders.firstKey();
return dpsProviders.get(name);
}
public static TrendsProvider getTrendsProvider(String name) {
if(ProviderManager.trendsProviders == null) {
throw new IllegalStateException("Trends connectors not set");
}
if(name == null || trendsProviders.size() == 1 || name.equals("") || !trendsProviders.containsKey(name)) name = trendsProviders.firstKey();
return trendsProviders.get(name);
}
public static void close() {
for(DataPointsProvider c : dpsProviders.values()) {
c.close();
}
for(TrendsProvider c : trendsProviders.values()) {
c.close();
}
}
}
semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/main/resources/ 0000775 0000000 0000000 00000000000 13076062304 0026662 5 ustar 00root root 0000000 0000000 data.properties 0000664 0000000 0000000 00000001624 13076062304 0031635 0 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/main/resources data.providers.datapoints=bacnet
data.providers.trends=historian,bactrend
data.providers.trends.bactrend.class=cz.muni.fi.lasaris.sbms.data.providers.bacnet.BACnetTrendsProvider
data.providers.trends.historian.class=cz.muni.fi.lasaris.sbms.data.providers.bacnet.DeltaHistorianConnector
data.providers.datapoints.bacnet.class=cz.muni.fi.lasaris.sbms.data.providers.bacnet.BACnetPropertiesProvider
data.providers.datapoints.bacnet.ip.address=147.251.130.76
data.providers.datapoints.bacnet.ip.broadcast=147.251.130.255
data.providers.datapoints.bacnet.ip.mask=255.255.255.224
data.providers.datapoints.bacnet.tcp.port=47808
data.providers.datapoints.bacnet.device.id=19
auth.enable=false
auth.provider=cz.muni.fi.lasaris.sbms.auth.PropertiesAuthProvider
auth.propertiesAuth.users=user:resu|admin:nimda|adam:mada
auth.propertiesAuth.roles.user=user|adam
auth.propertiesAuth.roles.admin=admin log4j.properties 0000664 0000000 0000000 00000000605 13076062304 0031741 0 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/main/resources # Root logger option
log4j.rootLogger=INFO, stdout
log4j.logger.cz.muni.fi.lasaris.sbms.data=DEBUG
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %C %c{1}:%L - %m%n semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/test/ 0000775 0000000 0000000 00000000000 13076062304 0024703 5 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/test/java/ 0000775 0000000 0000000 00000000000 13076062304 0025624 5 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/test/java/cz/ 0000775 0000000 0000000 00000000000 13076062304 0026240 5 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/test/java/cz/muni/ 0000775 0000000 0000000 00000000000 13076062304 0027210 5 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/test/java/cz/muni/fi/ 0000775 0000000 0000000 00000000000 13076062304 0027606 5 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/test/java/cz/muni/fi/lasaris/0000775 0000000 0000000 00000000000 13076062304 0031244 5 ustar 00root root 0000000 0000000 sbms/ 0000775 0000000 0000000 00000000000 13076062304 0032131 5 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/test/java/cz/muni/fi/lasaris data/ 0000775 0000000 0000000 00000000000 13076062304 0033042 5 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/test/java/cz/muni/fi/lasaris/sbms test/ 0000775 0000000 0000000 00000000000 13076062304 0034021 5 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/test/java/cz/muni/fi/lasaris/sbms/data RequestTests.java 0000664 0000000 0000000 00000005411 13076062304 0037340 0 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/DataAccessAPI/src/test/java/cz/muni/fi/lasaris/sbms/data/test package cz.muni.fi.lasaris.sbms.data.test;
import static org.junit.Assert.*;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.NavigableMap;
import org.junit.Before;
import org.junit.Test;
import cz.muni.fi.lasaris.sbms.data.api.request.GroupedSnapshotRequest;
import cz.muni.fi.lasaris.sbms.data.api.request.SnapshotRequest;
import cz.muni.fi.lasaris.sbms.data.entities.Address;
public class RequestTests {
private Address[] a;
@Before
public void setUp() throws Exception {
a = new Address[] {
new Address("bacnet://4600.AV91.85"),
new Address("lon://1.44.895"),
new Address("bacnet://4600.AV92.85"),
new Address("bacnet://4601.AV91.85"),
new Address("historian://93.TL1845"),
new Address("lon://1.48.895")
};
}
@Test
public void testGroupedSnapshotRequestGetProtocols() {
GroupedSnapshotRequest gr = new GroupedSnapshotRequest();
gr.setGroups(new LinkedHashMap>());
List l1 = new LinkedList();
List l2 = new LinkedList();
l1.add(a[0]);
l1.add(a[1]);
l1.add(a[2]);
l2.add(a[3]);
l2.add(a[4]);
l2.add(a[5]);
gr.getGroups().put("BHA10", l1);
gr.getGroups().put("BHA11", l2);
NavigableMap t = gr.getProtocols();
assertEquals(3, t.size());
assertEquals(2 ,t.get("lon").getGroups().size());
assertEquals(Arrays.asList(a[1]), t.get("lon").getGroups().get("BHA10"));
assertEquals(Arrays.asList(a[5]), t.get("lon").getGroups().get("BHA11"));
assertEquals(2 ,t.get("bacnet").getGroups().size());
assertEquals(Arrays.asList(a[0], a[2]), t.get("bacnet").getGroups().get("BHA10"));
assertEquals(Arrays.asList(a[3]), t.get("bacnet").getGroups().get("BHA11"));
assertEquals(1 ,t.get("historian").getGroups().size());
assertEquals(Arrays.asList(a[4]), t.get("historian").getGroups().get("BHA11"));
}
@Test
public void testSnapshotRequestGetProtocols() {
SnapshotRequest gr = new SnapshotRequest();
List l = new LinkedList();
l.add(a[0]);
l.add(a[1]);
l.add(a[2]);
l.add(a[3]);
l.add(a[4]);
l.add(a[5]);
gr.setAddresses(l);
NavigableMap t = gr.getProtocols();
assertEquals(3, t.size());
assertEquals(2 ,t.get("lon").getAddresses().size());
assertEquals(Arrays.asList(a[1], a[5]), t.get("lon").getAddresses());
assertEquals(3 ,t.get("bacnet").getAddresses().size());
assertEquals(Arrays.asList(a[0], a[2], a[3]), t.get("bacnet").getAddresses());
assertEquals(1 ,t.get("historian").getAddresses().size());
assertEquals(Arrays.asList(a[4]), t.get("historian").getAddresses());
}
}
semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/ProviderInterfaces/ 0000775 0000000 0000000 00000000000 13076062304 0024406 5 ustar 00root root 0000000 0000000 semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/ProviderInterfaces/.gitignore 0000664 0000000 0000000 00000000025 13076062304 0026373 0 ustar 00root root 0000000 0000000 /target/
/.settings/
semanticBMS-6df346635765fc32db3fb21aa69d76b054d4b089/ProviderInterfaces/pom.xml 0000664 0000000 0000000 00000003371 13076062304 0025727 0 ustar 00root root 0000000 0000000
4.0.0
cz.muni.fi.lasaris.sbms
ProviderInterfaces
0.0.1-SNAPSHOT
ProviderInterfaces
jar
junit
junit
4.12
test
com.cronutils
cron-utils
5.0.5
org.apache.maven.plugins
maven-compiler-plugin
3.1
1.8
org.apache.maven.plugins
maven-war-plugin
3.0.0
false