/** * Licensed to The Apereo Foundation under one or more contributor license * agreements. See the NOTICE file distributed with this work for additional * information regarding copyright ownership. * * * The Apereo Foundation licenses this file to you under the Educational * Community License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of the License * at: * * http://opensource.org/licenses/ecl2.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. * */ package org.opencastproject.security.impl.jpa; import org.opencastproject.security.api.Organization; import org.opencastproject.util.EqualsUtil; import java.util.HashMap; import java.util.Map; import javax.persistence.Access; import javax.persistence.AccessType; import javax.persistence.CollectionTable; import javax.persistence.Column; import javax.persistence.ElementCollection; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.Lob; import javax.persistence.MapKeyColumn; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Table; /** * JPA-annotated organization object. */ @Entity @Access(AccessType.FIELD) @Table(name = "mh_organization") @NamedQueries({ @NamedQuery(name = "Organization.findAll", query = "Select o FROM JpaOrganization o"), @NamedQuery(name = "Organization.findById", query = "Select o FROM JpaOrganization o where o.id = :id"), @NamedQuery(name = "Organization.findByHost", query = "Select o FROM JpaOrganization o JOIN o.servers s where key(s) = :serverName AND s = :port"), @NamedQuery(name = "Organization.getCount", query = "Select COUNT(o) FROM JpaOrganization o") }) public class JpaOrganization implements Organization { @Id @Column(name = "id", length = 128) private String id; @Column(name = "name") private String name; @ElementCollection @MapKeyColumn(name = "name") @Column(name = "port") @CollectionTable(name = "mh_organization_node", joinColumns = @JoinColumn(name = "organization")) private Map<String, Integer> servers; @Column(name = "admin_role") private String adminRole; @Column(name = "anonymous_role") private String anonymousRole; @Lob @ElementCollection @MapKeyColumn(name = "name") @Column(name = "value", length = 65535) @CollectionTable(name = "mh_organization_property", joinColumns = @JoinColumn(name = "organization")) private Map<String, String> properties; /** * No-arg constructor needed by JPA */ public JpaOrganization() { } /** * Constructs an organization with its attributes. * * @param orgId * the unique identifier * @param name * the friendly name * @param serverName * the host name * @param serverPort * the host port * @param adminRole * name of the local admin role * @param anonymousRole * name of the local anonymous role * @param properties * arbitrary properties defined for this organization, which might include branding, etc. */ public JpaOrganization(String orgId, String name, String serverName, Integer serverPort, String adminRole, String anonymousRole, Map<String, String> properties) { super(); this.id = orgId; this.name = name; this.servers = new HashMap<String, Integer>(); this.servers.put(serverName, serverPort); this.adminRole = adminRole; this.anonymousRole = anonymousRole; this.properties = properties; } /** * Constructs an organization with its attributes. * * @param orgId * the unique identifier * @param name * the friendly name * @param servers * the servers * @param adminRole * name of the local admin role * @param anonymousRole * name of the local anonymous role * @param properties * arbitrary properties defined for this organization, which might include branding, etc. */ public JpaOrganization(String orgId, String name, Map<String, Integer> servers, String adminRole, String anonymousRole, Map<String, String> properties) { super(); this.id = orgId; this.name = name; this.servers = servers; this.adminRole = adminRole; this.anonymousRole = anonymousRole; this.properties = properties; } /** * @see org.opencastproject.security.api.Organization#getId() */ @Override public String getId() { return id; } /** * @see org.opencastproject.security.api.Organization#getAnonymousRole() */ @Override public String getAnonymousRole() { return anonymousRole; } public void setAnonymousRole(String anonymousRole) { this.anonymousRole = anonymousRole; } /** * @see org.opencastproject.security.api.Organization#getAdminRole() */ @Override public String getAdminRole() { return adminRole; } public void setAdminRole(String adminRole) { this.adminRole = adminRole; } /** * @see org.opencastproject.security.api.Organization#getName() */ @Override public String getName() { return name; } public void setName(String name) { this.name = name; } /** * @see org.opencastproject.security.api.Organization#getProperties() */ @Override public Map<String, String> getProperties() { return properties; } public void setProperties(Map<String, String> properties) { this.properties = properties; } /** * @see org.opencastproject.security.api.Organization#getServers() */ @Override public Map<String, Integer> getServers() { return servers; } /** * Replaces the existing servers. * * @param servers * the servers */ public void setServers(Map<String, Integer> servers) { this.servers = servers; } /** * Adds the server - port mapping. * * @param serverName * the server name * @param port * the port */ public void addServer(String serverName, Integer port) { if (servers == null) servers = new HashMap<String, Integer>(); servers.put(serverName, port); } /** * Removes the given server - port mapping. * * @param serverName * the server name * @param port * the port */ public void remove(String serverName, Integer port) { if (port.equals(servers.get(serverName))) { servers.remove(serverName); } } @Override public boolean equals(Object obj) { if (!(obj instanceof Organization)) return false; return ((Organization) obj).getId().equals(id); } @Override public int hashCode() { return EqualsUtil.hash(id); } @Override public String toString() { return id; } }