mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-31 17:39:05 +00:00
Completion of dialog and wizard frameworks also converted advanced space wizard and create space dialog to the new frameworks.
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@2615 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -1,9 +1,18 @@
|
||||
package org.alfresco.web.bean.dialog;
|
||||
|
||||
import javax.faces.context.FacesContext;
|
||||
import java.text.MessageFormat;
|
||||
|
||||
import javax.faces.context.FacesContext;
|
||||
import javax.transaction.UserTransaction;
|
||||
|
||||
import org.alfresco.service.cmr.repository.NodeService;
|
||||
import org.alfresco.web.app.AlfrescoNavigationHandler;
|
||||
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.alfresco.web.bean.repository.Repository;
|
||||
import org.alfresco.web.ui.common.Utils;
|
||||
|
||||
/**
|
||||
* Base class for all dialog beans providing common functionality
|
||||
@@ -12,9 +21,12 @@ import org.alfresco.web.app.context.UIContextService;
|
||||
*/
|
||||
public abstract class BaseDialogBean implements IDialogBean
|
||||
{
|
||||
protected static final String DIALOG_CLOSE = "dialog:close";
|
||||
|
||||
public abstract String finish();
|
||||
protected static final String ERROR_ID = "error_generic";
|
||||
|
||||
// services common to most dialogs
|
||||
protected BrowseBean browseBean;
|
||||
protected NavigationBean navigator;
|
||||
protected NodeService nodeService;
|
||||
|
||||
public void init()
|
||||
{
|
||||
@@ -24,16 +36,118 @@ public abstract class BaseDialogBean implements IDialogBean
|
||||
|
||||
public String cancel()
|
||||
{
|
||||
return DIALOG_CLOSE;
|
||||
return getDefaultCancelOutcome();
|
||||
}
|
||||
|
||||
public String finish()
|
||||
{
|
||||
String outcome = getDefaultFinishOutcome();
|
||||
|
||||
UserTransaction tx = null;
|
||||
|
||||
try
|
||||
{
|
||||
FacesContext context = FacesContext.getCurrentInstance();
|
||||
tx = Repository.getUserTransaction(context);
|
||||
tx.begin();
|
||||
|
||||
// call the actual implementation
|
||||
outcome = finishImpl(context, outcome);
|
||||
|
||||
tx.commit();
|
||||
}
|
||||
catch (Throwable e)
|
||||
{
|
||||
// rollback the transaction
|
||||
try { if (tx != null) {tx.rollback();} } catch (Exception ex) {}
|
||||
Utils.addErrorMessage(formatErrorMessage(e));
|
||||
outcome = null;
|
||||
}
|
||||
|
||||
return outcome;
|
||||
}
|
||||
|
||||
public boolean getFinishButtonDisabled()
|
||||
public String getCancelButtonLabel()
|
||||
{
|
||||
return true;
|
||||
return Application.getMessage(FacesContext.getCurrentInstance(), "cancel");
|
||||
}
|
||||
|
||||
public String getFinishButtonLabel()
|
||||
{
|
||||
return Application.getMessage(FacesContext.getCurrentInstance(), "ok");
|
||||
}
|
||||
|
||||
public boolean getFinishButtonDisabled()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param browseBean The BrowseBean to set.
|
||||
*/
|
||||
public void setBrowseBean(BrowseBean browseBean)
|
||||
{
|
||||
this.browseBean = browseBean;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param navigator The NavigationBean to set.
|
||||
*/
|
||||
public void setNavigator(NavigationBean navigator)
|
||||
{
|
||||
this.navigator = navigator;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param nodeService The nodeService to set.
|
||||
*/
|
||||
public void setNodeService(NodeService nodeService)
|
||||
{
|
||||
this.nodeService = nodeService;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the default cancel outcome
|
||||
*
|
||||
* @return Default close outcome, dialog:close by default
|
||||
*/
|
||||
protected String getDefaultCancelOutcome()
|
||||
{
|
||||
return AlfrescoNavigationHandler.CLOSE_DIALOG_OUTCOME;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the default finish outcome
|
||||
*
|
||||
* @return Default finish outcome, dialog:close by default
|
||||
*/
|
||||
protected String getDefaultFinishOutcome()
|
||||
{
|
||||
return AlfrescoNavigationHandler.CLOSE_DIALOG_OUTCOME;
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs the actual processing for the wizard.
|
||||
* NOTE: This method is called within the context of a transaction
|
||||
* so no transaction handling is required
|
||||
*
|
||||
* @param context FacesContext
|
||||
* @param outcome The default outcome
|
||||
* @return The outcome
|
||||
*/
|
||||
protected abstract String finishImpl(FacesContext context, String outcome)
|
||||
throws Exception;
|
||||
|
||||
/**
|
||||
* Returns a formatted exception string for the given exception
|
||||
*
|
||||
* @param exception The exception that got thrown
|
||||
* @return The formatted message
|
||||
*/
|
||||
protected String formatErrorMessage(Throwable exception)
|
||||
{
|
||||
return MessageFormat.format(Application.getMessage(
|
||||
FacesContext.getCurrentInstance(), ERROR_ID),
|
||||
exception.getMessage());
|
||||
}
|
||||
}
|
||||
|
@@ -39,6 +39,16 @@ public class DialogManager
|
||||
this.currentDialog.init();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the config for the current dialog
|
||||
*
|
||||
* @return The current dialog config
|
||||
*/
|
||||
public DialogConfig getCurrentDialog()
|
||||
{
|
||||
return this.currentDialogConfig;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the current dialog bean being managed
|
||||
*
|
||||
@@ -111,6 +121,16 @@ public class DialogManager
|
||||
return this.currentDialogConfig.getPage();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the label to use for the cancel button
|
||||
*
|
||||
* @return The cancel button label
|
||||
*/
|
||||
public String getCancelButtonLabel()
|
||||
{
|
||||
return this.currentDialog.getCancelButtonLabel();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the label to use for the finish button
|
||||
*
|
||||
|
@@ -12,19 +12,26 @@ public interface IDialogBean
|
||||
*/
|
||||
public void init();
|
||||
|
||||
/**
|
||||
* Method handler called when the cancel button of the dialog is pressed
|
||||
*
|
||||
* @return The outcome to return
|
||||
*/
|
||||
public String cancel();
|
||||
|
||||
/**
|
||||
* Method handler called when the finish button of the dialog is pressed
|
||||
*
|
||||
* @return The outcome to return (normally dialog:close)
|
||||
* @return The outcome to return
|
||||
*/
|
||||
public String finish();
|
||||
|
||||
/**
|
||||
* Method handler called when the cancel button of the dialog is pressed
|
||||
* Returns the label to use for the cancel button
|
||||
*
|
||||
* @return The outcome to return (normally dialog:close)
|
||||
* @return The cancel button label
|
||||
*/
|
||||
public String cancel();
|
||||
public String getCancelButtonLabel();
|
||||
|
||||
/**
|
||||
* Returns the label to use for the finish button
|
||||
|
@@ -1,328 +0,0 @@
|
||||
package org.alfresco.web.bean.dialog;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.text.MessageFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.faces.context.FacesContext;
|
||||
import javax.transaction.UserTransaction;
|
||||
|
||||
import org.alfresco.config.Config;
|
||||
import org.alfresco.config.ConfigElement;
|
||||
import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.service.cmr.model.FileExistsException;
|
||||
import org.alfresco.service.cmr.model.FileFolderService;
|
||||
import org.alfresco.service.cmr.model.FileInfo;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.cmr.repository.NodeService;
|
||||
import org.alfresco.service.cmr.search.SearchService;
|
||||
import org.alfresco.service.namespace.NamespaceService;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
import org.alfresco.web.app.Application;
|
||||
import org.alfresco.web.bean.BrowseBean;
|
||||
import org.alfresco.web.bean.NavigationBean;
|
||||
import org.alfresco.web.bean.repository.Repository;
|
||||
import org.alfresco.web.ui.common.Utils;
|
||||
import org.alfresco.web.ui.common.component.UIListItem;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
|
||||
/**
|
||||
* Dialog bean to create a space
|
||||
*
|
||||
* @author gavinc
|
||||
*/
|
||||
public class SpaceDialog extends BaseDialogBean
|
||||
{
|
||||
protected static final String ERROR = "error_space";
|
||||
private static final String SPACE_ICON_DEFAULT = "space-icon-default";
|
||||
// private static final String DEFAULT_SPACE_TYPE_ICON = "/images/icons/space.gif";
|
||||
private static final String ICONS_LOOKUP_KEY = " icons";
|
||||
|
||||
protected NodeService nodeService;
|
||||
protected FileFolderService fileFolderService;
|
||||
protected NamespaceService namespaceService;
|
||||
protected SearchService searchService;
|
||||
protected NavigationBean navigator;
|
||||
protected BrowseBean browseBean;
|
||||
|
||||
protected String spaceType;
|
||||
protected String icon;
|
||||
protected String name;
|
||||
protected String description;
|
||||
|
||||
|
||||
private static Log logger = LogFactory.getLog(SpaceDialog.class);
|
||||
|
||||
/**
|
||||
* @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;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param namespaceService The NamespaceService
|
||||
*/
|
||||
public void setNamespaceService(NamespaceService namespaceService)
|
||||
{
|
||||
this.namespaceService = namespaceService;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param navigator The NavigationBean to set.
|
||||
*/
|
||||
public void setNavigator(NavigationBean navigator)
|
||||
{
|
||||
this.navigator = navigator;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param browseBean The BrowseBean to set.
|
||||
*/
|
||||
public void setBrowseBean(BrowseBean browseBean)
|
||||
{
|
||||
this.browseBean = browseBean;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns the description.
|
||||
*/
|
||||
public String getDescription()
|
||||
{
|
||||
return description;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param description The description to set.
|
||||
*/
|
||||
public void setDescription(String description)
|
||||
{
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns the icon.
|
||||
*/
|
||||
public String getIcon()
|
||||
{
|
||||
return icon;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param icon The icon to set.
|
||||
*/
|
||||
public void setIcon(String icon)
|
||||
{
|
||||
this.icon = icon;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns the name.
|
||||
*/
|
||||
public String getName()
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param name The name to set.
|
||||
*/
|
||||
public void setName(String name)
|
||||
{
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns the spaceType.
|
||||
*/
|
||||
public String getSpaceType()
|
||||
{
|
||||
return spaceType;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param spaceType The spaceType to set.
|
||||
*/
|
||||
public void setSpaceType(String spaceType)
|
||||
{
|
||||
this.spaceType = spaceType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of icons to allow the user to select from.
|
||||
* The list can change according to the type of space being created.
|
||||
*
|
||||
* @return A list of icons
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public List<UIListItem> getIcons()
|
||||
{
|
||||
// NOTE: we can't cache this list as it depends on the space type
|
||||
// which the user can change during the advanced space wizard
|
||||
|
||||
List<UIListItem> icons = null;
|
||||
|
||||
QName type = QName.createQName(this.spaceType);
|
||||
String typePrefixForm = type.toPrefixString(this.namespaceService);
|
||||
|
||||
Config config = Application.getConfigService(FacesContext.getCurrentInstance()).
|
||||
getConfig(typePrefixForm + ICONS_LOOKUP_KEY);
|
||||
if (config != null)
|
||||
{
|
||||
ConfigElement iconsCfg = config.getConfigElement("icons");
|
||||
if (iconsCfg != null)
|
||||
{
|
||||
boolean first = true;
|
||||
for (ConfigElement icon : iconsCfg.getChildren())
|
||||
{
|
||||
String iconName = icon.getAttribute("name");
|
||||
String iconPath = icon.getAttribute("path");
|
||||
|
||||
if (iconName != null && iconPath != null)
|
||||
{
|
||||
if (first)
|
||||
{
|
||||
// if this is the first icon create the list and make
|
||||
// the first icon in the list the default
|
||||
|
||||
icons = new ArrayList<UIListItem>(iconsCfg.getChildCount());
|
||||
if (this.icon == null)
|
||||
{
|
||||
// set the default if it is not already
|
||||
this.icon = iconName;
|
||||
}
|
||||
first = false;
|
||||
}
|
||||
|
||||
UIListItem item = new UIListItem();
|
||||
item.setValue(iconName);
|
||||
item.getAttributes().put("image", iconPath);
|
||||
icons.add(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// if we didn't find any icons display one default choice
|
||||
if (icons == null)
|
||||
{
|
||||
icons = new ArrayList<UIListItem>(1);
|
||||
this.icon = SPACE_ICON_DEFAULT;
|
||||
|
||||
UIListItem item = new UIListItem();
|
||||
item.setValue("space-icon-default");
|
||||
item.getAttributes().put("image", "/images/icons/space-icon-default.gif");
|
||||
icons.add(item);
|
||||
}
|
||||
|
||||
return icons;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialises the wizard
|
||||
*/
|
||||
public void init()
|
||||
{
|
||||
super.init();
|
||||
|
||||
// reset all variables
|
||||
this.spaceType = ContentModel.TYPE_FOLDER.toString();
|
||||
this.icon = null;
|
||||
this.name = null;
|
||||
this.description = "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String finish()
|
||||
{
|
||||
String outcome = DIALOG_CLOSE;
|
||||
|
||||
UserTransaction tx = null;
|
||||
|
||||
try
|
||||
{
|
||||
FacesContext context = FacesContext.getCurrentInstance();
|
||||
tx = Repository.getUserTransaction(context);
|
||||
tx.begin();
|
||||
|
||||
// create the space (just create a folder for now)
|
||||
NodeRef parentNodeRef;
|
||||
String nodeId = this.navigator.getCurrentNodeId();
|
||||
if (nodeId == null)
|
||||
{
|
||||
parentNodeRef = this.nodeService.getRootNode(Repository.getStoreRef());
|
||||
}
|
||||
else
|
||||
{
|
||||
parentNodeRef = new NodeRef(Repository.getStoreRef(), nodeId);
|
||||
}
|
||||
|
||||
FileInfo fileInfo = fileFolderService.create(
|
||||
parentNodeRef,
|
||||
this.name,
|
||||
Repository.resolveToQName(this.spaceType));
|
||||
NodeRef nodeRef = fileInfo.getNodeRef();
|
||||
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("Created folder node with name: " + this.name);
|
||||
|
||||
// apply the uifacets aspect - icon, title and description props
|
||||
Map<QName, Serializable> uiFacetsProps = new HashMap<QName, Serializable>(5);
|
||||
uiFacetsProps.put(ContentModel.PROP_ICON, this.icon);
|
||||
uiFacetsProps.put(ContentModel.PROP_TITLE, this.name);
|
||||
uiFacetsProps.put(ContentModel.PROP_DESCRIPTION, this.description);
|
||||
this.nodeService.addAspect(nodeRef, ContentModel.ASPECT_UIFACETS, uiFacetsProps);
|
||||
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("Added uifacets aspect with properties: " + uiFacetsProps);
|
||||
|
||||
// commit the transaction
|
||||
tx.commit();
|
||||
}
|
||||
catch (FileExistsException e)
|
||||
{
|
||||
// rollback the transaction
|
||||
try { if (tx != null) {tx.rollback();} } catch (Exception ex) {}
|
||||
// print status message
|
||||
String statusMsg = MessageFormat.format(
|
||||
Application.getMessage(
|
||||
FacesContext.getCurrentInstance(), "error_exists"),
|
||||
e.getExisting().getName());
|
||||
Utils.addErrorMessage(statusMsg);
|
||||
// no outcome
|
||||
outcome = null;
|
||||
}
|
||||
catch (Throwable e)
|
||||
{
|
||||
// rollback the transaction
|
||||
try { if (tx != null) {tx.rollback();} } catch (Exception ex) {}
|
||||
Utils.addErrorMessage(MessageFormat.format(Application.getMessage(
|
||||
FacesContext.getCurrentInstance(), ERROR), e.getMessage()), e);
|
||||
outcome = null;
|
||||
}
|
||||
|
||||
return outcome;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user