diff --git a/src/main/java/org/genesys2/server/model/kpi/Execution.java b/src/main/java/org/genesys2/server/model/kpi/Execution.java index 5da235586e55f503c160a2ce62926ce4ca4f0e66..77a5da5b7cd8a901885ede4710ee62476c8c6e83 100644 --- a/src/main/java/org/genesys2/server/model/kpi/Execution.java +++ b/src/main/java/org/genesys2/server/model/kpi/Execution.java @@ -144,4 +144,5 @@ public class Execution extends VersionedAuditedModel { public void setTitle(String title) { this.title = title; } + } diff --git a/src/main/java/org/genesys2/server/model/kpi/ExecutionRun.java b/src/main/java/org/genesys2/server/model/kpi/ExecutionRun.java new file mode 100644 index 0000000000000000000000000000000000000000..e2eaf53ce320988eca55858274cd536907ae59b5 --- /dev/null +++ b/src/main/java/org/genesys2/server/model/kpi/ExecutionRun.java @@ -0,0 +1,59 @@ +/** + * Copyright 2014 Global Crop Diversity Trust + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + **/ + +package org.genesys2.server.model.kpi; + +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.ManyToOne; +import javax.persistence.Table; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; + +import org.genesys2.server.model.BusinessModel; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +@Entity +@Table(name = "kpiexecutionrun") +public class ExecutionRun extends BusinessModel { + + @Column(nullable = false) + @Temporal(TemporalType.TIMESTAMP) + private Date timestamp = new Date(); + + @JsonIgnore + @ManyToOne(cascade = {}, optional = false) + private Execution execution; + + public Date getTimestamp() { + return timestamp; + } + + public void setTimestamp(Date timestamp) { + this.timestamp = timestamp; + } + + public Execution getExecution() { + return execution; + } + + public void setExecution(Execution execution) { + this.execution = execution; + } +} diff --git a/src/main/java/org/genesys2/server/model/kpi/Observation.java b/src/main/java/org/genesys2/server/model/kpi/Observation.java index e9284894861955743827d60bda08bb50777b13dd..fe2dfc051ec5fd202ccbe6b95c4f1515b4adefd6 100644 --- a/src/main/java/org/genesys2/server/model/kpi/Observation.java +++ b/src/main/java/org/genesys2/server/model/kpi/Observation.java @@ -16,7 +16,6 @@ package org.genesys2.server.model.kpi; -import java.util.Date; import java.util.HashSet; import java.util.Set; @@ -29,13 +28,9 @@ import javax.persistence.ManyToMany; import javax.persistence.ManyToOne; import javax.persistence.PrePersist; import javax.persistence.Table; -import javax.persistence.Temporal; -import javax.persistence.TemporalType; import org.genesys2.server.model.BusinessModel; -import com.fasterxml.jackson.annotation.JsonIgnore; - /** * Holds results of {@link Execution} run. */ @@ -43,17 +38,12 @@ import com.fasterxml.jackson.annotation.JsonIgnore; @Table(name = "kpiobservation") public class Observation extends BusinessModel { - @Column(nullable = false) - @Temporal(TemporalType.TIMESTAMP) - private Date timestamp = new Date(); - @Column(name = "`value`") private double value; - @JsonIgnore @ManyToOne(cascade = {}, fetch = FetchType.LAZY, optional = false) - @JoinColumn(name = "executionId") - private Execution execution; + @JoinColumn(name = "executionRunId") + private ExecutionRun executionRun; @ManyToMany(fetch = FetchType.LAZY) @JoinTable(name = "kpiobservationdimension", joinColumns = @JoinColumn(name = "observationId"), inverseJoinColumns = @JoinColumn(name = "dimensionKeyId")) @@ -91,24 +81,16 @@ public class Observation extends BusinessModel { this.dimensionCount = dimensionCount; } - public Date getTimestamp() { - return timestamp; - } - - public void setTimestamp(Date timestamp) { - this.timestamp = timestamp; - } - - public Execution getExecution() { - return execution; + public ExecutionRun getExecutionRun() { + return executionRun; } - public void setExecution(Execution execution) { - this.execution = execution; + public void setExecutionRun(ExecutionRun executionRun) { + this.executionRun = executionRun; } @Override public String toString() { - return execution.getName() + "=" + value + " D=" + dimensions + " T=" + timestamp.getTime(); + return "value =" + value + " D=" + dimensions; } } diff --git a/src/main/java/org/genesys2/server/persistence/domain/kpi/ExecutionRunRepository.java b/src/main/java/org/genesys2/server/persistence/domain/kpi/ExecutionRunRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..977b0958fd656bde5bd798b031d716a0314c3132 --- /dev/null +++ b/src/main/java/org/genesys2/server/persistence/domain/kpi/ExecutionRunRepository.java @@ -0,0 +1,30 @@ +/** + * Copyright 2014 Global Crop Diversity Trust + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + **/ + +package org.genesys2.server.persistence.domain.kpi; + +import java.util.List; + +import org.genesys2.server.model.kpi.Execution; +import org.genesys2.server.model.kpi.ExecutionRun; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ExecutionRunRepository extends JpaRepository { + + List findByExecution(Execution execution, Pageable pageable); + +} diff --git a/src/main/java/org/genesys2/server/persistence/domain/kpi/ObservationRepository.java b/src/main/java/org/genesys2/server/persistence/domain/kpi/ObservationRepository.java index 0a8cbf61017ce0ff04e8f67add03f5afe14d6b9d..e0fd12c4efe040b8fbc8591f8dcfacc4d233c3aa 100644 --- a/src/main/java/org/genesys2/server/persistence/domain/kpi/ObservationRepository.java +++ b/src/main/java/org/genesys2/server/persistence/domain/kpi/ObservationRepository.java @@ -28,13 +28,14 @@ import org.springframework.data.jpa.repository.Query; public interface ObservationRepository extends JpaRepository, ObservationCustomRepository { + @Query("select o from Observation o where o.executionRun.execution=?1") List findByExecution(Execution execution, Pageable page); - @Query("select o from Observation o where o.execution=?1 and ?2 member of o.dimensions order by o.timestamp desc") + @Query("select o from Observation o where o.executionRun.execution=?1 and ?2 member of o.dimensions order by o.executionRun.timestamp desc") List listObservationsByDimensionKey(Execution execution, DimensionKey next, Pageable page); @Modifying - @Query("delete from Observation o where o.execution=?1") + @Query("delete from Observation o where o.executionRun.execution=?1") void deleteByExecution(Execution execution); } diff --git a/src/main/java/org/genesys2/server/service/impl/KPIServiceImpl.java b/src/main/java/org/genesys2/server/service/impl/KPIServiceImpl.java index 89be8d3525f6b7a5922e3d419ecb4dbd73f1e682..95fe419d7dcdd5c5b91f4a3571333f9f82c15dae 100644 --- a/src/main/java/org/genesys2/server/service/impl/KPIServiceImpl.java +++ b/src/main/java/org/genesys2/server/service/impl/KPIServiceImpl.java @@ -17,6 +17,7 @@ package org.genesys2.server.service.impl; import java.util.ArrayList; +import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -32,12 +33,14 @@ import org.apache.commons.logging.LogFactory; import org.genesys2.server.model.kpi.Dimension; import org.genesys2.server.model.kpi.DimensionKey; import org.genesys2.server.model.kpi.Execution; +import org.genesys2.server.model.kpi.ExecutionRun; import org.genesys2.server.model.kpi.JpaDimension; import org.genesys2.server.model.kpi.KPIParameter; import org.genesys2.server.model.kpi.Observation; import org.genesys2.server.persistence.domain.kpi.DimensionKeyRepository; import org.genesys2.server.persistence.domain.kpi.DimensionRepository; import org.genesys2.server.persistence.domain.kpi.ExecutionRepository; +import org.genesys2.server.persistence.domain.kpi.ExecutionRunRepository; import org.genesys2.server.persistence.domain.kpi.KPIParameterRepository; import org.genesys2.server.persistence.domain.kpi.ObservationRepository; import org.genesys2.server.service.KPIService; @@ -72,6 +75,9 @@ public class KPIServiceImpl implements KPIService { @Autowired private DimensionKeyRepository dimensionKeyRepository; + @Autowired + private ExecutionRunRepository executionRunRepository; + @PreAuthorize("hasRole('ADMINISTRATOR') or hasPermission(#parameter, 'ADMINISTRATION')") @Override @Transactional @@ -221,8 +227,13 @@ public class KPIServiceImpl implements KPIService { @Override @Transactional public List save(Execution execution, List observations) { + ExecutionRun executionRun=new ExecutionRun(); + executionRun.setExecution(execution); + executionRun.setTimestamp(new Date()); + executionRunRepository.save(executionRun); + for (Observation obs : observations) { - obs.setExecution(execution); + obs.setExecutionRun(executionRun); Set dims = new HashSet(); for (DimensionKey dk : obs.getDimensions()) { DimensionKey existing = dimensionKeyRepository.findByNameAndValue(dk.getName(), dk.getValue()); @@ -271,7 +282,6 @@ public class KPIServiceImpl implements KPIService { Observation observation = new Observation(); observation.setValue(res); - observation.setExecution(paramExec); for (int i = 0; i < array.length; i++) { String name = paramExec.getDimension(i).getName(); String value = array[i].toString(); diff --git a/src/test/java/org/genesys2/server/service/impl/KPIServiceTest.java b/src/test/java/org/genesys2/server/service/impl/KPIServiceTest.java index dfc3e5c9f9dc36e13108bb5404b57a20315764d8..63ca679cf548535c523da004440eacd5fef31fb5 100644 --- a/src/test/java/org/genesys2/server/service/impl/KPIServiceTest.java +++ b/src/test/java/org/genesys2/server/service/impl/KPIServiceTest.java @@ -230,7 +230,6 @@ public class KPIServiceTest { } Observation observation = new Observation(); - observation.setExecution(paramExec); observation.setValue((Long) res); for (int i = 0; i < array.length; i++) { DimensionKey dk = new DimensionKey();