/******************************************************************************* | |
* Copyright (c) 1998, 2013 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(); | |
} | |
} |