commons, core, persistence: fix subscription entity persistence issue
Signed-off-by: BOLLE Sebastien <sebastien.bolle@orange.com>
Signed-off-by: BONNARDEL Gregory <gbonnardel.ext@orange.com>
diff --git a/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/AccessControlPolicyEntity.java b/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/AccessControlPolicyEntity.java
index 1dd9a48..ee11daa 100644
--- a/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/AccessControlPolicyEntity.java
+++ b/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/AccessControlPolicyEntity.java
@@ -97,7 +97,7 @@
)
protected RemoteCSEEntity parentCsr;
- @OneToMany(fetch=FetchType.LAZY, cascade={CascadeType.ALL}, targetEntity = SubscriptionEntity.class)
+ @OneToMany(fetch=FetchType.LAZY, cascade={CascadeType.ALL}, targetEntity = SubscriptionEntity.class, mappedBy="parentAcp")
@JoinTable(
name=DBEntities.ACPSUB_JOIN,
inverseJoinColumns={@JoinColumn(name=DBEntities.SUB_JOIN_ID, referencedColumnName=ShortName.RESOURCE_ID)},
diff --git a/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/AeEntity.java b/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/AeEntity.java
index 1cfe40c..b04632a 100644
--- a/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/AeEntity.java
+++ b/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/AeEntity.java
@@ -145,7 +145,7 @@
// Database link to Subscriptions
- @OneToMany(fetch = FetchType.LAZY, targetEntity = SubscriptionEntity.class, cascade = CascadeType.ALL)
+ @OneToMany(fetch = FetchType.LAZY, targetEntity = SubscriptionEntity.class, cascade = CascadeType.ALL, mappedBy="parentAe")
@JoinTable(
name = DBEntities.AESUB_JOIN,
joinColumns = { @JoinColumn(name = DBEntities.AE_JOINID, referencedColumnName = ShortName.RESOURCE_ID) },
diff --git a/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/AreaNwkDeviceInfoEntity.java b/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/AreaNwkDeviceInfoEntity.java
index b3737b4..9d0bee4 100644
--- a/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/AreaNwkDeviceInfoEntity.java
+++ b/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/AreaNwkDeviceInfoEntity.java
@@ -81,7 +81,7 @@
// Database link to Subscriptions
- @OneToMany(fetch = FetchType.LAZY, targetEntity = SubscriptionEntity.class)
+ @OneToMany(fetch = FetchType.LAZY, targetEntity = SubscriptionEntity.class, mappedBy="parentAndi")
@JoinTable(
name = DBEntities.ANDISUB_JOIN,
joinColumns = { @JoinColumn(name = DBEntities.ANDI_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) },
diff --git a/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/AreaNwkInfoEntity.java b/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/AreaNwkInfoEntity.java
index 662d518..43c5f79 100644
--- a/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/AreaNwkInfoEntity.java
+++ b/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/AreaNwkInfoEntity.java
@@ -70,7 +70,7 @@
protected List<DynamicAuthorizationConsultationEntity> dynamicAuthorizationConsultations;
// Database link to Subscriptions
- @OneToMany(fetch = FetchType.LAZY, targetEntity = SubscriptionEntity.class)
+ @OneToMany(fetch = FetchType.LAZY, targetEntity = SubscriptionEntity.class, mappedBy="parentAni")
@JoinTable(
name = DBEntities.ANISUB_JOIN,
joinColumns = { @JoinColumn(name = DBEntities.ANI_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) },
diff --git a/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/CSEBaseEntity.java b/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/CSEBaseEntity.java
index dfc04fc..cc66b27 100644
--- a/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/CSEBaseEntity.java
+++ b/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/CSEBaseEntity.java
@@ -169,7 +169,7 @@
protected List<AccessControlPolicyEntity> childAccessControlPolicies;
// list of subscription
- @OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.ALL})
+ @OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.ALL}, mappedBy="parentCsb")
@JoinTable(
name = DBEntities.CSBSUB_JOIN,
joinColumns = { @JoinColumn(name = DBEntities.CSEB_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) },
diff --git a/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/ContainerEntity.java b/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/ContainerEntity.java
index d70dda8..95153a6 100644
--- a/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/ContainerEntity.java
+++ b/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/ContainerEntity.java
@@ -64,7 +64,7 @@
@Column(name= ShortName.ONTOLOGY_REF)
protected String ontologyRef;
- @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY)
+ @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy="parentCnt")
@JoinTable(
name = DBEntities.CNTSUB_JOIN,
joinColumns = { @JoinColumn(name = DBEntities.CNT_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) },
diff --git a/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/FlexContainerEntity.java b/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/FlexContainerEntity.java
index 059c448..75ec989 100644
--- a/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/FlexContainerEntity.java
+++ b/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/FlexContainerEntity.java
@@ -67,7 +67,7 @@
)
protected List<CustomAttributeEntity> customAttributes;
- @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY)
+ @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy="parentFlexCnt")
@JoinTable(
name = DBEntities.FCNTSUB_JOIN,
joinColumns = { @JoinColumn(name = DBEntities.FCNT_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) },
diff --git a/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/GroupEntity.java b/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/GroupEntity.java
index e3ede70..e148376 100644
--- a/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/GroupEntity.java
+++ b/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/GroupEntity.java
@@ -66,7 +66,7 @@
protected String fanOutPoint;
// subscription list
- @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY)
+ @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy="parentGrp")
@JoinTable(
name = DBEntities.GRPSUB_JOIN,
joinColumns = { @JoinColumn(name = DBEntities.GRP_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) },
diff --git a/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/RemoteCSEEntity.java b/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/RemoteCSEEntity.java
index 2a8fa37..3aa9de1 100644
--- a/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/RemoteCSEEntity.java
+++ b/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/RemoteCSEEntity.java
@@ -151,7 +151,7 @@
protected List<AeAnncEntity> childAeAnncs;
//list of subscription
- @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY)
+ @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy="parentCsr")
@JoinTable(
name = DBEntities.CSRSUB_JOIN,
joinColumns = { @JoinColumn(name = DBEntities.CSR_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) },
diff --git a/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/ScheduleEntity.java b/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/ScheduleEntity.java
index c540a3b..a69bbab 100644
--- a/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/ScheduleEntity.java
+++ b/org.eclipse.om2m.commons/src/main/java/org/eclipse/om2m/commons/entities/ScheduleEntity.java
@@ -56,7 +56,7 @@
protected SubscriptionEntity parentSub;
- @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY)
+ @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy="parentSch")
@JoinTable(
name = DBEntities.SCHSUB_JOIN,
joinColumns = { @JoinColumn(name = DBEntities.SCH_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) },
diff --git a/org.eclipse.om2m.core/src/main/java/org/eclipse/om2m/core/controller/SubscriptionController.java b/org.eclipse.om2m.core/src/main/java/org/eclipse/om2m/core/controller/SubscriptionController.java
index 399aae7..3e3e9d0 100644
--- a/org.eclipse.om2m.core/src/main/java/org/eclipse/om2m/core/controller/SubscriptionController.java
+++ b/org.eclipse.om2m.core/src/main/java/org/eclipse/om2m/core/controller/SubscriptionController.java
@@ -69,7 +69,7 @@
ResponsePrimitive response = new ResponsePrimitive(request);
// Get the DAO of the parent
- DAO<?> dao = (DAO<?>) Patterns.getDAO(request.getTargetId(), dbs);
+ DAO<ResourceEntity> dao = (DAO<ResourceEntity>) Patterns.getDAO(request.getTargetId(), dbs);
if (dao == null){
throw new ResourceNotFoundException("Cannot find parent resource");
}
@@ -83,48 +83,57 @@
// Get lists to change in the method corresponding to specific object
List<AccessControlPolicyEntity> acpsToCheck = null;
+ List<SubscriptionEntity> parentChildSubscriptions = null;
// Distinguish parents
// Case of CSEBase
if(parentEntity.getResourceType().intValue() == (ResourceType.CSE_BASE)){
CSEBaseEntity cseBase = (CSEBaseEntity) parentEntity;
acpsToCheck = cseBase.getAccessControlPolicies();
+ parentChildSubscriptions = cseBase.getSubscriptions();
}
if(parentEntity.getResourceType().intValue() == (ResourceType.AE)){
AeEntity ae = (AeEntity) parentEntity;
acpsToCheck = ae.getAccessControlPolicies();
+ parentChildSubscriptions = ae.getSubscriptions();
}
if(parentEntity.getResourceType().intValue() == (ResourceType.REMOTE_CSE)){
RemoteCSEEntity remoteCSE = (RemoteCSEEntity) parentEntity;
acpsToCheck = remoteCSE.getAccessControlPolicies();
+ parentChildSubscriptions = remoteCSE.getSubscriptions();
}
if(parentEntity.getResourceType().intValue() == (ResourceType.GROUP)){
GroupEntity group = (GroupEntity) parentEntity;
acpsToCheck = group.getAccessControlPolicies();
+ parentChildSubscriptions = group.getSubscriptions();
}
if(parentEntity.getResourceType().intValue() == (ResourceType.CONTAINER)){
ContainerEntity container = (ContainerEntity) parentEntity;
acpsToCheck = container.getAccessControlPolicies();
+ parentChildSubscriptions = container.getSubscriptions();
}
if (parentEntity.getResourceType().intValue() == (ResourceType.FLEXCONTAINER)) {
FlexContainerEntity flexContainer = (FlexContainerEntity) parentEntity;
acpsToCheck = flexContainer.getAccessControlPolicies();
+ parentChildSubscriptions = flexContainer.getSubscriptions();
}
if(parentEntity.getResourceType().intValue() == (ResourceType.ACCESS_CONTROL_POLICY)){
AccessControlPolicyEntity acp = (AccessControlPolicyEntity) parentEntity;
acpsToCheck = new ArrayList<>();
acpsToCheck.add(acp); // TODO check the acp to check in case of acp parent for subs
+ parentChildSubscriptions = acp.getChildSubscriptions();
}
if(parentEntity.getResourceType().intValue() == ResourceType.REMOTE_CSE){
RemoteCSEEntity csr = (RemoteCSEEntity) parentEntity;
acpsToCheck = csr.getAccessControlPolicies();
+ parentChildSubscriptions = csr.getSubscriptions();
}
if(acpsToCheck == null){
@@ -284,7 +293,17 @@
subscriptionEntity.setParentEntity(parentEntity);
+ // create subscription in database
dbs.getDAOFactory().getSubsciptionDAO().create(transaction, subscriptionEntity);
+
+ // retrieve subscription from db
+ SubscriptionEntity subscriptionFromDB = dbs.getDAOFactory().getSubsciptionDAO().find(transaction, subscriptionEntity.getResourceID());
+
+ // add the subscription to the parentEntity child list
+ parentChildSubscriptions.add(subscriptionFromDB);
+ dao.update(transaction, parentEntity);
+
+
transaction.commit();
response.setResponseStatusCode(ResponseStatusCode.CREATED);
setLocationAndCreationContent(request, response, subscriptionEntity);
diff --git a/org.eclipse.om2m.persistence.eclipselink/src/main/java/org/eclipse/om2m/persistence/eclipselink/internal/dao/SubscriptionDAO.java b/org.eclipse.om2m.persistence.eclipselink/src/main/java/org/eclipse/om2m/persistence/eclipselink/internal/dao/SubscriptionDAO.java
index 892921b..5b183b5 100644
--- a/org.eclipse.om2m.persistence.eclipselink/src/main/java/org/eclipse/om2m/persistence/eclipselink/internal/dao/SubscriptionDAO.java
+++ b/org.eclipse.om2m.persistence.eclipselink/src/main/java/org/eclipse/om2m/persistence/eclipselink/internal/dao/SubscriptionDAO.java
@@ -28,12 +28,6 @@
public class SubscriptionDAO extends AbstractDAO<SubscriptionEntity> {
- @Override
- public void create(DBTransaction dbTransaction, SubscriptionEntity resource) {
- super.create(dbTransaction, resource);
- DBTransactionJPAImpl transaction = (DBTransactionJPAImpl) dbTransaction;
- transaction.getEm().getEntityManagerFactory().getCache().evictAll();
- }
@Override
public SubscriptionEntity find(DBTransaction dbTransaction, Object id) {
@@ -51,8 +45,54 @@
@Override
public void delete(DBTransaction dbTransaction, SubscriptionEntity resource) {
DBTransactionJPAImpl transaction = (DBTransactionJPAImpl) dbTransaction;
+
+ // de-associate labels
+ List<LabelEntity> labels = resource.getLabelsEntities();
+ for (LabelEntity label : labels) {
+ label.getLinkedSub().remove(resource);
+ }
+
+ if (resource.getParentAe() != null) {
+ resource.getParentAe().getSubscriptions().remove(resource);
+ }
+
+ if (resource.getParentAcp() != null) {
+ resource.getParentAcp().getChildSubscriptions().remove(resource);
+ }
+
+ if (resource.getParentAndi() != null) {
+ resource.getParentAndi().getSubscriptions().remove(resource);
+ }
+
+ if (resource.getParentAni() != null) {
+ resource.getParentAni().getSubscriptions().remove(resource);
+ }
+
+ if (resource.getParentCnt() != null) {
+ resource.getParentCnt().getSubscriptions().remove(resource);
+ }
+
+ if (resource.getParentCsb() != null) {
+ resource.getParentCsb().getSubscriptions().remove(resource);
+ }
+
+ if (resource.getParentCsr() != null) {
+ resource.getParentCsr().getSubscriptions().remove(resource);
+ }
+
+ if (resource.getParentFlexCnt() != null) {
+ resource.getParentFlexCnt().getSubscriptions().remove(resource);
+ }
+
+ if (resource.getParentGrp() != null) {
+ resource.getParentGrp().getSubscriptions().remove(resource);
+ }
+
+ if (resource.getParentSch() != null) {
+ resource.getParentSch().getSubscriptions().remove(resource);
+ }
+
transaction.getEm().remove(resource);
- transaction.getEm().getEntityManagerFactory().getCache().evictAll();
}
}