mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-06-16 17:55:15 +00:00
Merged V2.1 to HEAD
6609: Portlet UI (doclist, myspaces, mytasks) updates following design review 6610: AR-1270 6611: debugging WCM-778. 6612: Improved API documentation. 6613: Added store lookup cache to EHCache config for default and extended cluster sample 6614: AWC-1531 and AWC-1146. Link objects that have targets which the user does not have access to are now filtered from the view. 6615: AR-1664: Bootstraping from full export fails if file names differs only with a space: my file, my file 6616: Fixed AR-1519: Possible duplicate entries when moving nodes between stores 6617: Removed deprecated aspects; Added emailed aspect to messages; Added OOo command line options 6618: Fix for AWC-1350 6619: Fix for AWC-1509 6620: AWC-1179: Searching for users in Invite User Wizard is slow with large number of users 6621: Changed shutdown logic to avoid classloader cleanup race. 6622: Fix for AWC-1533 (can't save office docs to Company Home) 6623: Fix for AR-1705 6624: Better fix for AWC-1256 (links generated by tinyMCE editor) 6625: Fixed AR-1713: Transformers that do nothing don't break full text indexing 6626: Fixed AWC-1438: Added explcit TXT to PDF converter that wraps the PDFBox TextToPDF class 6627: Portlet templates now handle missing description property on web form 6628: Fix WCM-788 6635: Make workflow available for users who cannot see company home Resolved conflicted state of 'root\projects\repository\source\java\org\alfresco\repo\workflow\jbpm\JBPMEngine.java' git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@6748 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
parent
f443bd467d
commit
f4f0f51a7d
@ -277,7 +277,7 @@
|
|||||||
<value>org.alfresco.repo.avm.lookupTransactionalCache</value>
|
<value>org.alfresco.repo.avm.lookupTransactionalCache</value>
|
||||||
</property>
|
</property>
|
||||||
<property name="maxCacheSize">
|
<property name="maxCacheSize">
|
||||||
<value>50</value>
|
<value>100</value>
|
||||||
</property>
|
</property>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
@ -313,7 +313,7 @@
|
|||||||
<value>org.alfresco.repo.avm.storeLookupTransactionalCache</value>
|
<value>org.alfresco.repo.avm.storeLookupTransactionalCache</value>
|
||||||
</property>
|
</property>
|
||||||
<property name="maxCacheSize">
|
<property name="maxCacheSize">
|
||||||
<value>100</value>
|
<value>200</value>
|
||||||
</property>
|
</property>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
|
@ -190,6 +190,19 @@
|
|||||||
</property>
|
</property>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
|
<bean id="transformer.PdfBox.TextToPdf"
|
||||||
|
class="org.alfresco.repo.content.transform.TextToPdfContentTransformer"
|
||||||
|
parent="baseContentTransformer" >
|
||||||
|
<property name="explicitTransformations">
|
||||||
|
<list>
|
||||||
|
<bean class="org.alfresco.repo.content.transform.ContentTransformerRegistry$TransformationKey" >
|
||||||
|
<constructor-arg><value>text/plain</value></constructor-arg>
|
||||||
|
<constructor-arg><value>application/pdf</value></constructor-arg>
|
||||||
|
</bean>
|
||||||
|
</list>
|
||||||
|
</property>
|
||||||
|
</bean>
|
||||||
|
|
||||||
<bean id="transformer.Poi"
|
<bean id="transformer.Poi"
|
||||||
class="org.alfresco.repo.content.transform.PoiHssfContentTransformer"
|
class="org.alfresco.repo.content.transform.PoiHssfContentTransformer"
|
||||||
parent="baseContentTransformer" />
|
parent="baseContentTransformer" />
|
||||||
|
@ -258,7 +258,13 @@
|
|||||||
<!-- Internally used caches -->
|
<!-- Internally used caches -->
|
||||||
<cache
|
<cache
|
||||||
name="org.alfresco.repo.avm.lookupSharedCache"
|
name="org.alfresco.repo.avm.lookupSharedCache"
|
||||||
maxElementsInMemory="10000"
|
maxElementsInMemory="50"
|
||||||
|
eternal="true"
|
||||||
|
overflowToDisk="false"
|
||||||
|
/>
|
||||||
|
<cache
|
||||||
|
name="org.alfresco.repo.avm.storeLookupSharedCache"
|
||||||
|
maxElementsInMemory="100"
|
||||||
eternal="true"
|
eternal="true"
|
||||||
overflowToDisk="false"
|
overflowToDisk="false"
|
||||||
/>
|
/>
|
||||||
|
@ -376,7 +376,22 @@
|
|||||||
|
|
||||||
<cache
|
<cache
|
||||||
name="org.alfresco.repo.avm.lookupSharedCache"
|
name="org.alfresco.repo.avm.lookupSharedCache"
|
||||||
maxElementsInMemory="10000"
|
maxElementsInMemory="50"
|
||||||
|
eternal="true"
|
||||||
|
overflowToDisk="false">
|
||||||
|
|
||||||
|
<cacheEventListenerFactory
|
||||||
|
class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
|
||||||
|
properties="replicatePuts = false,
|
||||||
|
replicateUpdates = true,
|
||||||
|
replicateRemovals = true,
|
||||||
|
replicateUpdatesViaCopy = false,
|
||||||
|
replicateAsynchronously = false"/>
|
||||||
|
</cache>
|
||||||
|
|
||||||
|
<cache
|
||||||
|
name="org.alfresco.repo.avm.storeLookupSharedCache"
|
||||||
|
maxElementsInMemory="100"
|
||||||
eternal="true"
|
eternal="true"
|
||||||
overflowToDisk="false">
|
overflowToDisk="false">
|
||||||
|
|
||||||
|
@ -215,3 +215,16 @@ cm_contentmodel.property.cm_categories.description=Categories
|
|||||||
cm_contentmodel.aspect.cm_attachable.title=Attachable
|
cm_contentmodel.aspect.cm_attachable.title=Attachable
|
||||||
cm_contentmodel.aspect.cm_attachable.description=Allows other repository objects to be attached
|
cm_contentmodel.aspect.cm_attachable.description=Allows other repository objects to be attached
|
||||||
|
|
||||||
|
cm_contentmodel.aspect.cm_emailed.title=Emailed
|
||||||
|
cm_contentmodel.aspect.cm_emailed.description=Emailed
|
||||||
|
cm_contentmodel.property.cm_originator.title=Originator
|
||||||
|
cm_contentmodel.property.cm_originator.description=Originator
|
||||||
|
cm_contentmodel.property.cm_addressee.title=Addressee
|
||||||
|
cm_contentmodel.property.cm_addressee.description=Addressee
|
||||||
|
cm_contentmodel.property.cm_addressees.title=Addressees
|
||||||
|
cm_contentmodel.property.cm_addressees.description=Addressees
|
||||||
|
cm_contentmodel.property.cm_subjectline.title=Subject
|
||||||
|
cm_contentmodel.property.cm_subjectline.description=Subject
|
||||||
|
cm_contentmodel.property.cm_sentdate.title=Sent Date
|
||||||
|
cm_contentmodel.property.cm_sentdate.description=Sent Date
|
||||||
|
|
||||||
|
@ -100,6 +100,7 @@
|
|||||||
<property name="serviceRegistry" ref="ServiceRegistry"/>
|
<property name="serviceRegistry" ref="ServiceRegistry"/>
|
||||||
<property name="companyHomeStore"><value>${spaces.store}</value></property>
|
<property name="companyHomeStore"><value>${spaces.store}</value></property>
|
||||||
<property name="companyHomePath"><value>/${spaces.company_home.childname}</value></property>
|
<property name="companyHomePath"><value>/${spaces.company_home.childname}</value></property>
|
||||||
|
<property name="unprotectedSearchService" ref="searchService"/>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<!-- Workflow Patch Deployer -->
|
<!-- Workflow Patch Deployer -->
|
||||||
|
@ -4354,6 +4354,10 @@ public class NTProtocolHandler extends CoreProtocolHandler
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get the current file size from the open file
|
||||||
|
|
||||||
|
fileInfo.setFileSize( netFile.getFileSize());
|
||||||
|
|
||||||
// Pack the file information into the return data packet
|
// Pack the file information into the return data packet
|
||||||
|
|
||||||
dataLen = QueryInfoPacker.packInfo(fileInfo, replyBuf, infoLevl, true);
|
dataLen = QueryInfoPacker.packInfo(fileInfo, replyBuf, infoLevl, true);
|
||||||
|
@ -676,6 +676,8 @@ public class AVMLockingAwareService implements AVMService, ApplicationContextAwa
|
|||||||
{
|
{
|
||||||
grabLock(parent + '/' + name);
|
grabLock(parent + '/' + name);
|
||||||
fService.removeNode(parent, name);
|
fService.removeNode(parent, name);
|
||||||
|
String[] storePath = parent.split(":");
|
||||||
|
fService.createSnapshot(storePath[0], null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
@ -685,6 +687,8 @@ public class AVMLockingAwareService implements AVMService, ApplicationContextAwa
|
|||||||
{
|
{
|
||||||
grabLock(path);
|
grabLock(path);
|
||||||
fService.removeNode(path);
|
fService.removeNode(path);
|
||||||
|
String[] storePath = path.split(":");
|
||||||
|
fService.createSnapshot(storePath[0], null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
|
@ -48,6 +48,7 @@ import org.alfresco.repo.content.transform.PoiHssfContentTransformerTest;
|
|||||||
import org.alfresco.repo.content.transform.RuntimeExecutableContentTransformerTest;
|
import org.alfresco.repo.content.transform.RuntimeExecutableContentTransformerTest;
|
||||||
import org.alfresco.repo.content.transform.StringExtractingContentTransformerTest;
|
import org.alfresco.repo.content.transform.StringExtractingContentTransformerTest;
|
||||||
import org.alfresco.repo.content.transform.TextMiningContentTransformerTest;
|
import org.alfresco.repo.content.transform.TextMiningContentTransformerTest;
|
||||||
|
import org.alfresco.repo.content.transform.TextToPdfContentTransformerTest;
|
||||||
|
|
||||||
import junit.framework.Test;
|
import junit.framework.Test;
|
||||||
import junit.framework.TestSuite;
|
import junit.framework.TestSuite;
|
||||||
@ -86,6 +87,7 @@ public class ContentTestSuite extends TestSuite
|
|||||||
suite.addTestSuite(RuntimeExecutableContentTransformerTest.class);
|
suite.addTestSuite(RuntimeExecutableContentTransformerTest.class);
|
||||||
suite.addTestSuite(StringExtractingContentTransformerTest.class);
|
suite.addTestSuite(StringExtractingContentTransformerTest.class);
|
||||||
suite.addTestSuite(TextMiningContentTransformerTest.class);
|
suite.addTestSuite(TextMiningContentTransformerTest.class);
|
||||||
|
suite.addTestSuite(TextToPdfContentTransformerTest.class);
|
||||||
suite.addTestSuite(MailContentTransformerTest.class);
|
suite.addTestSuite(MailContentTransformerTest.class);
|
||||||
suite.addTestSuite(ContentDataTest.class);
|
suite.addTestSuite(ContentDataTest.class);
|
||||||
suite.addTestSuite(MimetypeMapTest.class);
|
suite.addTestSuite(MimetypeMapTest.class);
|
||||||
|
@ -72,9 +72,10 @@ public class MailContentTransformer extends AbstractContentTransformer
|
|||||||
* @see org.alfresco.repo.content.transform.AbstractContentTransformer#transformInternal(org.alfresco.service.cmr.repository.ContentReader, org.alfresco.service.cmr.repository.ContentWriter, java.util.Map)
|
* @see org.alfresco.repo.content.transform.AbstractContentTransformer#transformInternal(org.alfresco.service.cmr.repository.ContentReader, org.alfresco.service.cmr.repository.ContentWriter, java.util.Map)
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected void transformInternal(final ContentReader reader, final ContentWriter writer, Map<String, Object> options)
|
protected void transformInternal(final ContentReader reader, ContentWriter writer, Map<String, Object> options)
|
||||||
throws Exception
|
throws Exception
|
||||||
{
|
{
|
||||||
|
final StringBuilder sb = new StringBuilder();
|
||||||
POIFSReaderListener readerListener = new POIFSReaderListener()
|
POIFSReaderListener readerListener = new POIFSReaderListener()
|
||||||
{
|
{
|
||||||
public void processPOIFSReaderEvent(final POIFSReaderEvent event)
|
public void processPOIFSReaderEvent(final POIFSReaderEvent event)
|
||||||
@ -87,7 +88,7 @@ public class MailContentTransformer extends AbstractContentTransformer
|
|||||||
String result = handler.process();
|
String result = handler.process();
|
||||||
if (result != null)
|
if (result != null)
|
||||||
{
|
{
|
||||||
writer.putContent(result);
|
sb.append(result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -113,7 +114,12 @@ public class MailContentTransformer extends AbstractContentTransformer
|
|||||||
{
|
{
|
||||||
// probably not an Outlook format MSG - ignore for now
|
// probably not an Outlook format MSG - ignore for now
|
||||||
if (logger.isWarnEnabled())
|
if (logger.isWarnEnabled())
|
||||||
logger.warn("Unable to extract meta-data from message: " + err.getMessage());
|
logger.warn("Unable to extract text from message: " + err.getMessage());
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
// Append the text to the writer
|
||||||
|
writer.putContent(sb.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
@ -569,7 +569,12 @@ import org.xml.sax.helpers.AttributesImpl;
|
|||||||
String strValue = (String)DefaultTypeConverter.INSTANCE.convert(String.class, value);
|
String strValue = (String)DefaultTypeConverter.INSTANCE.convert(String.class, value);
|
||||||
if (strValue != null)
|
if (strValue != null)
|
||||||
{
|
{
|
||||||
contentHandler.characters(strValue.toCharArray(), 0, strValue.length());
|
for (int i = 0; i < strValue.length(); i++)
|
||||||
|
{
|
||||||
|
char[] temp = new char[]{strValue.charAt(i)};
|
||||||
|
contentHandler.characters(temp, 0, 1);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// output value wrapper if property data type is any
|
// output value wrapper if property data type is any
|
||||||
|
@ -1904,6 +1904,8 @@ public class ScriptNode implements Serializable, Scopeable
|
|||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
if (this.nodeService.exists(nodeRef))
|
if (this.nodeService.exists(nodeRef))
|
||||||
|
{
|
||||||
|
if (this.services.getPermissionService().hasPermission(nodeRef, PermissionService.READ_PROPERTIES) == AccessStatus.ALLOWED)
|
||||||
{
|
{
|
||||||
// TODO: DC: Allow debug output of property values - for now it's disabled as this could potentially
|
// TODO: DC: Allow debug output of property values - for now it's disabled as this could potentially
|
||||||
// follow a large network of nodes. Unfortunately, JBPM issues unprotected debug statements
|
// follow a large network of nodes. Unfortunately, JBPM issues unprotected debug statements
|
||||||
@ -1911,11 +1913,18 @@ public class ScriptNode implements Serializable, Scopeable
|
|||||||
return "Node Type: " + getType() + ", Node Aspects: " + this.getAspects().toString();
|
return "Node Type: " + getType() + ", Node Aspects: " + this.getAspects().toString();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
return "Access denied to node " + nodeRef;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
return "Node no longer exists: " + nodeRef;
|
return "Node no longer exists: " + nodeRef;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper to create a QName from either a fully qualified or short-name QName string
|
* Helper to create a QName from either a fully qualified or short-name QName string
|
||||||
*
|
*
|
||||||
|
@ -39,7 +39,6 @@ import org.alfresco.repo.node.StoreArchiveMap;
|
|||||||
import org.alfresco.repo.node.archive.RestoreNodeReport.RestoreStatus;
|
import org.alfresco.repo.node.archive.RestoreNodeReport.RestoreStatus;
|
||||||
import org.alfresco.repo.node.integrity.IntegrityChecker;
|
import org.alfresco.repo.node.integrity.IntegrityChecker;
|
||||||
import org.alfresco.repo.security.authentication.AuthenticationComponent;
|
import org.alfresco.repo.security.authentication.AuthenticationComponent;
|
||||||
import org.alfresco.repo.transaction.AlfrescoTransactionSupport;
|
|
||||||
import org.alfresco.service.ServiceRegistry;
|
import org.alfresco.service.ServiceRegistry;
|
||||||
import org.alfresco.service.cmr.repository.AssociationRef;
|
import org.alfresco.service.cmr.repository.AssociationRef;
|
||||||
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
||||||
@ -622,8 +621,6 @@ public class ArchiveAndRestoreTest extends TestCase
|
|||||||
*/
|
*/
|
||||||
public void testPermissionsForRestore() throws Exception
|
public void testPermissionsForRestore() throws Exception
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
// user A deletes 'a'
|
// user A deletes 'a'
|
||||||
authenticationService.authenticate(USER_A, USER_A.toCharArray());
|
authenticationService.authenticate(USER_A, USER_A.toCharArray());
|
||||||
nodeService.deleteNode(a);
|
nodeService.deleteNode(a);
|
||||||
@ -653,4 +650,53 @@ public class ArchiveAndRestoreTest extends TestCase
|
|||||||
RestoreNodeReport report = nodeArchiveService.restoreArchivedNode(b_);
|
RestoreNodeReport report = nodeArchiveService.restoreArchivedNode(b_);
|
||||||
assertEquals("Expected permission denied status", RestoreStatus.FAILURE_PERMISSION, report.getStatus());
|
assertEquals("Expected permission denied status", RestoreStatus.FAILURE_PERMISSION, report.getStatus());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check that the existence of the node in the archive store doesn't prevent archival.
|
||||||
|
* It is possible to restore a node to the SpacesStore from some other source. When
|
||||||
|
* that node is archived, the currently archived node must be overwritten.
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public void testAR1519ArchiveCleansDuplicateUuid() throws Exception
|
||||||
|
{
|
||||||
|
// Delete the child node
|
||||||
|
nodeService.deleteNode(b);
|
||||||
|
verifyNodeExistence(b_, true);
|
||||||
|
// Delete the original parent node
|
||||||
|
nodeService.deleteNode(a);
|
||||||
|
verifyNodeExistence(a_, true);
|
||||||
|
// Now recreate a and b (they have been separated in the archive store)
|
||||||
|
Map<QName, Serializable> props = new HashMap<QName, Serializable>(1);
|
||||||
|
props.put(ContentModel.PROP_NODE_UUID, a.getId());
|
||||||
|
NodeRef aRecreated = nodeService.createNode(
|
||||||
|
workStoreRootNodeRef,
|
||||||
|
ContentModel.ASSOC_CHILDREN,
|
||||||
|
ContentModel.ASSOC_CHILDREN,
|
||||||
|
ContentModel.TYPE_CONTENT,
|
||||||
|
props).getChildRef();
|
||||||
|
assertEquals("NodeRef for recreated node should be the same as the original", a, aRecreated);
|
||||||
|
props.put(ContentModel.PROP_NODE_UUID, b.getId());
|
||||||
|
NodeRef bRecreated = nodeService.createNode(
|
||||||
|
a,
|
||||||
|
ContentModel.ASSOC_CHILDREN,
|
||||||
|
ContentModel.ASSOC_CHILDREN,
|
||||||
|
ContentModel.TYPE_CONTENT,
|
||||||
|
props).getChildRef();
|
||||||
|
assertEquals("NodeRef for recreated node should be the same as the original", b, bRecreated);
|
||||||
|
|
||||||
|
// Check existence
|
||||||
|
verifyNodeExistence(a, true);
|
||||||
|
verifyNodeExistence(b, true);
|
||||||
|
verifyNodeExistence(a_, true);
|
||||||
|
verifyNodeExistence(b_, true);
|
||||||
|
|
||||||
|
// Now check that the parent a can be deleted and the conflict is handled
|
||||||
|
nodeService.deleteNode(a);
|
||||||
|
|
||||||
|
// Check existence
|
||||||
|
verifyNodeExistence(a, false);
|
||||||
|
verifyNodeExistence(b, false);
|
||||||
|
verifyNodeExistence(a_, true);
|
||||||
|
verifyNodeExistence(b_, true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1713,6 +1713,19 @@ public class DbNodeServiceImpl extends AbstractNodeServiceImpl
|
|||||||
// move each node into the archive store
|
// move each node into the archive store
|
||||||
for (NodeStatus oldNodeStatus : nodeStatusesById.values())
|
for (NodeStatus oldNodeStatus : nodeStatusesById.values())
|
||||||
{
|
{
|
||||||
|
// Check if the target node (node in the store) is already there
|
||||||
|
NodeRef targetStoreNodeRef = new NodeRef(store.getStoreRef(), oldNodeStatus.getKey().getGuid());
|
||||||
|
if (exists(targetStoreNodeRef))
|
||||||
|
{
|
||||||
|
// It is there already. It must be an archive of an earlier version, so just wipe it out
|
||||||
|
Node archivedNode = getNodeNotNull(targetStoreNodeRef);
|
||||||
|
nodeDaoService.deleteNode(archivedNode, true);
|
||||||
|
// We need to flush here as the node deletion may not take effect before the node creation
|
||||||
|
// is done. As this will only occur during a clash, it is not going to add extra overhead
|
||||||
|
// to the general system performance.
|
||||||
|
nodeDaoService.flush();
|
||||||
|
}
|
||||||
|
|
||||||
Node nodeToMove = oldNodeStatus.getNode();
|
Node nodeToMove = oldNodeStatus.getNode();
|
||||||
NodeRef oldNodeRef = nodeToMove.getNodeRef();
|
NodeRef oldNodeRef = nodeToMove.getNodeRef();
|
||||||
nodeToMove.setStore(store);
|
nodeToMove.setStore(store);
|
||||||
|
@ -27,6 +27,7 @@ package org.alfresco.repo.node.index;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.alfresco.repo.search.AVMSnapShotTriggeredIndexingMethodInterceptor;
|
import org.alfresco.repo.search.AVMSnapShotTriggeredIndexingMethodInterceptor;
|
||||||
|
import org.alfresco.repo.search.IndexMode;
|
||||||
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
|
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
|
||||||
import org.alfresco.service.cmr.avm.AVMService;
|
import org.alfresco.service.cmr.avm.AVMService;
|
||||||
import org.alfresco.service.cmr.avm.AVMStoreDescriptor;
|
import org.alfresco.service.cmr.avm.AVMStoreDescriptor;
|
||||||
@ -64,9 +65,8 @@ public class AVMRemoteSnapshotTracker extends AbstractReindexComponent
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loop throught the avm stores and compare the latest snapshot to that in the index.
|
* Loop throught the avm stores and compare the latest snapshot to that in the index. Update the index if it has
|
||||||
* Update the index if it has fallen behind.
|
* fallen behind.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
private void processStores()
|
private void processStores()
|
||||||
{
|
{
|
||||||
@ -86,6 +86,9 @@ public class AVMRemoteSnapshotTracker extends AbstractReindexComponent
|
|||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (avmSnapShotTriggeredIndexingMethodInterceptor.getIndexMode(store.getName()) != IndexMode.UNINDEXED)
|
||||||
|
{
|
||||||
int current = avmService.getLatestSnapshotID(store.getName());
|
int current = avmService.getLatestSnapshotID(store.getName());
|
||||||
int lastIndexed = avmSnapShotTriggeredIndexingMethodInterceptor.getLastIndexedSnapshot(store.getName());
|
int lastIndexed = avmSnapShotTriggeredIndexingMethodInterceptor.getLastIndexedSnapshot(store.getName());
|
||||||
|
|
||||||
@ -100,6 +103,7 @@ public class AVMRemoteSnapshotTracker extends AbstractReindexComponent
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
while (!upToDate);
|
while (!upToDate);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -836,10 +836,17 @@ public class ADMLuceneIndexerImpl extends AbstractLuceneIndexerImpl<NodeRef> imp
|
|||||||
writer.setEncoding("UTF-8");
|
writer.setEncoding("UTF-8");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
||||||
transformer.transform(reader, writer);
|
transformer.transform(reader, writer);
|
||||||
// point the reader to the new-written content
|
// point the reader to the new-written content
|
||||||
reader = writer.getReader();
|
reader = writer.getReader();
|
||||||
|
// Check that the reader is a view onto something concrete
|
||||||
|
if (!reader.exists())
|
||||||
|
{
|
||||||
|
throw new ContentIOException(
|
||||||
|
"The transformation did not write any content, yet: \n" +
|
||||||
|
" transformer: " + transformer + "\n" +
|
||||||
|
" temp writer: " + writer);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (ContentIOException e)
|
catch (ContentIOException e)
|
||||||
{
|
{
|
||||||
@ -850,10 +857,6 @@ public class ADMLuceneIndexerImpl extends AbstractLuceneIndexerImpl<NodeRef> imp
|
|||||||
}
|
}
|
||||||
// don't index from the reader
|
// don't index from the reader
|
||||||
readerReady = false;
|
readerReady = false;
|
||||||
// not indexed: transformation
|
|
||||||
// failed
|
|
||||||
// doc.add(new Field("TEXT", NOT_INDEXED_TRANSFORMATION_FAILED, Field.Store.NO,
|
|
||||||
// Field.Index.TOKENIZED, Field.TermVector.NO));
|
|
||||||
doc.add(new Field(attributeName, NOT_INDEXED_TRANSFORMATION_FAILED, Field.Store.NO, Field.Index.TOKENIZED, Field.TermVector.NO));
|
doc.add(new Field(attributeName, NOT_INDEXED_TRANSFORMATION_FAILED, Field.Store.NO, Field.Index.TOKENIZED, Field.TermVector.NO));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,6 +32,7 @@ import java.util.List;
|
|||||||
import org.alfresco.error.AlfrescoRuntimeException;
|
import org.alfresco.error.AlfrescoRuntimeException;
|
||||||
import org.alfresco.service.ServiceRegistry;
|
import org.alfresco.service.ServiceRegistry;
|
||||||
import org.alfresco.service.cmr.repository.NodeRef;
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
|
import org.alfresco.service.cmr.repository.NodeService;
|
||||||
import org.alfresco.service.cmr.search.ResultSet;
|
import org.alfresco.service.cmr.search.ResultSet;
|
||||||
import org.alfresco.service.cmr.search.ResultSetRow;
|
import org.alfresco.service.cmr.search.ResultSetRow;
|
||||||
import org.alfresco.service.cmr.search.SearchService;
|
import org.alfresco.service.cmr.search.SearchService;
|
||||||
@ -76,11 +77,13 @@ public abstract class BaseSearchResultsMap extends BaseTemplateMap
|
|||||||
|
|
||||||
if (results.length() != 0)
|
if (results.length() != 0)
|
||||||
{
|
{
|
||||||
|
NodeService nodeService = this.services.getNodeService();
|
||||||
|
|
||||||
nodes = new ArrayList<TemplateNode>(results.length());
|
nodes = new ArrayList<TemplateNode>(results.length());
|
||||||
for (ResultSetRow row : results)
|
for (ResultSetRow row : results)
|
||||||
{
|
{
|
||||||
NodeRef nodeRef = row.getNodeRef();
|
NodeRef nodeRef = row.getNodeRef();
|
||||||
if (!nodeRefs.contains(nodeRef))
|
if (!nodeRefs.contains(nodeRef) && (nodeService.exists(nodeRef)))
|
||||||
{
|
{
|
||||||
nodes.add(new TemplateNode(nodeRef, services, this.parent.getImageResolver()));
|
nodes.add(new TemplateNode(nodeRef, services, this.parent.getImageResolver()));
|
||||||
nodeRefs.add(nodeRef);
|
nodeRefs.add(nodeRef);
|
||||||
|
@ -59,6 +59,7 @@ import org.alfresco.service.cmr.repository.NodeRef;
|
|||||||
import org.alfresco.service.cmr.repository.NodeService;
|
import org.alfresco.service.cmr.repository.NodeService;
|
||||||
import org.alfresco.service.cmr.repository.StoreRef;
|
import org.alfresco.service.cmr.repository.StoreRef;
|
||||||
import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter;
|
import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter;
|
||||||
|
import org.alfresco.service.cmr.search.SearchService;
|
||||||
import org.alfresco.service.cmr.security.AuthorityType;
|
import org.alfresco.service.cmr.security.AuthorityType;
|
||||||
import org.alfresco.service.cmr.security.PersonService;
|
import org.alfresco.service.cmr.security.PersonService;
|
||||||
import org.alfresco.service.cmr.workflow.WorkflowDefinition;
|
import org.alfresco.service.cmr.workflow.WorkflowDefinition;
|
||||||
@ -136,6 +137,7 @@ public class JBPMEngine extends BPMEngine
|
|||||||
protected PersonService personService;
|
protected PersonService personService;
|
||||||
protected AuthorityDAO authorityDAO;
|
protected AuthorityDAO authorityDAO;
|
||||||
protected JbpmTemplate jbpmTemplate;
|
protected JbpmTemplate jbpmTemplate;
|
||||||
|
protected SearchService unprotectedSearchService;
|
||||||
|
|
||||||
// Company Home
|
// Company Home
|
||||||
protected StoreRef companyHomeStore;
|
protected StoreRef companyHomeStore;
|
||||||
@ -278,6 +280,17 @@ public class JBPMEngine extends BPMEngine
|
|||||||
this.companyHomeStore = new StoreRef(companyHomeStore);
|
this.companyHomeStore = new StoreRef(companyHomeStore);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the unprotected search service - so we can find the node ref for company home when folk do not have read access to company home
|
||||||
|
* TODO: review use with DC
|
||||||
|
*
|
||||||
|
* @param unprotectedSearchService
|
||||||
|
*/
|
||||||
|
public void setUnprotectedSearchService(SearchService unprotectedSearchService)
|
||||||
|
{
|
||||||
|
this.unprotectedSearchService = unprotectedSearchService;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Workflow Definition...
|
// Workflow Definition...
|
||||||
@ -2600,7 +2613,7 @@ public class JBPMEngine extends BPMEngine
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
List<NodeRef> refs = serviceRegistry.getSearchService().selectNodes(nodeService.getRootNode(companyHomeStore), companyHomePath, null, namespaceService, false);
|
List<NodeRef> refs = unprotectedSearchService.selectNodes(nodeService.getRootNode(companyHomeStore), companyHomePath, null, namespaceService, false);
|
||||||
if (refs.size() != 1)
|
if (refs.size() != 1)
|
||||||
{
|
{
|
||||||
throw new IllegalStateException("Invalid company home path: " + companyHomePath + " - found: " + refs.size());
|
throw new IllegalStateException("Invalid company home path: " + companyHomePath + " - found: " + refs.size());
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user