public void versionControl( String resourcePath ) throws SlideException {
UriHandler rUh = UriHandler.getUriHandler( resourcePath );
Iterator i;
Enumeration j;
NodeRevisionDescriptors rNrds = content.retrieve( sToken, resourcePath );
NodeRevisionDescriptor rNrd = content.retrieve( sToken, rNrds );
ResourceKind rRk = AbstractResourceKind.determineResourceKind( nsaToken, resourcePath, rNrd );
if( !rRk.isSupportedMethod(req.getMethod()) ) {
throw new MethodNotAllowedException( rRk );
}
// Check for rRk = K_VERSION_CONTROLLED*
if( rRk instanceof VersionControlled ) {
// nothing to do
return;
}
// Set initial VR properties
NodeRevisionDescriptor vrNrd =
new NodeRevisionDescriptor(req.getContentLength());
i = pHelp.createInitialProperties(VersionImpl.getInstance()).iterator();
while( i.hasNext() )
vrNrd.setProperty( (NodeProperty)i.next() );
// Copy dead properties VCR -> VR
j = rNrd.enumerateProperties();
while( j.hasMoreElements() ) {
NodeProperty p = (NodeProperty)j.nextElement();
if( p.isLiveProperty() )
continue;
if( !vrNrd.exists(p.getName()) )
vrNrd.setProperty( p );
}
// Copy properties VCR->VR
NodeRevisionContent rNrc = content.retrieve( sToken, rNrds, rNrd );
vrNrd.setContentType(rNrd.getContentType()); // P_GETCONTENTTYPE
vrNrd.setContentLength(rNrd.getContentLength()); // P_GETCONTENTLENGTH
vrNrd.setContentLanguage(rNrd.getContentLanguage()); // P_GETCONTENTLANGUAGE
String comment = "INITIAL VERSION. ";
if( rNrd.exists(P_COMMENT) )
comment += (String)rNrd.getProperty(P_COMMENT).getValue();
vrNrd.setProperty(
new NodeProperty(P_COMMENT, comment) );
// Set initial VHR properties
Vector vhrLabels = new Vector();
Hashtable vhrProps = new Hashtable();
String vhrBranch = NodeRevisionDescriptors.MAIN_BRANCH;
NodeRevisionDescriptor vhrNrd =
new NodeRevisionDescriptor( NodeRevisionNumber.HIDDEN_0_0, vhrBranch, vhrLabels, vhrProps );
i = pHelp.createInitialProperties(VersionHistoryImpl.getInstance()).iterator();
while( i.hasNext() )
vhrNrd.setProperty( (NodeProperty)i.next() );
// Set initial VCR properties (do not overwrite existing!!)
i = pHelp.createInitialProperties(VersionControlledImpl.getInstance()).iterator();
while( i.hasNext() ) {
NodeProperty p = (NodeProperty)i.next();
if( !rNrd.exists(p.getName()) )
rNrd.setProperty( p );
}
// Create VHR/VR
UriHandler vhrUh = UriHandler.createNextHistoryUri( sToken, nsaToken, rUh );
String vhrUri = String.valueOf( vhrUh );
SubjectNode vhrNode = new SubjectNode();
structure.create( sToken, vhrNode, String.valueOf(vhrUh) );
content.create( sToken, vhrUri, true ); //isVersioned=true
content.create( sToken, vhrUri, vrNrd, rNrc );
NodeRevisionDescriptors vhrNrds =
content.retrieve( sToken, vhrUri );
content.create(
sToken, vhrUri, null, vhrNrd, null ); //branch=null, revisionContent=null
// Create VR node