/** * (C) Copyright 2013 Jabylon (http://www.jabylon.org) and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ /** * */ package org.jabylon.rest.ui.navbar; import java.io.Serializable; import java.util.Collections; import java.util.List; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.IModel; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.jabylon.common.util.config.DynamicConfigUtil; import org.jabylon.properties.Resolvable; import org.jabylon.properties.Workspace; import org.jabylon.rest.ui.util.WicketUtil; import org.jabylon.rest.ui.wicket.BasicPanel; import org.jabylon.rest.ui.wicket.PanelFactory; import org.jabylon.rest.ui.wicket.config.SettingsPage; /** * @author Johannes Utzig (jutzig.dev@googlemail.com) * */ public class SettingsNavBarPanel<T> extends BasicPanel<T> { private static final long serialVersionUID = 1L; @SuppressWarnings("rawtypes") public SettingsNavBarPanel(String id, IModel<T> object, PageParameters parameters) { super(id, object, parameters); PageParameters params = parameters; if (object != null && object.getObject() instanceof Resolvable && !(object.getObject() instanceof Workspace)) { // workspace config isn't all that interesting. Show the overview by // default instead Resolvable r = (Resolvable) object.getObject(); params = WicketUtil.buildPageParametersFor(r); } List<?> applicable = Collections.emptyList(); if(object!=null) { T domain = object.getObject(); applicable = DynamicConfigUtil.getApplicableElements(domain); if (domain instanceof Resolvable) { //traverse up until we find something configurable //https://github.com/jutzig/jabylon/issues/82 Resolvable resolvable = (Resolvable) domain; while (resolvable != null && applicable.isEmpty()) { resolvable = resolvable.getParent(); applicable = DynamicConfigUtil.getApplicableElements(resolvable); } if(resolvable!=domain) params = WicketUtil.buildPageParametersFor(resolvable); } } BookmarkablePageLink<String> link = new BookmarkablePageLink<String>("link", SettingsPage.class, params); //$NON-NLS-1$ link.setEnabled(!applicable.isEmpty()); add(link); } public static class SettingsPanelFactory implements PanelFactory<Object>, Serializable { private static final long serialVersionUID = 1L; @Override public Panel createPanel(PageParameters params, IModel<Object> input, String id) { return new SettingsNavBarPanel<Object>(id, input, params); } } }