package com.netvisor.risk_management.web.screens; import java.io.Serializable; import java.util.*; import net.sf.hibernate.HibernateException; import net.sf.hibernate.Session; import nextapp.echo.Component; import nextapp.echo.EchoConstants; import nextapp.echo.ImageReference; import nextapp.echo.Label; import nextapp.echo.event.ActionEvent; import nextapp.echo.event.ActionListener; import nextapp.echo.Button; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.netvisor.risk_management.persistence.Question; import com.netvisor.risk_management.persistence.QuestionGroup; import com.netvisor.risk_management.web.Action; import com.netvisor.risk_management.web.Resources; import com.netvisor.web_framework.components.Panel; import com.netvisor.metadata_view.hibernate.*; import com.netvisor.common.Debug; import com.netvisor.common.data_model_metadata.*; import com.netvisor.common.data_model_metadata.EntityMetadata; import com.netvisor.common.data_model_metadata.EntityMetadata.Property; import echopoint.EchoPointComponent; import echopoint.Tree; import echopoint.tree.DefaultMutableTreeNode; import echopoint.tree.TreeCellRenderer; public class QuestionGroupTreeViewScreen extends TreeViewScreen { protected static Log log = LogFactory.getLog(QuestionGroupTreeViewScreen.class); public QuestionGroupTreeViewScreen() throws HibernateException { super(QuestionGroup.class); EntityMetadata metadata = getMetadata(); addChildrenProperty((HibernateEntityMetadata.Property)metadata.getProperty("childGroups")); addChildrenProperty((HibernateEntityMetadata.Property)metadata.getProperty("questions")); // we open a long session here QuestionGroup root = QuestionGroup.loadRoot(getLongTransactionSession()); if (log.isDebugEnabled()) log.debug("QuestionGroup tree view ctor with root [" + root + "]"); setEntity(root); } protected void createTree() { super.createTree(); tree.setCellRenderer(new QuestionTreeNodeComponent()); tree.setRootVisible(false); } // public void init() // { // super.init(); // // } private class QuestionTreeNodeComponent extends Panel implements TreeCellRenderer, ActionListener { private Button button; // private Button mInfo; private QuestionTreeNodeComponent(String label, ImageReference icon) { this(); setTo(label, icon); } private QuestionTreeNodeComponent(Question question) { this(); setTo(question); } private QuestionTreeNodeComponent(QuestionGroup group) { this(); setTo(group); } private QuestionTreeNodeComponent() { // button = QuestionGroupTreeViewScreen.this.createLinkButton(Action.create(Action.ENTITY_SELECTED)); button = new Button(); button.addActionListener(this); button.setHorizontalAlignment(EchoConstants.LEFT); add(button); } private QuestionTreeNodeComponent setTo(String label, ImageReference icon) { button.setIcon(icon); button.setText(label); return this; } private QuestionTreeNodeComponent setTo(String label) { button.setText(label); return this; } private QuestionTreeNodeComponent setTo(Question question) { setTo(question.getBody(), Resources.QUESTION); button.setIdentifier(question); // button.setToolTipText(question.getBody()); return this; } private QuestionTreeNodeComponent setTo(QuestionGroup group) { setTo(group.getTitle(), Resources.QUESTIONGROUP); button.setIdentifier(group); // button.setToolTipText(null); return this; } public Component getTreeCellRendererComponent(Tree _tree, Object object, boolean selected, boolean expanded, boolean leaf) { if (object instanceof DefaultMutableTreeNode) { object = ((DefaultMutableTreeNode)object).getUserObject(); if (object instanceof Question) { Question question = (Question)object; // setTo(question); // return this; return new QuestionTreeNodeComponent(question); } else if (object instanceof QuestionGroup) { QuestionGroup group = (QuestionGroup)object; // setTo(group); // return this; return new QuestionTreeNodeComponent(group); } else { if (log.isWarnEnabled()) log.warn("Unknown class [" + object.getClass().getName() + "]"); } } else { if (log.isWarnEnabled()) log.warn("Unexpected class [" + object.getClass().getName() + "]"); } setTo("Error rendering cell [" + object.toString() + "]", null); return this; } public Label getTreeCellRendererText(Tree _tree, Object object, boolean selected, boolean expanded, boolean leaf) { return null; } public String getIdString(Tree _tree, Object value) { return "" + System.identityHashCode(value); } /** * @see nextapp.echo.event.ActionListener#actionPerformed(nextapp.echo.event.ActionEvent) */ public void actionPerformed(ActionEvent event) { if (event.getSource() instanceof Button) { Object object = ((Button)event.getSource()).getIdentifier(); getWindow().display(new HibernateEntityScreen(object.getClass(), object)); } } } }