org.projectforge.web.mobile.AbstractMobilePage.java Source code

Java tutorial

Introduction

Here is the source code for org.projectforge.web.mobile.AbstractMobilePage.java

Source

/////////////////////////////////////////////////////////////////////////////
//
// Project ProjectForge Community Edition
//         www.projectforge.org
//
// Copyright (C) 2001-2013 Kai Reinhard (k.reinhard@micromata.de)
//
// ProjectForge is dual-licensed.
//
// This community edition is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as published
// by the Free Software Foundation; version 3 of the License.
//
// This community edition is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
// Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, see http://www.gnu.org/licenses/.
//
/////////////////////////////////////////////////////////////////////////////

package org.projectforge.web.mobile;

import java.text.MessageFormat;

import org.apache.commons.lang.StringEscapeUtils;
import org.apache.wicket.Application;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.markup.head.CssReferenceHeaderItem;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptReferenceHeaderItem;
import org.apache.wicket.markup.head.StringHeaderItem;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.model.Model;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.projectforge.AppVersion;
import org.projectforge.user.PFUserDO;
import org.projectforge.web.WebConfiguration;
import org.projectforge.web.wicket.AbstractSecuredPage;
import org.projectforge.web.wicket.MySession;
import org.projectforge.web.wicket.WicketApplicationInterface;
import org.projectforge.web.wicket.WicketUtils;

/**
 * Do only derive from this page, if no login is required!
 * @author Kai Reinhard (k.reinhard@micromata.de)
 */
public abstract class AbstractMobilePage extends WebPage {
    public static final String JQUERY_MOBILE_VERSION = "1.2.0";

    private static final long serialVersionUID = -6221091194614601467L;

    protected final static String TOP_RIGHT_BUTTON_ID = "topRightButton";

    protected final static String TOP_LEFT_BUTTON_ID = "topLeftButton";

    protected final static String TOP_CENTER_ID = "topCenter";

    protected boolean alreadySubmitted = false;

    protected WebMarkupContainer headerContainer;

    protected WebMarkupContainer rightButtonContainer;

    protected WebMarkupContainer pageContainer;

    private boolean topButtonsRendered;

    public AbstractMobilePage() {
        this(new PageParameters());
    }

    protected void setNoBackButton() {
        headerContainer.add(AttributeModifier.replace("data-nobackbtn", "true"));
    }

    /**
     * Constructor that is invoked when page is invoked without a session.
     * 
     * @param parameters Page parameters
     */
    @SuppressWarnings("serial")
    public AbstractMobilePage(final PageParameters parameters) {
        super(parameters);
        add(pageContainer = new WebMarkupContainer("page"));
        pageContainer.add(headerContainer = new WebMarkupContainer("header"));
        add(new Label("windowTitle", new Model<String>() {
            @Override
            public String getObject() {
                return getWindowTitle();
            }
        }));
        final Model<String> loggedInLabelModel = new Model<String>() {
            @Override
            public String getObject() {
                return "<strong>" + escapeHtml(AppVersion.APP_TITLE) + "</strong>";
            }
        };
        pageContainer.add(new Label("loggedInLabel", loggedInLabelModel).setEscapeModelStrings(false)
                .setRenderBodyOnly(false).setVisible(getUser() != null));
        if (getWicketApplication().isDevelopmentSystem() == true) {
            // navigationContainer.add(AttributeModifier.replace("style", WebConstants.CSS_BACKGROUND_COLOR_RED));
        } else {
        }
        pageContainer.add(AttributeModifier.append("data-title", new Model<String>() {
            @Override
            public String getObject() {
                return getTitle();
            }
        }));
    }

    @Override
    public void renderHead(final IHeaderResponse response) {
        super.renderHead(response);
        response.render(JavaScriptReferenceHeaderItem
                .forReference(Application.get().getJavaScriptLibrarySettings().getJQueryReference()));
        response.render(StringHeaderItem.forString(WicketUtils.getCssForFavicon(getUrl("/favicon.ico"))));
        if (WebConfiguration.isDevelopmentMode() == true) {
            response.render(CssReferenceHeaderItem
                    .forUrl("mobile/jquery.mobile/jquery.mobile-" + JQUERY_MOBILE_VERSION + ".css"));
        } else {
            response.render(CssReferenceHeaderItem
                    .forUrl("mobile/jquery.mobile/jquery.mobile-" + JQUERY_MOBILE_VERSION + ".min.css"));
        }
        response.render(CssReferenceHeaderItem.forUrl("mobile/projectforge.css"));
        response.render(JavaScriptReferenceHeaderItem.forUrl("mobile/jquery.mobile/myconfig.js"));
        if (WebConfiguration.isDevelopmentMode() == true) {
            // response.renderJavaScriptReference("mobile/jquery.mobile/myconfig.js");
            response.render(JavaScriptReferenceHeaderItem
                    .forUrl("mobile/jquery.mobile/jquery.mobile-" + JQUERY_MOBILE_VERSION + ".js"));
        } else {
            // response.renderJavaScriptReference("mobile/jquery.mobile/myconfig.js");
            response.render(JavaScriptReferenceHeaderItem
                    .forUrl("mobile/jquery.mobile/jquery.mobile-" + JQUERY_MOBILE_VERSION + ".min.js"));
        }
    }

    @Override
    protected void onBeforeRender() {
        super.onBeforeRender();
        if (topButtonsRendered == false) {
            topButtonsRendered = true;
            addTopLeftButton();
            addTopCenter();
            addTopRightButton();
        }
        alreadySubmitted = false;
    }

    public MySession getMySession() {
        return (MySession) getSession();
    }

    protected WicketApplicationInterface getWicketApplication() {
        return (WicketApplicationInterface) getApplication();
    }

    protected abstract String getTitle();

    /**
     * Security. Implement this method if you are really sure that you want to implement an unsecure page (meaning this page is available
     * without any authorization, it's therefore public)!
     */
    protected abstract void thisIsAnUnsecuredPage();

    /**
     * @see StringEscapeUtils#escapeHtml(String)
     */
    protected String escapeHtml(final String str) {
        return StringEscapeUtils.escapeHtml(str);
    }

    /**
     * Always returns null for unsecured page.
     * @return null
     * @see AbstractSecuredPage#getUser()
     */
    protected PFUserDO getUser() {
        return null;
    }

    protected String getLocalizedMessage(final String key, final Object... params) {
        if (params == null) {
            return getString(key);
        }
        return MessageFormat.format(getString(key), params);
    }

    /**
     * Includes session id (encode URL) at default.
     * @see #getUrl(String, boolean)
     */
    public String getUrl(final String path) {
        return getUrl(path, true);
    }

    /**
     * @see WicketUtils#getImageUrl(org.apache.wicket.Response, String)
     */
    public String getImageUrl(final String subpath) {
        return WicketUtils.getImageUrl(getRequestCycle(), subpath);
    }

    /**
     * @see WicketUtils#getUrl(org.apache.wicket.Response, String, boolean)
     */
    public String getUrl(final String path, final boolean encodeUrl) {
        return WicketUtils.getUrl(getRequestCycle(), path, encodeUrl);
    }

    protected String getWindowTitle() {
        return AppVersion.APP_ID;
    }

    /**
     * Adds about link as default.
     */
    protected void addTopRightButton() {
        headerContainer.add(new JQueryButtonPanel(TOP_RIGHT_BUTTON_ID, JQueryButtonType.INFO, AboutMobilePage.class,
                null, getString("mobile.about")).setNoText().setAlignment(Alignment.LEFT).setRelDialog());
    }

    /**
     * @return Title of this page as default.
     */
    protected void addTopCenter() {
        // headerContainer.add(new Label(AbstractMobilePage.TOP_CENTER_ID, AppVersion.APP_TITLE));
        headerContainer.add(new Label(AbstractMobilePage.TOP_CENTER_ID, getTitle()));
    }

    /**
     * Adds home link as default.
     */
    protected void addTopLeftButton() {
        headerContainer.add(MenuMobilePage.getHomeLink(this, TOP_LEFT_BUTTON_ID));
    }
}