/** * 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.authorization.xacml.manager.impl.persistence; import static org.opencastproject.authorization.xacml.manager.impl.Util.createConfiguredWorkflowRef; import static org.opencastproject.authorization.xacml.manager.impl.Util.splitConfiguredWorkflowRef; import static org.opencastproject.util.ReflectionUtil.run; import static org.opencastproject.util.data.Option.option; import org.opencastproject.authorization.xacml.manager.api.ManagedAcl; import org.opencastproject.authorization.xacml.manager.api.SeriesACLTransition; import org.opencastproject.util.data.Option; import org.opencastproject.util.data.Tuple; import org.opencastproject.workflow.api.ConfiguredWorkflowRef; import java.util.Date; import javax.persistence.Access; import javax.persistence.AccessType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.OneToOne; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.UniqueConstraint; @Entity(name = "SeriesAclTransition") @Access(AccessType.FIELD) @Table(name = "mh_acl_series_transition", uniqueConstraints = @UniqueConstraint(columnNames = {"series_id", "organization_id", "application_date"})) @NamedQueries({ @NamedQuery(name = "SeriesAcl.findByTransitionId", query = "SELECT s FROM SeriesAclTransition s WHERE s.id = :id AND s.organizationId = :organizationId"), @NamedQuery(name = "SeriesAcl.findBySeriesId", query = "SELECT s FROM SeriesAclTransition s WHERE s.seriesId = :id AND s.organizationId = :organizationId ORDER BY s.applicationDate ASC") }) public class SeriesAclTransitionEntity implements SeriesACLTransition { /** Transition ID, primary key */ @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "pk", length = 128) private Long id; /** Series ID */ @Column(name = "series_id", length = 128) private String seriesId; /** Organization ID */ @Column(name = "organization_id", length = 128) protected String organizationId; /** Start date */ @Column(name = "application_date") @Temporal(TemporalType.TIMESTAMP) private Date applicationDate; /** Managed acl id */ @OneToOne @JoinColumn(name = "managed_acl_fk") private ManagedAclEntity managedAcl; /** The workflow definition id */ @Column(name = "workflow_id") private String workflowId; /** The workflow parameters as json */ @Column(name = "workflow_params") private String workflowParams; /** Indicates to override the ACL's */ @Column(name = "override") private boolean override; /** Indicates if already applied */ @Column(name = "done") private boolean done = false; /** No-arg constructor needed by JPA */ public SeriesAclTransitionEntity() { } SeriesAclTransitionEntity update(final String seriesId, final String orgId, final Date applicationDate, final ManagedAclEntity managedAcl, final Option<ConfiguredWorkflowRef> workflow, final boolean override) { final SeriesAclTransitionEntity self = this; run(SeriesACLTransition.class, new SeriesACLTransition() { @Override public String getSeriesId() { self.seriesId = seriesId; return null; } @Override public ManagedAcl getAccessControlList() { self.managedAcl = managedAcl; return null; } @Override public boolean isOverride() { self.override = override; return false; } @Override public long getTransitionId() { return 0; } @Override public String getOrganizationId() { self.organizationId = orgId; return null; } @Override public Date getApplicationDate() { self.applicationDate = applicationDate; return null; } @Override public Option<ConfiguredWorkflowRef> getWorkflow() { final Tuple<Option<String>, Option<String>> s = splitConfiguredWorkflowRef(workflow); self.workflowId = s.getA().getOrElseNull(); self.workflowParams = s.getB().getOrElseNull(); return null; } @Override public boolean isDone() { self.done = done; return false; } }); return this; } void setDone(boolean done) { this.done = done; } @Override public String getSeriesId() { return seriesId; } @Override public String getOrganizationId() { return organizationId; } @Override public Date getApplicationDate() { return applicationDate; } @Override public ManagedAcl getAccessControlList() { return managedAcl; } @Override public long getTransitionId() { return id; } @Override public Option<ConfiguredWorkflowRef> getWorkflow() { return createConfiguredWorkflowRef(option(workflowId), option(workflowParams)); } @Override public boolean isOverride() { return override; } @Override public boolean isDone() { return done; } /** * {@inheritDoc} * * @see java.lang.Object#toString() */ @Override public String toString() { return "{TransitionId=" + id + ", seriesId=" + seriesId + ", orgId=" + organizationId + ", applicationDate=" + applicationDate + "}"; } }