Merged V3.2 to HEAD

15897: Merged V3.1 to V3.2
      14485: (RECORD ONLY) ETHREEOH-1937
      14915: (RECORD ONLY) Fix for ETHREEOH-2011: chaining-authentication-context.xml.sample
      14954: (RECORD ONLY) Fix merge error
      14966: (RECORD ONLY) Merged V2.2 to V3.1
         14131: *RECORD ONLY*
         14605: Merged HEAD to V2.2 (workaround for ETWOTWO-1137)
            14368: Fix for ETHREEOH-1936
         14607: Fixed NPE in TextMiningContentTransformer: Lead-up to fix for ETWOTWO-1174
      14992: (RECORD ONLY) Updated svn:mergeinfo for V2.1-A
      15080: Applied suggested fix for ETHREEOH-2252: Emailed content created in wrong space
      15131: Merged V2.1-A to V3.1 (ETHREEOH-2270)
         13465: Fix for ADB-161 ACT 7870 - added 'xsd' to mimetype map.
      15134: Merged V2.2 to V3.1
         14332: (RECORD-ONLY)
         14717: (RECORD-ONLY)
         14745: (RECORD-ONLY)
         14746: Fixed error relating to detection and clean-up of duplicate child associations
         14759: Missed check-in: Set transactionService for post-transaction duplicate child assoc cleanup
         14761: (RECORD-ONLY)
         14885: (RECORD-ONLY)
         14893: (RECORD-ONLY)
         14903: (RECORD-ONLY)
      15204: Fixed ETHREEOH-2303: FixNameCrcValuesPatch throws ConstraintViolationException during upgrade ...
      15214: Fixed ETHREEOH-1861: Offline synchronization updates file content without any changes
      15271: Applied patch fix: Imported users don't conform to case-sensitivity switch
      15352: ETHREEOH-2322
      15361: ETHREEOH-1112
      15369: ETHREEOH-2448
      15419: ETHREEOH-2479
      15431: ETHREEOH-2520 and ETHREEOH-2521
      15587: (RECORD ONLY) Moved Enterprise-only scripts to correct location
      15616: Fix ETHREEOH-2581 - WCM layered folder - can't submit deleted file
      15675: WCM fixes (ETHREEOH-2110 & ETHREEOH-2645)
      15836: Check for null username in ContentUsage service getUserUsage() method
      15840: (RECORD ONLY) Merged V3.2 to V3.1
         14760: Fix for ALFCOM-586 - trims and ignores leading/trailing whitespace before validation in JSF client forms.
      15841: Fixes for ETHREEOH-2702 and ETHREEOH-2687
      15860: (RECORD ONLY) Added Oracle and MS SQL Server config
      15891: Removed unused compiler directive
___________________________________________________________________
Modified: svn:mergeinfo
   Merged /alfresco/BRANCHES/DEV/BELARUS/ETHREEOH-2221:r14753
   Merged /alfresco/BRANCHES/V2.1-A: lots
   Merged /alfresco/BRANCHES/V2.2:r14131,14332,14605,14607,14717,14745-14746,14759,14761,14885,14893,14903
   Merged /alfresco/BRANCHES/V3.1:r14485,14915,14954,14966,14992,15080,15131,15134,15204,15214,15271,15352,15361,15369,15419,15431,15587,15616,15675,15818,15836,15840-15841,15860,15891
   Merged /alfresco/BRANCHES/V3.2:r15897


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@16886 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Derek Hulley
2009-10-13 20:08:41 +00:00
parent fb6c00b89e
commit 6c3b7b8cd6
28 changed files with 241 additions and 62 deletions

View File

@@ -218,6 +218,14 @@ public class ImportDialog extends BaseDialogBean
return this.fileName;
}
/**
* @param fileName The name of the file
*/
public void setFileName(String fileName)
{
//do nothing required for JSF workflow
}
/**
* Returns the encoding to use for the export
*

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2005-2007 Alfresco Software Limited.
* Copyright (C) 2005-2009 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -24,16 +24,20 @@
*/
package org.alfresco.web.bean.clipboard;
import java.util.Map;
import javax.faces.context.FacesContext;
import javax.transaction.UserTransaction;
import org.alfresco.model.WCMAppModel;
import org.alfresco.repo.avm.AVMNodeConverter;
import org.alfresco.service.cmr.avm.AVMExistsException;
import org.alfresco.service.cmr.avm.AVMNodeDescriptor;
import org.alfresco.service.cmr.avm.AVMService;
import org.alfresco.service.cmr.model.FileExistsException;
import org.alfresco.service.cmr.model.FileFolderService;
import org.alfresco.service.cmr.repository.CrossRepositoryCopyService;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.web.app.Application;
import org.alfresco.web.app.servlet.FacesHelper;
import org.alfresco.web.bean.NavigationBean;
@@ -98,8 +102,7 @@ public class AVMClipboardItem extends AbstractClipboardItem
NodeRef destRef = AVMNodeConverter.ToNodeRef(-1, destPath);
String sourcePath = AVMNodeConverter.ToAVMVersionPath(getNodeRef()).getSecond();
FileFolderService fileFolderService = getServiceRegistry().getFileFolderService();
AVMService avmService = getServiceRegistry().getAVMLockingAwareService();
//FileFolderService fileFolderService = getServiceRegistry().getFileFolderService();
// initial name to attempt the copy of the item with
String name = getName();
@@ -131,7 +134,11 @@ public class AVMClipboardItem extends AbstractClipboardItem
getNodeRef(),
destRef,
name);*/
avmService.copy(-1, sourcePath, destPath, name);
getAvmService().copy(-1, sourcePath, destPath, name);
// ETHREEOH-2110
AVMNodeDescriptor desc = getAvmService().lookup(-1, destPath + "/" + name);
recursiveFormCheck(desc);
// if we get here without an exception, the clipboard copy operation was successful
operationComplete = true;
@@ -147,7 +154,7 @@ public class AVMClipboardItem extends AbstractClipboardItem
getNodeRef(),
destRef,
name);*/
avmService.rename(AVMNodeConverter.SplitBase(sourcePath)[0], getName(),
getAvmService().rename(AVMNodeConverter.SplitBase(sourcePath)[0], getName(),
destPath, name);
// if we get here without an exception, the clipboard move operation was successful
@@ -221,6 +228,14 @@ public class AVMClipboardItem extends AbstractClipboardItem
// inter-store copy operation
crossRepoCopyService.copy(getNodeRef(), destRef, name);
if (destRef.getStoreRef().getProtocol().equals(StoreRef.PROTOCOL_AVM))
{
// ETHREEOH-2110
String destPath = AVMNodeConverter.ToAVMVersionPath(destRef).getSecond();
AVMNodeDescriptor desc = getAvmService().lookup(-1, destPath + "/" + name);
recursiveFormCheck(desc);
}
// if we get here without an exception, the clipboard copy operation was successful
operationComplete = true;
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2005-2007 Alfresco Software Limited.
* Copyright (C) 2005-2009 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -25,13 +25,17 @@
package org.alfresco.web.bean.clipboard;
import java.util.List;
import java.util.Map;
import javax.faces.context.FacesContext;
import org.alfresco.model.ApplicationModel;
import org.alfresco.model.ContentModel;
import org.alfresco.model.WCMAppModel;
import org.alfresco.repo.search.QueryParameterDefImpl;
import org.alfresco.service.ServiceRegistry;
import org.alfresco.service.cmr.avm.AVMNodeDescriptor;
import org.alfresco.service.cmr.avm.AVMService;
import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.search.QueryParameterDefinition;
@@ -64,6 +68,22 @@ abstract class AbstractClipboardItem implements ClipboardItem
private QName type;
private String icon;
transient protected AVMService avmService;
public void setAvmService(AVMService avmService)
{
this.avmService = avmService;
}
protected AVMService getAvmService()
{
if (avmService == null)
{
avmService = getServiceRegistry().getAVMLockingAwareService();
}
return avmService;
}
/**
* Constructor
@@ -173,4 +193,27 @@ abstract class AbstractClipboardItem implements ClipboardItem
return (nodeRefs.size() != 0);
}
protected void recursiveFormCheck(AVMNodeDescriptor desc)
{
if (desc.isFile())
{
String filePath = desc.getPath();
if (avmService.hasAspect(-1, filePath, WCMAppModel.ASPECT_FORM_INSTANCE_DATA))
{
avmService.removeAspect(filePath, WCMAppModel.ASPECT_FORM_INSTANCE_DATA);
}
if (avmService.hasAspect(-1, filePath, WCMAppModel.ASPECT_RENDITION))
{
avmService.removeAspect(filePath, WCMAppModel.ASPECT_RENDITION);
}
}
else
{
Map<String, AVMNodeDescriptor> listing = getAvmService().getDirectoryListing(desc);
for (Map.Entry<String, AVMNodeDescriptor> entry : listing.entrySet())
{
recursiveFormCheck(entry.getValue());
}
}
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2005-2007 Alfresco Software Limited.
* Copyright (C) 2005-2009 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -34,6 +34,7 @@ import javax.transaction.UserTransaction;
import org.alfresco.model.ApplicationModel;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.avm.AVMNodeConverter;
import org.alfresco.service.cmr.avm.AVMNodeDescriptor;
import org.alfresco.service.cmr.dictionary.DictionaryService;
import org.alfresco.service.cmr.ml.MultilingualContentService;
import org.alfresco.service.cmr.model.FileExistsException;
@@ -43,6 +44,7 @@ import org.alfresco.service.cmr.repository.CopyService;
import org.alfresco.service.cmr.repository.CrossRepositoryCopyService;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.namespace.QName;
import org.alfresco.web.app.Application;
import org.alfresco.web.app.servlet.FacesHelper;
@@ -345,7 +347,14 @@ public class WorkspaceClipboardItem extends AbstractClipboardItem
// inter-store copy operation
crossRepoCopyService.copy(getNodeRef(), destRef, name);
if (destRef.getStoreRef().getProtocol().equals(StoreRef.PROTOCOL_AVM))
{
// ETHREEOH-2110
AVMNodeDescriptor desc = getAvmService().lookup(-1, destPath + "/" + name);
recursiveFormCheck(desc);
}
// if we get here without an exception, the clipboard copy operation was successful
operationComplete = true;
}

View File

@@ -44,6 +44,7 @@ import org.alfresco.config.ConfigService;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.content.MimetypeMap;
import org.alfresco.repo.content.filestore.FileContentReader;
import org.alfresco.service.cmr.model.FileExistsException;
import org.alfresco.service.cmr.repository.ContentReader;
import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter;
import org.alfresco.service.namespace.QName;
@@ -316,5 +317,22 @@ public class AddContentDialog extends BaseContentWizard
return Application.getMessage(FacesContext.getCurrentInstance(), MSG_OK);
}
@Override
protected String formatErrorMessage(Throwable exception)
{
if (exception instanceof FileExistsException)
{
return MessageFormat.format(Application.getMessage(
FacesContext.getCurrentInstance(), Repository.ERROR_EXISTS),
((FileExistsException)exception).getName());
}
else
{
return MessageFormat.format(Application.getMessage(
FacesContext.getCurrentInstance(), "error_content"),
exception.getMessage());
}
}
}

View File

@@ -25,6 +25,7 @@
package org.alfresco.web.bean.content;
import java.io.Serializable;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
@@ -41,11 +42,13 @@ import org.alfresco.config.ConfigElement;
import org.alfresco.config.ConfigService;
import org.alfresco.model.WCMAppModel;
import org.alfresco.repo.content.MimetypeMap;
import org.alfresco.service.cmr.model.FileExistsException;
import org.alfresco.service.namespace.QName;
import org.alfresco.web.app.AlfrescoNavigationHandler;
import org.alfresco.web.app.Application;
import org.alfresco.web.app.servlet.FacesHelper;
import org.alfresco.web.bean.repository.Node;
import org.alfresco.web.bean.repository.Repository;
import org.alfresco.web.data.IDataContainer;
import org.alfresco.web.data.QuickSort;
import org.alfresco.web.forms.Form;
@@ -391,4 +394,22 @@ public class CreateContentWizard extends BaseContentWizard
// clear the content as HTML is not compatible with the plain text box etc.
this.content = null;
}
@Override
protected String formatErrorMessage(Throwable exception)
{
if (exception instanceof FileExistsException)
{
return MessageFormat.format(Application.getMessage(
FacesContext.getCurrentInstance(), Repository.ERROR_EXISTS),
((FileExistsException)exception).getName());
}
else
{
return MessageFormat.format(Application.getMessage(
FacesContext.getCurrentInstance(), "error_content"),
exception.getMessage());
}
}
}

View File

@@ -244,6 +244,8 @@ public class EditFormWizard
assert retd != null;
assert retd.getNodeRef() != null;
this.getNodeService().removeAssociation(formNodeRef, retd.getNodeRef(),
WCMAppModel.ASSOC_RENDERING_ENGINE_TEMPLATES);
this.getNodeService().removeChild(formNodeRef, retd.getNodeRef());
this.removeRenderingEngineTemplateFromWebProjects(formNodeRef, retd);

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2005-2007 Alfresco Software Limited.
* Copyright (C) 2005-2009 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -24,8 +24,10 @@
*/
package org.alfresco.web.bean.wcm;
import java.io.Serializable;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -36,6 +38,7 @@ import org.alfresco.model.WCMAppModel;
import org.alfresco.repo.domain.PropertyValue;
import org.alfresco.service.cmr.avm.AVMService;
import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
import org.alfresco.service.namespace.QName;
import org.alfresco.web.app.AlfrescoNavigationHandler;
import org.alfresco.web.app.Application;
import org.alfresco.web.app.servlet.FacesHelper;
@@ -57,7 +60,7 @@ public class PromptForWebFormDialog extends BaseDialogBean
{
private static final long serialVersionUID = 8062203927131257236L;
private static final Log LOGGER = LogFactory.getLog(PromptForWebFormDialog.class);
private static final Log logger = LogFactory.getLog(PromptForWebFormDialog.class);
/** AVM service reference */
transient private AVMService avmService;
@@ -152,8 +155,12 @@ public class PromptForWebFormDialog extends BaseDialogBean
{
final Form f = fid.getForm();
this.formName = f.getName();
// strange case... this should throw an exception if we're here...
LOGGER.debug(avmPath + ".getForm() did not throw a form not found. why are we here?");
if (logger.isDebugEnabled())
{
// strange case... this should throw an exception if we're here...
logger.debug(avmPath + ".getForm() did not throw a form not found. why are we here?");
}
}
catch (final FormNotFoundException fnfe)
{
@@ -178,19 +185,31 @@ public class PromptForWebFormDialog extends BaseDialogBean
protected String finishImpl(final FacesContext context, String outcome)
throws Exception
{
LOGGER.debug("configuring " + this.getAvmNode().getPath() +
" to use form " + this.getFormName());
this.getAvmService().setNodeProperty(this.getAvmNode().getPath(),
WCMAppModel.PROP_PARENT_FORM_NAME,
new PropertyValue(DataTypeDefinition.TEXT, this.getFormName()));
if (logger.isDebugEnabled())
{
logger.debug("configuring " + this.getAvmNode().getPath() +
" to use form " + this.getFormName());
}
if (!this.getAvmService().hasAspect(this.getAvmNode().getVersion(),
this.getAvmNode().getPath(),
WCMAppModel.ASPECT_FORM_INSTANCE_DATA))
{
this.getAvmService().addAspect(this.getAvmNode().getPath(), WCMAppModel.ASPECT_FORM_INSTANCE_DATA);
String cwd = AVMUtil.getCorrespondingPathInPreviewStore(this.avmBrowseBean.getCurrentPath());
Map<QName, Serializable> props = new HashMap<QName, Serializable>(1, 1.0f);
props.put(WCMAppModel.PROP_PARENT_FORM_NAME, this.getFormName());
props.put(WCMAppModel.PROP_ORIGINAL_PARENT_PATH, cwd);
this.getNodeService().addAspect(this.getAvmNode().getNodeRef(), WCMAppModel.ASPECT_FORM_INSTANCE_DATA, props);
}
else
{
this.getAvmService().setNodeProperty(this.getAvmNode().getPath(),
WCMAppModel.PROP_PARENT_FORM_NAME,
new PropertyValue(DataTypeDefinition.TEXT, this.getFormName()));
}
return outcome;
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2005-2007 Alfresco Software Limited.
* Copyright (C) 2005-2009 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -283,8 +283,11 @@ public class RenderingEngineTemplateImpl
RenderingEngine.RenderingException
{
final AVMService avmService = this.getServiceRegistry().getAVMLockingAwareService();
final boolean isRegenerate = avmService.lookup(-1, renditionAvmPath) != null;
if (!isRegenerate)
boolean isRegenerate = true;
boolean exists = avmService.lookup(-1, renditionAvmPath) != null;
if (! exists)
{
final String parentAVMPath = AVMNodeConverter.SplitBase(renditionAvmPath)[0];
AVMUtil.makeAllDirectories(parentAVMPath);
@@ -292,18 +295,30 @@ public class RenderingEngineTemplateImpl
AVMNodeConverter.SplitBase(renditionAvmPath)[1]);
if (LOGGER.isDebugEnabled())
{
LOGGER.debug("Created file node for file: " + renditionAvmPath);
avmService.addAspect(renditionAvmPath, WCMAppModel.ASPECT_FORM_INSTANCE_DATA);
}
avmService.addAspect(renditionAvmPath, ContentModel.ASPECT_TITLED);
avmService.addAspect(renditionAvmPath, WCMAppModel.ASPECT_RENDITION);
isRegenerate = false;
}
else
{
// ETHREEOH-2110
if (! avmService.hasAspect(-1, renditionAvmPath, WCMAppModel.ASPECT_RENDITION))
{
avmService.addAspect(renditionAvmPath, WCMAppModel.ASPECT_RENDITION);
isRegenerate = false;
}
}
final Rendition result = new RenditionImpl(-1,
renditionAvmPath,
this.getFormsService());
this.render(formInstanceData, result);
if (!isRegenerate)
{
final PropertyValue pv =

View File

@@ -371,7 +371,8 @@ public class UIGenericPicker extends UICommand
// results list row
out.write("<tr><td colspan=2>");
out.write("<select size='8' style='min-width:");
out.write("<select size='8' style='");
out.write((currentResults != null && currentResults.length != 0) ? "min-width:" : "width:");
out.write(Integer.toString(getWidth()));
out.write("px;height:");
out.write(Integer.toString(getHeight()));