/******************************************************************************* * Copyright (c) 1998, 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: * Oracle - initial API and implementation from Oracle TopLink ******************************************************************************/ package org.eclipse.persistence.testing.tests.unitofwork.changeflag.model; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.Serializable; import java.io.StringWriter; import java.math.BigDecimal; import org.eclipse.persistence.descriptors.changetracking.ChangeTracker; import org.eclipse.persistence.descriptors.changetracking.CollectionChangeEvent; /** * <p><b>Purpose</b>: Represent a employee of an organization. * <p><b>Description</b>: An Employee is a root object in the Employee Demo. * It maintains relationships to all of the other objects in the system. * The employee shows usage of 1-1, 1-m, m-m, aggregate and transformation mappings. * The employee also shows usage of value holder to implement indirection for its relationships * (note, it is strongly suggested to always use value holders for relationships). */ public class ALCTEmployee implements Serializable, ChangeTracker { // implements ChangeTracker for testing /** Primary key, maped as a direct-to-field, BigDecimal -> NUMBER, that makes use of sequence numbers to generate the id. */ public BigDecimal id; /** Direct-to-field mapping, String -> VARCHAR. */ public String firstName; /** Direct-to-field mapping, String -> VARCHAR. */ public String lastName; /** Object-type mapping, maps "Male" -> "M", "Female" -> "F". */ public String gender; /** Aggregate-object mapping, stores the object in the employee's table. */ public ALCTEmploymentPeriod period; public PropertyChangeListener listener; public PropertyChangeListener _persistence_getPropertyChangeListener() { return listener; } public void _persistence_setPropertyChangeListener(PropertyChangeListener listener) { this.listener = listener; } public void propertyChange(String propertyName, Object oldValue, Object newValue) { if (listener != null) { if (oldValue != newValue) { listener.propertyChange(new PropertyChangeEvent(this, propertyName, oldValue, newValue)); } } } public void collectionChange(String propertyName, Object oldValue, Object newValue, int changeType, boolean isChangeApplied) { if (listener != null) { listener.propertyChange(new CollectionChangeEvent(this, propertyName, oldValue, newValue, changeType, isChangeApplied)); } } /** * For fields that make use of indirection the constructor should build the value holders. */ public ALCTEmployee() { this.firstName = ""; this.lastName = ""; } public String getFirstName() { return firstName; } public String getGender() { return gender; } /** * Return the persistent identifier of the receiver. */ public BigDecimal getId() { return id; } public String getLastName() { return lastName; } public ALCTEmploymentPeriod getPeriod() { return period; } public void setFemale() { propertyChange("gender", this.gender, "Female"); setGender("Female"); } public void setFirstName(String firstName) { propertyChange("firstName", getFirstName(), firstName); this.firstName = firstName; } public void setGender(String gender) { propertyChange("gender", this.gender, gender); this.gender = gender; } /** * Set the persistent identifier of the receiver. * Note this should never be changed. * Consider making the primary key set methods protected or not having them. * In this demo the setId is required for testing purposes. */ public void setId(BigDecimal id) { propertyChange("id", this.id, id); this.id = id; } public void setLastName(String lastName) { propertyChange("lastName", this.lastName, lastName); this.lastName = lastName; } public void setMale() { propertyChange("gender", this.gender, "Male"); setGender("Male"); } public void setPeriod(ALCTEmploymentPeriod period) { propertyChange("period", this.period, period); this.period = period; } /** * Print the first & last name */ public String toString() { StringWriter writer = new StringWriter(); writer.write("Employee: "); writer.write(getFirstName()); writer.write(" "); writer.write(getLastName()); return writer.toString(); } }