package org.cloudgraph.web.model.common;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.ValidatorException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.cloudgraph.web.WebConstants;
import org.cloudgraph.web.model.taxonomy.CategoryLabelFormat;
import org.cloudgraph.web.model.taxonomy.DynamicTaxonomyTreeBean;
import org.cloudgraph.web.model.taxonomy.TaxonomyTreeNodeType;
import org.cloudgraph.web.model.tree.TreeNodeModel;
import org.cloudgraph.web.model.tree.TreeNodeTypeMap;
import org.cloudgraph.web.sdo.adapter.CategorizationAdapter;
import org.cloudgraph.web.sdo.adapter.TaxonomyAdapter;
import org.cloudgraph.web.sdo.categorization.Category;
import org.plasma.sdo.PlasmaDataObject;
import org.plasma.sdo.access.client.SDODataAccessClient;
import org.plasma.sdo.helper.PlasmaCopyHelper;
import org.primefaces.event.NodeSelectEvent;
import org.primefaces.event.SelectEvent;
import org.primefaces.model.TreeNode;
import commonj.sdo.ChangeSummary;
import commonj.sdo.DataObject;
@ManagedBean(name="CategorizationEditBean")
@ViewScoped
public class CategorizationEditBean extends DynamicTaxonomyTreeBean {
private static final long serialVersionUID = 1L;
private static Log log = LogFactory.getLog(CategorizationEditBean.class);
protected DataObject target;
protected TaxonomyAdapter taxonomy;
protected CategorizationAdapter categorization;
protected String saveActionReRender;
public CategorizationEditBean() {
int foo = 0;
foo++;
}
public DataObject getTarget() {
return target;
}
public void setTarget(DataObject target) {
this.target = target;
}
public TaxonomyAdapter getTaxonomy() {
return taxonomy;
}
public void setTaxonomy(TaxonomyAdapter taxonomy) {
this.taxonomy = taxonomy;
TreeNodeTypeMap treeMap = new MyTreeNodeTypeMap();
this.setTypeMap(treeMap);
this.initTree(this.taxonomy.getTaxonomy());
this.setLabelFormat(new CategoryLabelFormat() {
public String getLabel(Category category) {
String label = "(" + category.getId() + ") "
+ category.getName();
return label;
}
});
this.selectedCategory = null; // force user to select
}
public String getSaveActionReRender() {
return saveActionReRender;
}
public void setSaveActionReRender(String saveActionReRender) {
this.saveActionReRender = saveActionReRender;
}
public CategorizationAdapter getCategorization() {
return categorization;
}
public void setCategorization(CategorizationAdapter categorization) {
this.categorization = categorization;
}
public String create() {
try {
// Initially create the adapter without
// the DataObject it is adapting to accommodate
// user cancel and close of modal dialog
// Only build the DataObject on demand during
// appropriate JSF lifecycle phase
this.categorization =
CategorizationAdapter.newAdapter(this.target);
}
catch (Throwable t) {
log.error(t.getMessage(), t);
}
return null;
}
public String edit() {
try {
}
catch (Throwable t) {
log.error(t.getMessage(), t);
}
return null;
}
public String save() {
try {
SDODataAccessClient service = new SDODataAccessClient();
Category copy = (Category)PlasmaCopyHelper.INSTANCE.copyShallow(this.selectedCategory);
this.categorization.setCategory(copy);
service.commit(categorization.getDataGraph(),
beanFinder.findUserBean().getName());
} catch (Throwable t) {
log.error(t.getMessage(), t);
}
return null;
}
public String cancel() {
try {
this.categorization = null;
}
catch (Throwable t) {
log.error(t.getMessage(), t);
}
return null;
}
public String delete() {
try {
ChangeSummary changeSummary = categorization.getDataGraph().getChangeSummary();
if (changeSummary.isCreated(categorization.getRoot()))
((PlasmaDataObject)categorization.getRoot()).remove();
else {
// don't delete referenced category
categorization.getCategorization().unsetCategory();
categorization.getRoot().delete();
}
SDODataAccessClient service = new SDODataAccessClient();
service.commit(categorization.getRoot().getDataGraph(),
beanFinder.findUserBean().getName());
}
catch (Throwable t) {
log.error(t.getMessage(), t);
}
return null;
}
public String getSelectedCategoryName() {
if (this.selectedCategory != null)
return this.selectedCategory.getName();
else
return WebConstants.DEFAULT_SELECTION;
}
public void validateSelectedCategoryName(FacesContext facesContext,
UIComponent component, Object value) {
if (value == null ||
((String)value).trim().length() == 0 ||
WebConstants.DEFAULT_SELECTION.equals(value))
{
String msg = "Please select a category";
throw new ValidatorException(new FacesMessage(msg, msg));
}
}
class MyTreeNodeTypeMap implements TreeNodeTypeMap {
public String getTreeNodeType(int level) {
switch (level)
{
default: return TaxonomyTreeNodeType.level_any.name();
}
}
}
}