Merged V3.0 to HEAD

11982: Fix for ETHREEOH-906 - Writing the TICKET value directly to the page during template processing is a potential XSS security hole.
   11983: Added back .html suffix to plain HTML form upload api call - added code comment to explain why it's there.
   11984: Added debug/info level logging to Invite process.
   11985: ETHREEOH-184: thumbnail assocs do not double up on check-in and thumbnail updates are done in one action
   11986: Fix for ETHREEOH-905 - missing url encoding step for user password during webscript based login process.
   11995: Unit test fixed up, fallout from runAs merge.
   11998: Part of a fix for ETHREEOH-546 - Cannot save document to the any space for Microsoft Office
   11999: Merged V2.2 to V3.0
      11996: Fix for open Lucene ResultSet memory leaks
   12000: ETHREEOH-692 - It is impossible to login to Alfresco from Microsoft Office add-in using NTLM authentication. ETHREEOH-546 - Cannot save document to the any space for Microsoft Office.
   12001: Paging enabled by default in all Document Libraries

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@12494 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Kevin Roast
2008-12-18 15:08:14 +00:00
parent 26d7b9669f
commit 7bc8557a1e
11 changed files with 232 additions and 122 deletions

View File

@@ -1009,6 +1009,7 @@ public class AdminNodeBrowseBean implements Serializable
{
rows.setWrappedData(resultSet.getChildAssocRefs());
length = resultSet.length();
resultSet.close();
}
}

View File

@@ -220,12 +220,20 @@ public class AddUsersDialog extends BaseDialogBean
query.append("*\" @").append(NamespaceService.CONTENT_MODEL_PREFIX).append("\\:userName:");
query.append(term);
query.append("*");
List<NodeRef> nodes;
ResultSet resultSet = Repository.getServiceRegistry(context).getSearchService().query(
Repository.getStoreRef(),
SearchService.LANGUAGE_LUCENE,
query.toString());
List<NodeRef> nodes = resultSet.getNodeRefs();
query.toString());
try
{
nodes = resultSet.getNodeRefs();
}
finally
{
resultSet.close();
}
ArrayList<SelectItem> itemList = new ArrayList<SelectItem>(nodes.size());
for (NodeRef personRef : nodes)
{

View File

@@ -37,6 +37,7 @@ import javax.transaction.UserTransaction;
import org.alfresco.repo.security.authentication.AuthenticationException;
import org.alfresco.service.cmr.repository.InvalidNodeRefException;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.search.ResultSet;
import org.alfresco.service.cmr.search.SearchParameters;
import org.alfresco.service.cmr.search.SearchService;
import org.alfresco.service.cmr.security.AuthenticationService;
@@ -153,9 +154,18 @@ public class DeleteUserDialog extends BaseDialogBean
params.setLanguage(SearchService.LANGUAGE_LUCENE);
params.addStore(Repository.getStoreRef());
params.setQuery(query);
List<NodeRef> people = this.getSearchService().query(params).getNodeRefs();
ResultSet results = this.getSearchService().query(params);
List<NodeRef> people;
try
{
people = results.getNodeRefs();
}
finally
{
results.close();
}
if (logger.isDebugEnabled())
logger.debug("Found " + people.size() + " users");

View File

@@ -41,6 +41,7 @@ import org.alfresco.repo.search.impl.lucene.QueryParser;
import org.alfresco.repo.security.authentication.AuthenticationException;
import org.alfresco.service.cmr.repository.InvalidNodeRefException;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.search.ResultSet;
import org.alfresco.service.cmr.search.SearchParameters;
import org.alfresco.service.cmr.search.SearchService;
import org.alfresco.service.namespace.NamespaceService;
@@ -343,7 +344,16 @@ public class UsersDialog extends BaseDialogBean implements IContextListener, Cha
params.addStore(Repository.getStoreRef());
params.setQuery(query.toString());
List<NodeRef> people = properties.getSearchService().query(params).getNodeRefs();
ResultSet results = properties.getSearchService().query(params);
List<NodeRef> people;
try
{
people = results.getNodeRefs();
}
finally
{
results.close();
}
if (logger.isDebugEnabled())
logger.debug("Found " + people.size() + " users");

View File

@@ -272,13 +272,20 @@ public class EditFormWizard
for (WebProject wp: webProjects)
{
ResultSet results = searchRenderingEngineTemplateInWebProject(wp, retd.getName());
for (int i=0; i<results.length(); i++)
try
{
NodeRef webformTemplateNodeRef = results.getNodeRef(i);
NodeRef webformNodeRef = getNodeService().getPrimaryParent(webformTemplateNodeRef).getParentRef();
getNodeService().removeChild(webformNodeRef, webformTemplateNodeRef);
if (LOGGER.isDebugEnabled())
LOGGER.debug(webformNodeRef);
for (int i=0; i<results.length(); i++)
{
NodeRef webformTemplateNodeRef = results.getNodeRef(i);
NodeRef webformNodeRef = getNodeService().getPrimaryParent(webformTemplateNodeRef).getParentRef();
getNodeService().removeChild(webformNodeRef, webformTemplateNodeRef);
if (LOGGER.isDebugEnabled())
LOGGER.debug(webformNodeRef);
}
}
finally
{
results.close();
}
}
}
@@ -324,26 +331,33 @@ public class EditFormWizard
ResultSet webforms = getSearchService().query(wp.getNodeRef().getStoreRef(), SearchService.LANGUAGE_LUCENE, query);
props.clear();
props.put(WCMAppModel.PROP_BASE_RENDERING_ENGINE_TEMPLATE_NAME,
retd.getName());
for (int i=0; i<webforms.length(); i++)
try
{
if (LOGGER.isDebugEnabled())
LOGGER.debug("WebForm NodeRef: " + webforms.getNodeRef(i));
NodeRef templateRef = getNodeService().createNode(webforms.getNodeRef(i),
WCMAppModel.ASSOC_WEBFORMTEMPLATE,
WCMAppModel.ASSOC_WEBFORMTEMPLATE,
WCMAppModel.TYPE_WEBFORMTEMPLATE,
props).getChildRef();
if (retd.getOutputPathPatternForRendition() != null)
{
props.clear();
props.put(WCMAppModel.PROP_OUTPUT_PATH_PATTERN, retd.getOutputPathPatternForRendition());
getNodeService().addAspect(templateRef, WCMAppModel.ASPECT_OUTPUT_PATH_PATTERN, props);
}
props.clear();
props.put(WCMAppModel.PROP_BASE_RENDERING_ENGINE_TEMPLATE_NAME,
retd.getName());
for (int i=0; i<webforms.length(); i++)
{
if (LOGGER.isDebugEnabled())
LOGGER.debug("WebForm NodeRef: " + webforms.getNodeRef(i));
NodeRef templateRef = getNodeService().createNode(webforms.getNodeRef(i),
WCMAppModel.ASSOC_WEBFORMTEMPLATE,
WCMAppModel.ASSOC_WEBFORMTEMPLATE,
WCMAppModel.TYPE_WEBFORMTEMPLATE,
props).getChildRef();
if (retd.getOutputPathPatternForRendition() != null)
{
props.clear();
props.put(WCMAppModel.PROP_OUTPUT_PATH_PATTERN, retd.getOutputPathPatternForRendition());
getNodeService().addAspect(templateRef, WCMAppModel.ASPECT_OUTPUT_PATH_PATTERN, props);
}
}
}
finally
{
webforms.close();
}
}
}
@@ -380,7 +394,7 @@ public class EditFormWizard
return result;
}
/**
/**
* Action handler called when the Remove button is pressed to remove a
* rendering engine
*/

View File

@@ -492,14 +492,22 @@ public class RegenerateRenditionsWizard
LOGGER.debug("running query " + query);
sp.setQuery(query.toString());
final ResultSet rs = getSearchService().query(sp);
final List<FormInstanceData> result = new ArrayList<FormInstanceData>(rs.length());
for (final ResultSetRow row : rs)
try
{
final String avmPath = AVMNodeConverter.ToAVMVersionPath(row.getNodeRef()).getSecond();
final String previewAvmPath = AVMUtil.getCorrespondingPathInPreviewStore(avmPath);
result.add(getFormsService().getFormInstanceData(-1, previewAvmPath));
final List<FormInstanceData> result = new ArrayList<FormInstanceData>(rs.length());
for (final ResultSetRow row : rs)
{
final String avmPath = AVMNodeConverter.ToAVMVersionPath(row.getNodeRef()).getSecond();
final String previewAvmPath = AVMUtil.getCorrespondingPathInPreviewStore(avmPath);
result.add(getFormsService().getFormInstanceData(-1, previewAvmPath));
}
return result;
}
finally
{
rs.close();
}
return result;
}
private List<Rendition> getRelatedRenditions(final WebProject webProject, final RenderingEngineTemplate ret)
@@ -516,14 +524,21 @@ public class RegenerateRenditionsWizard
LOGGER.debug("running query " + query);
sp.setQuery(query.toString());
final ResultSet rs = getSearchService().query(sp);
final List<Rendition> result = new ArrayList<Rendition>(rs.length());
for (final ResultSetRow row : rs)
try
{
final String avmPath = AVMNodeConverter.ToAVMVersionPath(row.getNodeRef()).getSecond();
final String previewAvmPath = AVMUtil.getCorrespondingPathInPreviewStore(avmPath);
result.add(getFormsService().getRendition(-1, previewAvmPath));
final List<Rendition> result = new ArrayList<Rendition>(rs.length());
for (final ResultSetRow row : rs)
{
final String avmPath = AVMNodeConverter.ToAVMVersionPath(row.getNodeRef()).getSecond();
final String previewAvmPath = AVMUtil.getCorrespondingPathInPreviewStore(avmPath);
result.add(getFormsService().getRendition(-1, previewAvmPath));
}
return result;
}
finally
{
rs.close();
}
return result;
}
private List<Rendition> regenerateRenditions()
@@ -596,65 +611,72 @@ public class RegenerateRenditionsWizard
LOGGER.debug("running query " + query);
sp.setQuery(query.toString());
final ResultSet rs = getSearchService().query(sp);
if (LOGGER.isDebugEnabled())
LOGGER.debug("received " + rs.length() + " results");
final List<Rendition> result = new ArrayList<Rendition>(rs.length());
for (final ResultSetRow row : rs)
try
{
final String avmPath = AVMNodeConverter.ToAVMVersionPath(row.getNodeRef()).getSecond();
final String previewAvmPath = AVMUtil.getCorrespondingPathInPreviewStore(avmPath);
if (this.regenerateScope.equals(REGENERATE_SCOPE_ALL) ||
this.regenerateScope.equals(REGENERATE_SCOPE_FORM))
if (LOGGER.isDebugEnabled())
LOGGER.debug("received " + rs.length() + " results");
final List<Rendition> result = new ArrayList<Rendition>(rs.length());
for (final ResultSetRow row : rs)
{
final FormInstanceData fid = getFormsService().getFormInstanceData(-1, previewAvmPath);
try
final String avmPath = AVMNodeConverter.ToAVMVersionPath(row.getNodeRef()).getSecond();
final String previewAvmPath = AVMUtil.getCorrespondingPathInPreviewStore(avmPath);
if (this.regenerateScope.equals(REGENERATE_SCOPE_ALL) ||
this.regenerateScope.equals(REGENERATE_SCOPE_FORM))
{
final List<FormInstanceData.RegenerateResult> regenResults = fid.regenerateRenditions();
for (final FormInstanceData.RegenerateResult rr : regenResults)
final FormInstanceData fid = this.formsService.getFormInstanceData(-1, previewAvmPath);
try
{
if (rr.getException() != null)
final List<FormInstanceData.RegenerateResult> regenResults = fid.regenerateRenditions();
for (final FormInstanceData.RegenerateResult rr : regenResults)
{
Utils.addErrorMessage("error regenerating rendition using " +
rr.getRenderingEngineTemplate().getName() +
": " + rr.getException().getMessage(),
rr.getException());
}
else
{
result.add(rr.getRendition());
}
if (rr.getRendition() != null)
{
getAvmLockingService().removeLock(AVMUtil.getStoreId(rr.getRendition().getPath()),
AVMUtil.getStoreRelativePath(rr.getRendition().getPath()));
if (rr.getException() != null)
{
Utils.addErrorMessage("error regenerating rendition using " +
rr.getRenderingEngineTemplate().getName() +
": " + rr.getException().getMessage(),
rr.getException());
}
else
{
result.add(rr.getRendition());
}
if (rr.getRendition() != null)
{
this.avmLockingService.removeLock(AVMUtil.getStoreId(rr.getRendition().getPath()),
AVMUtil.getStoreRelativePath(rr.getRendition().getPath()));
}
}
}
catch (FormNotFoundException fnfe)
{
Utils.addErrorMessage("error regenerating renditions of " + fid.getPath() +
": " + fnfe.getMessage(),
fnfe);
}
}
catch (FormNotFoundException fnfe)
else
{
Utils.addErrorMessage("error regenerating renditions of " + fid.getPath() +
": " + fnfe.getMessage(),
fnfe);
}
}
else
{
final Rendition r = getFormsService().getRendition(-1, previewAvmPath);
try
{
r.regenerate();
result.add(r);
}
catch (Exception e)
{
Utils.addErrorMessage("error regenerating rendition using " +
r.getRenderingEngineTemplate().getName() +
": " + e.getMessage(),
e);
final Rendition r = this.formsService.getRendition(-1, previewAvmPath);
try
{
r.regenerate();
result.add(r);
}
catch (Exception e)
{
Utils.addErrorMessage("error regenerating rendition using " +
r.getRenderingEngineTemplate().getName() +
": " + e.getMessage(),
e);
}
}
}
return result;
}
finally
{
rs.close();
}
return result;
}
}

View File

@@ -259,8 +259,16 @@ public class SetPermissionsDialog extends UpdatePermissionsDialog
query.append(term);
query.append("*");
ResultSet resultSet = Repository.getServiceRegistry(context).getSearchService().query(Repository.getStoreRef(), SearchService.LANGUAGE_LUCENE, query.toString());
List<NodeRef> nodes = resultSet.getNodeRefs();
List<NodeRef> nodes;
try
{
nodes = resultSet.getNodeRefs();
}
finally
{
resultSet.close();
}
for (int index = 0; index < nodes.size(); index++)
{
NodeRef personRef = nodes.get(index);

View File

@@ -391,8 +391,16 @@ public abstract class BaseInviteUsersWizard extends BaseWizardBean
searchParams.setLimitBy(LimitBy.FINAL_SIZE);
}
ResultSet resultSet = Repository.getServiceRegistry(context).getSearchService().query(searchParams);
List<NodeRef> nodes = resultSet.getNodeRefs();
ResultSet resultSet = Repository.getServiceRegistry(context).getSearchService().query(searchParams);
List<NodeRef> nodes;
try
{
nodes = resultSet.getNodeRefs();
}
finally
{
resultSet.close();
}
// set the maximum users returned flag if appropriate
if (nodes.size() == maxResults)

View File

@@ -128,6 +128,7 @@ public abstract class BaseReassignDialog extends BaseDialogBean
SelectItem[] items;
UserTransaction tx = null;
ResultSet resultSet = null;
try
{
tx = Repository.getUserTransaction(context, true);
@@ -143,7 +144,7 @@ public abstract class BaseReassignDialog extends BaseDialogBean
query.append("*\" @").append(NamespaceService.CONTENT_MODEL_PREFIX).append("\\:userName:");
query.append(term);
query.append("*");
ResultSet resultSet = Repository.getServiceRegistry(context).getSearchService().query(
resultSet = Repository.getServiceRegistry(context).getSearchService().query(
Repository.getStoreRef(), SearchService.LANGUAGE_LUCENE, query.toString());
List<NodeRef> nodes = resultSet.getNodeRefs();
@@ -175,6 +176,13 @@ public abstract class BaseReassignDialog extends BaseDialogBean
items = new SelectItem[0];
}
finally
{
if (resultSet != null)
{
resultSet.close();
}
}
return items;
}

View File

@@ -218,17 +218,24 @@ public final class FormsService
final ResultSet rs = this.searchService.query(Repository.getStoreRef(),
SearchService.LANGUAGE_LUCENE,
query);
if (LOGGER.isDebugEnabled())
LOGGER.debug("found " + rs.length() + " form definitions");
final Collection<Form> result = new ArrayList<Form>(rs.length());
for (final ResultSetRow row : rs)
try
{
result.add(this.getForm(row.getNodeRef()));
if (LOGGER.isDebugEnabled())
LOGGER.debug("found " + rs.length() + " form definitions");
final Collection<Form> result = new ArrayList<Form>(rs.length());
for (final ResultSetRow row : rs)
{
result.add(this.getForm(row.getNodeRef()));
}
QuickSort sorter = new QuickSort((List)result, "name", true, IDataContainer.SORT_CASEINSENSITIVE);
sorter.sort();
return result;
}
finally
{
rs.close();
}
QuickSort sorter = new QuickSort((List)result, "name", true, IDataContainer.SORT_CASEINSENSITIVE);
sorter.sort();
return result;
}
/**
@@ -400,15 +407,22 @@ public final class FormsService
final ResultSet rs = this.searchService.query(Repository.getStoreRef(),
SearchService.LANGUAGE_LUCENE,
query);
if (LOGGER.isDebugEnabled())
try
{
LOGGER.debug("query " + query + " returned " + rs.length() + " results");
if (LOGGER.isDebugEnabled())
{
LOGGER.debug("query " + query + " returned " + rs.length() + " results");
}
final List<NodeRef> result = new ArrayList<NodeRef>(rs.length());
for (final ResultSetRow row : rs)
{
result.add(row.getNodeRef());
}
return result;
}
final List<NodeRef> result = new ArrayList<NodeRef>(rs.length());
for (final ResultSetRow row : rs)
finally
{
result.add(row.getNodeRef());
rs.close();
}
return result;
}
}

View File

@@ -145,18 +145,25 @@ public class Schema2XFormsProperties
searchService.query(Repository.getStoreRef(),
SearchService.LANGUAGE_LUCENE,
"PATH:\"" + name + "\"");
LOGGER.debug("search returned " + results.length() +
" results");
if (results.length() == 1)
try
{
final NodeRef nr = results.getNodeRef(0);
final ContentReader reader =
contentService.getReader(nr, ContentModel.PROP_CONTENT);
return reader.getContentInputStream();
LOGGER.debug("search returned " + results.length() +
" results");
if (results.length() == 1)
{
final NodeRef nr = results.getNodeRef(0);
final ContentReader reader =
contentService.getReader(nr, ContentModel.PROP_CONTENT);
return reader.getContentInputStream();
}
else
{
return super.getResourceAsStream(name);
}
}
else
finally
{
return super.getResourceAsStream(name);
results.close();
}
}
};