/** * 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.menu.tile; import java.util.HashSet; import java.util.List; import java.util.Set; import org.apache.wicket.markup.html.WebComponent; import org.apache.wicket.model.IModel; import org.brixcms.auth.Action.Context; import org.brixcms.jcr.wrapper.BrixNode; import org.brixcms.plugin.menu.Menu; import org.brixcms.plugin.menu.Menu.ChildEntry; import org.brixcms.plugin.menu.Menu.Entry; import org.brixcms.plugin.site.SitePlugin; import org.brixcms.web.generic.IGenericComponent; import org.brixcms.web.nodepage.BrixNodeWebPage; import org.brixcms.web.nodepage.BrixPageParameters; import org.brixcms.web.reference.Reference; import org.brixcms.web.reference.Reference.Type; public abstract class AbstractMenuRenderer extends WebComponent implements IGenericComponent<BrixNode> { /** * Constructor * * @param id * @param tileNodeModel */ public AbstractMenuRenderer(String id, IModel<BrixNode> tileNodeModel) { super(id, tileNodeModel); } @SuppressWarnings("unchecked") public IModel<BrixNode> getModel() { return (IModel<BrixNode>) getDefaultModel(); } public BrixNode getModelObject() { return (BrixNode) getDefaultModelObject(); } public void setModel(IModel<BrixNode> model) { setDefaultModel(model); } public void setModelObject(BrixNode object) { setDefaultModelObject(object); } protected boolean anyChildSelected(ChildEntry entry, Set<ChildEntry> selectedSet) { if (entry.getChildren() != null) { for (ChildEntry e : entry.getChildren()) { if (selectedSet.contains(e)) { return true; } } } return false; } protected boolean anyChildren(ChildEntry entry) { if (entry.getChildren() != null) { for (ChildEntry e : entry.getChildren()) { BrixNode node = getNode(e); if (node == null || SitePlugin.get().canViewNode(node, Context.PRESENTATION)) { return true; } } } return false; } protected BrixNode getNode(ChildEntry entry) { if (entry.getReference() != null && !entry.getReference().isEmpty() && entry.getReference().getType() == Type.NODE) { return entry.getReference().getNodeModel().getObject(); } else { List<ChildEntry> children = entry.getChildren(); if (children != null && !children.isEmpty()) { return getNode(children.iterator().next()); } else { return null; } } } protected Set<ChildEntry> getSelectedItems(Menu menu) { Set<ChildEntry> result = new HashSet<ChildEntry>(); for (ChildEntry e : menu.getRoot().getChildren()) { checkSelected(e, result); } return result; } protected void checkSelected(ChildEntry entry, Set<ChildEntry> selectedSet) { if (isSelected(entry)) { for (Entry e = entry; e instanceof ChildEntry; e = e.getParent()) { selectedSet.add((ChildEntry) e); } } for (ChildEntry e : entry.getChildren()) { checkSelected(e, selectedSet); } } protected boolean isSelected(ChildEntry entry) { final String url = "/" + getRequest().getContextPath(); Reference ref = entry.getReference(); if (ref == null) { return false; } else { return isSelected(ref, url); } } protected String getUrl(ChildEntry entry) { if (entry.getReference() != null && !entry.getReference().isEmpty()) { return entry.getReference().generateUrl(); } else { List<ChildEntry> children = entry.getChildren(); if (children != null && !children.isEmpty()) { return getUrl(children.iterator().next()); } else { return "#"; } } } protected boolean isSelected(Reference reference, String url) { boolean eq = false; if (getPage() instanceof BrixNodeWebPage) { BrixNodeWebPage page = (BrixNodeWebPage) getPage(); if (reference.getType() == Type.NODE) { eq = page.getModel().equals(reference.getNodeModel()) && comparePageParameters(page.getBrixPageParameters(), reference .getParameters()); } else { eq = url.equals(reference.getUrl()) && comparePageParameters(page.getBrixPageParameters(), reference .getParameters()); } } return eq; } protected boolean comparePageParameters(BrixPageParameters page, BrixPageParameters fromReference) { if (fromReference == null || (fromReference.getIndexedCount() == 0 && fromReference.getNamedKeys() .isEmpty())) { return true; } else { return BrixPageParameters.equals(page, fromReference); } } }