/**
* Copyright (c) 2011, SOCIETIES Consortium (WATERFORD INSTITUTE OF TECHNOLOGY (TSSG), HERIOT-WATT UNIVERSITY (HWU), SOLUTA.NET
* (SN), GERMAN AEROSPACE CENTRE (Deutsches Zentrum fuer Luft- und Raumfahrt e.V.) (DLR), Zavod za varnostne tehnologije
* informacijske družbe in elektronsko poslovanje (SETCCE), INSTITUTE OF COMMUNICATION AND COMPUTER SYSTEMS (ICCS), LAKE
* COMMUNICATIONS (LAKE), INTEL PERFORMANCE LEARNING SOLUTIONS LTD (INTEL), PORTUGAL TELECOM INOVAÇÃO, SA (PTIN), IBM Corp.,
* INSTITUT TELECOM (ITSUD), AMITEC DIACHYTI EFYIA PLIROFORIKI KAI EPIKINONIES ETERIA PERIORISMENIS EFTHINIS (AMITEC), TELECOM
* ITALIA S.p.a.(TI), TRIALOG (TRIALOG), Stiftelsen SINTEF (SINTEF), NEC EUROPE LTD (NEC))
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following
* conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
* BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
* SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.societies.privacytrust.trust.impl.repo.model;
import java.util.HashSet;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
import org.hibernate.annotations.Index;
import org.hibernate.annotations.Sort;
import org.hibernate.annotations.SortType;
import org.societies.api.privacytrust.trust.model.TrustedEntityId;
import org.societies.privacytrust.trust.api.evidence.model.ITrustEvidence;
import org.societies.privacytrust.trust.api.model.ITrustedCis;
import org.societies.privacytrust.trust.api.model.ITrustedCss;
import org.societies.privacytrust.trust.api.model.ITrustedService;
import org.societies.privacytrust.trust.impl.evidence.repo.model.TrustEvidence;
/**
* This class represents trusted CSSs. A <code>TrustedCss</code> object is
* referenced by its {@link TrustedEntityId}, while the associated
* {@link Trust} value objects express the trustworthiness of this CSS, i.e.
* direct, indirect and user-perceived. Each trusted CSS is assigned a set of
* {@link TrustedCis} objects representing the communities this CSS is member
* of. In addition, the services provided by a TrustedCss are modelled as
* {@link TrustedService} objects.
* <p>
* Note: this class has a natural ordering that is inconsistent with equals.
*
* @author <a href="mailto:nicolas.liampotis@cn.ntua.gr">Nicolas Liampotis</a> (ICCS)
* @since 0.0.1
*/
@Entity
@org.hibernate.annotations.Entity(
dynamicInsert=true,
dynamicUpdate=true
)
@Table(
name = TableName.TRUSTED_CSS,
uniqueConstraints = { @UniqueConstraint(columnNames = { "trustor_id", "trustee_id" }) }
)
public class TrustedCss extends TrustedEntity implements ITrustedCss {
private static final long serialVersionUID = 6564159563124215460L;
/** The trust evidence associated with the evaluated trust values of this CSS. */
@ManyToMany(
cascade = CascadeType.MERGE,
targetEntity = TrustEvidence.class,
fetch = FetchType.EAGER
)
@JoinTable(
name = TableName.TRUSTED_CSS + "_evidence",
joinColumns = { @JoinColumn(name = TableName.TRUSTED_CSS + "_id") },
inverseJoinColumns = { @JoinColumn(name =
org.societies.privacytrust.trust.impl.evidence.repo.model.TableName.TRUST_EVIDENCE + "_id") }
)
@Sort(type=SortType.NATURAL)
private final SortedSet<ITrustEvidence> evidence = new TreeSet<ITrustEvidence>();
/** The communities this CSS is member of. */
@ManyToMany(
cascade = CascadeType.MERGE,
targetEntity = TrustedCis.class,
fetch = FetchType.EAGER
)
@JoinTable(
name = TableName.TRUSTED_CSS_CIS,
joinColumns = { @JoinColumn(name = TableName.TRUSTED_CSS + "_id") },
inverseJoinColumns = { @JoinColumn(name = TableName.TRUSTED_CIS + "_id") }
)
private final Set<ITrustedCis> communities = new HashSet<ITrustedCis>();
/** The services provided by this CSS. */
@OneToMany(
cascade = CascadeType.REMOVE,
mappedBy = "provider",
targetEntity = TrustedService.class,
fetch = FetchType.EAGER
)
private final Set<ITrustedService> services = new HashSet<ITrustedService>();
/** The similarity between the trustor and the trustee. */
@Index(name = "similarity_idx")
@Column(name = "similarity")
private Double similarity = 0.0d;
/* Empty constructor required by Hibernate */
private TrustedCss() {
super(null, null);
}
/**
* Constructs a <code>TrustedCss</code> with the specified trustor and
* trustee identifiers.
*
* @param trustorId
* the identifier of the trustor
* @param trusteeId
* the identifier of the trustee
* @since 0.5
*/
public TrustedCss(final TrustedEntityId trustorId, final TrustedEntityId trusteeId) {
super(trustorId, trusteeId);
}
/*
* @see org.societies.privacytrust.trust.api.model.ITrustedEntity#getEvidence()
*/
@Override
public SortedSet<ITrustEvidence> getEvidence() {
return this.evidence;
}
/*
* @see org.societies.privacytrust.trust.api.model.ITrustedEntity#addEvidence(org.societies.privacytrust.trust.api.evidence.model.ITrustEvidence)
*/
@Override
public void addEvidence(final ITrustEvidence evidence) {
if (!this.evidence.contains(evidence))
this.evidence.add(evidence);
}
/*
* @see org.societies.privacytrust.trust.api.model.ITrustedEntity#removeEvidence(org.societies.api.privacytrust.trust.model.TrustEvidence)
*/
@Override
public void removeEvidence(final ITrustEvidence evidence) {
if (this.evidence.contains(evidence))
this.evidence.remove(evidence);
}
/*
* @see org.societies.privacytrust.trust.api.model.ITrustedCss#getCommunities()
*/
@Override
public Set<ITrustedCis> getCommunities(){
return this.communities;
}
/*
* @see org.societies.privacytrust.trust.api.model.ITrustedCss#addCommunity(org.societies.privacytrust.trust.api.model.ITrustedCis)
*/
@Override
public void addCommunity(final ITrustedCis community) {
if (!this.communities.contains(community))
this.communities.add(community);
if (!community.getMembers().contains(this))
community.getMembers().add(this);
}
/*
* @see org.societies.privacytrust.trust.api.model.ITrustedCss#removeCommunity(org.societies.privacytrust.trust.api.model.ITrustedCis)
*/
@Override
public void removeCommunity(final ITrustedCis community) {
if (this.communities.contains(community))
this.communities.remove(community);
if (community.getMembers().contains(this))
community.getMembers().remove(this);
}
/*
* @see org.societies.privacytrust.trust.api.model.ITrustedCss#getServices()
*/
@Override
public Set<ITrustedService> getServices() {
return this.services;
}
/*
* TODO
* @param serviceType
*
public Set<TrustedService> getServices(String serviceType) {
return null;
}*/
/*
* @see org.societies.privacytrust.trust.api.model.ITrustedCss#getSimilarity()
*/
@Override
public Double getSimilarity() {
return (this.similarity != null) ? new Double(this.similarity) : null;
}
/*
* @see org.societies.privacytrust.trust.api.model.ITrustedCss#setSimilarity(java.lang.Double)
*/
@Override
public void setSimilarity(Double similarity) {
this.similarity = similarity;
}
/*
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
final StringBuilder sb = new StringBuilder();
sb.append("(");
sb.append("trustorId=" + super.getTrustorId());
sb.append(",");
sb.append("trusteeId=" + super.getTrusteeId());
sb.append(",");
sb.append("directTrust=" + super.getDirectTrust());
sb.append(",");
sb.append("indirectTrust=" + super.getIndirectTrust());
sb.append(",");
sb.append("userPerceivedTrust=" + super.getUserPerceivedTrust());
sb.append(",");
sb.append("similarity=" + this.similarity);
sb.append(")");
return sb.toString();
}
}