/**
*
*/
package org.openflexo.tm.hibernate.impl;
import java.util.Vector;
import javax.naming.InvalidNameException;
import org.openflexo.foundation.rm.DuplicateResourceException;
import org.openflexo.foundation.sg.implmodel.ImplementationModel;
import org.openflexo.foundation.sg.implmodel.TechnologyModelObject;
import org.openflexo.foundation.sg.implmodel.TechnologyModuleImplementation;
import org.openflexo.foundation.sg.implmodel.event.SGAttributeModification;
import org.openflexo.foundation.sg.implmodel.event.SGObjectAddedToListModification;
import org.openflexo.foundation.sg.implmodel.event.SGObjectDeletedModification;
import org.openflexo.foundation.sg.implmodel.event.SGObjectRemovedFromListModification;
import org.openflexo.foundation.xml.ImplementationModelBuilder;
import org.openflexo.toolbox.JavaUtils;
/**
*
* @author Nicolas Daniels
*/
public class HibernateEnum extends TechnologyModelObject {
public static final String CLASS_NAME_KEY = "hibernate_enum";
protected HibernateEnumContainer hibernateEnumContainer;
protected Vector<HibernateEnumValue> hibernateEnumValues = new Vector<HibernateEnumValue>();
// ================ //
// = Constructors = //
// ================ //
/**
* Build a new Hibernate enum for the specified implementation model builder.<br/>
* This constructor is namely invoked during deserialization.
*
* @param builder
* the builder that will create this enum
*/
public HibernateEnum(ImplementationModelBuilder builder) {
this(builder.implementationModel);
initializeDeserialization(builder);
}
/**
* Build a new Hibernate enum for the specified implementation model.
*
* @param implementationModel
* the implementation model where to create this Hibernate enum
*/
public HibernateEnum(ImplementationModel implementationModel) {
super(implementationModel);
}
// =========== //
// = Methods = //
// =========== //
/**
* @Override
*/
@Override
public String getClassNameKey() {
return CLASS_NAME_KEY;
}
/**
* {@inheritDoc}
*/
@Override
public boolean getHasInspector() {
return true;
}
/**
* @Override
*/
@Override
public String getFullyQualifiedName() {
return getHibernateEnumContainer().getFullyQualifiedName() + "." + getName();
}
/* ===================== */
/* ====== Actions ====== */
/* ===================== */
/**
* {@inheritDoc}
*/
@Override
public void delete() {
if (getHibernateEnumContainer() != null) {
getHibernateEnumContainer().removeFromHibernateEnums(this);
}
setChanged();
notifyObservers(new SGObjectDeletedModification());
super.delete();
deleteObservers();
}
/* ===================== */
/* == Getter / Setter == */
/* ===================== */
/**
* {@inheritDoc}
*/
@Override
public void setName(String name) throws DuplicateResourceException, InvalidNameException {
name = JavaUtils.getClassName(name);
super.setName(name);
}
/**
* Return the hibernateEnumValues stored in this model. HibernateEnumValues are sorted by name.
*
* @return sorted hibernateEnumValues stored in this model.
*/
public Vector<HibernateEnumValue> getHibernateEnumValues() {
return hibernateEnumValues;
}
public void setHibernateEnumValues(Vector<HibernateEnumValue> hibernateEnumValues) {
if (requireChange(this.hibernateEnumValues, hibernateEnumValues)) {
Vector<HibernateEnumValue> oldValue = this.hibernateEnumValues;
this.hibernateEnumValues = hibernateEnumValues;
setChanged();
notifyObservers(new SGAttributeModification("hibernateEnumValues", oldValue, hibernateEnumValues));
}
}
public void addToHibernateEnumValues(HibernateEnumValue hibernateEnumValue) {
hibernateEnumValue.setHibernateEnum(this);
hibernateEnumValues.add(hibernateEnumValue);
setChanged();
notifyObservers(new SGObjectAddedToListModification("hibernateEnumValues", hibernateEnumValue));
}
public void removeFromHibernateEnumValues(HibernateEnumValue hibernateEnumValue) {
if (hibernateEnumValues.remove(hibernateEnumValue)) {
setChanged();
notifyObservers(new SGObjectRemovedFromListModification("hibernateEnumValues", hibernateEnumValue));
}
}
public HibernateEnumContainer getHibernateEnumContainer() {
return hibernateEnumContainer;
}
/**
* Called only from HibernateEnumContainer at deserialisation or at entity creation
*
* @param hibernateModel
*/
protected void setHibernateEnumContainer(HibernateEnumContainer hibernateEnumContainer) {
this.hibernateEnumContainer = hibernateEnumContainer;
}
/**
* {@inheritDoc}
*/
@Override
public TechnologyModuleImplementation getTechnologyModuleImplementation() {
return getHibernateEnumContainer().getTechnologyModuleImplementation();
}
}