blob: aecfd7441e289990b79ca8a7bdb877beb26240d2 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2013-2016 LAAS-CNRS (www.laas.fr)
* 7 Colonel Roche 31077 Toulouse - France
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Initial Contributors:
* Thierry Monteil : Project manager, technical co-manager
* Mahdi Ben Alaya : Technical co-manager
* Samir Medjiah : Technical co-manager
* Khalil Drira : Strategy expert
* Guillaume Garzone : Developer
* François Aïssaoui : Developer
*
* New contributors :
*******************************************************************************/
package org.eclipse.om2m.commons.entities;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import org.eclipse.om2m.commons.constants.DBEntities;
import org.eclipse.om2m.commons.constants.ResourceType;
import org.eclipse.om2m.commons.constants.ShortName;
/**
* Subscription JPA entity
*
*/
@Entity(name = DBEntities.SUBSCRIPTION_ENTITY)
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class SubscriptionEntity extends RegularResourceEntity {
/** Link to the ACPs */
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(
name=DBEntities.SUBACP_JOIN,
joinColumns={@JoinColumn(name=DBEntities.SUB_JOIN_ID, referencedColumnName=ShortName.RESOURCE_ID)},
inverseJoinColumns={@JoinColumn(name=DBEntities.ACP_JOIN_ID, referencedColumnName=ShortName.RESOURCE_ID)}
)
protected List<AccessControlPolicyEntity> accessControlPolicies;
/** Link to the ACPs */
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(
name=DBEntities.SUB_DAC_JOIN,
joinColumns={@JoinColumn(name=DBEntities.SUB_JOIN_ID, referencedColumnName=ShortName.RESOURCE_ID)},
inverseJoinColumns={@JoinColumn(name=DBEntities.DAC_JOINID, referencedColumnName=ShortName.RESOURCE_ID)}
)
protected List<DynamicAuthorizationConsultationEntity> dynamicAuthorizationConsultations;
// TODO event notification criteria
@Column(name = ShortName.EXPIRATION_COUNTER)
protected BigInteger expirationCounter;
@Column (name = ShortName.NOTIFICATION_URI, nullable = false)
protected List<String> notificationURI;
protected String groupID;
@Column(name = ShortName.NOTIFICATION_FORWARDING_URI)
protected String notificationForwardingURI;
// TODO batch notify : embedded
// TODO rate limit
protected BigInteger preSubscriptionNotify;
protected BigInteger pendingNotification;
protected BigInteger notificationStoragePriority;
protected Boolean latestNotify;
protected BigInteger notificationContentType;
protected String notificationEventCat;
@Column(name = ShortName.CREATOR)
protected String creator;
/* 2017 07 25 - BONNARDEL Gregory */
/* notificationPayloadContentType contains the type of representation */
/* to be used when sending a notification */
/* either xml or json */
protected String notificationPayloadContentType;
/*
* 2017 07 25 - BONNARDEL Gregory (Thales)
* nbOfFailedNotifications keep track of the number of notifications that
* have not been successfully delivered.
*/
@Column(name="nbOfFailedNotifications")
protected Integer nbOfFailedNotifications;
protected String subscriberURI;
// links to parents
@ManyToOne(targetEntity = AeEntity.class, fetch = FetchType.LAZY)
@JoinTable(
name = DBEntities.AESUB_JOIN,
inverseJoinColumns = { @JoinColumn(name = DBEntities.AE_JOINID, referencedColumnName = ShortName.RESOURCE_ID) },
joinColumns = { @JoinColumn(name = DBEntities.SUB_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) }
)
protected AeEntity parentAe;
@ManyToOne(targetEntity = ContainerEntity.class, fetch = FetchType.LAZY)
@JoinTable(
name = DBEntities.CNTSUB_JOIN,
inverseJoinColumns = { @JoinColumn(name = DBEntities.CNT_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) },
joinColumns = { @JoinColumn(name = DBEntities.SUB_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) }
)
protected ContainerEntity parentCnt;
@ManyToOne(targetEntity=FlexContainerEntity.class, fetch=FetchType.LAZY)
@JoinTable(
name=DBEntities.FCNTSUB_JOIN,
inverseJoinColumns={@JoinColumn(name=DBEntities.FCNT_JOIN_ID, referencedColumnName=ShortName.RESOURCE_ID)},
joinColumns={ @JoinColumn(name=DBEntities.SUB_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) }
)
protected FlexContainerEntity parentFlexCnt;
@ManyToOne(targetEntity = CSEBaseEntity.class, fetch = FetchType.LAZY)
@JoinTable(
name = DBEntities.CSBSUB_JOIN,
inverseJoinColumns = { @JoinColumn(name = DBEntities.CSEB_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) },
joinColumns = { @JoinColumn(name = DBEntities.SUB_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) }
)
protected CSEBaseEntity parentCsb;
@ManyToOne(targetEntity = GroupEntity.class, fetch = FetchType.LAZY)
@JoinTable(
name = DBEntities.GRPSUB_JOIN,
inverseJoinColumns = { @JoinColumn(name = DBEntities.GRP_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) },
joinColumns = { @JoinColumn(name = DBEntities.SUB_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) }
)
protected GroupEntity parentGrp;
@ManyToOne(targetEntity = RemoteCSEEntity.class, fetch = FetchType.LAZY)
@JoinTable(
name = DBEntities.CSRSUB_JOIN,
inverseJoinColumns = { @JoinColumn(name = DBEntities.CSR_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) },
joinColumns = { @JoinColumn(name = DBEntities.SUB_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) }
)
protected RemoteCSEEntity parentCsr;
@ManyToOne(targetEntity = AccessControlPolicyEntity.class, fetch = FetchType.LAZY)
@JoinTable(
name = DBEntities.ACPSUB_JOIN,
inverseJoinColumns = { @JoinColumn(name = DBEntities.ACP_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) },
joinColumns = { @JoinColumn(name = DBEntities.SUB_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) }
)
protected AccessControlPolicyEntity parentAcp;
@ManyToOne(targetEntity = ScheduleEntity.class, fetch = FetchType.LAZY)
@JoinTable(
name = DBEntities.SCHSUB_JOIN,
inverseJoinColumns = { @JoinColumn(name = DBEntities.SCH_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) },
joinColumns = { @JoinColumn(name = DBEntities.SUB_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) }
)
protected ScheduleEntity parentSch;
@ManyToOne(targetEntity = NodeEntity.class, fetch = FetchType.LAZY)
@JoinTable(
name = DBEntities.NOD_SUB_JOIN,
inverseJoinColumns = { @JoinColumn(name = DBEntities.NOD_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) },
joinColumns = { @JoinColumn(name = DBEntities.SUB_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) }
)
protected ScheduleEntity parentNode;
// Database link to Subscriptions
@ManyToOne(fetch = FetchType.LAZY, targetEntity = AreaNwkInfoEntity.class)
@JoinTable(
name = DBEntities.ANI_SUB_JOIN,
inverseJoinColumns = { @JoinColumn(name = DBEntities.ANI_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) },
joinColumns = { @JoinColumn(name = DBEntities.SUB_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) }
)
protected AreaNwkInfoEntity parentAni;
@ManyToOne(fetch = FetchType.LAZY, targetEntity = AreaNwkDeviceInfoEntity.class)
@JoinTable(
name = DBEntities.ANDI_SUB_JOIN,
inverseJoinColumns = { @JoinColumn(name = DBEntities.ANDI_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) },
joinColumns = { @JoinColumn(name = DBEntities.SUB_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) }
)
protected AreaNwkDeviceInfoEntity parentAndi;
@ManyToOne(fetch = FetchType.LAZY, targetEntity = DeviceInfoEntity.class)
@JoinTable(
name = DBEntities.DVI_SUB_JOIN,
inverseJoinColumns = { @JoinColumn(name = DBEntities.DVI_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) },
joinColumns = { @JoinColumn(name = DBEntities.SUB_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) }
)
protected DeviceInfoEntity parentDvi;
// link to schedule entity
@OneToOne(cascade = {CascadeType.ALL}, fetch = FetchType.LAZY, targetEntity = ScheduleEntity.class)
@JoinColumn(name = "sch_id")
protected ScheduleEntity childSchedule;
/**
* @return the expirationCounter
*/
public BigInteger getExpirationCounter() {
return expirationCounter;
}
/**
* @param expirationCounter the expirationCounter to set
*/
public void setExpirationCounter(BigInteger expirationCounter) {
this.expirationCounter = expirationCounter;
}
/**
* @return the notificationURI
*/
public List<String> getNotificationURI() {
if(notificationURI == null){
notificationURI = new ArrayList<>();
}
return notificationURI;
}
/**
* @param notificationURI the notificationURI to set
*/
public void setNotificationURI(List<String> notificationURI) {
this.notificationURI = notificationURI;
}
/**
* @return the groupID
*/
public String getGroupID() {
return groupID;
}
/**
* @param groupID the groupID to set
*/
public void setGroupID(String groupID) {
this.groupID = groupID;
}
/**
* @return the notificationForwardingURI
*/
public String getNotificationForwardingURI() {
return notificationForwardingURI;
}
/**
* @param notificationForwardingURI the notificationForwardingURI to set
*/
public void setNotificationForwardingURI(String notificationForwardingURI) {
this.notificationForwardingURI = notificationForwardingURI;
}
/**
* @return the preSubscriptionNotify
*/
public BigInteger getPreSubscriptionNotify() {
return preSubscriptionNotify;
}
/**
* @param preSubscriptionNotify the preSubscriptionNotify to set
*/
public void setPreSubscriptionNotify(BigInteger preSubscriptionNotify) {
this.preSubscriptionNotify = preSubscriptionNotify;
}
/**
* @return the pendingNotification
*/
public BigInteger getPendingNotification() {
return pendingNotification;
}
/**
* @param pendingNotification the pendingNotification to set
*/
public void setPendingNotification(BigInteger pendingNotification) {
this.pendingNotification = pendingNotification;
}
/**
* @return the notificationStoragePriority
*/
public BigInteger getNotificationStoragePriority() {
return notificationStoragePriority;
}
/**
* @param notificationStoragePriority the notificationStoragePriority to set
*/
public void setNotificationStoragePriority(
BigInteger notificationStoragePriority) {
this.notificationStoragePriority = notificationStoragePriority;
}
/**
* @return the latestNotify
*/
public Boolean getLatestNotify() {
return latestNotify;
}
/**
* @param latestNotify the latestNotify to set
*/
public void setLatestNotify(Boolean latestNotify) {
this.latestNotify = latestNotify;
}
/**
* @return the notificationContentType
*/
public BigInteger getNotificationContentType() {
return notificationContentType;
}
/**
* @param notificationContentType the notificationContentType to set
*/
public void setNotificationContentType(BigInteger notificationContentType) {
this.notificationContentType = notificationContentType;
}
/**
* @return the notificationEventCat
*/
public String getNotificationEventCat() {
return notificationEventCat;
}
/**
* @param notificationEventCat the notificationEventCat to set
*/
public void setNotificationEventCat(String notificationEventCat) {
this.notificationEventCat = notificationEventCat;
}
/**
* @return the creator
*/
public String getCreator() {
return creator;
}
/**
* @param creator the creator to set
*/
public void setCreator(String creator) {
this.creator = creator;
}
/**
* @return the subscriberURI
*/
public String getSubscriberURI() {
return subscriberURI;
}
/**
* @param subscriberURI the subscriberURI to set
*/
public void setSubscriberURI(String subscriberURI) {
this.subscriberURI = subscriberURI;
}
/**
* @return the parentAe
*/
public AeEntity getParentAe() {
return parentAe;
}
/**
* @param parentAe the parentAe to set
*/
public void setParentAe(AeEntity parentAe) {
this.parentAe = parentAe;
}
/**
* @return the parentCnt
*/
public ContainerEntity getParentCnt() {
return parentCnt;
}
/**
* @param parentCnt the parentCnt to set
*/
public void setParentCnt(ContainerEntity parentCnt) {
this.parentCnt = parentCnt;
}
/**
* @return the parentFleCnt
*/
public FlexContainerEntity getParentFlexCnt() {
return parentFlexCnt;
}
/**
* @param parentFlexCnt the parentFlexCnt to set
*/
public void setParentFlexCnt(FlexContainerEntity parentFlexCnt) {
this.parentFlexCnt = parentFlexCnt;
}
/**
* @return the parentCsb
*/
public CSEBaseEntity getParentCsb() {
return parentCsb;
}
/**
* @param parentCsb the parentCsb to set
*/
public void setParentCsb(CSEBaseEntity parentCsb) {
this.parentCsb = parentCsb;
}
/**
* @return the parentGrp
*/
public GroupEntity getParentGrp() {
return parentGrp;
}
/**
* @param parentGrp the parentGrp to set
*/
public void setParentGrp(GroupEntity parentGrp) {
this.parentGrp = parentGrp;
}
/**
* @return the parentCsr
*/
public RemoteCSEEntity getParentCsr() {
return parentCsr;
}
/**
* @param parentCsr the parentCsr to set
*/
public void setParentCsr(RemoteCSEEntity parentCsr) {
this.parentCsr = parentCsr;
}
/**
* @return the parentAcp
*/
public AccessControlPolicyEntity getParentAcp() {
return parentAcp;
}
/**
* @param parentAcp the parentAcp to set
*/
public void setParentAcp(AccessControlPolicyEntity parentAcp) {
this.parentAcp = parentAcp;
}
/**
* @return the parentSch
*/
public ScheduleEntity getParentSch() {
return parentSch;
}
/**
* @param parentSch the parentSch to set
*/
public void setParentSch(ScheduleEntity parentSch) {
this.parentSch = parentSch;
}
/**
* @return the parentAni
*/
public AreaNwkInfoEntity getParentAni() {
return parentAni;
}
/**
* @param parentAni the parentAni to set
*/
public void setParentAni(AreaNwkInfoEntity parentAni) {
this.parentAni = parentAni;
}
/**
* @return the parentAndi
*/
public AreaNwkDeviceInfoEntity getParentAndi() {
return parentAndi;
}
/**
* @param parentAndi the parentAndi to set
*/
public void setParentAndi(AreaNwkDeviceInfoEntity parentAndi) {
this.parentAndi = parentAndi;
}
/**
* @return the parentDvi
*/
public DeviceInfoEntity getParentDvi() {
return parentDvi;
}
/**
* @param parentDvi the parentDvi to set
*/
public void setParentDvi(DeviceInfoEntity parentDvi) {
this.parentDvi = parentDvi;
}
/**
* @return the linkedSchedule
*/
public ScheduleEntity getChildSchedule() {
return childSchedule;
}
/**
* @param linkedSchedule the linkedSchedule to set
*/
public void setcChildSchedule(ScheduleEntity linkedSchedule) {
this.childSchedule = linkedSchedule;
}
public void setParentEntity(ResourceEntity parentEntity) {
int rt = parentEntity.getResourceType().intValue();
switch (rt) {
case ResourceType.ACCESS_CONTROL_POLICY:
this.parentAcp = (AccessControlPolicyEntity) parentEntity;
break;
case ResourceType.AE:
this.parentAe = (AeEntity) parentEntity;
break;
case ResourceType.CONTAINER:
this.parentCnt = (ContainerEntity) parentEntity;
break;
case ResourceType.FLEXCONTAINER:
this.parentFlexCnt = (FlexContainerEntity) parentEntity;
break;
case ResourceType.CSE_BASE:
this.parentCsb = (CSEBaseEntity) parentEntity;
break;
case ResourceType.GROUP:
this.parentGrp = (GroupEntity) parentEntity;
break;
case ResourceType.REMOTE_CSE:
this.parentCsr = (RemoteCSEEntity) parentEntity;
break;
case ResourceType.SCHEDULE:
this.parentSch = (ScheduleEntity) parentEntity;
break;
default:
break;
}
}
@Override
public List<AccessControlPolicyEntity> getAccessControlPolicies() {
if (accessControlPolicies == null) {
accessControlPolicies = new ArrayList<>();
}
return accessControlPolicies;
}
@Override
public void setAccessControlPolicies(List<AccessControlPolicyEntity> accessControlPolicies) {
this.accessControlPolicies = accessControlPolicies;
}
@Override
public List<DynamicAuthorizationConsultationEntity> getDynamicAuthorizationConsultations() {
if (dynamicAuthorizationConsultations == null) {
dynamicAuthorizationConsultations = new ArrayList<>();
}
return dynamicAuthorizationConsultations;
}
@Override
public void setDynamicAuthorizationConsultations(List<DynamicAuthorizationConsultationEntity> list) {
this.dynamicAuthorizationConsultations = list;
}
/**
* @return the notificationPayloadContentType
*/
public String getNotificationPayloadContentType() {
return notificationPayloadContentType;
}
/**
* @param notificationPayloadContentType the notificationPayloadContentType to set
*/
public void setNotificationPayloadContentType(String notificationPayloadContentType) {
this.notificationPayloadContentType = notificationPayloadContentType;
}
/**
* @return the nbOfFailedNotifications
*/
public Integer getNbOfFailedNotifications() {
return nbOfFailedNotifications;
}
/**
* @param nbOfFailedNotifications the nbOfFailedNotifications to set
*/
public void setNbOfFailedNotifications(Integer nbOfFailedNotifications) {
this.nbOfFailedNotifications = nbOfFailedNotifications;
}
}