com.manydesigns.portofino.dispatcher.PageInstance Maven / Gradle / Ivy
/*
* Copyright (C) 2005-2017 ManyDesigns srl. All rights reserved.
* http://www.manydesigns.com/
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 3 of
* the License, or (at your option) any later version.
*
* This software 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package com.manydesigns.portofino.dispatcher;
import com.manydesigns.portofino.pages.Layout;
import com.manydesigns.portofino.pages.Page;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
* A PageInstance is the realization of a Portofino page on permanent storage (page.xml + configuration.xml +
* action.groovy) into a live object in the context of a single http request.
* A PageInstance includes the parameters extracted from the decomposition of the URL in a sequence of
* fragments (not to be confused with query string parameters).
*
* @author Paolo Predonzani - [email protected]
* @author Angelo Lupo - [email protected]
* @author Giampiero Granatella - [email protected]
* @author Alessio Stalla - [email protected]
*/
public class PageInstance {
protected final Page page;
protected final File directory;
protected final List parameters;
protected final PageInstance parent;
protected final Class extends PageAction> actionClass;
protected Object configuration;
protected PageAction actionBean;
protected String title;
protected String description;
protected boolean prepared;
public static final String DETAIL = "_detail";
//**************************************************************************
// Logging
//**************************************************************************
public static final Logger logger = LoggerFactory.getLogger(PageInstance.class);
public PageInstance(PageInstance parent, File directory,
Page page, Class extends PageAction> actionClass) {
this.parent = parent;
this.directory = directory;
this.page = page;
this.actionClass = actionClass;
parameters = new ArrayList();
this.title = page.getTitle();
this.description = page.getDescription();
}
public PageInstance copy() {
PageInstance pageInstance = new PageInstance(parent, directory, page, actionClass);
pageInstance.prepared = false;
pageInstance.parameters.addAll(parameters);
pageInstance.configuration = configuration;
pageInstance.actionBean = actionBean;
pageInstance.title = title;
pageInstance.description = description;
return pageInstance;
}
public Page getPage() {
return page;
}
//**************************************************************************
// Utility Methods
//**************************************************************************
/**
* Returns the portion of the URL that identifies this PageInstance, including any parameters.
*/
public String getUrlFragment() {
String fragment = directory.getName();
for(String param : parameters) {
fragment += "/" + param;
}
return fragment;
}
/**
* Reconstructs the URL path to this PageInstance from the root of the application (not including the
* webapp's context path).
*/
public String getPath() {
if(getParent() == null) {
return "";
} else {
return getParent().getPath() + "/" + getUrlFragment();
}
}
/**
* Returns the directory from which this page was loaded.
*/
public File getDirectory() {
return directory;
}
/**
* Returns the parameters extracted from the URL for this page.
*/
public List getParameters() {
return parameters;
}
/**
* Returns the configuration object for this page.
*/
public Object getConfiguration() {
return configuration;
}
public void setConfiguration(Object configuration) {
this.configuration = configuration;
}
/**
* Returns the class that implements this page.
*/
public Class extends PageAction> getActionClass() {
return actionClass;
}
/**
* Returns an object that implements this page.
* @see #getActionClass()
*/
public PageAction getActionBean() {
return actionBean;
}
public void setActionBean(PageAction actionBean) {
this.actionBean = actionBean;
}
/**
* Returns the page instance that precedes this one in the path, or null if this is an instance of the root page.
*/
public PageInstance getParent() {
return parent;
}
/**
* Returns the layout that drives the display of the embedded children of this page.
* If this page instance has parameters, the detail layout is returned; else, the regular layout is returned.
* @return the layout.
*/
public Layout getLayout() {
if(getParameters().isEmpty()) {
return getPage().getLayout();
} else {
return getPage().getDetailLayout();
}
}
/**
* Sets the layout that drives the display of the embedded children of this page.
* If this page instance has parameters, the detail layout is set; else, the regular layout is set.
* @param layout the new layout.
*/
public void setLayout(Layout layout) {
if(getParameters().isEmpty()) {
getPage().setLayout(layout);
} else {
getPage().setDetailLayout(layout);
}
}
public Page getChildPage(String name) throws Exception {
File childDirectory = getChildPageDirectory(name);
return DispatcherLogic.getPage(childDirectory);
}
public File getChildPageDirectory(String name) {
File baseDir = getChildrenDirectory();
return new File(baseDir, name);
}
public File getChildrenDirectory() {
File baseDir = directory;
if(!parameters.isEmpty()) {
baseDir = new File(baseDir, DETAIL);
}
return baseDir;
}
public String getName() {
return directory.getName();
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public boolean isPrepared() {
return prepared;
}
public void setPrepared(boolean prepared) {
this.prepared = prepared;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy