org.theospi.portfolio.presentation.tool.DecoratedPage.java Source code

Java tutorial

Introduction

Here is the source code for org.theospi.portfolio.presentation.tool.DecoratedPage.java

Source

/**********************************************************************************
* $URL:https://source.sakaiproject.org/svn/osp/trunk/presentation/tool/src/java/org/theospi/portfolio/presentation/tool/DecoratedPage.java $
* $Id:DecoratedPage.java 9134 2006-05-08 20:28:42Z chmaurer@iupui.edu $
***********************************************************************************
*
 * Copyright (c) 2005, 2006, 2007, 2008 The Sakai Foundation
 *
 * Licensed under the Educational Community 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.opensource.org/licenses/ECL-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.theospi.portfolio.presentation.tool;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Collections;

import org.apache.commons.lang.StringEscapeUtils;

import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.sakaiproject.metaobj.shared.model.Id;
import org.sakaiproject.tool.api.ToolSession;
import org.sakaiproject.tool.cover.SessionManager;
import org.theospi.portfolio.presentation.PresentationLayoutHelper;
import org.theospi.portfolio.presentation.model.PresentationLayout;
import org.theospi.portfolio.presentation.model.PresentationPage;
import org.theospi.portfolio.shared.model.Node;
import org.theospi.portfolio.style.StyleHelper;
import org.theospi.portfolio.style.model.Style;

/**
 * Created by IntelliJ IDEA.
 * User: John Ellis
 * Date: Jan 1, 2006
 * Time: 7:32:11 PM
 * To change this template use File | Settings | File Templates.
 */
public class DecoratedPage implements Comparable {

    protected final transient Log logger = LogFactory.getLog(getClass());

    private FreeFormTool parent;
    private PresentationPage base;
    private RegionMap regionMap;
    private boolean selected;
    private DecoratedLayout selectedLayout = null;
    private String layoutName;
    private String lastModified;
    private String expandedInformationSection = "true";
    private boolean newPage = false;

    public DecoratedPage(PresentationPage base, FreeFormTool parent) {
        this.base = base;
        this.parent = parent;

        if (base.getPresentation().getLayout() != null && base.getLayout() == null) {
            base.setLayout(base.getPresentation().getLayout());
        }

        initLayout();
    }

    protected void initLayout() {
        if (base.getLayout() != null) {
            setSelectedLayout(new DecoratedLayout(parent, base.getLayout()));
        }
    }

    public String getStyleName() {
        ToolSession session = SessionManager.getCurrentToolSession();
        if (session.getAttribute(StyleHelper.CURRENT_STYLE) != null) {
            Style style = (Style) session.getAttribute(StyleHelper.CURRENT_STYLE);
            base.setStyle(style);
        } else if (session.getAttribute(StyleHelper.UNSELECTED_STYLE) != null) {
            base.setStyle(null);
            session.removeAttribute(StyleHelper.UNSELECTED_STYLE);
            return "";
        }

        if (base.getStyle() != null)
            return base.getStyle().getName();
        return "";
    }

    public boolean isRenderLayoutName() {
        getLayoutName();
        return true;
    }

    public String getLayoutName() {
        ToolSession session = SessionManager.getCurrentToolSession();
        if (session.getAttribute(PresentationLayoutHelper.CURRENT_LAYOUT) != null) {
            PresentationLayout layout = (PresentationLayout) session
                    .getAttribute(PresentationLayoutHelper.CURRENT_LAYOUT);
            //base.setLayout(layout);
            clearRegionsIfDirtyLayout(layout);
            setSelectedLayout(new DecoratedLayout(getParent(), layout));
            session.removeAttribute(PresentationLayoutHelper.CURRENT_LAYOUT);
        } else if (session.getAttribute(PresentationLayoutHelper.UNSELECTED_LAYOUT) != null) {
            //base.setLayout(null);
            clearRegions();
            setSelectedLayout(new DecoratedLayout(getParent(), null));
            session.removeAttribute(PresentationLayoutHelper.UNSELECTED_LAYOUT);
            setSelectedLayoutId(null);
            return null;
        }

        if (getSelectedLayout() != null && getSelectedLayout().getBase() != null)
            return getSelectedLayout().getBase().getName();
        //return layoutName;
        setSelectedLayoutId(null);
        return null;
    }

    protected boolean isLayoutDirty(PresentationLayout layout) {
        if (getSelectedLayout() != null && getSelectedLayout().getBase() != null)
            return !getSelectedLayout().getBase().equals(layout);

        return false;
    }

    protected void clearRegionsIfDirtyLayout(PresentationLayout layout) {
        if (isLayoutDirty(layout)) {
            clearRegions();
        }
    }

    protected void clearRegions() {
        getBase().getRegions().clear();
        regionMap = null;
    }

    public void setLayoutName(String name) {
        this.layoutName = name;
    }

    public String getSafeTitle() {
        return StringEscapeUtils.escapeHtml(base.getTitle());
    }

    public PresentationPage getBase() {
        return base;
    }

    public void setBase(PresentationPage base) {
        this.base = base;
    }

    /**
     * Any time this is called the calling method MUST close the input stream!!
     * This has the potential of causing memory leaks if the calling method does not close the stream
     * @return InputStream
     */
    public InputStream getXmlFile() {
        InputStream inputStream = null;
        if (getSelectedLayout().getBase() != null) {
            Node node = getParent().getPresentationManager().getNode(getSelectedLayout().getBase().getXhtmlFileId(),
                    getSelectedLayout().getBase());
            inputStream = node.getInputStream();

            // we want to read the entire file into memory so wo can close the inputStream
            //    and thus release the database connection / file connection

            ByteArrayOutputStream bytesOS = new ByteArrayOutputStream();
            int buffersize = 1024, s;
            byte[] buffer = new byte[buffersize];
            try {
                while ((s = inputStream.read(buffer)) != -1) {
                    bytesOS.write(buffer, 0, s);
                }
                inputStream.close();
                inputStream = new ByteArrayInputStream(bytesOS.toByteArray());
            } catch (IOException ioe) {
                logger.error(ioe);
                inputStream = null;
            }
        }

        return inputStream;
    }

    public boolean isXmlFileNotNull() {
        InputStream inputStream = getXmlFile();
        boolean isNotNull = inputStream != null;
        if (isNotNull) {
            try {
                inputStream.close();
            } catch (IOException ioe) {
                logger.error("Failed to close: " + ioe);
            }
        }
        return isNotNull;
    }

    public String getXmlFileId() {
        return getSelectedLayout().getBase().getId().getValue()
                + getSelectedLayout().getBase().getModified().toString();
    }

    public RegionMap getRegionMap() {
        if (regionMap == null) {
            regionMap = new RegionMap(getBase());
        }
        return regionMap;
    }

    public void setRegionMap(RegionMap regionMap) {
        this.regionMap = regionMap;
    }

    public FreeFormTool getParent() {
        return parent;
    }

    public void setParent(FreeFormTool parent) {
        this.parent = parent;
    }

    public String processActionArrange() {
        getParent().setCurrentPage(this);
        initLayout();
        return "arrange";
    }

    public String processActionEdit() {
        getParent().setCurrentPage(this);
        initLayout();
        return "edit";
    }

    public String processActionConfirmDelete() {
        getParent().setCurrentPage(this);
        return "confirm";
    }

    public String processActionDelete() {
        getParent().deletePage(this);
        getParent().reorderPages();
        return "main";
    }

    public String processActionSelectStyle() {
        ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
        ToolSession session = SessionManager.getCurrentToolSession();
        session.removeAttribute(StyleHelper.CURRENT_STYLE);
        session.removeAttribute(StyleHelper.CURRENT_STYLE_ID);

        session.setAttribute(StyleHelper.STYLE_SELECTABLE, "true");
        if (base.getStyle() != null)
            session.setAttribute(StyleHelper.CURRENT_STYLE_ID, base.getStyle().getId().getValue());

        try {
            context.redirect("osp.style.helper/listStyle");
        } catch (IOException e) {
            throw new RuntimeException("Failed to redirect to helper", e);
        }
        return null;
    }

    public String processActionSelectLayout() {
        ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
        ToolSession session = SessionManager.getCurrentToolSession();
        session.removeAttribute(PresentationLayoutHelper.CURRENT_LAYOUT);
        session.removeAttribute(PresentationLayoutHelper.CURRENT_LAYOUT_ID);

        session.setAttribute(PresentationLayoutHelper.LAYOUT_SELECTABLE, "true");
        if (getSelectedLayout() != null && getSelectedLayout().getBase() != null)
            session.setAttribute(PresentationLayoutHelper.CURRENT_LAYOUT_ID,
                    getSelectedLayout().getBase().getId().getValue());

        try {
            context.redirect("osp.presLayout.helper/listLayout");
        } catch (IOException e) {
            throw new RuntimeException("Failed to redirect to helper", e);
        }
        return null;
    }

    public boolean isSelected() {
        return selected;
    }

    public void setSelected(boolean selected) {
        this.selected = selected;
    }

    public DecoratedLayout getSelectedLayout() {
        return selectedLayout;
    }

    public void setSelectedLayout(DecoratedLayout selectedLayout) {
        this.selectedLayout = selectedLayout;
    }

    /**
     * Sets the layout to null as well
     * @param layoutId
     */
    public void setSelectedLayoutId(String layoutId) {

        Id id = getParent().getIdManager().getId(layoutId);
        PresentationLayout layout = getParent().getPresentationManager().getPresentationLayout(id);
        setSelectedLayout(new DecoratedLayout(getParent(), layout));
    }

    public String getSelectedLayoutId() {
        if (getSelectedLayout() != null && getSelectedLayout().getBase() != null) {
            return getSelectedLayout().getBase().getId().getValue();
        }
        return null;
    }

    public boolean islayoutSelected() {
        return (getSelectedLayout() != null && getSelectedLayout().getBase() != null);
    }

    public boolean isLayoutPreviewImage() {
        if (islayoutSelected() && (getSelectedLayout().getPreviewImage() != null)) {
            return true;
        }
        return false;
    }

    public int compareTo(Object o) {
        DecoratedPage other = (DecoratedPage) o;
        return getBase().compareTo(other.getBase());
    }

    public String pagePropertiesSaved() {
        getBase().setLayout(getSelectedLayout().getBase());
        //Make sure the page list is being refreshed after a save.
        getParent().setPageList(null);
        return "main";
    }

    public boolean getHasLayout() {
        return getBase().getLayout() != null;
    }

    public String moveUp() {
        if (getBase().getSequence() != 0) {
            Collections.swap(getParent().getPresentation().getPages(), getBase().getSequence(),
                    getBase().getSequence() - 1);
            getParent().reorderPages();
        }
        return null;
    }

    public String moveDown() {
        if (getBase().getSequence() < getParent().getPresentation().getPages().size() - 1) {
            Collections.swap(getParent().getPresentation().getPages(), getBase().getSequence(),
                    getBase().getSequence() + 1);
            getParent().reorderPages();
        }
        return null;
    }

    public boolean isLast() {
        return getBase().getSequence() >= getParent().getPresentation().getPages().size() - 1;
    }

    public String getLastModified() {
        return lastModified;
    }

    public void setLastModified(String lastModified) {
        this.lastModified = lastModified;
    }

    public String getExpandedInformationSection() {
        if (this.getBase().getTitle() == null || this.getBase().getTitle().equals("")) {
            return "true";
        }
        return "false";
    }

    public boolean isNewPage() {
        return newPage;
    }

    public void setNewPage(boolean newPage) {
        this.newPage = newPage;
    }

}