blob: ed0368a4ce07375e923e3065555ac21b609f951b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2013-2020 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 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* 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.OneToMany;
import javax.persistence.OrderBy;
import org.eclipse.om2m.commons.constants.DBEntities;
import org.eclipse.om2m.commons.constants.ShortName;
/**
* Container JPA entity
*
*/
@Entity(name=DBEntities.CONTAINER_ENTITY)
@Inheritance(strategy = InheritanceType.JOINED)
public class ContainerEntity extends AnnounceableSubordinateEntity{
@Column(name= ShortName.STATETAG)
protected BigInteger stateTag;
@Column(name= ShortName.CREATOR)
protected String creator;
@Column(name= ShortName.MAX_NR_OF_INSTANCES)
protected BigInteger maxNrOfInstances;
@Column(name= ShortName.MAX_BYTE_SIZE)
protected BigInteger maxByteSize;
@Column(name= ShortName.CURRENT_NUMBER_OF_INSTANCES)
protected BigInteger currentNrOfInstances;
@Column(name= ShortName.MAX_INSTANCE_AGE)
protected BigInteger maxInstanceAge;
@Column(name= ShortName.LOCATION_ID)
protected String locationID;
@Column(name= ShortName.ONTOLOGY_REF)
protected String ontologyRef;
@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) },
inverseJoinColumns = { @JoinColumn(name = DBEntities.SUB_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) }
)
protected List<SubscriptionEntity> subscriptions;
/** List of AccessControlPolicies */
@OneToMany(fetch=FetchType.LAZY)
@JoinTable(
name = DBEntities.CNTACP_JOIN,
joinColumns = { @JoinColumn(name = DBEntities.CNT_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) },
inverseJoinColumns = { @JoinColumn(name = DBEntities.ACP_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) }
)
protected List<AccessControlPolicyEntity> accessControlPolicies;
/** List of DynamicAuthorizationConsultations*/
@ManyToMany(fetch=FetchType.LAZY, mappedBy="linkedContainerEntities")
@JoinTable(
name = DBEntities.CNT_DAC_JOIN,
joinColumns = { @JoinColumn(name = DBEntities.CNT_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) },
inverseJoinColumns = { @JoinColumn(name = DBEntities.DAC_JOINID, referencedColumnName = ShortName.RESOURCE_ID) }
)
protected List<DynamicAuthorizationConsultationEntity> dynamicAuthorizationConsultations;
/** List of child Container Entities */
@OneToMany(fetch=FetchType.LAZY, cascade={CascadeType.ALL})
@JoinTable(
name=DBEntities.CNTCNTCHILD_JOIN,
joinColumns={@JoinColumn(name=DBEntities.CNT_JOIN_ID, referencedColumnName=ShortName.RESOURCE_ID)},
inverseJoinColumns={@JoinColumn(name=DBEntities.CNTCH_JOIN_ID, referencedColumnName=ShortName.RESOURCE_ID)}
)
protected List<ContainerEntity> childContainers;
/** List of child ContentInstances Entities */
@OneToMany(fetch=FetchType.LAZY, cascade={CascadeType.ALL})
@JoinTable(
name=DBEntities.CNTCINCHILD_JOIN,
joinColumns={@JoinColumn(name=DBEntities.CNT_JOIN_ID, referencedColumnName=ShortName.RESOURCE_ID)},
inverseJoinColumns={@JoinColumn(name=DBEntities.CINCH_JOIN_ID, referencedColumnName=ShortName.RESOURCE_ID)}
)
@OrderBy("creationTime")
protected List<ContentInstanceEntity> childContentInstances;
/** List of child FlexContainer entities */
@OneToMany(fetch=FetchType.LAZY, cascade=CascadeType.ALL, mappedBy="parentContainer")
@JoinTable(
name=DBEntities.CNT_FCNTCHILD_JOIN,
joinColumns={@JoinColumn(name=DBEntities.CNT_JOIN_ID, referencedColumnName=ShortName.RESOURCE_ID)},
inverseJoinColumns={@JoinColumn(name=DBEntities.FCNT_JOIN_ID, referencedColumnName=ShortName.RESOURCE_ID)}
)
protected List<FlexContainerEntity> childFlexContainers;
// Database link to the possible parent Container
@ManyToOne(fetch=FetchType.LAZY, targetEntity=ContainerEntity.class)
@JoinTable(
name=DBEntities.CNTCNTCHILD_JOIN,
inverseJoinColumns={@JoinColumn(name=DBEntities.CNT_JOIN_ID, referencedColumnName=ShortName.RESOURCE_ID)},
joinColumns={@JoinColumn(name=DBEntities.CNTCH_JOIN_ID, referencedColumnName=ShortName.RESOURCE_ID)}
)
protected ContainerEntity parentContainer;
@ManyToOne(fetch=FetchType.LAZY, targetEntity=FlexContainerEntity.class)
@JoinTable(
name=DBEntities.FCNT_CNTCHILD_JOIN,
inverseJoinColumns={@JoinColumn(name=DBEntities.FCNT_JOIN_ID, referencedColumnName=ShortName.RESOURCE_ID)},
joinColumns={@JoinColumn(name=DBEntities.CNT_JOIN_ID, referencedColumnName=ShortName.RESOURCE_ID)}
)
protected FlexContainerEntity parentFlexContainer;
// Database link to the possible parent Application Entity
@ManyToOne(fetch=FetchType.LAZY, targetEntity=AeEntity.class)
@JoinTable(
name = DBEntities.AECNTCHILD_JOIN,
inverseJoinColumns = { @JoinColumn(name = DBEntities.AE_JOINID, referencedColumnName = ShortName.RESOURCE_ID) },
joinColumns = { @JoinColumn(name = DBEntities.CNT_JOIN_ID, referencedColumnName = ShortName.RESOURCE_ID) }
)
protected AeEntity parentAE;
// Database link to the possible parent CSEBase Entity
@ManyToOne(fetch=FetchType.LAZY, targetEntity=CSEBaseEntity.class)
@JoinTable(
name=DBEntities.CSEB_CNT_JOIN,
inverseJoinColumns={@JoinColumn(name=DBEntities.CSEB_JOIN_ID, referencedColumnName=ShortName.RESOURCE_ID)},
joinColumns={@JoinColumn(name=DBEntities.CNT_JOIN_ID, referencedColumnName=ShortName.RESOURCE_ID)}
)
protected CSEBaseEntity parentCSEB;
// Database link to the possible parent remote cse Entity
@ManyToOne(fetch=FetchType.LAZY, targetEntity=RemoteCSEEntity.class)
@JoinTable(
name=DBEntities.CSRCNTCHILD_JOIN,
inverseJoinColumns={@JoinColumn(name=DBEntities.CSR_JOIN_ID, referencedColumnName=ShortName.RESOURCE_ID)},
joinColumns={@JoinColumn(name=DBEntities.CNT_JOIN_ID, referencedColumnName=ShortName.RESOURCE_ID)}
)
public BigInteger getCurrentNrOfInstances() {
return currentNrOfInstances;
}
public void setCurrentNrOfInstances(BigInteger currentNrOfInstances) {
this.currentNrOfInstances = currentNrOfInstances;
}
protected RemoteCSEEntity parentCSR;
/**
* @return the parentContainer
*/
public ContainerEntity getParentContainer() {
return parentContainer;
}
/**
* @param parentContainer the parentContainer to set
*/
public void setParentContainer(ContainerEntity parentContainer) {
this.parentContainer = parentContainer;
}
/**
* @return the parentAE
*/
public AeEntity getParentAE() {
return parentAE;
}
/**
* @param parentAE the parentAE to set
*/
public void setParentAE(AeEntity parentAE) {
this.parentAE = parentAE;
}
/**
* @return the parentCSEB
*/
public CSEBaseEntity getParentCSEB() {
return parentCSEB;
}
/**
* @param parentCSEB the parentCSEB to set
*/
public void setParentCSEB(CSEBaseEntity parentCSEB) {
this.parentCSEB = parentCSEB;
}
/**
* @return the stateTag
*/
public BigInteger getStateTag() {
return stateTag;
}
/**
* @param stateTag the stateTag to set
*/
public void setStateTag(BigInteger stateTag) {
this.stateTag = stateTag;
}
/**
* @return the creator
*/
public String getCreator() {
return creator;
}
/**
* @param creator the creator to set
*/
public void setCreator(String creator) {
this.creator = creator;
}
/**
* @return the maxNrOfInstances
*/
public BigInteger getMaxNrOfInstances() {
return maxNrOfInstances;
}
/**
* @param maxNrOfInstances the maxNrOfInstances to set
*/
public void setMaxNrOfInstances(BigInteger maxNrOfInstances) {
this.maxNrOfInstances = maxNrOfInstances;
}
/**
* @return the maxByteSize
*/
public BigInteger getMaxByteSize() {
return maxByteSize;
}
/**
* @param maxByteSize the maxByteSize to set
*/
public void setMaxByteSize(BigInteger maxByteSize) {
this.maxByteSize = maxByteSize;
}
/**
* @return the maxInstanceAge
*/
public BigInteger getMaxInstanceAge() {
return maxInstanceAge;
}
/**
* @param maxInstanceAge the maxInstanceAge to set
*/
public void setMaxInstanceAge(BigInteger maxInstanceAge) {
this.maxInstanceAge = maxInstanceAge;
}
/**
* @return the locationID
*/
public String getLocationID() {
return locationID;
}
/**
* @param locationID the locationID to set
*/
public void setLocationID(String locationID) {
this.locationID = locationID;
}
/**
* @return the ontologyRef
*/
public String getOntologyRef() {
return ontologyRef;
}
/**
* @param ontologyRef the ontologyRef to set
*/
public void setOntologyRef(String ontologyRef) {
this.ontologyRef = ontologyRef;
}
/**
* @return the childContainers
*/
public List<ContainerEntity> getChildContainers() {
if (this.childContainers == null) {
this.childContainers = new ArrayList<>();
}
return childContainers;
}
/**
* @param childContainers the childContainers to set
*/
public void setChildContainers(List<ContainerEntity> childContainers) {
this.childContainers = childContainers;
}
/**
* @return the childFlexContainers
*/
public List<FlexContainerEntity> getChildFlexContainers() {
if (this.childFlexContainers == null) {
this.childFlexContainers = new ArrayList<>();
}
return childFlexContainers;
}
/**
* @param childFlexContainers the childFlexContainers to set
*/
public void setChildFlexContainers(List<FlexContainerEntity> childFlexContainers) {
this.childFlexContainers = childFlexContainers;
}
/**
* @return the accessControlPolicies
*/
public List<AccessControlPolicyEntity> getAccessControlPolicies() {
if (accessControlPolicies == null) {
accessControlPolicies = new ArrayList<>();
}
return accessControlPolicies;
}
/**
* @param accessControlPolicies the accessControlPolicies to set
*/
public void setAccessControlPolicies(
List<AccessControlPolicyEntity> accessControlPolicies) {
this.accessControlPolicies = accessControlPolicies;
}
/**
* @return the childContentInstances
*/
public List<ContentInstanceEntity> getChildContentInstances() {
if (childContentInstances == null) {
this.childContentInstances = new ArrayList<>();
}
return childContentInstances;
}
/**
* @param childContentInstances the childContentInstances to set
*/
public void setChildContentInstances(
List<ContentInstanceEntity> childContentInstances) {
this.childContentInstances = childContentInstances;
}
/**
* @return the parentCSR
*/
public RemoteCSEEntity getParentCSR() {
return parentCSR;
}
/**
* @param parentCSR the parentCSR to set
*/
public void setParentCSR(RemoteCSEEntity parentCSR) {
this.parentCSR = parentCSR;
}
/**
* @return the subscriptions
*/
public List<SubscriptionEntity> getSubscriptions() {
if (this.subscriptions == null) {
this.subscriptions = new ArrayList<>();
}
return subscriptions;
}
/**
* @param subscriptions the subscriptions to set
*/
public void setSubscriptions(List<SubscriptionEntity> subscriptions) {
this.subscriptions = subscriptions;
}
@Override
/**
* Retrieve linked dynamicAuthorizationConsultations
*/
public List<DynamicAuthorizationConsultationEntity> getDynamicAuthorizationConsultations() {
if (dynamicAuthorizationConsultations == null) {
dynamicAuthorizationConsultations = new ArrayList<>();
}
return dynamicAuthorizationConsultations;
}
@Override
/**
* Set linked dynamicAuthorizationConsultations
*/
public void setDynamicAuthorizationConsultations(List<DynamicAuthorizationConsultationEntity> list) {
this.dynamicAuthorizationConsultations = list;
}
/**
* Return the current byte size of summed content instance content size in bytes
* @return
*/
public int getCurrentByteSize() {
int result = 0;
for (ContentInstanceEntity cin : this.getChildContentInstances()) {
result += cin.getByteSize();
}
return result;
}
}