This repository has been archived on 2021-09-09. You can view files and clone it, but cannot push or open issues or pull requests.
geoportal-service/src/main/java/org/gcube/application/geoportal/service/model/legacy/concessioni/AssociatedContent.java

176 lines
4.9 KiB
Java

package org.gcube.application.geoportal.service.model.legacy.concessioni;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElements;
import org.gcube.application.geoportal.model.AccessPolicy;
import org.gcube.application.geoportal.model.Record;
import org.gcube.application.geoportal.model.report.ValidationReport;
import org.gcube.application.geoportal.utils.CollectionsUtils;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonSubTypes.Type;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes({
@Type(value = OtherContent.class),
@Type(value = RelazioneScavo.class),
@Type(value = SDILayerDescriptor.class),
@Type(value = LayerConcessione.class),
@Type(value = UploadedImage.class),
})
public abstract class AssociatedContent {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
@XmlElement
private AccessPolicy policy;
private String licenseID;
private String titolo;
private LocalDateTime creationTime;
public ValidationReport validateForInsertion() {
ValidationReport toReturn=new ValidationReport("Associated Content");
toReturn.checkMandatory(policy, "Politica di accesso");
toReturn.checkMandatory(licenseID, "Licenza");
toReturn.checkMandatory(titolo,"Titolo");
toReturn.checkMandatory(creationTime, "Creation time");
return toReturn;
}
public abstract void setRecord(Record r);
public abstract Record getRecord();
@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(mappedBy = "associated", cascade = CascadeType.ALL)
@XmlElements({
@XmlElement(type=GeoServerContent.class),
@XmlElement(type=WorkspaceContent.class),
})
private List<PersistedContent> actualContent=new ArrayList<>();
public void detachContent() {
if(actualContent!=null)
for(PersistedContent p:actualContent)
p.setAssociated(null);
}
public void reattachContent() {
if(actualContent!=null)
for(PersistedContent p:actualContent)
p.setAssociated(this);
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
// result = prime * result + ((actualContent == null) ? 0 : actualContent.hashCode());
result = prime * result + CollectionsUtils.hashCode(actualContent);
result = prime * result + ((creationTime == null) ? 0 : creationTime.hashCode());
result = prime * result + (int) (id ^ (id >>> 32));
result = prime * result + ((licenseID == null) ? 0 : licenseID.hashCode());
result = prime * result + ((policy == null) ? 0 : policy.hashCode());
result = prime * result + ((titolo == null) ? 0 : titolo.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
AssociatedContent other = (AssociatedContent) obj;
// if (actualContent == null) {
// if (other.actualContent != null)
// return false;
// } else if (!actualContent.equals(other.actualContent))
// return false;
if(!CollectionsUtils.equalsCollections(actualContent, other.actualContent)) return false;
if (creationTime == null) {
if (other.creationTime != null)
return false;
} else if (!creationTime.equals(other.creationTime))
return false;
if (id != other.id)
return false;
if (licenseID == null) {
if (other.licenseID != null)
return false;
} else if (!licenseID.equals(other.licenseID))
return false;
if (policy != other.policy)
return false;
if (titolo == null) {
if (other.titolo != null)
return false;
} else if (!titolo.equals(other.titolo))
return false;
return true;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("AssociatedContent [id=");
builder.append(id);
builder.append(", policy=");
builder.append(policy);
builder.append(", licenseID=");
builder.append(licenseID);
builder.append(", titolo=");
builder.append(titolo);
builder.append(", creationTime=");
builder.append(creationTime);
builder.append(", actualContent=");
builder.append(actualContent);
builder.append("]");
return builder.toString();
}
}