/** * The contents of this file are subject to the license and copyright * detailed in the LICENSE and NOTICE files at the root of the source * tree and available online at * * http://www.dspace.org/license/ */ package org.dspace.content; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; import javax.persistence.Cacheable; 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.OneToOne; import javax.persistence.Table; import javax.persistence.Transient; import org.apache.commons.lang3.builder.HashCodeBuilder; import org.apache.logging.log4j.Logger; import org.dspace.content.comparator.NameAscendingComparator; import org.dspace.content.factory.ContentServiceFactory; import org.dspace.content.service.CommunityService; import org.dspace.core.Constants; import org.dspace.core.Context; import org.dspace.eperson.Group; import org.hibernate.annotations.CacheConcurrencyStrategy; import org.hibernate.proxy.HibernateProxyHelper; /** * Class representing a community *
* The community's metadata (name, introductory text etc.) is loaded into'
* memory. Changes to this metadata are only reflected in the database after
*
* The default group of administrators for community 100 is the one called
* update
is called.
*
* @author Robert Tansley
* @version $Revision$
*/
@Entity
@Table(name = "community")
@Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE, include = "non-lazy")
public class Community extends DSpaceObject implements DSpaceObjectLegacySupport {
/**
* log4j category
*/
private static final Logger log = org.apache.logging.log4j.LogManager.getLogger(Community.class);
@Column(name = "community_id", insertable = false, updatable = false)
private Integer legacyId;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(
name = "community2community",
joinColumns = {@JoinColumn(name = "parent_comm_id")},
inverseJoinColumns = {@JoinColumn(name = "child_comm_id")}
)
private Setnull
is return if the
* community does not have a logo.
*
* @return the logo of the community, or null
*/
public Bitstream getLogo() {
return logo;
}
void setLogo(Bitstream logo) {
this.logo = logo;
setModified();
}
/**
* Get the default group of administrators, if there is one. Note that the
* authorization system may allow others to be administrators for the
* community.
* community_100_admin
.
*
* @return group of administrators, or null
if there is no
* default group.
*/
public Group getAdministrators() {
return admins;
}
void setAdmins(Group admins) {
this.admins = admins;
setModified();
}
/**
* Get the collections in this community. Throws an SQLException because
* creating a community object won't load in all collections.
*
* @return array of Collection objects
*/
public Listtrue
if other
is the same Community
* as this object, false
otherwise
*
* @param other object to compare to
* @return true
if object passed in represents the same
* community as this object
*/
@Override
public boolean equals(Object other) {
if (other == null) {
return false;
}
Class> objClass = HibernateProxyHelper.getClassWithoutInitializingProxy(other);
if (this.getClass() != objClass) {
return false;
}
final Community otherCommunity = (Community) other;
if (!this.getID().equals(otherCommunity.getID())) {
return false;
}
return true;
}
@Override
public int hashCode() {
return new HashCodeBuilder().append(getID()).toHashCode();
}
/**
* return type found in Constants
*
* @return Community type
*/
@Override
public int getType() {
return Constants.COMMUNITY;
}
@Override
public String getName() {
String value = getCommunityService()
.getMetadataFirstValue(this, MetadataSchemaEnum.DC.getName(), "title", null, Item.ANY);
return value == null ? "" : value;
}
@Override
public Integer getLegacyId() {
return legacyId;
}
private CommunityService getCommunityService() {
if (communityService == null) {
communityService = ContentServiceFactory.getInstance().getCommunityService();
}
return communityService;
}
}