mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-07 18:25:23 +00:00
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@2005 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
315 lines
8.7 KiB
Java
315 lines
8.7 KiB
Java
/*
|
|
* Copyright (C) 2005 Alfresco, Inc.
|
|
*
|
|
* Licensed under the Mozilla Public License version 1.1
|
|
* with a permitted attribution clause. You may obtain a
|
|
* copy of the License at
|
|
*
|
|
* http://www.alfresco.org/legal/license.txt
|
|
*
|
|
* 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.alfresco.web.bean.wizard;
|
|
|
|
import javax.faces.context.FacesContext;
|
|
import javax.faces.event.ActionEvent;
|
|
|
|
import org.alfresco.service.cmr.model.FileFolderService;
|
|
import org.alfresco.service.cmr.repository.NodeService;
|
|
import org.alfresco.service.cmr.search.SearchService;
|
|
import org.alfresco.web.app.Application;
|
|
import org.alfresco.web.app.context.UIContextService;
|
|
import org.alfresco.web.bean.BrowseBean;
|
|
import org.alfresco.web.bean.NavigationBean;
|
|
import org.apache.commons.logging.Log;
|
|
import org.apache.commons.logging.LogFactory;
|
|
|
|
/**
|
|
* Abstract bean used as the base class for all wizard backing beans.
|
|
*
|
|
* @author gavinc
|
|
*/
|
|
public abstract class AbstractWizardBean
|
|
{
|
|
private static Log logger = LogFactory.getLog(AbstractWizardBean.class);
|
|
|
|
/** I18N messages */
|
|
private static final String MSG_NOT_SET = "value_not_set";
|
|
|
|
protected static final String FINISH_OUTCOME = "finish";
|
|
protected static final String CANCEL_OUTCOME = "cancel";
|
|
protected static final String DEFAULT_INSTRUCTION_ID = "default_instruction";
|
|
protected static final String SUMMARY_TITLE_ID = "summary";
|
|
protected static final String SUMMARY_DESCRIPTION_ID = "summary_desc";
|
|
|
|
// common wizard properties
|
|
protected int currentStep = 1;
|
|
protected boolean editMode = false;
|
|
protected NodeService nodeService;
|
|
protected FileFolderService fileFolderService;
|
|
protected SearchService searchService;
|
|
protected NavigationBean navigator;
|
|
protected BrowseBean browseBean;
|
|
|
|
/**
|
|
* @return Returns the wizard description
|
|
*/
|
|
public abstract String getWizardDescription();
|
|
|
|
/**
|
|
* @return Returns the wizard title
|
|
*/
|
|
public abstract String getWizardTitle();
|
|
|
|
/**
|
|
* @return Returns the title for the current step
|
|
*/
|
|
public abstract String getStepTitle();
|
|
|
|
/**
|
|
* @return Returns the description for the current step
|
|
*/
|
|
public abstract String getStepDescription();
|
|
|
|
/**
|
|
* @return Returns the instructional text for the current step
|
|
*/
|
|
public abstract String getStepInstructions();
|
|
|
|
/**
|
|
* Determines the outcome string for the given step number
|
|
*
|
|
* @param step The step number to get the outcome for
|
|
* @return The outcome
|
|
*/
|
|
protected abstract String determineOutcomeForStep(int step);
|
|
|
|
/**
|
|
* Handles the finish button being pressed
|
|
*
|
|
* @return The finish outcome
|
|
*/
|
|
public abstract String finish();
|
|
|
|
/**
|
|
* Action listener called when the wizard is being launched allowing
|
|
* state to be setup
|
|
*/
|
|
public void startWizard(ActionEvent event)
|
|
{
|
|
// refresh the UI, calling this method now is fine as it basically makes sure certain
|
|
// beans clear the state - so when we finish the wizard other beans will have been reset
|
|
UIContextService.getInstance(FacesContext.getCurrentInstance()).notifyBeans();
|
|
|
|
// make sure the wizard is not in edit mode
|
|
this.editMode = false;
|
|
|
|
// initialise the wizard in case we are launching
|
|
// after it was navigated away from
|
|
init();
|
|
|
|
if (logger.isDebugEnabled())
|
|
logger.debug("Started wizard : " + getWizardTitle());
|
|
}
|
|
|
|
/**
|
|
* Action listener called when the wizard is being launched for
|
|
* editing an existing node.
|
|
*/
|
|
public void startWizardForEdit(ActionEvent event)
|
|
{
|
|
// refresh the UI, calling this method now is fine as it basically makes sure certain
|
|
// beans clear the state - so when we finish the wizard other beans will have been reset
|
|
UIContextService.getInstance(FacesContext.getCurrentInstance()).notifyBeans();
|
|
|
|
// set the wizard in edit mode
|
|
this.editMode = true;
|
|
|
|
// populate the wizard's default values with the current value
|
|
// from the node being edited
|
|
init();
|
|
populate();
|
|
|
|
if (logger.isDebugEnabled())
|
|
logger.debug("Started wizard : " + getWizardTitle() + " for editing");
|
|
}
|
|
|
|
/**
|
|
* Deals with the next button being pressed
|
|
*
|
|
* @return
|
|
*/
|
|
public String next()
|
|
{
|
|
this.currentStep++;
|
|
|
|
// determine which page to go to next
|
|
String outcome = determineOutcomeForStep(this.currentStep);
|
|
|
|
if (logger.isDebugEnabled())
|
|
{
|
|
logger.debug("current step is now: " + this.currentStep);
|
|
logger.debug("Next outcome: " + outcome);
|
|
}
|
|
|
|
// return the outcome for navigation
|
|
return outcome;
|
|
}
|
|
|
|
/**
|
|
* Deals with the back button being pressed
|
|
*
|
|
* @return
|
|
*/
|
|
public String back()
|
|
{
|
|
this.currentStep--;
|
|
|
|
// determine which page to go to next
|
|
String outcome = determineOutcomeForStep(this.currentStep);
|
|
|
|
if (logger.isDebugEnabled())
|
|
{
|
|
logger.debug("current step is now: " + this.currentStep);
|
|
logger.debug("Back outcome: " + outcome);
|
|
}
|
|
|
|
// return the outcome for navigation
|
|
return outcome;
|
|
}
|
|
|
|
/**
|
|
* Handles the cancelling of the wizard
|
|
*
|
|
* @return The cancel outcome
|
|
*/
|
|
public String cancel()
|
|
{
|
|
// reset the state
|
|
init();
|
|
|
|
return CANCEL_OUTCOME;
|
|
}
|
|
|
|
/**
|
|
* Initialises the wizard
|
|
*/
|
|
public void init()
|
|
{
|
|
this.currentStep = 1;
|
|
}
|
|
|
|
/**
|
|
* Populates the wizard's values with the current values
|
|
* of the node about to be edited
|
|
*/
|
|
public void populate()
|
|
{
|
|
// subclasses will override this method to setup accordingly
|
|
}
|
|
|
|
/**
|
|
* @return Returns the nodeService.
|
|
*/
|
|
public NodeService getNodeService()
|
|
{
|
|
return this.nodeService;
|
|
}
|
|
|
|
/**
|
|
* @param nodeService The nodeService to set.
|
|
*/
|
|
public void setNodeService(NodeService nodeService)
|
|
{
|
|
this.nodeService = nodeService;
|
|
}
|
|
|
|
/**
|
|
* @param fileFolderService used to manipulate folder/folder model nodes
|
|
*/
|
|
public void setFileFolderService(FileFolderService fileFolderService)
|
|
{
|
|
this.fileFolderService = fileFolderService;
|
|
}
|
|
|
|
/**
|
|
* @param searchService the service used to find nodes
|
|
*/
|
|
public void setSearchService(SearchService searchService)
|
|
{
|
|
this.searchService = searchService;
|
|
}
|
|
|
|
/**
|
|
* @return Returns the navigation bean instance.
|
|
*/
|
|
public NavigationBean getNavigator()
|
|
{
|
|
return navigator;
|
|
}
|
|
|
|
/**
|
|
* @param navigator The NavigationBean to set.
|
|
*/
|
|
public void setNavigator(NavigationBean navigator)
|
|
{
|
|
this.navigator = navigator;
|
|
}
|
|
|
|
/**
|
|
* @return The BrowseBean
|
|
*/
|
|
public BrowseBean getBrowseBean()
|
|
{
|
|
return this.browseBean;
|
|
}
|
|
|
|
/**
|
|
* @param browseBean The BrowseBean to set.
|
|
*/
|
|
public void setBrowseBean(BrowseBean browseBean)
|
|
{
|
|
this.browseBean = browseBean;
|
|
}
|
|
|
|
/**
|
|
* Build summary table from the specified list of Labels and Values
|
|
*
|
|
* @param labels Array of labels to display
|
|
* @param values Array of values to display
|
|
*
|
|
* @return summary table HTML
|
|
*/
|
|
protected String buildSummary(String[] labels, String[] values)
|
|
{
|
|
if (labels == null || values == null || labels.length != values.length)
|
|
{
|
|
throw new IllegalArgumentException("Labels and Values passed to summary must be valid and of equal length.");
|
|
}
|
|
|
|
String msg = Application.getMessage(FacesContext.getCurrentInstance(), MSG_NOT_SET);
|
|
String notSetMsg = "<" + msg + ">";
|
|
|
|
StringBuilder buf = new StringBuilder(256);
|
|
|
|
buf.append("<table cellspacing='4' cellpadding='2' border='0' class='summary'>");
|
|
for (int i=0; i<labels.length; i++)
|
|
{
|
|
String value = values[i];
|
|
buf.append("<tr><td valign='top'><b>");
|
|
buf.append(labels[i]);
|
|
buf.append(":</b></td><td>");
|
|
buf.append(value != null ? value : notSetMsg);
|
|
buf.append("</td></tr>");
|
|
}
|
|
buf.append("</table>");
|
|
|
|
return buf.toString();
|
|
}
|
|
}
|