package org.cloudgraph.web.model.configuration; import java.util.ArrayList; import java.util.List; import java.util.MissingResourceException; 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.model.SelectItem; 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.ResourceManager; import org.cloudgraph.web.WebConstants; import org.cloudgraph.web.config.web.AppActions; import org.cloudgraph.web.model.ModelBean; import org.cloudgraph.web.query.PackageQuery; import org.cloudgraph.web.sdo.meta.Element; 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.PlasmaDataObject; import org.plasma.sdo.PlasmaProperty; import org.plasma.sdo.access.client.SDODataAccessClient; import org.plasma.sdo.helper.PlasmaCopyHelper; import commonj.sdo.DataGraph; import commonj.sdo.DataObject; @ManagedBean(name="PackageEditBean") @SessionScoped public class PackageEditBean extends ModelBean { private static final long serialVersionUID = 1L; private static Log log = LogFactory.getLog(PackageEditBean.class); private Long packageId; private Package package_; public PackageEditBean() { log.debug("created PackageEditBean"); } public String getTitle() { if (this.package_ != null) return "Edit Package: " + this.package_.getName(); else return ""; } public String createFromAjax() { create(); return null; // maintains AJAX happyness } public void create(ActionEvent event) { create(); } public String create() { try { SDODataAccessClient service = new SDODataAccessClient(); DataGraph[] result = service.find(PackageQuery.createQuery("model")); Package pkg = (Package)result[0].getRootObject(); this.package_ = pkg.createChild(); PackageableType packageableType = this.package_.createPackageableType(); this.package_.setExternalId(UUID.randomUUID().toString()); this.package_.setName("New Catalog"); } catch (Throwable t) { log.error(t.getMessage(), t); FacesMessage msg = new FacesMessage("Internal Error"); FacesContext.getCurrentInstance().addMessage(null, msg); } finally { } return null; } public String editFromAjax() { edit(); return null; // maintains AJAX happyness } public void edit(ActionEvent event) { edit(); } public String edit() { try { SDODataAccessClient service = new SDODataAccessClient(); DataGraph[] result = service.find(PackageQuery.createEditQuery(this.packageId)); this.package_ = (Package)result[0].getRootObject(); clear(); } catch (Throwable t) { log.error(t.getMessage(), t); FacesMessage msg = new FacesMessage("Internal Error"); FacesContext.getCurrentInstance().addMessage(null, msg); } finally { } return null; } public String saveFromAjax() { save(); return null; // maintains AJAX happyness } public void save(ActionEvent event) { save(); } public String save() { try { if (log.isDebugEnabled()) log.debug(((PlasmaDataObject)this.package_).dump()); SDODataAccessClient service = new SDODataAccessClient(); service.commit(this.package_.getDataGraph(), beanFinder.findUserBean().getName()); FacesMessage msg = new FacesMessage("Saved Successfully"); FacesContext.getCurrentInstance().addMessage(null, msg); this.beanFinder.findReferenceDataCache().expirePackages(); clear(); return AppActions.SAVE.value(); } catch (Throwable t) { log.error(t.getMessage(), t); FacesMessage msg = new FacesMessage("Internal Error"); FacesContext.getCurrentInstance().addMessage(null, msg); } finally { } return null; } public void exit(ActionEvent event) { exit(); } public String exit() { try { this.package_.getDataGraph().getChangeSummary().endLogging(); // wipe any changes this.package_.getDataGraph().getChangeSummary().beginLogging(); this.package_ = null; } catch (Throwable t) { } finally { } return null; } public void clear(ActionEvent event) { clear(); } public void clear() { try { } catch (Throwable t) { } finally { } } public long getNameMaxLength() { PlasmaProperty nameProp = (PlasmaProperty)this.package_.getType().getProperty( NamedElement.PROPERTY.name.name()); return nameProp.getMaxLength(); } public long getDefinitionMaxLength() { PlasmaProperty nameProp = (PlasmaProperty)this.package_.getType().getProperty( Element.PROPERTY.definition.name()); return nameProp.getMaxLength(); } 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 validateDataTypeId(FacesContext facesContext, UIComponent component, Object value) { if (value == null || ((Long)value).intValue() == -1) { String label = "Data Type"; try { label = ResourceManager.instance().getString("aplsPropertyEdit_dataType_label"); } catch (MissingResourceException e) { } String msg = label + " is a required field"; throw new ValidatorException(new FacesMessage(msg, msg)); } } public Long getPackageId() { return this.packageId; } public void setPackageId(Long selected) { this.packageId = selected; } public boolean getHasPackage() { return this.package_ != null; } public Package getPackage() { return this.package_; } public void setPackage(Package selectedPackage) { this.package_ = selectedPackage; } public DataObject getPackageDataObject() { return this.package_; } public Long getParentPackageId() { if (this.package_ != null && this.package_.getParent() != null) return this.package_.getParent().getSeqId(); else return new Long(-1); } public void setParentPackageId(Long id) { if (id != null && this.package_ != null && this.package_.getParent() != null && this.package_.getParent().getSeqId() == id) return; // no change - thanks anyway JSF if (this.package_ != null) { boolean found = false; Package pkg = beanFinder.findReferenceDataCache().getPackage(id); if (pkg != null) { found = true; this.package_ = (Package)PlasmaCopyHelper.INSTANCE.copyShallow(pkg); } if (!found) log.error("could not find Clazz id: " + id); } } public void validateParentPackageId(FacesContext facesContext, UIComponent component, Object value) { if (value == null || ((Long)value).intValue() == -1) { String label = "Parent Catalog"; try { label = ResourceManager.instance().getString("aplsPackageEdit_parentPackage_label"); } catch (MissingResourceException e) { } String msg = label + " is a required field"; throw new ValidatorException(new FacesMessage(msg, msg)); } } public List<SelectItem> getParentPackageItems() { List<SelectItem> packageItems = new ArrayList<SelectItem>(); SelectItem item = new SelectItem(new Long(-1), WebConstants.DEFAULT_SELECTION); packageItems.add(item); for (Package type : beanFinder.findReferenceDataCache().getPackages()) { String def = type.getDefinition(); if (def != null && def.length() > 26) def = def.substring(0, 23) + "..."; packageItems.add(new SelectItem( type.getSeqId(), type.getName(), def)); } return packageItems; } }