info.magnolia.blossom.sample.module.NavigationBar.java Source code

Java tutorial

Introduction

Here is the source code for info.magnolia.blossom.sample.module.NavigationBar.java

Source

/**
 * This file Copyright (c) 2013-2014 Magnolia International
 * Ltd.  (http://www.magnolia-cms.com). All rights reserved.
 *
 *
 * This file is dual-licensed under both the Magnolia
 * Network Agreement and the GNU General Public License.
 * You may elect to use one or the other of these licenses.
 *
 * This file is distributed in the hope that it will be
 * useful, but AS-IS and WITHOUT ANY WARRANTY; without even the
 * implied warranty of MERCHANTABILITY or FITNESS FOR A
 * PARTICULAR PURPOSE, TITLE, or NONINFRINGEMENT.
 * Redistribution, except as permitted by whichever of the GPL
 * or MNA you select, is prohibited.
 *
 * 1. For the GPL license (GPL), you can redistribute and/or
 * modify this file under the terms of the GNU General
 * Public License, Version 3, as published by the Free Software
 * Foundation.  You should have received a copy of the GNU
 * General Public License, Version 3 along with this program;
 * if not, write to the Free Software Foundation, Inc., 51
 * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * 2. For the Magnolia Network Agreement (MNA), this file
 * and the accompanying materials are made available under the
 * terms of the MNA which accompanies this distribution, and
 * is available at http://www.magnolia-cms.com/mna.html
 *
 * Any modifications to this file must keep this entire header
 * intact.
 *
 */
package info.magnolia.blossom.sample.module;

import info.magnolia.context.MgnlContext;
import info.magnolia.jcr.util.PropertyUtil;
import info.magnolia.module.blossom.annotation.TabFactory;
import info.magnolia.module.blossom.annotation.Template;
import info.magnolia.module.blossom.annotation.TemplateDescription;
import info.magnolia.ui.form.config.TabBuilder;
import info.magnolia.ui.framework.config.UiConfig;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.jcr.Node;
import javax.jcr.RepositoryException;
import javax.servlet.http.HttpSession;

/**
 * Navigation bar.
 */
@Controller
@Template(title = "Navigation Bar", id = "blossomSampleModule:components/navbar")
@TemplateDescription("Adds a forced navigation bar")
public class NavigationBar {

    private static final String REQUEST_ORIGIN_PROPERTY = "requestOrigin";
    private static final String PREVIOUS_PAGE_PROPERTY = "previousPage";
    private static final String NEXT_PAGE_PROPERTY = "nextPage";
    private final String IN_EDIT_PROPERTY = "IN_EDIT_PROPERTY";
    private final String IN_EDIT_LABEL = "In Edition";
    private final String PREVIOUS_PAGE_LABEL = "Previous Page";
    private final String NEXT_PAGE_LABEL = "Next Page";
    private final String ORIGIN_PAGE_LABEL = "Origin Page";

    @RequestMapping("/navbar")
    public String render(Node page, ModelMap model, HttpSession session) throws RepositoryException {

        Node currentContentNode = MgnlContext.getAggregationState().getCurrentContentNode();
        Node containingPage = currentContentNode.getParent().getParent();
        String requestOrigin = (String) session.getAttribute(REQUEST_ORIGIN_PROPERTY);
        String expectedPrevious = PropertyUtil.getString(currentContentNode, PREVIOUS_PAGE_PROPERTY);
        String next = PropertyUtil.getString(currentContentNode, NEXT_PAGE_PROPERTY);

        boolean inEdit = PropertyUtil.getBoolean(currentContentNode, IN_EDIT_PROPERTY, true);
        String path = containingPage.getPath();
        if (expectedPrevious != null && !inEdit && !expectedPrevious.equals(requestOrigin)) {
            //Redirect to Origin of Flow
            String originOfFlow = PropertyUtil.getString(currentContentNode, REQUEST_ORIGIN_PROPERTY) + ".html";
            session.removeAttribute(REQUEST_ORIGIN_PROPERTY);
            return "redirect:" + originOfFlow;
        }

        session.removeAttribute(REQUEST_ORIGIN_PROPERTY);
        session.setAttribute(REQUEST_ORIGIN_PROPERTY, path);
        model.put(PREVIOUS_PAGE_PROPERTY, expectedPrevious);
        model.put(NEXT_PAGE_PROPERTY, next);

        return "components/navbar.jsp";
    }

    @TabFactory("Content")
    public void contentTab(UiConfig cfg, TabBuilder tab) {

        tab.fields(
                cfg.fields.checkbox(IN_EDIT_PROPERTY).label(IN_EDIT_LABEL).buttonLabel(IN_EDIT_LABEL)
                        .defaultValue("true"),
                cfg.fields.link(PREVIOUS_PAGE_PROPERTY).label(PREVIOUS_PAGE_LABEL).appName("pages"),
                cfg.fields.link(NEXT_PAGE_PROPERTY).label(NEXT_PAGE_LABEL).appName("pages"),
                cfg.fields.link(REQUEST_ORIGIN_PROPERTY).label(ORIGIN_PAGE_LABEL).appName("pages"));
    }
}