You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2006/03/14 19:47:08 UTC
svn commit: r385852 - in /incubator/jackrabbit/branches/1.0/jcr-server:
server/src/java/org/apache/jackrabbit/webdav/jcr/nodetype/
webdav/src/java/org/apache/jackrabbit/webdav/version/report/
Author: jukka
Date: Tue Mar 14 10:47:08 2006
New Revision: 385852
URL: http://svn.apache.org/viewcvs?rev=385852&view=rev
Log:
1.0: Merged revisions 385458, 385459, and 385485: JCR-346, JCR-347, and JCR-341 as requested by Angela.
Modified:
incubator/jackrabbit/branches/1.0/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/nodetype/ItemDefinitionImpl.java
incubator/jackrabbit/branches/1.0/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/nodetype/NodeTypeProperty.java
incubator/jackrabbit/branches/1.0/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/report/ReportType.java
Modified: incubator/jackrabbit/branches/1.0/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/nodetype/ItemDefinitionImpl.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/branches/1.0/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/nodetype/ItemDefinitionImpl.java?rev=385852&r1=385851&r2=385852&view=diff
==============================================================================
--- incubator/jackrabbit/branches/1.0/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/nodetype/ItemDefinitionImpl.java (original)
+++ incubator/jackrabbit/branches/1.0/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/nodetype/ItemDefinitionImpl.java Tue Mar 14 10:47:08 2006
@@ -101,8 +101,11 @@
* @param document
*/
public Element toXml(Document document) {
- Element elem = document.createElement(getElementName());
- elem.setAttribute(DECLARINGNODETYPE_ATTRIBUTE, getDeclaringNodeType().getName());
+ Element elem = document.createElement(getElementName());
+ NodeType dnt = getDeclaringNodeType();
+ if (dnt != null) {
+ elem.setAttribute(DECLARINGNODETYPE_ATTRIBUTE, dnt.getName());
+ }
elem.setAttribute(NAME_ATTRIBUTE, getName());
elem.setAttribute(AUTOCREATED_ATTRIBUTE, Boolean.toString(isAutoCreated()));
elem.setAttribute(MANDATORY_ATTRIBUTE, Boolean.toString(isMandatory()));
Modified: incubator/jackrabbit/branches/1.0/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/nodetype/NodeTypeProperty.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/branches/1.0/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/nodetype/NodeTypeProperty.java?rev=385852&r1=385851&r2=385852&view=diff
==============================================================================
--- incubator/jackrabbit/branches/1.0/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/nodetype/NodeTypeProperty.java (original)
+++ incubator/jackrabbit/branches/1.0/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/nodetype/NodeTypeProperty.java Tue Mar 14 10:47:08 2006
@@ -15,8 +15,6 @@
*/
package org.apache.jackrabbit.webdav.jcr.nodetype;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavServletResponse;
import org.apache.jackrabbit.webdav.property.AbstractDavProperty;
import org.apache.jackrabbit.webdav.property.DavProperty;
import org.apache.jackrabbit.webdav.property.DavPropertyName;
@@ -42,7 +40,7 @@
private final Set nodetypeNames = new HashSet();
public NodeTypeProperty(DavPropertyName name, NodeType nodeType, boolean isProtected) {
- this(name, new NodeType[] {nodeType}, isProtected);
+ this(name, new NodeType[]{nodeType}, isProtected);
}
public NodeTypeProperty(DavPropertyName name, NodeType[] nodeTypes, boolean isProtected) {
@@ -55,41 +53,54 @@
}
}
+ public NodeTypeProperty(DavPropertyName name, String[] nodeTypeNames, boolean isProtected) {
+ super(name, isProtected);
+ for (int i = 0; i < nodeTypeNames.length; i++) {
+ if (nodeTypeNames[i] != null) {
+ nodetypeNames.add(nodeTypeNames[i]);
+ }
+ }
+ }
+
/**
* Create a new <code>NodeTypeProperty</code> from the specified general
* DavProperty object.
*
* @param property
- * @throws IllegalArgumentException if the content of the specified property
- * contains elements other than {@link NodeTypeConstants#XML_NODETYPE}.
*/
- public NodeTypeProperty(DavProperty property) throws DavException {
+ public NodeTypeProperty(DavProperty property) {
super(property.getName(), property.isProtected());
- Object propValue = property.getValue();
- Iterator it;
- if (propValue instanceof List) {
- it = ((List)propValue).iterator();
- } else if (propValue instanceof Element) {
- List l = new ArrayList();
- l.add(propValue);
- it = l.iterator();
+ if (property instanceof NodeTypeProperty) {
+ nodetypeNames.addAll(((NodeTypeProperty)property).nodetypeNames);
} else {
- log.warn("Cannot build NodeTypeProperty from the given property.");
- throw new DavException(DavServletResponse.SC_BAD_REQUEST, "Cannot build NodeTypeProperty from the given property.");
+ // assume property has be built from xml
+ Object propValue = property.getValue();
+ if (propValue instanceof List) {
+ retrieveNodeTypeNames(((List)propValue));
+ } else if (propValue instanceof Element) {
+ List l = new ArrayList();
+ l.add(propValue);
+ retrieveNodeTypeNames(l);
+ } else {
+ log.debug("NodeTypeProperty '" + property.getName() + "' has no/unparsable value.");
+ }
}
+ }
- while (it.hasNext()) {
- Object content = it.next();
+ private void retrieveNodeTypeNames(List elementList) {
+ Iterator it = elementList.iterator();
+ while (it.hasNext()) {
+ Object content = it.next();
if (!(content instanceof Element)) {
continue;
- }
+ }
Element el = (Element)content;
if (XML_NODETYPE.equals(el.getLocalName()) && NodeTypeConstants.NAMESPACE.isSame(el.getNamespaceURI())) {
- String nodetypeName = DomUtil.getText(el);
+ String nodetypeName = DomUtil.getChildText(el, XML_NODETYPENAME, NodeTypeConstants.NAMESPACE);
if (nodetypeName != null && !"".equals(nodetypeName)) {
nodetypeNames.add(nodetypeName);
- }
- } else {
+ }
+ } else {
log.debug("'dcr:nodetype' element expected -> ignoring element '" + ((Element)content).getNodeName() + "'");
}
}
Modified: incubator/jackrabbit/branches/1.0/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/report/ReportType.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/branches/1.0/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/report/ReportType.java?rev=385852&r1=385851&r2=385852&view=diff
==============================================================================
--- incubator/jackrabbit/branches/1.0/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/report/ReportType.java (original)
+++ incubator/jackrabbit/branches/1.0/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/report/ReportType.java Tue Mar 14 10:47:08 2006
@@ -67,7 +67,7 @@
*/
public Report createReport(DeltaVResource resource, ReportInfo info) throws DavException {
try {
- Report report = (Report) reportClass.getConstructor(new Class[0]).newInstance(new Object[0]);
+ Report report = (Report) reportClass.newInstance();
report.init(resource, info);
return report;
} catch (Exception e) {
@@ -109,7 +109,7 @@
*/
public String getReportName() {
return key;
- }
+ }
/**
*
@@ -117,7 +117,7 @@
*/
public String getLocalName() {
return localName;
- }
+ }
/**
*
@@ -143,25 +143,19 @@
if (localName == null || namespace == null || reportClass == null) {
throw new IllegalArgumentException("A ReportType cannot be registered with a null name, namespace or report class");
}
-
String key = DomUtil.getQualifiedName(localName, namespace);
if (types.containsKey(key)) {
return (ReportType) types.get(key);
} else {
- // test if this report class has an empty constructor and implements Report interface
- boolean isValidClass = false;
- Class[] interfaces = reportClass.getInterfaces();
- for (int i = 0; i < interfaces.length && !isValidClass; i++) {
- isValidClass = (interfaces[i] == Report.class);
- }
- if (!isValidClass) {
- throw new IllegalArgumentException("The specified report class must implement the Report interface.");
- }
-
try {
- reportClass.getConstructor(new Class[0]);
- } catch (NoSuchMethodException e) {
- throw new IllegalArgumentException("The specified report class must provide a default constructor.");
+ Object report = reportClass.newInstance();
+ if (!(report instanceof Report)) {
+ throw new IllegalArgumentException("Unable to register Report class: " + reportClass + " does not implement the Report interface.");
+ }
+ } catch (IllegalAccessException e) {
+ throw new IllegalArgumentException("Error while validating Report class: " + e.getMessage());
+ } catch (InstantiationException e) {
+ throw new IllegalArgumentException("Error while validating Report class.: " + e.getMessage());
}
ReportType type = new ReportType(localName, namespace, key, reportClass);