package org.cloudgraph.web.model.configuration; import java.util.ArrayList; import java.util.List; import java.util.UUID; import javax.faces.application.FacesMessage; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.event.ActionEvent; import javax.faces.validator.ValidatorException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.cloudgraph.web.ErrorHandlerBean; import org.cloudgraph.web.config.web.AppActions; import org.cloudgraph.web.model.ModelBean; import org.cloudgraph.web.query.EnumerationQuery; import org.cloudgraph.web.query.EnumerationViewQuery; import org.cloudgraph.web.query.PackageQuery; import org.cloudgraph.web.sdo.adapter.EnumerationViewAdapter; import org.cloudgraph.web.sdo.core.EnumerationView; import org.cloudgraph.web.sdo.meta.Classifier; import org.cloudgraph.web.sdo.meta.DataType; import org.cloudgraph.web.sdo.meta.Element; import org.cloudgraph.web.sdo.meta.Enumeration; import org.cloudgraph.web.sdo.meta.EnumerationLiteral; import org.cloudgraph.web.sdo.meta.NamedElement; import org.cloudgraph.web.sdo.meta.Package; import org.cloudgraph.web.sdo.meta.PackageableType; import org.cloudgraph.web.util.BeanFinder; import org.plasma.sdo.PlasmaDataGraph; import org.plasma.sdo.PlasmaDataObject; import org.plasma.sdo.PlasmaProperty; import org.plasma.sdo.access.client.SDODataAccessClient; import org.plasma.sdo.helper.PlasmaTypeHelper; import commonj.sdo.DataGraph; import commonj.sdo.Type; @ManagedBean(name="EnumerationEditBean") @SessionScoped public class EnumerationEditBean extends ModelBean { private static final long serialVersionUID = 1L; private static Log log = LogFactory.getLog(EnumerationEditBean.class); private Long enumerationId; private Enumeration enumeration; private EnumerationLiteral literal; private String saveActionReRender; public EnumerationEditBean() { log.debug("created EnumerationEditBean"); } public String getSaveActionReRender() { return saveActionReRender; } public void setSaveActionReRender(String saveActionReRender) { this.saveActionReRender = saveActionReRender; } public String getTitle() { if (this.enumeration != null) return "Edit Enumeration: " + this.enumeration.getDataType().getClassifier().getName(); else return ""; } public String createFromAjax() { create(); return null; // maintains AJAX happyness } public void create(ActionEvent event) { create(); } public String create() { BeanFinder beanFinder = new BeanFinder(); ErrorHandlerBean errorHandler = beanFinder.findErrorHandlerBean(); try { SDODataAccessClient service = new SDODataAccessClient(); DataGraph[] result = service.find(PackageQuery.createQuery("model")); Package pkg = (Package)result[0].getRootObject(); PackageableType enumType = pkg.createPackageableType(); Classifier enumClassifier = enumType.createClassifier(); enumClassifier.setExternalId(UUID.randomUUID().toString()); enumClassifier.setName("New Value List"); DataType enumDatatype = enumClassifier.createDataType(); enumDatatype.setExternalId(UUID.randomUUID().toString()); this.enumeration = enumDatatype.createEnumeration(); this.enumeration.setExternalId(UUID.randomUUID().toString()); this.beanFinder.findReferenceDataCache().expireEnumerations(); return AppActions.CREATE.value(); } catch (Throwable t) { log.error(t.getMessage(), t); errorHandler.setError(t); errorHandler.setRecoverable(false); return AppActions.ERRORHANDLER.value(); } finally { } } public String editFromAjax() { edit(); return null; // maintains AJAX happyness } public void edit(ActionEvent event) { edit(); } public String edit() { BeanFinder beanFinder = new BeanFinder(); ErrorHandlerBean errorHandler = beanFinder.findErrorHandlerBean(); try { SDODataAccessClient service = new SDODataAccessClient(); DataGraph[] result = service.find(EnumerationQuery.createEditQuery(this.enumerationId)); this.enumeration = (Enumeration)result[0].getRootObject(); clear(); return AppActions.EDIT.value(); } catch (Throwable t) { log.error(t.getMessage(), t); errorHandler.setError(t); errorHandler.setRecoverable(false); return AppActions.ERRORHANDLER.value(); } finally { } } public String saveFromAjax() { save(); return null; // maintains AJAX happyness } public void save(ActionEvent event) { save(); } public String save() { BeanFinder beanFinder = new BeanFinder(); ErrorHandlerBean errorHandler = beanFinder.findErrorHandlerBean(); try { if (log.isDebugEnabled()) log.debug(((PlasmaDataObject)this.enumeration).dump()); SDODataAccessClient service = new SDODataAccessClient(); service.commit(this.enumeration.getDataGraph(), beanFinder.findUserBean().getName()); FacesMessage msg = new FacesMessage("Saved Successfully"); FacesContext.getCurrentInstance().addMessage(null, msg); beanFinder.findReferenceDataCache().expireEnumerations(); clear(); return AppActions.SAVE.value(); } catch (Throwable t) { log.error(t.getMessage(), t); FacesMessage msg = new FacesMessage("Internal Error"); FacesContext.getCurrentInstance().addMessage(null, msg); errorHandler.setError(t); errorHandler.setRecoverable(false); return AppActions.ERRORHANDLER.value(); } finally { } } public void exit(ActionEvent event) { exit(); } public String exit() { try { this.enumeration.getDataGraph().getChangeSummary().endLogging(); // wipe any changes this.enumeration.getDataGraph().getChangeSummary().beginLogging(); this.enumeration = null; } catch (Throwable t) { log.error(t.getMessage(), t); } finally { } return null; } public void clear(ActionEvent event) { clear(); } public void clear() { try { } catch (Throwable t) { } finally { } } public void createLiteral() { try { this.literal = this.enumeration.createOwnedLiteral(); } catch (Throwable t) { log.error(t.getMessage(), t); } finally { } } public String cancelCreateEditLiteral() { try { this.literal = null; } catch (Throwable t) { log.error(t.getMessage(), t); } finally { } return null; } public String deleteLiteral() { try { this.literal.delete(); save(); } catch (Throwable t) { log.error(t.getMessage(), t); } finally { } return null; } public List<EnumerationViewAdapter> getEnumerations() { List<EnumerationViewAdapter> result = new ArrayList<EnumerationViewAdapter>(); SDODataAccessClient service = new SDODataAccessClient(); DataGraph[] results = service.find(EnumerationViewQuery.createQuery()); for (int i = 0; i < results.length; i++) { EnumerationView view = (EnumerationView)results[i].getRootObject(); result.add(new EnumerationViewAdapter(view)); ((PlasmaDataGraph)results[i]).removeRootObject(); } return result; } public long getNameMaxLength() { Type type = PlasmaTypeHelper.INSTANCE.getType(Classifier.class); PlasmaProperty nameProp = (PlasmaProperty)type.getProperty( NamedElement.PROPERTY.name.name()); return nameProp.getMaxLength(); } public long getDefinitionMaxLength() { Type type = PlasmaTypeHelper.INSTANCE.getType(Classifier.class); PlasmaProperty nameProp = (PlasmaProperty)type.getProperty( Element.PROPERTY.definition.name()); return nameProp.getMaxLength(); } public long getLiteralNameMaxLength() { Type type = PlasmaTypeHelper.INSTANCE.getType(EnumerationLiteral.class); PlasmaProperty nameProp = (PlasmaProperty)type.getProperty( Element.PROPERTY.definition.name()); return nameProp.getMaxLength(); } public void validateNameLength(FacesContext facesContext, UIComponent component, Object value) { String label = "Name"; String text = null; if (value == null || ((String)value).trim().length() == 0) { return; } else text = ((String)value).trim(); long max = this.getNameMaxLength(); if (text.length() > max) { String msg = label + " is longer than allowed maximum " + String.valueOf(max) + " characters"; throw new ValidatorException(new FacesMessage(msg, msg)); } } public void validateDefinitionLength(FacesContext facesContext, UIComponent component, Object value) { String label = "Definition"; String text = null; if (value == null || ((String)value).trim().length() == 0) { return; } else text = ((String)value).trim(); long max = this.getDefinitionMaxLength(); if (text.length() > max) { String msg = label + " is longer than allowed maximum " + String.valueOf(max) + " characters"; throw new ValidatorException(new FacesMessage(msg, msg)); } } public void validateLiteralNameLength(FacesContext facesContext, UIComponent component, Object value) { String label = "Name"; String text = null; if (value == null || ((String)value).trim().length() == 0) { return; } else text = ((String)value).trim(); long max = this.getLiteralNameMaxLength(); if (text.length() > max) { String msg = label + " is longer than allowed maximum " + String.valueOf(max) + " characters"; throw new ValidatorException(new FacesMessage(msg, msg)); } } public Long getEnumerationId() { return this.enumerationId; } public void setEnumerationId(Long selected) { this.enumerationId = selected; } public boolean getHasEnumeration() { return this.enumeration != null; } public Enumeration getEnumeration() { return this.enumeration; } public void setEnumeration(Enumeration selectedenumeration) { this.enumeration = selectedenumeration; } public String getName() { return this.enumeration.getDataType().getClassifier().getName(); } public void setName(String name) { this.enumeration.getDataType().getClassifier().setName(name); } public String getDefinition() { return this.enumeration.getDataType().getClassifier().getDefinition(); } public void setDefinition(String defn) { this.enumeration.getDataType().getClassifier().setDefinition(defn); } public EnumerationLiteral getLiteral() { return literal; } public void setLiteral(EnumerationLiteral literal) { this.literal = literal; } }