diff --git a/pom.xml b/pom.xml index 94ff7bd03760ff25fb31e65637b5d0a039da7b53..29af3cfb507310d34edbcef1d5d6a1c83b851e60 100644 --- a/pom.xml +++ b/pom.xml @@ -18,33 +18,33 @@ <relativePath /> <!-- lookup parent from repository --> </parent> - <profiles> - <profile> - <id>test</id> - <properties> - <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> - <java.version>1.8</java.version> - <connection.driver_class>org.h2.Driver</connection.driver_class> - <connection.url>jdbc:h2:mem:test</connection.url> - <connection.username>root</connection.username> - <connection.password>root</connection.password> - <hibernate.dialect>org.hibernate.dialect.H2Dialect</hibernate.dialect> - <schema.deploy>true</schema.deploy> - </properties> - </profile> - <profile> - <id>prod</id> - <properties> - <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> - <java.version>1.8</java.version> - <connection.driver_class>org.postgresql.Driver</connection.driver_class> - <connection.url>jdbc:postgresql://hbpmdw1.chuv.ch:31432/portal</connection.url> - <connection.username>portal</connection.username> - <connection.password>iaezXODVLb1e70I</connection.password> - <hibernate.dialect>org.hibernate.dialect.PostgreSQL82Dialect</hibernate.dialect> - <schema.deploy>false</schema.deploy> - </properties> - </profile> + <profiles> + <profile> + <id>test</id> + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <java.version>1.8</java.version> + <connection.driver_class>org.h2.Driver</connection.driver_class> + <connection.url>jdbc:h2:mem:test</connection.url> + <connection.username>root</connection.username> + <connection.password>root</connection.password> + <hibernate.dialect>org.hibernate.dialect.H2Dialect</hibernate.dialect> + <schema.deploy>true</schema.deploy> + </properties> + </profile> + <profile> + <id>prod</id> + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <java.version>1.8</java.version> + <connection.driver_class>org.postgresql.Driver</connection.driver_class> + <connection.url>jdbc:postgresql://hbpmdw1.chuv.ch:31432/portal</connection.url> + <connection.username>portal</connection.username> + <connection.password>iaezXODVLb1e70I</connection.password> + <hibernate.dialect>org.hibernate.dialect.PostgreSQL82Dialect</hibernate.dialect> + <schema.deploy>false</schema.deploy> + </properties> + </profile> <profile> <id>dev</id> <properties> @@ -58,7 +58,7 @@ <schema.deploy>false</schema.deploy> </properties> </profile> - </profiles> + </profiles> <dependencies> <dependency> @@ -77,10 +77,10 @@ <groupId>org.springframework.security.oauth</groupId> <artifactId>spring-security-oauth2</artifactId> </dependency> - <dependency> - <groupId>org.springframework</groupId> - <artifactId>spring-orm</artifactId> - </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-orm</artifactId> + </dependency> <dependency> <groupId>org.webjars</groupId> <artifactId>angularjs</artifactId> @@ -143,30 +143,30 @@ </dependencies> <build> - <resources> - <resource> - <directory>src/main/resources</directory> - <includes><include>**/*.csv</include></includes> - <excludes><exclude>**/*.xml</exclude></excludes> - </resource> - <resource> - <directory>src/main/resources</directory> - <includes><include>**/*.xml</include></includes> - <excludes><exclude>**/*.csv</exclude></excludes> - <filtering>true</filtering> - </resource> - </resources> - + <resources> + <resource> + <directory>src/main/resources</directory> + <includes><include>**/*.csv</include></includes> + <excludes><exclude>**/*.xml</exclude></excludes> + </resource> + <resource> + <directory>src/main/resources</directory> + <includes><include>**/*.xml</include></includes> + <excludes><exclude>**/*.csv</exclude></excludes> + <filtering>true</filtering> + </resource> + </resources> + <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-resources-plugin</artifactId> - <version>2.3</version> - <configuration> - <!-- specify UTF-8, ISO-8859-1 or any other file encoding --> - <encoding>UTF-8</encoding> - </configuration> - </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-resources-plugin</artifactId> + <version>2.3</version> + <configuration> + <!-- specify UTF-8, ISO-8859-1 or any other file encoding --> + <encoding>UTF-8</encoding> + </configuration> + </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> @@ -184,6 +184,14 @@ </execution> </executions> </plugin> + <plugin> + <artifactId>maven-compiler-plugin</artifactId> + <version>3.1</version> + <configuration> + <source>1.8</source> + <target>1.8</target> + </configuration> + </plugin> </plugins> </build> diff --git a/src/docker/build/mip.sh b/src/docker/build/mip.sh index 59bc112e1a1de37fae7c5a79b815aa9196d1b8aa..cfae68474c42a1e66b80edb0ea849911ddd8eef4 100644 --- a/src/docker/build/mip.sh +++ b/src/docker/build/mip.sh @@ -1,5 +1,3 @@ #!/usr/bin/env bash -# Configuration is read in the config folder relative to current path -cd /opt/portal/ -/usr/bin/java -jar /opt/portal/lib/mip.jar +/usr/bin/java -DconfigFile=/opt/portal/config/application.yml -jar /opt/portal/lib/mip.jar diff --git a/src/main/java/org/hbp/mip/controllers/ModelsApi.java b/src/main/java/org/hbp/mip/controllers/ModelsApi.java index 6f52bc2b236f1f373b34b29956a97ea11ff6d346..59275a8798a9fec304a88d765216cf2b13005147 100644 --- a/src/main/java/org/hbp/mip/controllers/ModelsApi.java +++ b/src/main/java/org/hbp/mip/controllers/ModelsApi.java @@ -94,7 +94,8 @@ public class ModelsApi { if(session.getTransaction() != null) { session.getTransaction().rollback(); - } } + } + } return new ResponseEntity<List<Model>>(HttpStatus.OK).ok(models); } @@ -112,7 +113,8 @@ public class ModelsApi { User user = mipApplication.getUser(principal); // Set up model - model.setSlug(model.getTitle().toLowerCase()); + model.setSlug(model.getConfig().getTitle().get("text").toLowerCase()); + model.setTitle(model.getConfig().getTitle().get("text")); model.setValid(true); model.setCreatedBy(user); model.setCreatedAt(new Date()); @@ -133,32 +135,6 @@ public class ModelsApi { return new ResponseEntity<Void>(HttpStatus.OK); } - @ApiOperation(value = "Get SVG", response = Model.class) - @ApiResponses(value = { @ApiResponse(code = 200, message = "Found"), @ApiResponse(code = 404, message = "Not found") }) - @RequestMapping(value = "/{slug}.svg", produces = {"image/svg+xml"}, method = RequestMethod.GET) - public ResponseEntity<String> getSVG( - @ApiParam(value = "slug", required = true) @PathVariable("slug") String slug - ) { - - // Query DB - Session session = sessionFactoryBean.getCurrentSession(); - Model model = null; - try{ - session.beginTransaction(); - org.hibernate.Query query = session.createQuery("from Model where slug= :slug"); - query.setString("slug", slug); - model = (Model) query.uniqueResult(); - session.getTransaction().commit(); - } catch (Exception e) - { - if(session.getTransaction() != null) - { - session.getTransaction().rollback(); - } } - - return new ResponseEntity<String>(HttpStatus.OK).ok(model.getChart().getSvg()); - } - @ApiOperation(value = "Get a model", response = Model.class) @ApiResponses(value = { @ApiResponse(code = 200, message = "Found"), @ApiResponse(code = 404, message = "Not found") }) @RequestMapping(value = "/{slug}", method = RequestMethod.GET) diff --git a/src/main/java/org/hbp/mip/controllers/VariablesApi.java b/src/main/java/org/hbp/mip/controllers/VariablesApi.java index bf64e31079a6503ba9cb5e694278d2e58c0f0ef5..ee01a9dc53d9efa780add3646a4ac963c4cc7f9e 100644 --- a/src/main/java/org/hbp/mip/controllers/VariablesApi.java +++ b/src/main/java/org/hbp/mip/controllers/VariablesApi.java @@ -52,7 +52,8 @@ public class VariablesApi { if(session.getTransaction() != null) { session.getTransaction().rollback(); - } } + } + } return new ResponseEntity<List<Variable>>(HttpStatus.OK).ok(variables); } diff --git a/src/main/java/org/hbp/mip/model/Config.java b/src/main/java/org/hbp/mip/model/Config.java new file mode 100644 index 0000000000000000000000000000000000000000..2e6b081c20c39d287933410211f0567368815cfe --- /dev/null +++ b/src/main/java/org/hbp/mip/model/Config.java @@ -0,0 +1,87 @@ +package org.hbp.mip.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import io.swagger.annotations.ApiModel; + +import javax.persistence.*; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +/** + * Created by mirco on 25.02.16. + */ +@Entity +@Table(name = "`config`") +@ApiModel(description = "") +@JsonIgnoreProperties(value = { "id" }) +public class Config { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id = null; + private String type = null; + private Integer height = null; + @ElementCollection(fetch = FetchType.EAGER) + private List<String> yAxisVariables = new LinkedList<>(); + private String xAxisVariable = null; + private Boolean hasXAxis = null; + @ElementCollection(fetch = FetchType.EAGER) + private Map<String, String> title = new HashMap<>(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public Integer getHeight() { + return height; + } + + public void setHeight(Integer height) { + this.height = height; + } + + public List<String> getyAxisVariables() { + return yAxisVariables; + } + + public void setyAxisVariables(List<String> yAxisVariables) { + this.yAxisVariables = yAxisVariables; + } + + public String getxAxisVariable() { + return xAxisVariable; + } + + public void setxAxisVariable(String xAxisVariable) { + this.xAxisVariable = xAxisVariable; + } + + public Boolean getHasXAxis() { + return hasXAxis; + } + + public void setHasXAxis(Boolean hasXAxis) { + this.hasXAxis = hasXAxis; + } + + public Map<String, String> getTitle() { + return title; + } + + public void setTitle(Map<String, String> title) { + this.title = title; + } +} diff --git a/src/main/java/org/hbp/mip/model/Dataset.java b/src/main/java/org/hbp/mip/model/Dataset.java index f7f63ec75a0c1840b21b5e888b5990eb276d1edc..d56a618c7499883aff36c37797dc6d8640b19583 100644 --- a/src/main/java/org/hbp/mip/model/Dataset.java +++ b/src/main/java/org/hbp/mip/model/Dataset.java @@ -21,9 +21,9 @@ public class Dataset { private String code = null; private Date date = null; @ElementCollection(fetch = FetchType.EAGER) - private List<String> header = new LinkedList<String>(); - @Transient - private Map<String, List<Object>> data = new HashMap<>(); + private List<String> header = new LinkedList<>(); + @ElementCollection(fetch=FetchType.EAGER) + private Map<String, LinkedList<Object>> data = new HashMap<>(); public Dataset() { } @@ -67,11 +67,11 @@ public class Dataset { this.header = header; } - public Map<String, List<Object>> getData() { + public Map<String, LinkedList<Object>> getData() { return data; } - public void setData(Map<String, List<Object>> data) { + public void setData(Map<String, LinkedList<Object>> data) { this.data = data; } @@ -83,7 +83,6 @@ public class Dataset { sb.append(" code: ").append(code).append("\n"); sb.append(" date: ").append(date).append("\n"); sb.append(" header: ").append(header).append("\n"); - sb.append(" data: ").append(data).append("\n"); sb.append("}\n"); return sb.toString(); } diff --git a/src/main/java/org/hbp/mip/model/Model.java b/src/main/java/org/hbp/mip/model/Model.java index 13b1a61c34afc9a50767c26fe0c3729556c0f50b..53c0e6e9a476a8f886c288d70d285c7d4b5b675c 100644 --- a/src/main/java/org/hbp/mip/model/Model.java +++ b/src/main/java/org/hbp/mip/model/Model.java @@ -8,12 +8,10 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; -import org.hibernate.annotations.*; +import org.hibernate.annotations.Cascade; import org.hibernate.annotations.CascadeType; import javax.persistence.*; -import javax.persistence.Entity; -import javax.persistence.Table; import java.util.Date; @Entity @@ -36,7 +34,7 @@ public class Model { private Dataset dataset = null; @ManyToOne @Cascade(CascadeType.SAVE_UPDATE) - private Chart chart = null; + private Config config = null; @ManyToOne private User createdBy = null; @ManyToOne @@ -124,17 +122,14 @@ public class Model { this.valid = valid; } - /** - * Chart - **/ - @ApiModelProperty(value = "Chart") - @JsonProperty("chart") - public Chart getChart() { - return chart; + @ApiModelProperty(value = "Config") + @JsonProperty("config") + public Config getConfig() { + return config; } - public void setChart(Chart chart) { - this.chart = chart; + public void setConfig(Config config) { + this.config = config; } /** @@ -211,9 +206,7 @@ public class Model { sb.append(" slug: ").append(slug).append("\n"); sb.append(" description: ").append(description).append("\n"); sb.append(" query: ").append(query).append("\n"); - sb.append(" dataset: ").append(dataset).append("\n"); sb.append(" valid: ").append(valid).append("\n"); - sb.append(" chart: ").append(chart).append("\n"); sb.append(" createdAt: ").append(createdAt).append("\n"); sb.append(" updatedAt: ").append(updatedAt).append("\n"); sb.append(" createdBy: ").append(createdBy).append("\n"); @@ -222,4 +215,5 @@ public class Model { sb.append("}\n"); return sb.toString(); } + } diff --git a/src/main/java/org/hbp/mip/utils/CSVUtil.java b/src/main/java/org/hbp/mip/utils/CSVUtil.java index 756479051dc201c641952c5e572e5085c86c8a53..cfbcded29c30e69721d738ad4419779896da83a7 100644 --- a/src/main/java/org/hbp/mip/utils/CSVUtil.java +++ b/src/main/java/org/hbp/mip/utils/CSVUtil.java @@ -27,7 +27,7 @@ public class CSVUtil { String code = GenerateDSCode(query); Date date = new Date(); List<String> header = new LinkedList<>(); - Map<String, List<Object>> data = new HashMap<>(); + Map<String, LinkedList<Object>> data = new HashMap<>(); List<Variable> variables = new LinkedList<>(); //variables.addAll(query.getVariables()); // TODO : check that @@ -50,6 +50,7 @@ public class CSVUtil { String c = v.getCode(); int idx = find(c, firstRow); List<Object> l = new LinkedList<>(); + LinkedList<Object> ll = new LinkedList<>(); for (String[] row : rows) { switch (type) { case "T": { @@ -122,10 +123,9 @@ public class CSVUtil { // TODO : Remove this limit -> only to avoid bug with Virtua's front-end if(l.size() > 50) { - l = l.subList(0, 49); + ll.addAll(l.subList(0,49)); } - data.put(c, l); - System.out.println("Adding "+l.size()+" values to "+c); + data.put(c, ll); } } catch (IOException e) { e.printStackTrace(); @@ -302,10 +302,19 @@ public class CSVUtil { private static String getTypeFromDB(Variable v) { Session session = HibernateUtil.getSessionFactory().getCurrentSession(); - session.beginTransaction(); - org.hibernate.Query q = session.createQuery("SELECT type FROM Variable where code= :code").setString("code", v.getCode()); - String type = (String) q.uniqueResult(); - session.getTransaction().commit(); + String type = null; + try{ + session.beginTransaction(); + org.hibernate.Query q = session.createQuery("SELECT type FROM Variable where code= :code").setString("code", v.getCode()); + type = (String) q.uniqueResult(); + session.getTransaction().commit(); + } catch (Exception e) + { + if(session.getTransaction() != null) + { + session.getTransaction().rollback(); + } + } if(type == null) { diff --git a/src/main/resources/hibernate.cfg.xml b/src/main/resources/hibernate.cfg.xml index 044c40c229c1a9a5aa0b6ae7b795db994c0f7213..7b290ac701bd5b408fd3421db8f6a37f398ec284 100644 --- a/src/main/resources/hibernate.cfg.xml +++ b/src/main/resources/hibernate.cfg.xml @@ -17,18 +17,5 @@ <property name="hibernate.show_sql">false</property> <property name="hibernate.hbm2ddl.auto">update</property> - <mapping class="org.hbp.mip.model.Article"/> - <mapping class="org.hbp.mip.model.Chart"/> - <mapping class="org.hbp.mip.model.ChartConfigSet"/> - <mapping class="org.hbp.mip.model.Dataset"/> - <mapping class="org.hbp.mip.model.Model"/> - <mapping class="org.hbp.mip.model.Query"/> - <mapping class="org.hbp.mip.model.Tag"/> - <mapping class="org.hbp.mip.model.User"/> - <mapping class="org.hbp.mip.model.Value"/> - <mapping class="org.hbp.mip.model.Variable"/> - <mapping class="org.hbp.mip.model.Filter"/> - <mapping class="org.hbp.mip.model.Group"/> - </session-factory> </hibernate-configuration> diff --git a/src/test/db b/src/test/db index af28ed02d855345f286e171c758758283c742dff..0484f708e74764f1072ac8f7da67c94f7b38c386 160000 --- a/src/test/db +++ b/src/test/db @@ -1 +1 @@ -Subproject commit af28ed02d855345f286e171c758758283c742dff +Subproject commit 0484f708e74764f1072ac8f7da67c94f7b38c386