Point checkin.

Augmented AVMRemote to expose lookup that can fetch deleted nodes.
Minor fixup to excluder regex in avm-services-context.xml.
Added excluder to LinkValidationServiceImpl.
Prep to walk difference using SyncService (getting ready for incremental update of link validation tables).


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@5898 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Jon Cox
2007-06-08 23:21:24 +00:00
parent 813090c69b
commit 9b03b15674
9 changed files with 454 additions and 316 deletions

View File

@@ -1,282 +1,284 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN//EN" <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd"> "http://www.springframework.org/dtd/spring-beans.dtd">
<beans> <beans>
<!-- ID Issuers. --> <!-- ID Issuers. -->
<bean id="nodeIssuer" class="org.alfresco.repo.avm.Issuer" depends-on="avmDAOs" > <bean id="nodeIssuer" class="org.alfresco.repo.avm.Issuer" depends-on="avmDAOs" >
<property name="name"> <property name="name">
<value>node</value> <value>node</value>
</property> </property>
<property name="transactionService"> <property name="transactionService">
<ref bean="transactionComponent"/> <ref bean="transactionComponent"/>
</property> </property>
</bean> </bean>
<bean id="layerIssuer" class="org.alfresco.repo.avm.Issuer" depends-on="avmDAOs" > <bean id="layerIssuer" class="org.alfresco.repo.avm.Issuer" depends-on="avmDAOs" >
<property name="name"> <property name="name">
<value>layer</value> <value>layer</value>
</property> </property>
<property name="transactionService"> <property name="transactionService">
<ref bean="transactionComponent"/> <ref bean="transactionComponent"/>
</property> </property>
</bean> </bean>
<!-- DAOs for persistent data types --> <!-- DAOs for persistent data types -->
<!-- Issuers are not actual entities. More like pseudo entities. --> <!-- Issuers are not actual entities. More like pseudo entities. -->
<bean id="issuerDAO" class="org.alfresco.repo.avm.hibernate.IssuerDAOHibernate"> <bean id="issuerDAO" class="org.alfresco.repo.avm.hibernate.IssuerDAOHibernate">
<property name="sessionFactory"> <property name="sessionFactory">
<ref bean="sessionFactory"/> <ref bean="sessionFactory"/>
</property> </property>
</bean> </bean>
<bean id="avmNodeDAO" class="org.alfresco.repo.avm.hibernate.AVMNodeDAOHibernate"> <bean id="avmNodeDAO" class="org.alfresco.repo.avm.hibernate.AVMNodeDAOHibernate">
<property name="sessionFactory"> <property name="sessionFactory">
<ref bean="sessionFactory"/> <ref bean="sessionFactory"/>
</property> </property>
</bean> </bean>
<bean id="avmStoreDAO" class="org.alfresco.repo.avm.hibernate.AVMStoreDAOHibernate"> <bean id="avmStoreDAO" class="org.alfresco.repo.avm.hibernate.AVMStoreDAOHibernate">
<property name="sessionFactory"> <property name="sessionFactory">
<ref bean="sessionFactory"/> <ref bean="sessionFactory"/>
</property> </property>
</bean> </bean>
<bean id="versionRootDAO" class="org.alfresco.repo.avm.hibernate.VersionRootDAOHibernate"> <bean id="versionRootDAO" class="org.alfresco.repo.avm.hibernate.VersionRootDAOHibernate">
<property name="sessionFactory"> <property name="sessionFactory">
<ref bean="sessionFactory"/> <ref bean="sessionFactory"/>
</property> </property>
</bean> </bean>
<bean id="childEntryDAO" class="org.alfresco.repo.avm.hibernate.ChildEntryDAOHibernate"> <bean id="childEntryDAO" class="org.alfresco.repo.avm.hibernate.ChildEntryDAOHibernate">
<property name="sessionFactory"> <property name="sessionFactory">
<ref bean="sessionFactory"/> <ref bean="sessionFactory"/>
</property> </property>
</bean> </bean>
<bean id="historyLinkDAO" class="org.alfresco.repo.avm.hibernate.HistoryLinkDAOHibernate"> <bean id="historyLinkDAO" class="org.alfresco.repo.avm.hibernate.HistoryLinkDAOHibernate">
<property name="sessionFactory"> <property name="sessionFactory">
<ref bean="sessionFactory"/> <ref bean="sessionFactory"/>
</property> </property>
</bean> </bean>
<bean id="mergeLinkDAO" class="org.alfresco.repo.avm.hibernate.MergeLinkDAOHibernate"> <bean id="mergeLinkDAO" class="org.alfresco.repo.avm.hibernate.MergeLinkDAOHibernate">
<property name="sessionFactory"> <property name="sessionFactory">
<ref bean="sessionFactory"/> <ref bean="sessionFactory"/>
</property> </property>
</bean> </bean>
<bean id="avmNodePropertyDAO" class="org.alfresco.repo.avm.hibernate.AVMNodePropertyDAOHibernate"> <bean id="avmNodePropertyDAO" class="org.alfresco.repo.avm.hibernate.AVMNodePropertyDAOHibernate">
<property name="sessionFactory"> <property name="sessionFactory">
<ref bean="sessionFactory"/> <ref bean="sessionFactory"/>
</property> </property>
</bean> </bean>
<bean id="avmStorePropertyDAO" class="org.alfresco.repo.avm.hibernate.AVMStorePropertyDAOHibernate"> <bean id="avmStorePropertyDAO" class="org.alfresco.repo.avm.hibernate.AVMStorePropertyDAOHibernate">
<property name="sessionFactory"> <property name="sessionFactory">
<ref bean="sessionFactory"/> <ref bean="sessionFactory"/>
</property> </property>
</bean> </bean>
<bean id="avmAspectNameDAO" class="org.alfresco.repo.avm.hibernate.AVMAspectNameDAOHibernate"> <bean id="avmAspectNameDAO" class="org.alfresco.repo.avm.hibernate.AVMAspectNameDAOHibernate">
<property name="sessionFactory"> <property name="sessionFactory">
<ref bean="sessionFactory"/> <ref bean="sessionFactory"/>
</property> </property>
</bean> </bean>
<bean id="versionLayeredNodeEntryDAO" class="org.alfresco.repo.avm.hibernate.VersionLayeredNodeEntryDAOHibernate"> <bean id="versionLayeredNodeEntryDAO" class="org.alfresco.repo.avm.hibernate.VersionLayeredNodeEntryDAOHibernate">
<property name="sessionFactory"> <property name="sessionFactory">
<ref bean="sessionFactory"/> <ref bean="sessionFactory"/>
</property> </property>
</bean> </bean>
<bean id="avmDAOs" class="org.alfresco.repo.avm.AVMDAOs"> <bean id="avmDAOs" class="org.alfresco.repo.avm.AVMDAOs">
<property name="issuerDAO"> <property name="issuerDAO">
<ref bean="issuerDAO"/> <ref bean="issuerDAO"/>
</property> </property>
<property name="nodeDAO"> <property name="nodeDAO">
<ref bean="avmNodeDAO"/> <ref bean="avmNodeDAO"/>
</property> </property>
<property name="avmStoreDAO"> <property name="avmStoreDAO">
<ref bean="avmStoreDAO"/> <ref bean="avmStoreDAO"/>
</property> </property>
<property name="versionRootDAO"> <property name="versionRootDAO">
<ref bean="versionRootDAO"/> <ref bean="versionRootDAO"/>
</property> </property>
<property name="childEntryDAO"> <property name="childEntryDAO">
<ref bean="childEntryDAO"/> <ref bean="childEntryDAO"/>
</property> </property>
<property name="historyLinkDAO"> <property name="historyLinkDAO">
<ref bean="historyLinkDAO"/> <ref bean="historyLinkDAO"/>
</property> </property>
<property name="mergeLinkDAO"> <property name="mergeLinkDAO">
<ref bean="mergeLinkDAO"/> <ref bean="mergeLinkDAO"/>
</property> </property>
<property name="avmNodePropertyDAO"> <property name="avmNodePropertyDAO">
<ref bean="avmNodePropertyDAO"/> <ref bean="avmNodePropertyDAO"/>
</property> </property>
<property name="avmStorePropertyDAO"> <property name="avmStorePropertyDAO">
<ref bean="avmStorePropertyDAO"/> <ref bean="avmStorePropertyDAO"/>
</property> </property>
<property name="avmAspectNameDAO"> <property name="avmAspectNameDAO">
<ref bean="avmAspectNameDAO"/> <ref bean="avmAspectNameDAO"/>
</property> </property>
<property name="attributeDAO"> <property name="attributeDAO">
<ref bean="attributeDAO"/> <ref bean="attributeDAO"/>
</property> </property>
<property name="mapEntryDAO"> <property name="mapEntryDAO">
<ref bean="mapEntryDAO"/> <ref bean="mapEntryDAO"/>
</property> </property>
<property name="listEntryDAO"> <property name="listEntryDAO">
<ref bean="listEntryDAO"/> <ref bean="listEntryDAO"/>
</property> </property>
<property name="versionLayeredNodeEntryDAO"> <property name="versionLayeredNodeEntryDAO">
<ref bean="versionLayeredNodeEntryDAO"/> <ref bean="versionLayeredNodeEntryDAO"/>
</property> </property>
</bean> </bean>
<bean id="lookupCache" class="org.alfresco.repo.avm.LookupCache"> <bean id="lookupCache" class="org.alfresco.repo.avm.LookupCache">
<property name="avmNodeDAO"> <property name="avmNodeDAO">
<ref bean="avmNodeDAO"/> <ref bean="avmNodeDAO"/>
</property> </property>
<property name="avmStoreDAO"> <property name="avmStoreDAO">
<ref bean="avmStoreDAO"/> <ref bean="avmStoreDAO"/>
</property> </property>
<property name="maxSize"> <property name="maxSize">
<value>50</value> <value>50</value>
</property> </property>
</bean> </bean>
<bean id="lookupCacheListener" class="org.alfresco.repo.avm.AVMLookupCacheListener"> <bean id="lookupCacheListener" class="org.alfresco.repo.avm.AVMLookupCacheListener">
<property name="lookupCache"> <property name="lookupCache">
<ref bean="lookupCache"/> <ref bean="lookupCache"/>
</property> </property>
</bean> </bean>
<bean id="rawServices" class="org.alfresco.repo.avm.util.RawServices"/> <bean id="rawServices" class="org.alfresco.repo.avm.util.RawServices"/>
<bean id="orphanReaper" class="org.alfresco.repo.avm.OrphanReaper" <bean id="orphanReaper" class="org.alfresco.repo.avm.OrphanReaper"
depends-on="AVMService" destroy-method="shutDown"> depends-on="AVMService" destroy-method="shutDown">
<property name="activeBaseSleep"> <property name="activeBaseSleep">
<value>1000</value> <value>1000</value>
</property> </property>
<property name="batchSize"> <property name="batchSize">
<value>50</value> <value>50</value>
</property> </property>
<property name="maxQueueLength"> <property name="maxQueueLength">
<value>1000</value> <value>1000</value>
</property> </property>
<property name="transactionService"> <property name="transactionService">
<ref bean="transactionComponent"/> <ref bean="transactionComponent"/>
</property> </property>
<property name="sessionFactory"> <property name="sessionFactory">
<ref bean="sessionFactory"/> <ref bean="sessionFactory"/>
</property> </property>
</bean> </bean>
<bean id="createStoreTxnListener" class="org.alfresco.repo.avm.CreateStoreTxnListener"/> <bean id="createStoreTxnListener" class="org.alfresco.repo.avm.CreateStoreTxnListener"/>
<bean id="purgeStoreTxnListener" class="org.alfresco.repo.avm.PurgeStoreTxnListener"/> <bean id="purgeStoreTxnListener" class="org.alfresco.repo.avm.PurgeStoreTxnListener"/>
<bean id="createVersionTxnListener" class="org.alfresco.repo.avm.CreateVersionTxnListener"/> <bean id="createVersionTxnListener" class="org.alfresco.repo.avm.CreateVersionTxnListener"/>
<bean id="purgeVersionTxnListener" class="org.alfresco.repo.avm.PurgeVersionTxnListener"/> <bean id="purgeVersionTxnListener" class="org.alfresco.repo.avm.PurgeVersionTxnListener"/>
<bean id="avmRepository" class="org.alfresco.repo.avm.AVMRepository"> <bean id="avmRepository" class="org.alfresco.repo.avm.AVMRepository">
<property name="nodeIssuer"> <property name="nodeIssuer">
<ref bean="nodeIssuer"/> <ref bean="nodeIssuer"/>
</property> </property>
<property name="layerIssuer"> <property name="layerIssuer">
<ref bean="layerIssuer"/> <ref bean="layerIssuer"/>
</property> </property>
<property name="lookupCache"> <property name="lookupCache">
<ref bean="lookupCache"/> <ref bean="lookupCache"/>
</property> </property>
<property name="contentStore"> <property name="contentStore">
<ref bean="fileContentStore"/> <ref bean="fileContentStore"/>
</property> </property>
<property name="createStoreTxnListener"> <property name="createStoreTxnListener">
<ref bean="createStoreTxnListener"/> <ref bean="createStoreTxnListener"/>
</property> </property>
<property name="purgeStoreTxnListener"> <property name="purgeStoreTxnListener">
<ref bean="purgeStoreTxnListener"/> <ref bean="purgeStoreTxnListener"/>
</property> </property>
<property name="createVersionTxnListener"> <property name="createVersionTxnListener">
<ref bean="createVersionTxnListener"/> <ref bean="createVersionTxnListener"/>
</property> </property>
<property name="purgeVersionTxnListener"> <property name="purgeVersionTxnListener">
<ref bean="purgeVersionTxnListener"/> <ref bean="purgeVersionTxnListener"/>
</property> </property>
<property name="avmStoreDAO"> <property name="avmStoreDAO">
<ref bean="avmStoreDAO"/> <ref bean="avmStoreDAO"/>
</property> </property>
<property name="avmNodeDAO"> <property name="avmNodeDAO">
<ref bean="avmNodeDAO"/> <ref bean="avmNodeDAO"/>
</property> </property>
<property name="versionRootDAO"> <property name="versionRootDAO">
<ref bean="versionRootDAO"/> <ref bean="versionRootDAO"/>
</property> </property>
<property name="versionLayeredNodeEntryDAO"> <property name="versionLayeredNodeEntryDAO">
<ref bean="versionLayeredNodeEntryDAO"/> <ref bean="versionLayeredNodeEntryDAO"/>
</property> </property>
<property name="avmStorePropertyDAO"> <property name="avmStorePropertyDAO">
<ref bean="avmStorePropertyDAO"/> <ref bean="avmStorePropertyDAO"/>
</property> </property>
<property name="childEntryDAO"> <property name="childEntryDAO">
<ref bean="childEntryDAO"/> <ref bean="childEntryDAO"/>
</property> </property>
</bean> </bean>
<!-- A Local implementation of the Remote AVM interface. --> <!-- A Local implementation of the Remote AVM interface. -->
<bean id="avmRemote" class="org.alfresco.repo.avm.AVMRemoteLocal"> <bean id="avmRemote" class="org.alfresco.repo.avm.AVMRemoteLocal">
<property name="avmService"> <property name="avmService">
<ref bean="AVMService"/> <ref bean="AVMService"/>
</property> </property>
</bean> </bean>
<bean id="AVMSubmittedAspect" class="org.alfresco.repo.avm.wf.AVMSubmittedAspect"> <bean id="AVMSubmittedAspect" class="org.alfresco.repo.avm.wf.AVMSubmittedAspect">
<property name="avmService"> <property name="avmService">
<ref bean="AVMService"/> <ref bean="AVMService"/>
</property> </property>
</bean> </bean>
<!-- Used to notify virtualization server occur after commit/rollback --> <!-- Used to notify virtualization server occur after commit/rollback -->
<bean id="AVMSubmitTransactionListener" <bean id="AVMSubmitTransactionListener"
class="org.alfresco.repo.avm.wf.AVMSubmitTransactionListener"/> class="org.alfresco.repo.avm.wf.AVMSubmitTransactionListener"/>
<!-- NameMatcher beans for filtering what shows up as different in compares. --> <!-- NameMatcher beans for filtering what shows up as different in compares. -->
<bean id="excludeRegexMatcher" class="org.alfresco.util.RegexNameMatcher">
<bean id="excludeRegexMatcher" class="org.alfresco.util.RegexNameMatcher"> <property name="patterns">
<property name="patterns"> <!--
<list> NOTE: Regexes are implicitly anchored with ^ and $ in this context.
<value>.*/#.*</value> -->
</list> <list>
</property> <value>.*/#[^/]*</value> <!-- A leaf starting with '#' -->
</bean> </list>
</property>
<bean id="excludeExtensionMatcher" class="org.alfresco.repo.avm.util.FileExtensionNameMatcher"> </bean>
<property name="extensions">
<list> <bean id="excludeExtensionMatcher" class="org.alfresco.repo.avm.util.FileExtensionNameMatcher">
<value>.o</value> <property name="extensions">
<value>.bak</value> <list>
<value>.tmp</value> <value>.o</value>
<value>~</value> <value>.bak</value>
</list> <value>.tmp</value>
</property> <value>~</value>
</bean> </list>
</property>
<bean id="globalPathExcluder" class="org.alfresco.util.OrCompositeNameMatcher"> </bean>
<property name="matchers">
<list> <bean id="globalPathExcluder" class="org.alfresco.util.OrCompositeNameMatcher">
<ref bean="excludeExtensionMatcher"/> <property name="matchers">
<ref bean="excludeRegexMatcher"/> <list>
</list> <ref bean="excludeExtensionMatcher"/>
</property> <ref bean="excludeRegexMatcher"/>
</list>
</property>
</bean> </bean>
<!-- Bean used to process content that has expired in AVM staging areas --> <!-- Bean used to process content that has expired in AVM staging areas -->
@@ -314,26 +316,26 @@
<property name="searchService"> <property name="searchService">
<ref bean="SearchService" /> <ref bean="SearchService" />
</property> </property>
</bean> </bean>
<!-- AVM Locking. --> <!-- AVM Locking. -->
<bean id="avmLockingService" class="org.alfresco.repo.avm.locking.AVMLockingServiceImpl"> <bean id="avmLockingService" class="org.alfresco.repo.avm.locking.AVMLockingServiceImpl">
<property name="attributeService"> <property name="attributeService">
<ref bean="attributeService"/> <ref bean="attributeService"/>
</property> </property>
<property name="authorityService"> <property name="authorityService">
<ref bean="authorityService"/> <ref bean="authorityService"/>
</property> </property>
<property name="personService"> <property name="personService">
<ref bean="personService"/> <ref bean="personService"/>
</property> </property>
<property name="retryingTransactionHelper"> <property name="retryingTransactionHelper">
<ref bean="retryingTransactionHelper"/> <ref bean="retryingTransactionHelper"/>
</property> </property>
</bean> </bean>
</beans> </beans>

View File

@@ -22,7 +22,7 @@
* *
* *
* Author Jon Cox <jcox@alfresco.com> * Author Jon Cox <jcox@alfresco.com>
* File UpdateHrefInfoStatus.java * File HrefValidationProgress.java
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
package org.alfresco.linkvalidation; package org.alfresco.linkvalidation;
@@ -43,10 +43,10 @@ import java.util.concurrent.atomic.AtomicBoolean;
* call to updateHrefInfo() has completed by examining * call to updateHrefInfo() has completed by examining
* the value returned by isDone(). * the value returned by isDone().
* <p> * <p>
* Note: It is safest to instantiate a fresh UpdateHrefInfoStatus * Note: It is safest to instantiate a fresh HrefValidationProgress
* object for every invocation of updateHrefInfo(). * object for every invocation of updateHrefInfo().
*/ */
public class UpdateHrefInfoStatus public class HrefValidationProgress
{ {
AtomicInteger webapp_update_count_; AtomicInteger webapp_update_count_;
AtomicInteger dir_update_count_; AtomicInteger dir_update_count_;
@@ -54,7 +54,7 @@ public class UpdateHrefInfoStatus
AtomicInteger url_update_count_; AtomicInteger url_update_count_;
AtomicBoolean is_done_; AtomicBoolean is_done_;
public UpdateHrefInfoStatus() public HrefValidationProgress()
{ {
webapp_update_count_ = new AtomicInteger(); webapp_update_count_ = new AtomicInteger();
dir_update_count_ = new AtomicInteger(); dir_update_count_ = new AtomicInteger();

View File

@@ -66,12 +66,12 @@ public interface LinkValidationService
* 'status' may be polled in a separate thread to * 'status' may be polled in a separate thread to
* observe its progress. * observe its progress.
*/ */
public void updateHrefInfo( String storeNameOrWebappPath, public void updateHrefInfo( String storeNameOrWebappPath,
boolean incremental, boolean incremental,
int connectTimeout, int connectTimeout,
int readTimeout, int readTimeout,
int nthreads, int nthreads,
UpdateHrefInfoStatus status HrefValidationProgress progress
) )
throws AVMNotFoundException; throws AVMNotFoundException;
@@ -208,9 +208,11 @@ public interface LinkValidationService
* Don't use yet - does nothing at the moment. * Don't use yet - does nothing at the moment.
*/ */
public BrokenHrefConcordanceDifference getBrokenHrefConcordanceDifference( public BrokenHrefConcordanceDifference getBrokenHrefConcordanceDifference(
int srcVersion, String srcPath, int srcVersion,
int dstVersion, String dstPath, String srcPath,
NameMatcher excluder) int dstVersion,
String dstPath,
HrefValidationProgress progress)
throws AVMNotFoundException; throws AVMNotFoundException;
} }

View File

@@ -317,6 +317,14 @@ public class AVMRemoteLocal implements AVMRemote
return fService.lookup(version, path); return fService.lookup(version, path);
} }
/* (non-Javadoc)
* @see org.alfresco.repo.avm.AVMRemote#lookup(int, java.lang.String, boolean)
*/
public AVMNodeDescriptor lookup(int version, String path, boolean includeDeleted)
{
return fService.lookup(version, path, includeDeleted);
}
/* (non-Javadoc) /* (non-Javadoc)
* @see org.alfresco.repo.avm.AVMRemote#lookup(org.alfresco.service.cmr.avm.AVMNodeDescriptor, java.lang.String) * @see org.alfresco.repo.avm.AVMRemote#lookup(org.alfresco.service.cmr.avm.AVMNodeDescriptor, java.lang.String)
*/ */
@@ -325,6 +333,14 @@ public class AVMRemoteLocal implements AVMRemote
return fService.lookup(dir, name); return fService.lookup(dir, name);
} }
/* (non-Javadoc)
* @see org.alfresco.repo.avm.AVMRemote#lookup(org.alfresco.service.cmr.avm.AVMNodeDescriptor, java.lang.String, boolean includeDeleted)
*/
public AVMNodeDescriptor lookup(AVMNodeDescriptor dir, String name, boolean includeDeleted)
{
return fService.lookup(dir, name, includeDeleted);
}
/* (non-Javadoc) /* (non-Javadoc)
* @see org.alfresco.repo.avm.AVMRemote#makePrimary(java.lang.String) * @see org.alfresco.repo.avm.AVMRemote#makePrimary(java.lang.String)
*/ */

View File

@@ -704,6 +704,23 @@ public class AVMRemoteTransportService implements AVMRemoteTransport, Runnable
fAuthService.validate(ticket); fAuthService.validate(ticket);
return fAVMService.lookup(version, path); return fAVMService.lookup(version, path);
} }
/**
* Lookup a node identified by version ID and path; optionally,
* if the node is deleted, its descriptor can still
* be retrieved.
*
* @param version The version ID to look under.
* @param path The simple absolute path to the parent directory.
* @param includeDeleted Whether to allow a deleted node to be retrieved
* @return An AVMNodeDescriptor, or null if the version does not exist.
*/
public AVMNodeDescriptor lookup(String ticket, int version, String path, boolean includeDeleted)
{
fAuthService.validate(ticket);
return fAVMService.lookup(version, path, includeDeleted);
}
/** /**
* Get a descriptor for the specified node. * Get a descriptor for the specified node.
@@ -716,6 +733,25 @@ public class AVMRemoteTransportService implements AVMRemoteTransport, Runnable
fAuthService.validate(ticket); fAuthService.validate(ticket);
return fAVMService.lookup(dir, name); return fAVMService.lookup(dir, name);
} }
/**
* Lookup a node identified by the directory that contains it, and its name;
* optionally, the lookup can retrive the descriptor of a node even if
* it has been deleted from its containing directory.
*
* @param dir The descriptor for the directory node.
* @param name The name to lookup.
* @param includeDeleted Whether to allow a deleted node to be retrieved via the lookup
* @return The descriptor for the child, null if the child doesn't exist.
* @throws AVMNotFoundException
* @throws AVMWrongTypeException
*/
public AVMNodeDescriptor lookup(String ticket, AVMNodeDescriptor dir, String name, boolean includeDeleted)
{
fAuthService.validate(ticket);
return fAVMService.lookup(dir, name, includeDeleted);
}
/** /**
* Get the indirection path for a node. * Get the indirection path for a node.

View File

@@ -331,6 +331,15 @@ public class AVMRemoteImpl implements AVMRemote
return fTransport.lookup(fTicketHolder.getTicket(), version, path); return fTransport.lookup(fTicketHolder.getTicket(), version, path);
} }
/* (non-Javadoc)
* @see org.alfresco.repo.avm.AVMRemote#lookup(int, java.lang.String, boolean)
*/
public AVMNodeDescriptor lookup(int version, String path, boolean includeDeleted)
{
return fTransport.lookup(fTicketHolder.getTicket(), version, path, includeDeleted);
}
/* (non-Javadoc) /* (non-Javadoc)
* @see org.alfresco.repo.avm.AVMRemote#lookup(org.alfresco.service.cmr.avm.AVMNodeDescriptor, java.lang.String) * @see org.alfresco.repo.avm.AVMRemote#lookup(org.alfresco.service.cmr.avm.AVMNodeDescriptor, java.lang.String)
*/ */
@@ -339,6 +348,15 @@ public class AVMRemoteImpl implements AVMRemote
return fTransport.lookup(fTicketHolder.getTicket(), dir, name); return fTransport.lookup(fTicketHolder.getTicket(), dir, name);
} }
/* (non-Javadoc)
* @see org.alfresco.repo.avm.AVMRemote#lookup(org.alfresco.service.cmr.avm.AVMNodeDescriptor, java.lang.String, boolean includeDeleted)
*/
public AVMNodeDescriptor lookup(AVMNodeDescriptor dir, String name, boolean includeDeleted)
{
return fTransport.lookup(fTicketHolder.getTicket(), dir, name, includeDeleted);
}
/* (non-Javadoc) /* (non-Javadoc)
* @see org.alfresco.repo.avm.AVMRemote#makePrimary(java.lang.String) * @see org.alfresco.repo.avm.AVMRemote#makePrimary(java.lang.String)
*/ */

View File

@@ -253,6 +253,11 @@ public class AVMNodeDescriptor implements Serializable
/** /**
* Determines whether this node corresponds to * Determines whether this node corresponds to
* either a plain or layered file. * either a plain or layered file.
* <p>
* NOTE: A deleted file node is <em>not</em> considered a file
* (i.e.: isFile() returns false when isDeleted() returns true).
* Therefore, use isDeletedFile() to determine if a deleted node
* was a file, not isFile().
* *
* @return true if AVMNodeDescriptor is a plain or layered file, * @return true if AVMNodeDescriptor is a plain or layered file,
* otherwise false. * otherwise false.
@@ -289,7 +294,12 @@ public class AVMNodeDescriptor implements Serializable
/** /**
* Determines whether this node corresponds to * Determines whether this node corresponds to
* either a plain or layered directory. * either a plain or layered directory.
* <p>
* NOTE: A deleted directory node is <em>not</em> considered a directory
* (i.e.: isDirectory() returns false when isDeleted() returns true).
* Therefore, use isDeletedDirectory() to determine if a deleted node
* was a directory, not isDirectory().
* *
* @return true if AVMNodeDescriptor is a plain or layered directory, * @return true if AVMNodeDescriptor is a plain or layered directory,
* otherwise false. * otherwise false.

View File

@@ -244,6 +244,18 @@ public interface AVMRemote
* @return An AVMNodeDescriptor. * @return An AVMNodeDescriptor.
*/ */
public AVMNodeDescriptor lookup(int version, String path); public AVMNodeDescriptor lookup(int version, String path);
/**
* Lookup a node identified by version ID and path; optionally,
* if the node is deleted, its descriptor can still
* be retrieved.
*
* @param version The version ID to look under.
* @param path The simple absolute path to the parent directory.
* @param includeDeleted Whether to allow a deleted node to be retrieved
* @return An AVMNodeDescriptor, or null if the version does not exist.
*/
public AVMNodeDescriptor lookup(int version, String path, boolean includeDeleted);
/** /**
* Get a descriptor for the specified node. * Get a descriptor for the specified node.
@@ -252,6 +264,20 @@ public interface AVMRemote
* @return An AVMNodeDescriptor. * @return An AVMNodeDescriptor.
*/ */
public AVMNodeDescriptor lookup(AVMNodeDescriptor dir, String name); public AVMNodeDescriptor lookup(AVMNodeDescriptor dir, String name);
/**
* Lookup a node identified by the directory that contains it, and its name;
* optionally, the lookup can retrive the descriptor of a node even if
* it has been deleted from its containing directory.
*
* @param dir The descriptor for the directory node.
* @param name The name to lookup.
* @param includeDeleted Whether to allow a deleted node to be retrieved via the lookup
* @return The descriptor for the child, null if the child doesn't exist.
* @throws AVMNotFoundException
* @throws AVMWrongTypeException
*/
public AVMNodeDescriptor lookup(AVMNodeDescriptor dir, String name, boolean includeDeleted);
/** /**
* Get the indirection path for a node. * Get the indirection path for a node.

View File

@@ -256,6 +256,19 @@ public interface AVMRemoteTransport
* @return An AVMNodeDescriptor. * @return An AVMNodeDescriptor.
*/ */
public AVMNodeDescriptor lookup(String ticket, int version, String path); public AVMNodeDescriptor lookup(String ticket, int version, String path);
/**
* Lookup a node identified by version ID and path; optionally,
* if the node is deleted, its descriptor can still
* be retrieved.
*
* @param version The version ID to look under.
* @param path The simple absolute path to the parent directory.
* @param includeDeleted Whether to allow a deleted node to be retrieved
* @return An AVMNodeDescriptor, or null if the version does not exist.
*/
public AVMNodeDescriptor lookup(String ticket, int version, String path, boolean includeDeleted);
/** /**
* Get a descriptor for the specified node. * Get a descriptor for the specified node.
@@ -264,6 +277,21 @@ public interface AVMRemoteTransport
* @return An AVMNodeDescriptor. * @return An AVMNodeDescriptor.
*/ */
public AVMNodeDescriptor lookup(String ticket, AVMNodeDescriptor dir, String name); public AVMNodeDescriptor lookup(String ticket, AVMNodeDescriptor dir, String name);
/**
* Lookup a node identified by the directory that contains it, and its name;
* optionally, the lookup can retrive the descriptor of a node even if
* it has been deleted from its containing directory.
*
* @param dir The descriptor for the directory node.
* @param name The name to lookup.
* @param includeDeleted Whether to allow a deleted node to be retrieved via the lookup
* @return The descriptor for the child, null if the child doesn't exist.
* @throws AVMNotFoundException
* @throws AVMWrongTypeException
*/
public AVMNodeDescriptor lookup(String ticket, AVMNodeDescriptor dir, String name, boolean includeDeleted);
/** /**
* Get the indirection path for a node. * Get the indirection path for a node.