/** * (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.wicket.config; import java.util.List; import org.apache.wicket.markup.head.IHeaderResponse; import org.apache.wicket.markup.head.JavaScriptHeaderItem; import org.apache.wicket.markup.head.PriorityHeaderItem; import org.apache.wicket.model.StringResourceModel; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.eclipse.emf.cdo.CDOObject; import org.eclipse.emf.cdo.transaction.CDOTransaction; import org.eclipse.emf.cdo.view.CDOView; import org.jabylon.rest.ui.model.IEObjectModel; import org.jabylon.rest.ui.model.WritableEObjectModel; import org.jabylon.rest.ui.security.RestrictedComponent; import org.jabylon.rest.ui.wicket.JabylonApplication; import org.jabylon.rest.ui.wicket.pages.GenericResolvablePage; import org.jabylon.rest.ui.wicket.panels.BreadcrumbPanel; /** * @author Johannes Utzig (jutzig.dev@googlemail.com) * */ public class SettingsPage extends GenericResolvablePage<CDOObject> implements RestrictedComponent{ private static final long serialVersionUID = 1L; public SettingsPage(PageParameters parameters) { super(parameters); setStatelessHint(false); } @Override protected void construct() { super.construct(); BreadcrumbPanel<CDOObject> breadcrumbPanel = new BreadcrumbPanel<CDOObject>("breadcrumb-panel", getModel(),getPageParameters()); breadcrumbPanel.setRootLabel(new StringResourceModel("SettingsPage.breadcrumb.root.label",this,null)); add(breadcrumbPanel); if(getPageParameters().getIndexedCount()>0) { addOrReplace(new SettingsPanel<CDOObject>("content", getModel(), getPageParameters())); } else { addOrReplace(new SettingsOverviewPanel("content")); } } @Override public void renderHead(IHeaderResponse response) { response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forReference(JabylonApplication.get().getJavaScriptLibrarySettings().getJQueryReference()))); super.renderHead(response); } protected CDOObject doLookup(List<String> segments) { try { CDOObject resolvable = super.doLookup(segments); if(resolvable==null) return null; CDOView cdoView = resolvable.cdoView(); if (cdoView instanceof CDOTransaction) { return resolvable; } return cdoView.getSession().openTransaction().getObject(resolvable); } catch (ClassCastException e) { /* * TODO this is very much a workaround for * http://github.com/jutzig/jabylon/issues/issue/100 * in case our URI does not resolve to a CDOObject, but a list, we take the parent * instead */ getPageParameters().remove(segments.size()-1); return doLookup(segments.subList(0, segments.size()-1)); } } @Override protected IEObjectModel<CDOObject> createModel(CDOObject object) { return new WritableEObjectModel<CDOObject>(object); } @Override public String getRequiredPermission() { return null; } }