luetzkendorf 2005/01/03 07:06:06 Modified: src/webdav/server/org/apache/slide/webdav/util PropertyHelper.java Log: support for validation and default values generalized (the default value stuff is currently only used by some DeltaV methods, this could be generalized) Revision Changes Path 1.89 +185 -195 jakarta-slide/src/webdav/server/org/apache/slide/webdav/util/PropertyHelper.java Index: PropertyHelper.java =================================================================== RCS file: /home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/util/PropertyHelper.java,v retrieving revision 1.88 retrieving revision 1.89 diff -u -r1.88 -r1.89 --- PropertyHelper.java 29 Dec 2004 16:39:19 -0000 1.88 +++ PropertyHelper.java 3 Jan 2005 15:06:06 -0000 1.89 @@ -25,15 +25,10 @@ import java.io.IOException; import java.io.StringReader; import java.util.ArrayList; -import java.util.Collections; import java.util.Iterator; import java.util.List; -import java.util.Set; import org.apache.commons.codec.digest.DigestUtils; - -import org.apache.slide.authenticate.CredentialsToken; -import org.apache.slide.common.Domain; import org.apache.slide.common.NamespaceAccessToken; import org.apache.slide.common.PropertyName; import org.apache.slide.common.SlideException; @@ -45,18 +40,14 @@ import org.apache.slide.content.NodeRevisionNumber; import org.apache.slide.content.NodeProperty.NamespaceCache; import org.apache.slide.lock.NodeLock; -import org.apache.slide.structure.SubjectNode; import org.apache.slide.util.XMLValue; import org.apache.slide.webdav.WebdavServletConfig; import org.apache.slide.webdav.util.properties.LockDiscoveryProperty; import org.apache.slide.webdav.util.properties.PropertyComputer; +import org.apache.slide.webdav.util.properties.PropertyDefaultProvider; import org.apache.slide.webdav.util.resourcekind.AbstractResourceKind; -import org.apache.slide.webdav.util.resourcekind.Activity; -import org.apache.slide.webdav.util.resourcekind.DeltavCompliantCollection; import org.apache.slide.webdav.util.resourcekind.ResourceKind; import org.apache.slide.webdav.util.resourcekind.ResourceKindManager; -import org.apache.slide.webdav.util.resourcekind.VersionHistory; -import org.jdom.Attribute; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; @@ -146,200 +137,198 @@ * @post result != null * @return a list of initial non-transient properties (empty list if none) */ - public List createInitialProperties( ResourceKind resourceKind, String resourcePath ) { - - Set sp = resourceKind.getSupportedLiveProperties(); - List result = null; + public List createInitialProperties(ResourceKind resourceKind, String resourcePath) { - if( sp == null ) - result = Collections.EMPTY_LIST; - else { - result = new ArrayList(); - Iterator i = sp.iterator(); - while( i.hasNext() ) { - String propName = (String)i.next(); - if( AbstractResourceKind.isComputedProperty(propName) ) - continue; - Object pvalue = createDefaultValue( propName, resourceKind, resourcePath ); - if (pvalue != null) { - result.add( new NodeProperty(propName, pvalue) ); - } - } - } - return result; - } - - /** - * Create a default value for the specified property name and resource - * kind - */ - Object createDefaultValue( String propName, ResourceKind resourceKind, String resourcePath ) { + List result = new ArrayList(); - String autoVersion = - Domain.getParameter(I_AUTO_VERSION, - I_AUTO_VERSION_DEFAULT, - nsaToken.getUri(sToken, resourcePath).getStore()); - - String checkoutFork = - Domain.getParameter(I_CHECKOUT_FORK, - I_CHECKOUT_FORK_DEFAULT, - nsaToken.getUri(sToken, resourcePath).getStore()); - - String checkinFork = - Domain.getParameter(I_CHECKIN_FORK, - I_CHECKIN_FORK_DEFAULT, - nsaToken.getUri(sToken, resourcePath).getStore()); - - String result = null; - - if( P_RESOURCETYPE.equals(propName) ) { - StringBuffer rtvv = new StringBuffer(); - try { - if( resourceKind instanceof VersionHistory ) { - rtvv.append( - xmlOut.outputString(new Element(E_VERSION_HISTORY, DNSP)) ); - rtvv.append( - xmlOut.outputString(new Element(E_COLLECTION, DNSP)) ); - } - if( resourceKind instanceof DeltavCompliantCollection ) { - rtvv.append( - xmlOut.outputString(new Element(E_COLLECTION, DNSP)) ); - } - if( resourceKind instanceof Activity ) { - rtvv.append( - xmlOut.outputString(new Element(E_ACTIVITY, DNSP)) ); - } - } - catch( Exception x ) { - x.printStackTrace(); - } - result = rtvv.toString(); - } - else if( P_SUPPORTED_METHOD_SET.equals(propName) ) { - Iterator i = resourceKind.getSupportedMethods().iterator(); - StringBuffer smsv = new StringBuffer(); - while( i.hasNext() ) { - String m = (String) i.next(); - Element sm = new Element( E_SUPPORTED_METHOD, DNSP ); - Attribute na = new Attribute( A_NAME, m, DNSP ); - sm.setAttribute( na ); - try { - smsv.append( xmlOut.outputString(sm) ); - } - catch( Exception x ) { x.printStackTrace(); } - } - result = smsv.toString(); - } - else if( P_SUPPORTED_LIVE_PROPERTY_SET.equals(propName) ) { - Iterator i = resourceKind.getSupportedLiveProperties().iterator(); - StringBuffer spsv = new StringBuffer(); - while( i.hasNext() ) { - String p = (String) i.next(); - Element sp = new Element( E_SUPPORTED_LIVE_PROPERTY, DNSP ); - Element na = new Element( E_NAME, DNSP ); - na.addContent( p ); - sp.addContent( na ); - try { - spsv.append( xmlOut.outputString(sp) ); - } - catch( Exception x ) { x.printStackTrace(); } - } - result = spsv.toString(); - } - else if( P_SUPPORTED_REPORT_SET.equals(propName) ) { - Iterator i = resourceKind.getSupportedReports().iterator(); - StringBuffer srsv = new StringBuffer(); - while( i.hasNext() ) { - String r = (String) i.next(); - Element sr = new Element( E_SUPPORTED_REPORT, DNSP ); - Element na = new Element( E_NAME, DNSP ); - na.addContent( r ); - sr.addContent( na ); - try { - srsv.append( xmlOut.outputString(sr) ); - } - catch( Exception x ) { x.printStackTrace(); } - } - result = srsv.toString(); - } - else if( P_AUTO_VERSION.equals(propName) ) { - - XMLValue xmlValue = new XMLValue(); - - if (autoVersion.length() > 0) { - xmlValue.add(new Element(autoVersion, DNSP)); - } - - if( ! resourceKind.isSupportedPropertyValue(P_AUTO_VERSION, xmlValue) ) { - Domain.warn( "Auto-version not configured properly; using " - +E_CHECKOUT_CHECKIN ); - xmlValue = new XMLValue(new Element(E_CHECKOUT_CHECKIN, DNSP)); - } - - result = xmlValue.toString(); - } - else if( P_CHECKOUT_FORK.equals(propName) ) { - - XMLValue xmlValue = new XMLValue(); - - if (checkoutFork.length() > 0) { - xmlValue.add(new Element(checkoutFork, DNSP)); - } - - if( ! resourceKind.isSupportedPropertyValue(P_CHECKOUT_FORK, xmlValue) ) { - Domain.warn( "Checkout-fork not configured properly; using " - +E_FORBIDDEN ); - xmlValue = new XMLValue(new Element(E_FORBIDDEN, DNSP)); - } - - result = xmlValue.toString(); - } - else if( P_CHECKIN_FORK.equals(propName) ) { - - XMLValue xmlValue = new XMLValue(); - - if (checkinFork.length() > 0) { - xmlValue.add(new Element(checkinFork, DNSP)); - } - - if( ! resourceKind.isSupportedPropertyValue(P_CHECKIN_FORK, xmlValue) ) { - Domain.warn( "Checkin-fork not configured properly; using " - +E_FORBIDDEN ); - xmlValue = new XMLValue(new Element(E_FORBIDDEN, DNSP)); - } - - result = xmlValue.toString(); - } - else if( P_GETCONTENTLANGUAGE.equals(propName) ) { - result = "en"; - } - else if( P_CREATOR_DISPLAYNAME.equals(propName) ) { - if( sToken != null ) { - CredentialsToken credToken = sToken.getCredentialsToken(); - if( credToken != null ) { - result = credToken.getPublicCredentials(); - if (result == null || result.equals("") || result.equals("/")) { - result = SubjectNode.UNAUTHENTICATED_URI; + for(Iterator i = resourceKind.getSupportedLivePropertyNames().iterator(); i.hasNext();) { + PropertyName propName = (PropertyName)i.next(); + if(!resourceKind.isComputedProperty(propName)) { + PropertyDefaultProvider defaultProvider = + resourceKind.getDefaultProvider(propName); + if (defaultProvider != null) { + Object pvalue = defaultProvider.createDefaultValue( + this.nsaToken, this.sToken, resourceKind, resourcePath); + if (pvalue != null) { + result.add(new NodeProperty(propName, pvalue)); } } } } - // REQUIRED properties - else if( P_PREDECESSOR_SET.equals(propName) ) { - result = ""; - } - else if( P_CHECKOUT_SET.equals(propName) ) { - result = ""; - } - else if( P_COMMENT.equals(propName) ) { - result = ""; - } - else if( P_LABEL_NAME_SET.equals(propName) ) { - result = ""; - } return result; } +// /** +// * Create a default value for the specified property name and resource +// * kind +// */ +// Object createDefaultValue( String propName, ResourceKind resourceKind, String resourcePath ) { +// +// String autoVersion = +// Domain.getParameter(I_AUTO_VERSION, +// I_AUTO_VERSION_DEFAULT, +// nsaToken.getUri(sToken, resourcePath).getStore()); +// +// String checkoutFork = +// Domain.getParameter(I_CHECKOUT_FORK, +// I_CHECKOUT_FORK_DEFAULT, +// nsaToken.getUri(sToken, resourcePath).getStore()); +// +// String checkinFork = +// Domain.getParameter(I_CHECKIN_FORK, +// I_CHECKIN_FORK_DEFAULT, +// nsaToken.getUri(sToken, resourcePath).getStore()); +// +// String result = null; +// +// if( P_RESOURCETYPE.equals(propName) ) { +// StringBuffer rtvv = new StringBuffer(); +// try { +// if( resourceKind instanceof VersionHistory ) { +// rtvv.append( +// xmlOut.outputString(new Element(E_VERSION_HISTORY, DNSP)) ); +// rtvv.append( +// xmlOut.outputString(new Element(E_COLLECTION, DNSP)) ); +// } +// if( resourceKind instanceof DeltavCompliantCollection ) { +// rtvv.append( +// xmlOut.outputString(new Element(E_COLLECTION, DNSP)) ); +// } +// if( resourceKind instanceof Activity ) { +// rtvv.append( +// xmlOut.outputString(new Element(E_ACTIVITY, DNSP)) ); +// } +// } +// catch( Exception x ) { +// x.printStackTrace(); +// } +// result = rtvv.toString(); +// } +//// else if( P_SUPPORTED_METHOD_SET.equals(propName) ) { +//// Iterator i = resourceKind.getSupportedMethods().iterator(); +//// StringBuffer smsv = new StringBuffer(); +//// while( i.hasNext() ) { +//// String m = (String) i.next(); +//// Element sm = new Element( E_SUPPORTED_METHOD, DNSP ); +//// Attribute na = new Attribute( A_NAME, m, DNSP ); +//// sm.setAttribute( na ); +//// try { +//// smsv.append( xmlOut.outputString(sm) ); +//// } +//// catch( Exception x ) { x.printStackTrace(); } +//// } +//// result = smsv.toString(); +//// } +//// else if( P_SUPPORTED_LIVE_PROPERTY_SET.equals(propName) ) { +//// Iterator i = resourceKind.getSupportedLiveProperties().iterator(); +//// StringBuffer spsv = new StringBuffer(); +//// while( i.hasNext() ) { +//// String p = (String) i.next(); +//// Element sp = new Element( E_SUPPORTED_LIVE_PROPERTY, DNSP ); +//// Element na = new Element( E_NAME, DNSP ); +//// na.addContent( p ); +//// sp.addContent( na ); +//// try { +//// spsv.append( xmlOut.outputString(sp) ); +//// } +//// catch( Exception x ) { x.printStackTrace(); } +//// } +//// result = spsv.toString(); +//// } +//// else if( P_SUPPORTED_REPORT_SET.equals(propName) ) { +//// Iterator i = resourceKind.getSupportedReports().iterator(); +//// StringBuffer srsv = new StringBuffer(); +//// while( i.hasNext() ) { +//// String r = (String) i.next(); +//// Element sr = new Element( E_SUPPORTED_REPORT, DNSP ); +//// Element na = new Element( E_NAME, DNSP ); +//// na.addContent( r ); +//// sr.addContent( na ); +//// try { +//// srsv.append( xmlOut.outputString(sr) ); +//// } +//// catch( Exception x ) { x.printStackTrace(); } +//// } +//// result = srsv.toString(); +//// } +// else if( P_AUTO_VERSION.equals(propName) ) { +// +// XMLValue xmlValue = new XMLValue(); +// +// if (autoVersion.length() > 0) { +// xmlValue.add(new Element(autoVersion, DNSP)); +// } +// +// if( ! resourceKind.isSupportedPropertyValue(P_AUTO_VERSION, xmlValue) ) { +// Domain.warn( "Auto-version not configured properly; using " +// +E_CHECKOUT_CHECKIN ); +// xmlValue = new XMLValue(new Element(E_CHECKOUT_CHECKIN, DNSP)); +// } +// +// result = xmlValue.toString(); +// } +// else if( P_CHECKOUT_FORK.equals(propName) ) { +// +// XMLValue xmlValue = new XMLValue(); +// +// if (checkoutFork.length() > 0) { +// xmlValue.add(new Element(checkoutFork, DNSP)); +// } +// +// if( ! resourceKind.isSupportedPropertyValue(P_CHECKOUT_FORK, xmlValue) ) { +// Domain.warn( "Checkout-fork not configured properly; using " +// +E_FORBIDDEN ); +// xmlValue = new XMLValue(new Element(E_FORBIDDEN, DNSP)); +// } +// +// result = xmlValue.toString(); +// } +// else if( P_CHECKIN_FORK.equals(propName) ) { +// +// XMLValue xmlValue = new XMLValue(); +// +// if (checkinFork.length() > 0) { +// xmlValue.add(new Element(checkinFork, DNSP)); +// } +// +// if( ! resourceKind.isSupportedPropertyValue(P_CHECKIN_FORK, xmlValue) ) { +// Domain.warn( "Checkin-fork not configured properly; using " +// +E_FORBIDDEN ); +// xmlValue = new XMLValue(new Element(E_FORBIDDEN, DNSP)); +// } +// +// result = xmlValue.toString(); +// } +// else if( P_GETCONTENTLANGUAGE.equals(propName) ) { +// result = "en"; +// } +// else if( P_CREATOR_DISPLAYNAME.equals(propName) ) { +// if( sToken != null ) { +// CredentialsToken credToken = sToken.getCredentialsToken(); +// if( credToken != null ) { +// result = credToken.getPublicCredentials(); +// if (result == null || result.equals("") || result.equals("/")) { +// result = SubjectNode.UNAUTHENTICATED_URI; +// } +// } +// } +// } +// // REQUIRED properties +// else if( P_PREDECESSOR_SET.equals(propName) ) { +// result = ""; +// } +// else if( P_CHECKOUT_SET.equals(propName) ) { +// result = ""; +// } +// else if( P_COMMENT.equals(propName) ) { +// result = ""; +// } +// else if( P_LABEL_NAME_SET.equals(propName) ) { +// result = ""; +// } +// return result; +// } + /** * Create CDATA value. */ @@ -551,6 +540,7 @@ Object value = definition.computeValue(this.nsaToken, revisionDescriptors, revisionDescriptor, + resourceKind, this.webdavContext); if (value != null) {
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]