/** * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.brixcms.plugin.site.admin.nodetree; import java.io.Serializable; import org.apache.wicket.AttributeModifier; import org.apache.wicket.Component; import org.apache.wicket.extensions.markup.html.tree.BaseTree; import org.apache.wicket.extensions.markup.html.tree.LinkIconPanel; import org.apache.wicket.extensions.markup.html.tree.LinkTree; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.model.IModel; import org.apache.wicket.request.resource.ResourceReference; import org.brixcms.jcr.wrapper.BrixNode; import org.brixcms.plugin.site.NodeTreeRenderer; import org.brixcms.web.tree.JcrTreeNode; import org.brixcms.web.util.AbstractModel; /** * A base to build other renderers from. * * @author Jeremy Thomerson */ public abstract class AbstractNodeTreeRenderer implements NodeTreeRenderer, Serializable { private static final long serialVersionUID = 1L; public Component newNodeComponent(String id, LinkTree tree, IModel<Object> treeNodeModel) { JcrTreeNode node = (JcrTreeNode) treeNodeModel.getObject(); BrixNode bn = node.getNodeModel().getObject(); if (isForThisNode(bn)) { return new NodeTreeRenderingComponent(id, treeNodeModel, tree); } return null; } /** * @param tree the tree being rendered * @param node the JcrTreeNode being rendered * @return the resource reference to use as an icon for this node */ protected abstract ResourceReference getImageResourceReference(BaseTree tree, Object node); /** * @param bn the brix node being rendered * @return whether you want to render it or not */ protected boolean isForThisNode(BrixNode bn) { return bn.getClass().isAssignableFrom(getNodeClass()); } /** * @return the class of node that you want to render */ protected abstract Class<? extends BrixNode> getNodeClass(); private class NodeTreeRenderingComponent extends LinkIconPanel { private static final long serialVersionUID = 1L; public NodeTreeRenderingComponent(String id, IModel<Object> model, BaseTree tree) { super(id, model, tree); BrixNode bn = ((JcrTreeNode) model.getObject()).getNodeModel().getObject(); add(new AttributeModifier("class", bn.getNodeType())); } @Override protected ResourceReference getImageResourceReference(BaseTree tree, Object node) { return AbstractNodeTreeRenderer.this.getImageResourceReference(tree, node); } @Override protected Component newContentComponent(String componentId, BaseTree tree, final IModel<?> model) { return new Label(componentId, new AbstractModel<String>() { private static final long serialVersionUID = 1L; @Override public String getObject() { JcrTreeNode node = (JcrTreeNode) model.getObject(); BrixNode n = node.getNodeModel().getObject(); return n.getUserVisibleName(); } }).add(new AttributeModifier("style", "padding-left: 4px;")); } } }