/** * 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.web.nodepage; import org.apache.wicket.Application; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.model.IModel; import org.apache.wicket.request.http.WebResponse; import org.brixcms.Brix; import org.brixcms.auth.Action.Context; import org.brixcms.jcr.wrapper.BrixFileNode; import org.brixcms.jcr.wrapper.BrixNode; import org.brixcms.plugin.site.SitePlugin; import org.brixcms.web.generic.IGenericComponent; public class BrixNodeWebPage extends WebPage implements IGenericComponent<BrixNode> { public BrixNodeWebPage(IModel<BrixNode> nodeModel) { super(nodeModel); } public BrixNodeWebPage(IModel<BrixNode> nodeModel, BrixPageParameters pageParameters) { super(nodeModel); if (pageParameters != null) { getPageParameters().overwriteWith(pageParameters); } } @SuppressWarnings("unchecked") public IModel<BrixNode> getModel() { return (IModel<BrixNode>) getDefaultModel(); } public void setModel(IModel<BrixNode> model) { setDefaultModel(model); } public void setModelObject(BrixNode object) { setDefaultModelObject(object); } public BrixPageParameters getBrixPageParameters() { return new BrixPageParameters(getPageParameters()); } public BrixNode getPageNode() { return getModelObject(); } public boolean initialRedirect() { return false; } @Override public boolean isBookmarkable() { return true; } @Override protected void onBeforeRender() { checkAccess(); super.onBeforeRender(); } protected void checkAccess() { BrixNode node = getModelObject(); if (!SitePlugin.get().canViewNode(node, Context.PRESENTATION)) { throw Brix.get().getForbiddenException(); } } public BrixNode getModelObject() { return (BrixNode) getDefaultModelObject(); } @Override protected void configureResponse(WebResponse response) { super.configureResponse(response); String mimeType = getMimeType(getModelObject()); String encoding = Application.get().getRequestCycleSettings().getResponseRequestEncoding(); ((WebResponse) getResponse()).setContentType(mimeType + "; charset=" + encoding); // TODO figure out how to handle last modified for pages. // lastmodified depends on both the page and the tiles, maybe tiles // can contribute lastmodified dates and we take the latest... // response.setLastModifiedTime(Time.valueOf(node.getObject().getLastModified())); } protected static String getMimeType(BrixNode brixNode) { BrixFileNode brixFileNode = new BrixFileNode(brixNode.getDelegate(), brixNode.getSession()); String mimeType = null; mimeType = brixFileNode.getMimeType(); if (mimeType == null || mimeType.trim().isEmpty()) { mimeType = "text/html"; } return mimeType; } }