diff --git a/ccm-core/src/main/java/com/arsdigita/bebop/Tree.java b/ccm-core/src/main/java/com/arsdigita/bebop/Tree.java
deleted file mode 100644
index 21b28a9c5..000000000
--- a/ccm-core/src/main/java/com/arsdigita/bebop/Tree.java
+++ /dev/null
@@ -1,784 +0,0 @@
-/*
- * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-package com.arsdigita.bebop;
-
-import static com.arsdigita.bebop.Component.*;
-
-import com.arsdigita.bebop.event.ActionEvent;
-import com.arsdigita.bebop.event.ActionListener;
-import com.arsdigita.bebop.event.ChangeEvent;
-import com.arsdigita.bebop.event.ChangeListener;
-import com.arsdigita.bebop.event.EventListenerList;
-import com.arsdigita.bebop.event.TreeExpansionEvent;
-import com.arsdigita.bebop.event.TreeExpansionListener;
-import com.arsdigita.bebop.parameters.ParameterModel;
-import com.arsdigita.bebop.parameters.StringParameter;
-import com.arsdigita.bebop.tree.DefaultTreeCellRenderer;
-import com.arsdigita.bebop.tree.TreeCellRenderer;
-import com.arsdigita.bebop.tree.TreeModel;
-import com.arsdigita.bebop.tree.TreeModelBuilder;
-import com.arsdigita.bebop.tree.TreeNode;
-import com.arsdigita.util.Assert;
-import com.arsdigita.util.LockableImpl;
-import com.arsdigita.xml.Element;
-
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import java.util.Iterator;
-
-/**
- * Used to print a tree structure. Nodes can be in expanded or collapsed state.
- * Tree uses the getChildren() and getRoot() methods from
- * TreeModel and traverses the iterator to get to all the nodes.
- *
- * This class keeps track of which nodes are expanded and collapsed and the
- * hierarchy of nodes, and displays the tree correspondingly.
- *
- * @author David Lutterkort
- * @author Stanislav Freidin
- * @author Tri Tran
- * @version $Id$
- */
-public class Tree extends SimpleComponent implements Resettable {
-
- private static final Logger LOGGER = LogManager.getLogger(Tree.class);
-
- private static final boolean s_selectAttributeEnabled = BebopConfig
- .getConfig().isTreeSelectEnabled();
-
- // Any node id in the currentState is equivalent
- // to that node being expanded. If node id is
- // NOT in the currentState, then it's collapsed.
- private static final String CURRENT_STATE = "state";
- private static final String EXPAND_EVENT = "expand";
- private static final String COLLAPSE_EVENT = "collapse";
- private static final String SELECT = "sel";
- private static final String SELECT_EVENT = "s";
-
- private static final boolean EXPANDED = true;
- private static final boolean NOT_EXPANDED = false; // Collapsed
- private static final boolean LEAF = true;
- private static final boolean NOT_LEAF = false;
-
- protected StringParameter m_currentState;
-
- protected TreeModelBuilder m_builder;
- private RequestLocal m_model;
- private TreeModel m_tree;
-
- private EventListenerList m_listeners;
-
- private SingleSelectionModel m_selection;
-
- private ChangeListener m_changeListener;
-
- private Element treeElement;
-
- private TreeCellRenderer m_renderer;
-
- /**
- * Constructs a new Tree using the specified
- * {@link TreeModelBuilder}. The {@link TreeModelBuilder} will instantiate a
- * {@link TreeModel} during each request.
- *
- * @param b the {@link TreeModelBuilder}
- */
- public Tree(TreeModelBuilder b) {
- super();
- m_currentState = new StringParameter(CURRENT_STATE);
- m_builder = b;
- m_renderer = new DefaultTreeCellRenderer();
- m_selection = new ParameterSingleSelectionModel(new StringParameter(
- SELECT));
- m_listeners = new EventListenerList();
-
- m_model = new RequestLocal() {
-
- protected Object initialValue(PageState s) {
- return getModelBuilder().makeModel(Tree.this, s);
- }
-
- };
-
- m_tree = null;
- }
-
- /**
- * Deprecated constructor that takes a default {@link TreeModel} and wraps
- * it in a dummy TreeModelBuilder.
- *
- * @param t the TreeModel
- *
- * @deprecated This constructor has been deprecated in favor of
- * Tree(TreeModelBuilder b). It is not practical to hardwire
- * the TreeModel into the Tree, since the model
- * may change during each request. It is possible to write the
- * model-instantiation code in {@link TreeModel#getRoot(PageState)}, but the
- * {@link TreeModelBuilder} fits better into the pattern which has already
- * been established by {@link List} and {@link Table}
- */
- public Tree(TreeModel t) {
- this(new WrapperModelBuilder());
- m_tree = t;
- }
-
- /**
- * Registers the two parameters to the page.
- */
- public void register(Page p) {
- Assert.isUnlocked(this);
-
- p.addComponent(this);
- p.addComponentStateParam(this, m_currentState);
- p.addComponentStateParam(this, getSelectionModel().getStateParameter());
- }
-
- /**
- * Clears the request state of the tree.
- */
- public void reset(final PageState state) {
- clearSelection(state);
- clearExpansionState(state);
- }
-
- /**
- * Returns the tree model used for this tree.
- *
- * @return a TreeModel.
- *
- * @see #setTreeModel setTreeModel
- * @see TreeModel
- * @deprecated Use {@link #getTreeModel(PageState)} instead
- */
- public final TreeModel getTreeModel() {
- return m_tree;
- }
-
- /**
- * Returns the {@link TreeModel} used by the tree for the current request.
- *
- * @param s the page state
- */
- public TreeModel getTreeModel(PageState s) {
- return (TreeModel) m_model.get(s);
- }
-
- /**
- * @return the {@link TreeModelBuilder} used to build the tree model for
- * this tree.
- */
- public final TreeModelBuilder getModelBuilder() {
- return m_builder;
- }
-
- /**
- * @param b the new {@link TreeModelBuilder} for the tree
- */
- public void setModelBuilder(TreeModelBuilder b) {
- Assert.isUnlocked(this);
- m_builder = b;
- }
-
- /**
- * Sets the tree model used for this tree.
- *
- * @return a TreeModel.
- *
- * @see #setTreeModel setTreeModel
- * @see TreeModel
- */
- public void setTreeModel(TreeModel m) {
- Assert.isUnlocked(this);
- m_tree = m;
- }
-
- /**
- * Sets the selection model, which keeps track of which node is currently
- * selected. It can be used to manipulate the selection programmatically.
- *
- * @param m the new selection model
- */
- public void setSelectionModel(SingleSelectionModel m) {
- Assert.isUnlocked(this);
- m_selection = m;
- LOGGER.debug("New model: " + m);
- }
-
- /**
- * Gets the selection model, which keeps track of which node is currently
- * selected. It can be used to manipulate the selection programmatically.
- *
- * @return the model used by the tree to keep track of the selected node.
- */
- public final SingleSelectionModel getSelectionModel() {
- return m_selection;
- }
-
- /**
- * Gets the key for the selected node. This will only be a valid key if
- * {@link #isSelected isSelected} is true.
- *
- * @param state represents the state of the current request
- *
- * @return the key for the selected node.
- *
- * @pre isSelected(state)
- */
- public Object getSelectedKey(PageState state) {
- return m_selection.getSelectedKey(state);
- }
-
- /**
- * Sets the selection to the one with the specified key. If key
- * was not selected already, fires the {@link
- * ChangeEvent}.
- *
- * @param state represents the state of the current request
- * @param key the key for the selected node
- *
- * @see #fireStateChanged fireStateChanged
- */
- public void setSelectedKey(PageState state, Object key) {
- m_selection.setSelectedKey(state, key);
- }
-
- /**
- * Returns true if one of the nodes is currently selected.
- *
- * @param state represents the state of the current request
- *
- * @return true if one of the nodes is selected;
- * false otherwise.
- */
- public boolean isSelected(PageState state) {
- return m_selection.isSelected(state);
- }
-
- /**
- * Clears the selection in the request represented by state.
- *
- * @param state represents the state of the current request
- *
- * @post ! isSelected(state)
- */
- public void clearSelection(PageState state) {
- m_selection.clearSelection(state);
- }
-
- /**
- * Tells whether the tree has state on the request for tree node expansion.
- */
- public final boolean hasExpansionState(final PageState state) {
- return state.getValue(m_currentState) != null;
- }
-
- /**
- * Clears any tree node expansion state on the request.
- */
- public final void clearExpansionState(final PageState state) {
- state.setValue(m_currentState, null);
- }
-
- /**
- * Creates the change listener used for forwarding change events fired by
- * the selection model to change listeners registered with the tree. The
- * returned change listener refires the event with the tree, rather than the
- * selection model, as source.
- *
- * @return the change listener used internally by the tree.
- */
- protected ChangeListener createChangeListener() {
- return new ChangeListener() {
-
- public void stateChanged(ChangeEvent e) {
- fireStateChanged(e.getPageState());
- }
-
- };
- }
-
- /**
- * Adds a change listener. A change event is fired whenever the selected
- * tree node changes during the processing of a request. The change event
- * that listeners receive names the tree as the source.
- *
- * @param l the change listener to run when the selected item changes in a
- * request
- *
- * @pre ! isLocked()
- */
- public void addChangeListener(ChangeListener l) {
- Assert.isUnlocked(this);
- if (m_changeListener == null) {
- m_changeListener = createChangeListener();
-
- if (LOGGER.isDebugEnabled()) {
- LOGGER.debug("Adding listener " + l + " to " + this);
- }
-
- m_selection.addChangeListener(m_changeListener);
- }
- m_listeners.add(ChangeListener.class, l);
- }
-
- /**
- * Removes a change listener. The listener should have been previously added
- * with {@link #addChangeListener addChangeListener}, although no error is
- * signalled if the change listener is not found among the tree's listeners.
- *
- * @param l the change listener to remove from the tree
- */
- public void removeChangeListener(ChangeListener l) {
- Assert.isUnlocked(this);
-
- if (LOGGER.isDebugEnabled()) {
- LOGGER.debug("Removing listener " + l + " from " + this);
- }
-
- m_listeners.remove(ChangeListener.class, l);
- }
-
- /**
- * Fires a change event to signal that the selected list item has changed in
- * the request represented by state. The source of the event is
- * the tree.
- *
- * @param state represents the state of the current request
- */
- protected void fireStateChanged(PageState state) {
- Iterator i = m_listeners.getListenerIterator(ChangeListener.class);
- ChangeEvent e = null;
-
- while (i.hasNext()) {
- if (e == null) {
- e = new ChangeEvent(this, state);
- }
- ((ChangeListener) i.next()).stateChanged(e);
- }
- }
-
- /**
- * Adds a listener that is notified whenever a user clicks on any part of
- * the tree, either to expand or collapse a node, or to select a node. The
- * listener is run whenever {@link #respond respond} is called.
- *
- * @pre l != null
- * @pre ! isLocked()
- */
- public void addActionListener(ActionListener l) {
- Assert.isUnlocked(this);
- m_listeners.add(ActionListener.class, l);
- }
-
- /**
- * Removes a previously added ActionListener.
- *
- * @see #addActionListener addActionListener
- */
- public void removeActionListener(ActionListener l) {
- Assert.isUnlocked(this);
- m_listeners.remove(ActionListener.class, l);
- }
-
- /**
- * Notifies listeners that some part of the tree was clicked by the user.
- * The source of the event is the tree.
- *
- * @pre data != null
- * @see #respond respond
- */
- protected void fireActionEvent(PageState data) {
- Iterator i = m_listeners.getListenerIterator(ActionListener.class);
- ActionEvent e = null;
-
- while (i.hasNext()) {
- if (e == null) {
- e = new ActionEvent(this, data);
- }
- ((ActionListener) i.next()).actionPerformed(e);
- }
- }
-
- /**
- * Adds a listener that is notified whenever a tree node is expanded or
- * collpased, either by a user's click or by explicit calls to {@link
- * #expand expand} or {@link #collapse collapse}.
- *
- * @pre l != null
- * @pre ! isLocked()
- */
- public void addTreeExpansionListener(TreeExpansionListener l) {
- Assert.isUnlocked(this);
- m_listeners.add(TreeExpansionListener.class, l);
- }
-
- /**
- * Removes a previously added TreeExpansionListener.
- *
- * @pre ! isLocked()
- * @see #addTreeExpansionListener addTreeExpansionListener
- */
- public void removeTreeExpansionListener(TreeExpansionListener l) {
- Assert.isUnlocked(this);
- m_listeners.remove(TreeExpansionListener.class, l);
- }
-
- /**
- * Notifies all registered {@link
- * com.arsdigita.bebop.event.TreeExpansionListener
- * TreeExpansionListeners} that a node in the tree has been expanded.
- *
- * @pre state != null
- * @pre nodeKey != null
- */
- protected void fireTreeExpanded(PageState state, Object nodeKey) {
- Iterator i = m_listeners
- .getListenerIterator(TreeExpansionListener.class);
- TreeExpansionEvent e = null;
-
- while (i.hasNext()) {
- if (e == null) {
- e = new TreeExpansionEvent(this, state, nodeKey);
- }
- ((TreeExpansionListener) i.next()).treeExpanded(e);
- }
- }
-
- /**
- * Notifies all registered {@link
- * com.arsdigita.bebop.event.TreeExpansionListener
- * TreeExpansionListeners} that a node in the tree has been collapsed.
- *
- * @pre state != null
- * @pre nodeKey != null
- */
- protected void fireTreeCollapsed(PageState state, Object nodeKey) {
- Iterator i = m_listeners
- .getListenerIterator(TreeExpansionListener.class);
- TreeExpansionEvent e = null;
-
- while (i.hasNext()) {
- if (e == null) {
- e = new TreeExpansionEvent(this, state, nodeKey);
- }
- ((TreeExpansionListener) i.next()).treeCollapsed(e);
- }
- }
-
- /**
- * Notifies the Tree that a node has been selected. Changes the
- * currently selected tree component.
- */
- public void respond(PageState data) throws javax.servlet.ServletException {
- String action = data.getControlEventName();
- String node = data.getControlEventValue();
-
- if (EXPAND_EVENT.equals(action)) {
- expand(node, data);
- } else if (COLLAPSE_EVENT.equals(action)) {
- collapse(node, data);
- } else if (SELECT_EVENT.equals(action)) {
- setSelectedKey(data, data.getControlEventValue());
- } else {
- throw new javax.servlet.ServletException("Unknown event '" + action
- + "'");
- }
- fireActionEvent(data);
- }
-
- //////////////////////////////
- // MANAGE TREE'S NODE STATE //
- //////////////////////////////
- /**
- * Determines whether the node at the specified display row is collapsed.
- *
- * @return true if the node at the specified display row is
- * collapsed; false otherwise.
- */
- public boolean isCollapsed(String nodeKey, PageState data) {
- String stateString = (String) data.getValue(m_currentState);
- String spaceId = " " + nodeKey + " ";
- int idIndex;
-
- if (stateString == null) {
- return true;
- } else {
- idIndex = stateString.indexOf(spaceId);
- }
-
- // == -1 means it's not found in current state, thus it's collapsed
- return (idIndex == -1);
- }
-
- /**
- * Collapses a node in the tree and makes its children visible.
- *
- * @param nodeKey the key that the tree model uses to identify the node
- * @param data represents the current request
- *
- * @pre nodeKey != null
- * @pre data != null
- */
- public void collapse(String nodeKey, PageState data) {
- Assert.exists(nodeKey);
- Assert.exists(data);
-
- StringBuffer newCurrentState = new StringBuffer("");
- String stateString = (String) data.getValue(m_currentState);
- int idIndex;
- String spaceId = " " + nodeKey + " ";
- int idLength = spaceId.length();
-
- if (stateString != null) {
- idIndex = stateString.indexOf(spaceId);
- // Found it; it should currently be expanded, so collapse it
- if (idIndex != -1) {
- newCurrentState
- .append(stateString.substring(0, idIndex))
- .append(" ");
- if (stateString.length() > (idIndex + idLength)) {
- newCurrentState.append(stateString.substring(idIndex
- + idLength));
- }
- data.setValue(m_currentState, newCurrentState.toString());
- fireTreeCollapsed(data, nodeKey);
- }
- }
- }
-
- /**
- * Expands a node in the tree and makes its children visible.
- *
- * @param nodeKey the key that the tree model uses to identify the node
- * @param data represents the current request
- *
- * @pre nodeKey != null
- * @pre data != null
- */
- public void expand(String nodeKey, PageState data) {
- Assert.exists(nodeKey);
- Assert.exists(data);
-
- String stateString = (String) data.getValue(m_currentState);
- String spaceId = " " + nodeKey + " ";
- StringBuffer newCurrentState = new StringBuffer("");
-
- if (stateString != null) {
- // Can't find it; it should currently be collapsed, so expand it
- if ((stateString.indexOf(spaceId)) == -1) {
- // Start with existing stateString...
- newCurrentState.append(stateString);
- // Add to newCurrentState string the new node Id
- newCurrentState.append(spaceId);
- // Set the value of the current state
- data.setValue(m_currentState, newCurrentState.toString());
- fireTreeExpanded(data, nodeKey);
- }
- } else {
- // Add to newCurrentState string the new node Id
- newCurrentState.append(spaceId);
- // Set the value of the current state
- data.setValue(m_currentState, newCurrentState.toString());
- fireTreeExpanded(data, nodeKey);
- }
- }
-
- /////////////////////////////////////////////
- // PRINT THE TREE DIRECTLY OR GENERATE DOM //
- /////////////////////////////////////////////
- /**
- * Returns the renderer currently used to render tree nodes.
- *
- * @return the current tree node renderer.
- */
- public final TreeCellRenderer getCellRenderer() {
- return m_renderer;
- }
-
- /**
- * Sets the cell renderer to be used when generating output with
- * {@link #generateXML generateXML}.
- *
- * @param r a TreeCellRenderer value
- */
- public void setCellRenderer(TreeCellRenderer r) {
- Assert.isUnlocked(this);
- m_renderer = r;
- }
-
- private boolean hasSelectedChild(TreeModel tree, TreeNode node,
- PageState data, Object selKey) {
- String nodeKey = (String) node.getKey();
- if ((selKey != null) && (selKey.equals(nodeKey) || selKey.toString()
- .equals(nodeKey))) {
- return true;
- }
- Iterator i = tree.getChildren(node, data);
- while (i.hasNext()) {
- TreeNode child = (TreeNode) i.next();
- if (hasSelectedChild(tree, child, data, selKey)) {
- // At this point we should close the opened DataQuery pointed to by Iterator (i).
- // Since the data query is wrapped within DataQueryIterator, we don't have
- // access to it directly, so this looks like the only viable option ...
- while (i.hasNext()) {
- }
- return true;
- }
- }
- return false;
- }
-
- /**
- * Builds a DOM representing the tree.
- *
- */
- protected void generateTree(PageState data, Element parent, TreeNode node,
- TreeModel tree) {
-
- Element t_node = parent.newChildElement("bebop:t_node", BEBOP_XML_NS);
-
- String nodeKey = node.getKey().toString();
- Object selKey = getSelectedKey(data);
- boolean isSelected = (selKey != null)
- && (selKey.equals(nodeKey) || selKey.toString()
- .equals(nodeKey));
-
- boolean hasChildren = tree.hasChildren(node, data);
- if (s_selectAttributeEnabled) {
- boolean hasSelectedChild = false;
- if (!isSelected && hasChildren) {
- hasSelectedChild = hasSelectedChild(tree, node, data, selKey);
- }
- t_node.addAttribute("isSelected", String.valueOf(isSelected
- | hasSelectedChild));
- }
-
- if (hasChildren) {
- boolean collapsed = isCollapsed(nodeKey, data);
- data
- .setControlEvent(this, collapsed ? EXPAND_EVENT : COLLAPSE_EVENT,
- nodeKey);
- try {
- t_node.addAttribute("href", data.stateAsURL());
- } catch (java.io.IOException ioe) {
- // TODO: stateAsURL failed
- }
- data.clearControlEvent();
- if (collapsed) {
- // Collapsed
- t_node.addAttribute("collapsed", "t");
- data.setControlEvent(this, SELECT_EVENT, nodeKey);
- Component c = getCellRenderer().getComponent(this, data,
- node.getElement(),
- isSelected,
- NOT_EXPANDED,
- NOT_LEAF,
- nodeKey);
- c.generateXML(data, t_node);
- } else {
- // Expanded
- t_node.addAttribute("expanded", "t");
- data.setControlEvent(this, SELECT_EVENT, nodeKey);
- Component c = getCellRenderer().getComponent(this, data,
- node.getElement(),
- isSelected,
- EXPANDED, NOT_LEAF,
- nodeKey);
- c.generateXML(data, t_node);
- t_node.addAttribute("indentStart", "t");
- for (Iterator i = tree.getChildren(node, data); i.hasNext();) {
- generateTree(data, t_node, (TreeNode) i.next(), tree);
- }
- t_node.addAttribute("indentClose", "t");
- }
- } else {
- // No children, no need for link...
- t_node.addAttribute("childless", "t");
- data.setControlEvent(this, SELECT_EVENT, nodeKey);
- Component c = getCellRenderer().getComponent(this, data,
- node.getElement(),
- isSelected,
- NOT_EXPANDED, LEAF,
- nodeKey);
- c.generateXML(data, t_node);
- }
- }
-
- /**
- * Services the request by building a DOM tree with the nodes first and then
- * the included page.
- */
- public void generateXML(PageState data, Element parent) {
-
- TreeModel tree = getTreeModel(data);
-
- if (!isVisible(data)) {
- return;
- }
-
- treeElement = parent.newChildElement("bebop:tree", BEBOP_XML_NS);
- exportAttributes(treeElement);
-
- TreeNode _rootNode = tree.getRoot(data);
- generateTree(data, treeElement, _rootNode, tree);
-
- }
-
- /**
- * Manage the selected item by manipulating the state parameter.
- *
- * @deprecated The {@link ParameterSingleSelectionModel} contains all the
- * functionality of this class
- */
- public static class TreeSingleSelectionModel
- extends ParameterSingleSelectionModel {
-
- public TreeSingleSelectionModel(ParameterModel m) {
- super(m);
- }
-
- }
-
- /**
- * Locks the Tree and prohibits further modifications.
- */
- public void lock() {
- getModelBuilder().lock();
- super.lock();
- }
-
- /**
- * Returns the tree model of the tree. A wrapper class to make deprecated
- * constructor work.
- */
- private static class WrapperModelBuilder extends LockableImpl
- implements TreeModelBuilder {
-
- public WrapperModelBuilder() {
- super();
- }
-
- public TreeModel makeModel(Tree t, PageState s) {
- return t.getTreeModel();
- }
-
- }
-
-}
diff --git a/ccm-core/src/main/java/com/arsdigita/bebop/tree/DefaultTreeCellRenderer.java b/ccm-core/src/main/java/com/arsdigita/bebop/tree/DefaultTreeCellRenderer.java
deleted file mode 100644
index 1d6b57371..000000000
--- a/ccm-core/src/main/java/com/arsdigita/bebop/tree/DefaultTreeCellRenderer.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-package com.arsdigita.bebop.tree;
-
-import com.arsdigita.bebop.Component;
-import com.arsdigita.bebop.ControlLink;
-import com.arsdigita.bebop.Label;
-import com.arsdigita.bebop.PageState;
-import com.arsdigita.bebop.Tree;
-
-/**
- * The interface
- * describes how a tree node (component) can be rendered.
- *
- * @author David Lutterkort
- * @author Tri Tran
- *
- * @see TreeModel
- * @see TreeNode
- * @see Tree
- * @version $Id$ */
-public class DefaultTreeCellRenderer implements TreeCellRenderer {
-
- /**
- * Returns node component to be displayed. The component's
- * generateXML or print is called
- * to render the node.
- *
- * @param tree the Tree in which this node is being displayed
- * @param state represents the state of the current request
- * @param value the object returned by the TreeModel for that node,
- * such as pretty name
- * @param isSelected true if the node is selected
- * @param isExpanded true if the node is expanded (not collapsed)
- * @param isLeaf true if the node is a leaf node (no children)
- * @param key the object uniquely identify that node (primary key)
- * @return the component used to generate the output for the node item
- */
- public Component getComponent (Tree tree, PageState state, Object value,
- boolean isSelected, boolean isExpanded,
- boolean isLeaf, Object key) {
- Label l = new Label(value.toString());
- // Bold if selected
- if (isSelected) {
- l.setFontWeight(Label.BOLD);
- return l;
- }
- // Currently, we are not doing anything special here for
- // collapsed/expanded node, or leaf node... Also not doing anything
- // fancy with node's key. We are leaving this to Tree.java for now
- // to set the appropriate attributes...
- return new ControlLink(l);
- }
-}
diff --git a/ccm-core/src/main/java/com/arsdigita/bebop/tree/TreeCellRenderer.java b/ccm-core/src/main/java/com/arsdigita/bebop/tree/TreeCellRenderer.java
deleted file mode 100644
index a94916130..000000000
--- a/ccm-core/src/main/java/com/arsdigita/bebop/tree/TreeCellRenderer.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-package com.arsdigita.bebop.tree;
-
-import com.arsdigita.bebop.Component;
-import com.arsdigita.bebop.PageState;
-import com.arsdigita.bebop.Tree;
-
-/**
- * The interface
- * describes how a tree node (component) can be rendered.
- *
- * @author David Lutterkort
- * @author Tri Tran
- *
- * @see TreeModel
- * @see TreeNode
- * @see Tree
- * @version $Id$ */
-public interface TreeCellRenderer {
-
- /**
- * Returns node component to be displayed. The component's
- * generateXML or print is called
- * to render the node.
- *
- * @param tree the Tree in which this node is being displayed
- * @param state represents the state of the current request
- * @param value the object returned by the TreeModel for that node
- * @param isSelected true if the node is selected
- * @param isExpanded true if the node is expanded (not collapsed)
- * @param isLeaf true if the node is a leaf node (no children)
- * @param key the object uniquely identify that node (primary key)
- * @return the component used to generate the output for the node item
- */
- Component getComponent (Tree tree, PageState state, Object value,
- boolean isSelected, boolean isExpanded,
- boolean isLeaf, Object key);
-}
diff --git a/ccm-core/src/main/java/com/arsdigita/bebop/tree/TreeModel.java b/ccm-core/src/main/java/com/arsdigita/bebop/tree/TreeModel.java
deleted file mode 100644
index 031a60253..000000000
--- a/ccm-core/src/main/java/com/arsdigita/bebop/tree/TreeModel.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-package com.arsdigita.bebop.tree;
-
-import com.arsdigita.bebop.PageState;
-import java.util.Iterator;
-
-/**
- * The interface
- * describes a model for a tree structure.
- *
- * @author David Lutterkort
- * @author Stanislav Freidin
- * @author Tri Tran
- *
- * @version $Id$ */
-public interface TreeModel {
-
-
- /**
- * Obtain the root node of the tree, passing
- * in PageState for permissioning purposes
- */
- TreeNode getRoot(PageState data);
-
- /**
- * Check whether the node has children
- */
- boolean hasChildren(TreeNode n, PageState data);
-
- /**
- * Check whether a given node has children, passing
- * in PageState for permissioning purposes
- */
- Iterator getChildren(TreeNode n, PageState data);
-}
diff --git a/ccm-core/src/main/java/com/arsdigita/bebop/tree/TreeModelBuilder.java b/ccm-core/src/main/java/com/arsdigita/bebop/tree/TreeModelBuilder.java
deleted file mode 100644
index 98c481424..000000000
--- a/ccm-core/src/main/java/com/arsdigita/bebop/tree/TreeModelBuilder.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-package com.arsdigita.bebop.tree;
-
-import com.arsdigita.bebop.Tree;
-import com.arsdigita.bebop.PageState;
-import com.arsdigita.util.Lockable;
-
-/**
- * The interface builds a
- * {@link TreeModel} for a {@link Tree}.
- *
- * @author Stanislav Freidin
- *
- * @version $Id$ */
-public interface TreeModelBuilder extends Lockable {
-
-
- /**
- * Builds a {@link TreeModel} to be used in the current request
- *
- * @param t The {@link Tree} that will use the model
- * @param s The page state
- */
- TreeModel makeModel(Tree t, PageState s);
-}
diff --git a/ccm-core/src/main/java/com/arsdigita/bebop/tree/TreeNode.java b/ccm-core/src/main/java/com/arsdigita/bebop/tree/TreeNode.java
deleted file mode 100644
index c26285dd7..000000000
--- a/ccm-core/src/main/java/com/arsdigita/bebop/tree/TreeNode.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-package com.arsdigita.bebop.tree;
-
-/**
- * The interface
- * describes a node for a tree.
- *
- * @author David Lutterkort
- * @author Stanislav Freidin
- * @author Tri Tran
- *
- * @version $Id$ */
-public interface TreeNode {
-
-
- /**
- * Obtain a unique ID representing the node
- * @return
- */
- Object getKey();
-
- /**
- * Get the element of the tree node. The concrete type
- * of the object returned is specific to each implementation
- * of the TreeModel and should be documented
- * there.
- *
- * @return the element for the tree node
- */
- Object getElement();
-}
diff --git a/ccm-core/src/main/java/org/libreccm/categorization/CategoryTreeModelLite.java b/ccm-core/src/main/java/org/libreccm/categorization/CategoryTreeModelLite.java
deleted file mode 100755
index eac08056f..000000000
--- a/ccm-core/src/main/java/org/libreccm/categorization/CategoryTreeModelLite.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Copyright (C) 2002-2004 Red Hat Inc. All Rights Reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-package org.libreccm.categorization;
-
-import com.arsdigita.bebop.PageState;
-import com.arsdigita.bebop.tree.TreeModel;
-import com.arsdigita.bebop.tree.TreeNode;
-
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.libreccm.cdi.utils.CdiUtil;
-
-import java.util.Iterator;
-import java.util.Objects;
-
-/**
- * Implements the {@link com.arsdigita.bebop.tree.TreeModel} interface for
- * categories.
- *
- * @author Daniel Berrange
- * @author Jens Pelzetter
- */
-public class CategoryTreeModelLite implements TreeModel {
-
- private static final Logger LOGGER = LogManager.getLogger(
- CategoryTreeModelLite.class);
-// String m_order = null;
- private final Category root;
-
- /**
- * Initialises with the passed in the root Category.
- *
- * @param root the root category for this TreeModel
- */
-// public CategoryTreeModelLite(Category root) {
-// this(root, null);
-// }
- /**
- * Initializes with the passed in the root Category.
- *
- * @param root the root category for this TreeModel
- */
- public CategoryTreeModelLite(final Category root) {
-// super(root.getUniqueId(),
-// "com.arsdigita.categorization.getRootCategory",
-// "com.arsdigita.categorization.getSubCategories");
-// m_order = order;
- this.root = root;
- }
-
-// @Override
-// protected DataQueryTreeIterator getDataQueryTreeIterator(DataQueryTreeNode node,
-// String getSubCategories) {
-// return new CategoryTreeIterator(node, getSubCategories, m_order);
-// }
- @Override
- public TreeNode getRoot(final PageState data) {
- return new CategoryTreeNode(root);
- }
-
- @Override
- public boolean hasChildren(final TreeNode node, final PageState state) {
-
- Objects.requireNonNull(node);
- if (node.getKey() == null
- || !(node.getKey() instanceof Long)) {
- throw new IllegalArgumentException(
- "The key of the provided TreeNode is null or not a Long.");
- }
-
- final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
- final CategoryTreeModelLiteController controller = cdiUtil
- .findBean(CategoryTreeModelLiteController.class);
-
- return controller.hasSubCategories((long) node.getKey());
- }
-
- @Override
- public Iterator getChildren(
- final TreeNode node, final PageState state
- ) {
- Objects.requireNonNull(node);
- if (node.getKey() == null
- || !(node.getKey() instanceof Long)) {
- throw new IllegalArgumentException(
- "The key of the provided TreeNode is null or not a Long.");
- }
-
- final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
- final CategoryTreeModelLiteController controller = cdiUtil
- .findBean(CategoryTreeModelLiteController.class);
-
- return controller
- .findSubCategories((long) node.getKey())
- .stream()
- .map(this::buildTreeNode)
- .iterator();
- }
-
- private TreeNode buildTreeNode(final Category category) {
- return new CategoryTreeNode(category);
- }
-
- private class CategoryTreeNode implements TreeNode {
-
- private final Category category;
-
- public CategoryTreeNode(final Category category) {
- this.category = category;
- }
-
- @Override
- public Object getKey() {
- if (category == null) {
- return null;
- } else {
- return category.getObjectId();
- }
- }
-
- @Override
- public Object getElement() {
-
- if (category.getTitle().getValues().isEmpty()) {
- return category.getName();
- } else {
- final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
- final CategoryTreeModelLiteController controller = cdiUtil
- .findBean(CategoryTreeModelLiteController.class);
- return controller.getTitle(category);
- }
- }
-
- }
-
-// private static class CategoryTreeIterator extends DataQueryTreeIterator {
-//
-// public CategoryTreeIterator(DataQueryTreeNode node, String getSubCategories, String order) {
-// super(node, getSubCategories);
-// if (order != null) {
-// addOrder(order);
-// }
-// }
-//
-// @Override
-// public Object next() {
-// DataQueryTreeNode node = (DataQueryTreeNode) super.next();
-//
-// // m_nodes.getLink
-// node.setValue(Category.IS_ABSTRACT,
-// (Boolean) m_nodes.get(Category.IS_ABSTRACT));
-// return node;
-// }
-//
-// }
-}
diff --git a/ccm-core/src/main/java/org/libreccm/categorization/CategoryTreeModelLiteController.java b/ccm-core/src/main/java/org/libreccm/categorization/CategoryTreeModelLiteController.java
deleted file mode 100644
index f1eae3b10..000000000
--- a/ccm-core/src/main/java/org/libreccm/categorization/CategoryTreeModelLiteController.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (C) 2017 LibreCCM Foundation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-package org.libreccm.categorization;
-
-import org.hibernate.LazyInitializationException;
-import org.libreccm.l10n.GlobalizationHelper;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-
-import javax.enterprise.context.RequestScoped;
-import javax.inject.Inject;
-import javax.transaction.Transactional;
-
-/**
- * CDI bean used as interface between Bebop ({@link CategoryTreeModelLite}) and
- * CDI. The CDI beans primarly takes are care of transactions and avoids
- * {@link LazyInitializationException}.
- *
- * @author Jens Pelzetter
- */
-@RequestScoped
-class CategoryTreeModelLiteController {
-
- @Inject
- private CategoryManager categoryManager;
-
- @Inject
- private CategoryRepository categoryRepo;
-
- @Inject
- private GlobalizationHelper globalizationHelper;
-
- @Transactional(Transactional.TxType.REQUIRED)
- protected boolean hasSubCategories(final long categoryId) {
-
- final Category category = categoryRepo
- .findById(categoryId)
- .orElseThrow(() -> new IllegalArgumentException(String
- .format("No Category with ID %d in the database.",
- categoryId)));
-
- return categoryManager.hasSubCategories(category);
- }
-
- @Transactional(Transactional.TxType.REQUIRED)
- protected List findSubCategories(final long categoryId) {
-
- final Category category = categoryRepo
- .findById(categoryId)
- .orElseThrow(() -> new IllegalArgumentException(String
- .format("No Category with ID %d in the database.",
- categoryId)));
-
- return new ArrayList<>(category.getSubCategories());
- }
-
- @Transactional(Transactional.TxType.REQUIRED)
- protected String getTitle(final Category ofCategory) {
- Objects.requireNonNull(ofCategory);
-
- final Category category = categoryRepo
- .findById(ofCategory.getObjectId())
- .orElseThrow(
- () -> new IllegalArgumentException(
- String.format(
- "No Category with ID %d available.",
- ofCategory.getObjectId()
- )
- )
- );
- return globalizationHelper.getValueFromLocalizedString(
- category.getTitle()
- );
- }
-
-}