/*******************************************************************************
* Copyright (c) 2011, 2015 Oracle and/or its affiliates. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* 09/09/2011-2.3.1 Peter Krogh
* - 356197: Add new VPD type to MultitenantType
* 11/15/2011-2.3.2 Guy Pelletier
* - 363820: Issue with clone method from VPDMultitenantPolicy
******************************************************************************/
package org.eclipse.persistence.testing.models.jpa.advanced.multitenant;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Cacheable;
import javax.persistence.Column;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import org.eclipse.persistence.annotations.Multitenant;
import org.eclipse.persistence.annotations.MultitenantType;
import org.eclipse.persistence.annotations.TenantDiscriminatorColumn;
import static javax.persistence.InheritanceType.SINGLE_TABLE;
import static org.eclipse.persistence.annotations.MultitenantType.VPD;
/**
* A multitenant VPD class. Do not add @Entity to this class as it will be
* picked up by the 'default' testing PU. We do not want this to happen
* as any multitenant VPD entity will mark the connection mode to exclusive
* always. We want this class to remain exclusive to the multi-tenant-vpd PU.
*
* Don't add an Entity annotation to this class as we don't want this class to
* be picked up from other test persistence unit classes that do not exclude
* unlisted classes.
*
* @see Related mapping file:
* trunk\jpa\eclipselink.jpa.test\resource\eclipselink-annotation-model\multitenant-vpd.xml
*
* Multi-tenant to do list.
* Each user can see its own list of tasks.
* Each task has a set of subtasks.
*
* @author pkrogh
* @since EclipseLink 2.3.1
*/
@Table(name="VPD_TASK")
@Multitenant(VPD)
@Inheritance(strategy=SINGLE_TABLE)
@DiscriminatorColumn(name="DTYPE")
@DiscriminatorValue("TASK")
@TenantDiscriminatorColumn(name = "TENANT_ID", contextProperty = "tenant.id")
@Cacheable(false)
public class Task implements Serializable {
@Id
@GeneratedValue
private int id;
@Column(name="DESCRIP")
private String description;
private boolean completed;
@OneToMany(mappedBy="parent")
private List<Task> subtasks= new ArrayList<Task>();
@OneToOne
@JoinColumn(name="PARENT_ID")
public Task parent;
public void addSubtask(Task task) {
task.parent=this;
this.subtasks.add(task);
}
public boolean getCompleted() {
return completed;
}
public String getDescription() {
return description;
}
public int getId() {
return id;
}
public List<Task> getSubtasks() {
return subtasks;
}
public void setCompleted(boolean completed) {
this.completed = completed;
}
public void setDescription(String description) {
this.description = description;
}
public void setId(int empId) {
this.id = empId;
}
public String toString() {
String printString = "Task(id: " + getId() + " -- " + getDescription();
if (completed) {
return "Completed " + printString + ")";
} else {
return "Incomplete " + printString + ")";
}
}
}