KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > openharmonise > dav > server > property > ranges > DAVRangeFactory


1 /*
2  * The contents of this file are subject to the
3  * Mozilla Public License Version 1.1 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at http://www.mozilla.org/MPL/
6  *
7  * Software distributed under the License is distributed on an "AS IS"
8  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
9  * See the License for the specific language governing rights and
10  * limitations under the License.
11  *
12  * The Initial Developer of the Original Code is Simulacra Media Ltd.
13  * Portions created by Simulacra Media Ltd are Copyright (C) Simulacra Media Ltd, 2004.
14  *
15  * All Rights Reserved.
16  *
17  * Contributor(s):
18  */

19
20 package org.openharmonise.dav.server.property.ranges;
21
22 import org.openharmonise.commons.dsi.*;
23 import org.openharmonise.commons.xml.*;
24 import org.openharmonise.commons.xml.namespace.*;
25 import org.openharmonise.dav.server.managers.*;
26 import org.openharmonise.dav.server.utils.*;
27 import org.openharmonise.rm.resources.metadata.properties.*;
28 import org.openharmonise.rm.resources.metadata.properties.ranges.*;
29 import org.openharmonise.rm.resources.workflow.properties.*;
30 import org.openharmonise.rm.resources.workflow.properties.ranges.*;
31 import org.w3c.dom.*;
32
33 import com.ibm.webdav.*;
34
35 /**
36  * Factory class to generate the appropriate <code>DAVRange</code> class for the
37  * given Harmonise range or DAV property element.
38  *
39  * @author Michael Bell
40  * @version $Revision: 1.1 $
41  * @since November 20, 2003
42  */

43 public class DAVRangeFactory {
44
45
46     /**
47      *
48      */

49     private DAVRangeFactory() {
50         super();
51         
52     }
53
54     static public DAVRange getDAVRange(AbstractDataStoreInterface dsi, Range range) {
55         DAVRange davRange = null;
56         
57         if(range instanceof StringRange) {
58             davRange = new DAVStringRange(dsi,range);
59         } else if(range instanceof IntegerRange) {
60             davRange = new DAVIntegerRange(dsi,range);
61         } else if(range instanceof BooleanRange) {
62             davRange = new DAVBooleanRange(dsi,range);
63         } else if(range instanceof AbsoluteChildObjectRange) {
64             davRange = new DAVResourceRange(dsi,range);
65         } else if(range instanceof FloatRange) {
66             davRange = new DAVFloatRange(dsi,range);
67         } else if(range instanceof DateRange) {
68             davRange = new DAVDateRange(dsi,range);
69         } else if(range instanceof URIRange) {
70             davRange = new DAVURIRange(dsi,range);
71         } else if(range instanceof ProfileRange) {
72             davRange = new DAVPropertyRange(dsi,range);
73         } else if(range instanceof RelativeChildObjectRange) {
74             davRange = new DAVRelativeObjectRange(dsi,range);
75         }
76         
77         return davRange;
78     }
79     
80     static public DAVRange getDAVRange(AbstractDataStoreInterface dsi, Property prop, Element davPropEl) throws WebDAVException {
81         DAVRange davRange = null;
82         
83         if(prop instanceof WorkflowProperty) {
84             davRange = new DAVResourceRange(dsi,new WorkflowRange(),davPropEl);
85         } else {
86             
87             NodeList restrNodes = davPropEl.getElementsByTagNameNS(NamespaceType.XML_SCHEMA.getURI(), DAVRange.TAG_RESTRICTION);
88             NodeList resourceTypeNodes = davPropEl.getElementsByTagNameNS(NamespaceType.DAV.getURI(),HarmonisePropertiesManager.TAG_RESOURCETYPE);
89             
90             if(restrNodes.getLength() > 0) {
91                 Element restrEl = (Element) restrNodes.item(0);
92                 
93                 String JavaDoc sBase = restrEl.getAttributeNS(NamespaceType.XML_SCHEMA.getURI(),"base");
94                 
95                 if(sBase.equals(DAVRange.TYPE_STRING)) {
96                     davRange = new DAVStringRange(dsi,davPropEl);
97                 } else if(sBase.equals(DAVRange.TYPE_INTEGER)) {
98                     davRange = new DAVIntegerRange(dsi,davPropEl);
99                 } else if(sBase.equals(DAVRange.TYPE_BOOLEAN)) {
100                     davRange = new DAVBooleanRange(dsi,davPropEl);
101                 } else if(sBase.equals(DAVRange.TYPE_FLOAT)) {
102                     davRange = new DAVFloatRange(dsi,davPropEl);
103                 } else if(sBase.equals(DAVRange.TYPE_DATE)) {
104                     davRange = new DAVDateRange(dsi,davPropEl);
105                 } else if(sBase.equals(DAVRange.TYPE_DATETIME)) {
106                     davRange = new DAVDateRange(dsi,davPropEl);
107                 } else if(sBase.equals(DAVRange.TYPE_URI)) {
108                     davRange = new DAVURIRange(dsi,davPropEl);
109                 }
110                 
111             } else if(resourceTypeNodes.getLength() > 0) {
112                 
113                 Element resourceEl = XMLUtils.getFirstElementChild((Element) resourceTypeNodes.item(0));
114                 String JavaDoc sLocalName = resourceEl.getLocalName();
115                 if(sLocalName.equals(HarmonisePropertiesManager.TAG_PROPERTY_RESOURCE)) {
116                     davRange = new DAVPropertyRange(dsi,davPropEl);
117                 } else if(sLocalName.equals(DAVRange.TAG_VALUE)
118                 || sLocalName.equals(HarmonisePropertiesManager.TAG_RESOURCE)
119                 || sLocalName.equals(HarmonisePropertiesManager.TAG_COLLECTION)) {
120                     
121                     NodeList nl = davPropEl.getElementsByTagNameNS(NamespaceType.DAV.getURI(),HarmonisePropertiesManager.TAG_HREF);
122                     
123                     //if there's no hrefs then just create a standard davresourcerange
124
if(nl.getLength() > 0) {
125                         Element hrefEl = (Element) nl.item(0);
126                         String JavaDoc hrefVal = hrefEl.getChildNodes().item(0).getNodeValue();
127                         
128                         //if the webdav root marker is in the string we can assume
129
//it's an absolute child range otherwise it's a relative
130
//child object range
131
if(hrefVal.indexOf(HarmoniseNameResolver.WEBDAV_ROOT_MARKER) > 0) {
132                             davRange = new DAVResourceRange(dsi,davPropEl);
133                         } else {
134                             davRange = new DAVRelativeObjectRange(dsi,davPropEl);
135                         }
136                     
137                     } else {
138                         davRange = new DAVResourceRange(dsi,davPropEl);
139                     }
140                     
141                     
142                 }
143             }
144         }
145
146         return davRange;
147     }
148         
149 }
150
Popular Tags