diff --git a/hapi-fhir-jpaserver-base/pom.xml b/hapi-fhir-jpaserver-base/pom.xml index df590b1415e..353e16b103a 100644 --- a/hapi-fhir-jpaserver-base/pom.xml +++ b/hapi-fhir-jpaserver-base/pom.xml @@ -1,5 +1,4 @@ - + 4.0.0 @@ -93,18 +92,13 @@ jscience - - + + @@ -126,8 +120,7 @@ - + @@ -162,6 +155,10 @@ org.springframework spring-beans + + org.springframework.data + spring-data-jpa + org.springframework spring-tx @@ -226,7 +223,7 @@ com.google.guava guava - + org.eclipse.jetty jetty-servlets @@ -252,7 +249,7 @@ spring-test test - + @@ -277,10 +274,7 @@ org.apache.maven.plugins maven-surefire-plugin - + alphabetical @@ -346,7 +340,7 @@ - + org.apache.maven.plugins maven-jxr-plugin @@ -373,17 +367,8 @@ SCRIPT ${skip-hib4} - + o10g diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/BaseHapiFhirDao.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/BaseHapiFhirDao.java index a9479b8b625..8f675b4a2a3 100644 --- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/BaseHapiFhirDao.java +++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/BaseHapiFhirDao.java @@ -999,6 +999,7 @@ public abstract class BaseHapiFhirDao implements IDao { ResourceMetadataKeyEnum.VERSION.put(res, Long.toString(theEntity.getVersion())); ResourceMetadataKeyEnum.PUBLISHED.put(res, theEntity.getPublished()); ResourceMetadataKeyEnum.UPDATED.put(res, theEntity.getUpdated()); + IDao.RESOURCE_PID.put(res, theEntity.getId()); if (theEntity.getTitle() != null) { ResourceMetadataKeyEnum.TITLE.put(res, theEntity.getTitle()); diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/FhirResourceDaoSubscriptionDstu2.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/FhirResourceDaoSubscriptionDstu2.java index 710d9826694..bc13f422a54 100644 --- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/FhirResourceDaoSubscriptionDstu2.java +++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/FhirResourceDaoSubscriptionDstu2.java @@ -2,6 +2,7 @@ package ca.uhn.fhir.jpa.dao; import static org.apache.commons.lang3.StringUtils.isBlank; +import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -10,12 +11,15 @@ import javax.persistence.TypedQuery; import org.apache.commons.lang3.time.DateUtils; import org.hl7.fhir.instance.model.api.IBaseResource; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import ca.uhn.fhir.context.RuntimeResourceDefinition; +import ca.uhn.fhir.jpa.dao.data.ISubscriptionFlaggedResourceDataDao; import ca.uhn.fhir.jpa.entity.ResourceTable; +import ca.uhn.fhir.jpa.entity.SubscriptionFlaggedResource; import ca.uhn.fhir.jpa.entity.SubscriptionTable; import ca.uhn.fhir.model.api.IResource; import ca.uhn.fhir.model.dstu.valueset.QuantityCompararatorEnum; @@ -31,6 +35,9 @@ public class FhirResourceDaoSubscriptionDstu2 extends FhirResourceDaoDstu2 flags = new ArrayList(); + for (IBaseResource next : results.getResources(0, results.size())) { + SubscriptionFlaggedResource nextFlag = new SubscriptionFlaggedResource(); + nextFlag.setResource(); + } + } @Override diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/IDao.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/IDao.java index cac3eca1687..052faf30a08 100644 --- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/IDao.java +++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/IDao.java @@ -1,5 +1,8 @@ package ca.uhn.fhir.jpa.dao; +import ca.uhn.fhir.model.api.IResource; +import ca.uhn.fhir.model.api.ResourceMetadataKeyEnum; + /* * #%L * HAPI FHIR JPA Server @@ -22,6 +25,21 @@ package ca.uhn.fhir.jpa.dao; public interface IDao { - void registerDaoListener(IDaoListener theListener); + public static final ResourceMetadataKeyEnum RESOURCE_PID = new ResourceMetadataKeyEnum("RESOURCE_PID") { + private static final long serialVersionUID = 1L; + + @Override + public Long get(IResource theResource) { + return (Long) theResource.getResourceMetadata().get(RESOURCE_PID); + } + + @Override + public void put(IResource theResource, Long theObject) { + theResource.getResourceMetadata().put(RESOURCE_PID, theObject); + } + }; + + void registerDaoListener(IDaoListener theListener); + } diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/ISubscriptionFlaggedResourceDataDao.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/ISubscriptionFlaggedResourceDataDao.java new file mode 100644 index 00000000000..c6b1abc2ee5 --- /dev/null +++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/ISubscriptionFlaggedResourceDataDao.java @@ -0,0 +1,9 @@ +package ca.uhn.fhir.jpa.dao.data; + +import org.springframework.data.repository.CrudRepository; + +import ca.uhn.fhir.jpa.entity.SubscriptionFlaggedResource; + +public interface ISubscriptionFlaggedResourceDataDao extends CrudRepository { + +} diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/SubscriptionFlaggedResource.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/SubscriptionFlaggedResource.java index 73a7ae2f679..e9523dee549 100644 --- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/SubscriptionFlaggedResource.java +++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/SubscriptionFlaggedResource.java @@ -1,16 +1,14 @@ package ca.uhn.fhir.jpa.entity; -import java.util.Date; - import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; import javax.persistence.SequenceGenerator; import javax.persistence.Table; -import javax.persistence.Temporal; -import javax.persistence.TemporalType; @Entity @Table(name = "HFJ_SUBSCRIPTION_FLAG_RES") @@ -22,8 +20,28 @@ public class SubscriptionFlaggedResource { @Column(name = "PID", insertable = false, updatable = false) private Long myId; - @Temporal(TemporalType.TIMESTAMP) - @Column(name = "CREATED", nullable = false) - private Date myCreated; + @ManyToOne + @JoinColumn(name="RES_ID") + private ResourceTable myResource; + + @ManyToOne() + @JoinColumn(name="SUBSCRIPTION_ID") + private SubscriptionTable mySubscription; + public ResourceTable getResource() { + return myResource; + } + + public SubscriptionTable getSubscription() { + return mySubscription; + } + + public void setResource(ResourceTable theResource) { + myResource = theResource; + } + + public void setSubscription(SubscriptionTable theSubscription) { + mySubscription = theSubscription; + } + } diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/SubscriptionTable.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/SubscriptionTable.java index 9ac60c9f6c6..baedc9e52f5 100644 --- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/SubscriptionTable.java +++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/SubscriptionTable.java @@ -13,6 +13,7 @@ import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; +import javax.persistence.OneToMany; import javax.persistence.OneToOne; import javax.persistence.SequenceGenerator; import javax.persistence.Table; @@ -65,6 +66,9 @@ public class SubscriptionTable { @JoinColumn(name = "RES_ID", insertable = true, updatable = false, referencedColumnName = "RES_ID", foreignKey = @ForeignKey(name = "FK_SUBSCRIPTION_RESOURCE_ID") ) private ResourceTable mySubscriptionResource; + @OneToMany(orphanRemoval=true, mappedBy="mySubscription") + private SubscriptionFlaggedResource myFlaggedResources; + public long getCheckInterval() { return myCheckInterval; } diff --git a/hapi-tinder-plugin/src/main/resources/vm/jpa_spring_beans.vm b/hapi-tinder-plugin/src/main/resources/vm/jpa_spring_beans.vm index bb0fa08afcd..88bd044d3f2 100644 --- a/hapi-tinder-plugin/src/main/resources/vm/jpa_spring_beans.vm +++ b/hapi-tinder-plugin/src/main/resources/vm/jpa_spring_beans.vm @@ -1,6 +1,7 @@ @@ -21,6 +23,13 @@ #if ( ${versionCapitalized} == 'Dstu2' ) + + + + + + + #end diff --git a/pom.xml b/pom.xml index 743cd97ebba..5645da54d42 100644 --- a/pom.xml +++ b/pom.xml @@ -503,6 +503,11 @@ spring-core ${spring_version} + + org.springframework.data + spring-data-jpa + 1.9.0.RELEASE + org.springframework spring-orm