blob: 744095f5e510c2d23247975cfde2e8db4943e6f9 [file] [log] [blame]
package org.eclipse.osbp.jpa.services.history;
import java.lang.reflect.Field;
import java.util.List;
import javax.persistence.Version;
import org.eclipse.osbp.runtime.common.annotations.HistIsCurrent;
import org.eclipse.osbp.runtime.common.annotations.HistIsCustomVersion;
import org.eclipse.osbp.runtime.common.annotations.HistValidUntil;
import org.eclipse.osbp.runtime.common.historized.UUIDHist;
import org.eclipse.osbp.runtime.common.util.BeanUtils;
import org.eclipse.persistence.descriptors.ClassDescriptor;
import org.eclipse.persistence.internal.helper.DatabaseField;
import org.eclipse.persistence.mappings.DatabaseMapping;
public class HistorizedDescriptorWrapper {
private final Class<?> clazz;
private final ClassDescriptor descriptor;
private DatabaseMapping versionMapping;
private DatabaseMapping validUntilMapping;
private DatabaseMapping currentMapping;
private DatabaseMapping isCustomVersionMapping;
private DatabaseMapping idMapping;
private ClassDescriptor uuidHistDescriptor;
private DatabaseMapping id_idMapping;
private DatabaseMapping id_validFromMapping;
public HistorizedDescriptorWrapper(ClassDescriptor descriptor) {
this.clazz = descriptor.getJavaClass();
this.descriptor = descriptor;
// find the ID String field by the descriptor
List<DatabaseField> pk = descriptor.getPrimaryKeyFields();
for (DatabaseMapping mapping : descriptor.getMappings()) {
if (mapping.isPrimaryKeyMapping()) {
idMapping = mapping;
break;
}
}
uuidHistDescriptor = idMapping.getReferenceDescriptor();
Field versionField = BeanUtils.getField(clazz, Version.class);
Field validUntilField = BeanUtils.getField(clazz, HistValidUntil.class);
Field currentHist = BeanUtils.getField(clazz, HistIsCurrent.class);
Field isCustomVersion = BeanUtils.getField(clazz, HistIsCustomVersion.class);
id_idMapping = uuidHistDescriptor.getMappingForAttributeName("id");
id_validFromMapping = uuidHistDescriptor.getMappingForAttributeName("validFrom");
versionMapping = descriptor.getMappingForAttributeName(versionField.getName());
validUntilMapping = descriptor.getMappingForAttributeName(validUntilField.getName());
currentMapping = descriptor.getMappingForAttributeName(currentHist.getName());
isCustomVersionMapping = descriptor.getMappingForAttributeName(isCustomVersion.getName());
}
public String getIdAttName() {
return idMapping.getAttributeName();
}
public String getId_IdAttName() {
return id_idMapping.getAttributeName();
}
public String getId_ValidFromAttName() {
return id_validFromMapping.getAttributeName();
}
public String getVersionAttName() {
return versionMapping.getAttributeName();
}
public String getValidUntilAttName() {
return validUntilMapping.getAttributeName();
}
public String getCurrentHistAttName() {
return currentMapping.getAttributeName();
}
public String getIsCustomVersionAttName() {
return isCustomVersionMapping.getAttributeName();
}
public UUIDHist getID(Object obj) {
return (UUIDHist) idMapping.getAttributeValueFromObject(obj);
}
public int getVersion(Object obj) {
return (int) versionMapping.getAttributeValueFromObject(obj);
}
public long getId_ValidFrom(Object obj) {
if (obj instanceof UUIDHist) {
return ((UUIDHist) obj).getValidFrom();
}
UUIDHist idHist = (UUIDHist) idMapping.getAttributeValueFromObject(obj);
return idHist != null ? idHist.getValidFrom() : -1;
}
public String getId_IdFrom(Object obj) {
if (obj instanceof UUIDHist) {
return ((UUIDHist) obj).getId();
}
UUIDHist idHist = (UUIDHist) idMapping.getAttributeValueFromObject(obj);
return idHist != null ? idHist.getId() : null;
}
public long getValidUntil(Object obj) {
return (long) validUntilMapping.getAttributeValueFromObject(obj);
}
public boolean isCurrentHist(Object obj) {
return (boolean) currentMapping.getAttributeValueFromObject(obj);
}
public boolean isCustomVersion(Object obj) {
return (boolean) isCustomVersionMapping.getAttributeValueFromObject(obj);
}
public Class<?> getEntityClass() {
return descriptor.getJavaClass();
}
public void setID(Object obj, Object value) {
idMapping.setAttributeValueInObject(obj, value);
}
public void setVersion(Object obj, int value) {
versionMapping.setAttributeValueInObject(obj, value);
}
public void setId_ValidFrom(Object obj, long value) {
if (obj instanceof UUIDHist) {
((UUIDHist) obj).setValidFrom(value);
}
UUIDHist idHist = (UUIDHist) idMapping.getAttributeValueFromObject(obj);
if (idHist != null) {
idHist.setValidFrom(value);
}
}
public void setId_IdFrom(Object obj, String value) {
if (obj instanceof UUIDHist) {
((UUIDHist) obj).setId(value);
}
UUIDHist idHist = (UUIDHist) idMapping.getAttributeValueFromObject(obj);
if (idHist != null) {
idHist.setId(value);
}
}
public void setValidUntil(Object obj, long value) {
validUntilMapping.setAttributeValueInObject(obj, value);
}
public void setCurrentHist(Object obj, boolean value) {
currentMapping.setAttributeValueInObject(obj, value);
}
public void setCustomVersion(Object obj, boolean value) {
isCustomVersionMapping.setAttributeValueInObject(obj, value);
}
}