KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > openharmonise > dav > server > managers > VersionedPropertiesManager


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.managers;
21
22 import java.util.*;
23 import java.util.logging.*;
24
25 import javax.xml.parsers.*;
26
27 import org.openharmonise.commons.xml.namespace.NamespaceType;
28 import org.openharmonise.dav.server.property.domains.DAVDomain;
29 import org.openharmonise.dav.server.property.ranges.DAVRange;
30 import org.openharmonise.dav.server.utils.*;
31 import org.openharmonise.rm.DataAccessException;
32 import org.openharmonise.rm.resources.*;
33 import org.openharmonise.rm.resources.metadata.properties.Property;
34 import org.w3c.dom.*;
35
36 import com.ibm.webdav.*;
37 import com.ibm.webdav.impl.*;
38
39 /**
40  * Implementation of the <code>VersionedPropertiesManager</code> interface
41  * providing the Delta-V functionality on top of <code>PropertiesManager</code>.
42  *
43  * @author Michael Bell
44  * @version $Revision: 1.2 $
45  * @since May 21, 2004
46  */

47 public class VersionedPropertiesManager
48     extends HarmonisePropertiesManager
49     implements com.ibm.webdav.impl.VersionedPropertiesManager {
50         
51     public static final String JavaDoc TAG_SUCCESSOR_SET = "successor-set";
52     public static final String JavaDoc TAG_AUTO_VERSION = "auto-version";
53     public static final String JavaDoc TAG_LOCKED_CHECKOUT = "locked-checkout";
54     public static final String JavaDoc TAG_PREDECESSOR_SET = "predecessor-set";
55     public static final String JavaDoc TAG_CHECKED_OUT = "checked-out";
56     public static final String JavaDoc TAG_CHECKED_IN = "checked-in";
57     public static final String JavaDoc TAG_CHECKOUT_SET = "checkout-set";
58     public static final String JavaDoc TAG_VERSION_NAME = "version-name";
59     public static final String JavaDoc TAG_COMMENT = "comment";
60     public static final String JavaDoc TAG_CREATOR_DISPLAYNAME = "creator-displayname";
61     public static final String JavaDoc TAG_SUPPORTED_METHOD_SET =
62         "supported-method-set";
63     public static final String JavaDoc TAG_SUPPORTED_LIVE_PROPERTY_SET =
64         "supported-live-property-set";
65     public static final String JavaDoc TAG_SUPPORTED_REPORT_SET =
66         "supported-report-set";
67     public static final String JavaDoc TAG_SUPPORTED_REPORT = "supported-report";
68     public static final String JavaDoc TAG_REPORT = "report";
69     public static final String JavaDoc TAG_VERSION_TREE = "version-tree";
70
71     private static List VERSION_PROPS = new Vector();
72     
73     /**
74      * Logger for this class
75      */

76     private static final Logger m_logger = Logger.getLogger(VersionedPropertiesManager.class.getName());
77
78     static {
79         VERSION_PROPS.add(TAG_SUCCESSOR_SET);
80         VERSION_PROPS.add(TAG_PREDECESSOR_SET);
81         VERSION_PROPS.add(TAG_CHECKED_OUT);
82         VERSION_PROPS.add(TAG_CHECKED_IN);
83         VERSION_PROPS.add(TAG_VERSION_NAME);
84         VERSION_PROPS.add(TAG_COMMENT);
85         VERSION_PROPS.add(TAG_CREATOR_DISPLAYNAME);
86         VERSION_PROPS.add(TAG_SUPPORTED_METHOD_SET);
87         VERSION_PROPS.add(TAG_SUPPORTED_LIVE_PROPERTY_SET);
88         VERSION_PROPS.add(TAG_SUPPORTED_REPORT_SET);
89         VERSION_PROPS.add(TAG_CHECKOUT_SET);
90         VERSION_PROPS.add(TAG_AUTO_VERSION);
91     }
92
93     /**
94      *
95      */

96     public VersionedPropertiesManager() {
97         super();
98     }
99
100     /**
101      * @param resource
102      * @param namespaceManager
103      */

104     public VersionedPropertiesManager(
105         ResourceImpl resource,
106         NamespaceManager namespaceManager) {
107         super(resource, namespaceManager);
108     }
109
110
111     protected Element getAutoVersion(Document document) {
112         Element autoversionEl =
113             document.createElementNS(
114                 NamespaceType.DAV.getURI(),
115                 TAG_AUTO_VERSION);
116         autoversionEl.setPrefix(NamespaceType.DAV.getPrefix());
117         Element lockedCheckoutEl =
118             document.createElementNS(
119                 NamespaceType.DAV.getURI(),
120                 TAG_LOCKED_CHECKOUT);
121         lockedCheckoutEl.setPrefix(NamespaceType.DAV.getPrefix());
122         autoversionEl.appendChild(lockedCheckoutEl);
123         return autoversionEl;
124     }
125
126     private Element getSupportedReportSet(Document document) {
127         Element supReportsEl =
128             document.createElementNS(
129                 NamespaceType.DAV.getURI(),
130                 TAG_SUPPORTED_REPORT_SET);
131     
132         supReportsEl.setPrefix(NamespaceType.DAV.getPrefix());
133         Element supRepEl =
134             document.createElementNS(
135                 NamespaceType.DAV.getURI(),
136                 TAG_SUPPORTED_REPORT);
137     
138         supRepEl.setPrefix(NamespaceType.DAV.getPrefix());
139         Element reportEl =
140             document.createElementNS(
141                 NamespaceType.DAV.getURI(),
142                 TAG_REPORT);
143         reportEl.setPrefix(NamespaceType.DAV.getPrefix());
144     
145         reportEl.appendChild(
146             document.createElementNS(
147                 NamespaceType.DAV.getURI(),
148                 TAG_VERSION_TREE));
149         supRepEl.appendChild(reportEl);
150         supReportsEl.appendChild(supRepEl);
151         return supReportsEl;
152     }
153
154     protected Element getSupportedLivePropertySet(Document document) {
155         Element supLivePropsEl =
156             document.createElementNS(
157                 NamespaceType.DAV.getURI(),
158                 TAG_SUPPORTED_LIVE_PROPERTY_SET);
159     
160         supLivePropsEl.setPrefix(NamespaceType.DAV.getPrefix());
161         return supLivePropsEl;
162     }
163
164     protected Element getVersionName(Document document)
165         throws DataAccessException {
166         Element versionNameEl =
167             document.createElementNS(
168                 NamespaceType.DAV.getURI(),
169                 TAG_VERSION_NAME);
170         versionNameEl.setPrefix(NamespaceType.DAV.getPrefix());
171     
172         versionNameEl.appendChild(
173             document.createTextNode(
174                 "Version " + String.valueOf(m_child.getVersionNumber())));
175         return versionNameEl;
176     }
177
178     protected Element getCheckedIn(Document document)
179         throws NameResolverException {
180         Element checkedInEl =
181             document.createElementNS(
182                 NamespaceType.DAV.getURI(),
183                 NamespaceType.DAV.getPrefix() + ":" + TAG_CHECKED_IN);
184     
185         Element hrefEl =
186             document.createElementNS(
187                 NamespaceType.DAV.getURI(),
188                 NamespaceType.DAV.getPrefix()
189                     + ":"
190                     + HarmonisePropertiesManager.TAG_HREF);
191         hrefEl.appendChild(
192             document.createTextNode(
193                 HarmoniseNameResolver.getVersionPath(m_child)));
194         checkedInEl.appendChild(hrefEl);
195         return checkedInEl;
196     }
197
198     protected Element getCheckedOut(Document document)
199         throws NameResolverException, DataAccessException {
200         Element checkedOutEl =
201             document.createElementNS(
202                 NamespaceType.DAV.getURI(),
203                 NamespaceType.DAV.getPrefix() + ":" + TAG_CHECKED_OUT);
204     
205         Element hrefEl =
206             document.createElementNS(
207                 NamespaceType.DAV.getURI(),
208                 NamespaceType.DAV.getPrefix()
209                     + ":"
210                     + HarmonisePropertiesManager.TAG_HREF);
211         hrefEl.appendChild(
212             document.createTextNode(
213                 HarmoniseNameResolver.getVersionPath(
214                     (AbstractChildObject) m_child.getLiveVersion())));
215         checkedOutEl.appendChild(hrefEl);
216         return checkedOutEl;
217     }
218
219     protected Element getVersionProperty(Document doc, String JavaDoc sPropName) throws WebDAVException, DOMException, DataAccessException, NameResolverException {
220         Element propEl = null;
221     
222         if(sPropName.equals(TAG_AUTO_VERSION) && isVersioned() == true) {
223             propEl = getAutoVersion(doc);
224         } else if(sPropName.equals(TAG_CHECKED_IN) && m_child.isPendingVersion() == false) {
225             propEl = getCheckedIn(doc);
226         } else if(sPropName.equals(TAG_CHECKED_OUT) && m_child.isPendingVersion() == true) {
227             propEl = getCheckedOut(doc);
228         } else if(sPropName.equals(TAG_CHECKOUT_SET)) {
229             propEl = getCheckedOutSet(doc);
230         } else if(sPropName.equals(TAG_PREDECESSOR_SET)) {
231             propEl = getPredecessors(doc);
232         } else if(sPropName.equals(TAG_SUCCESSOR_SET)) {
233             propEl = getSuccessors(doc);
234         } else if(sPropName.equals(TAG_SUPPORTED_LIVE_PROPERTY_SET)) {
235             propEl = getSupportedLivePropertySet(doc);
236         } else if(sPropName.equals(TAG_SUPPORTED_METHOD_SET)) {
237             propEl = getSupportedMethods(doc);
238         } else if(sPropName.equals(TAG_SUPPORTED_REPORT_SET)) {
239             propEl = getSupportedReportSet(doc);
240         } else if(sPropName.equals(TAG_VERSION_NAME)) {
241             propEl = getVersionName(doc);
242         }
243     
244         return propEl;
245     }
246
247     public boolean isVersionProperty(String JavaDoc sPropName) {
248         boolean bIsVerProp = false;
249
250         int nIndex = sPropName.indexOf(":");
251         if (nIndex >= 0) {
252             sPropName = sPropName.substring(nIndex + 1);
253         }
254
255         bIsVerProp = VERSION_PROPS.contains(sPropName);
256
257         return bIsVerProp;
258     }
259
260     /**
261      * Removes all live version properties from <code>propertiesDocument</code>.
262      * They don't need to be saved.
263      *
264      * @param propertiesDocument
265      */

266     public void removeVersionProperties(
267         org.w3c.dom.Document JavaDoc propertiesDocument) {
268         Element properties = propertiesDocument.getDocumentElement();
269
270         Iterator iter = VERSION_PROPS.iterator();
271
272         while (iter.hasNext()) {
273             String JavaDoc sPropName = (String JavaDoc) iter.next();
274
275             Element p =
276                 (Element) ((Element) properties)
277                     .getElementsByTagNameNS(
278                         NamespaceType.DAV.getURI(),
279                         sPropName)
280                     .item(0);
281
282             if (p != null) {
283                 properties.removeChild(p);
284             }
285
286         }
287
288     }
289
290     /**
291      * Adds a populated 'successors-set' element to <code>properties</code>.
292      *
293      * @param document
294      * @param properties
295      * @throws WebDAVException
296      */

297     protected Element getSuccessors(Document document)
298         throws WebDAVException {
299             Element successorSetEl =
300                             document.createElementNS(
301                                 NamespaceType.DAV.getURI(),
302                                 NamespaceType.DAV.getPrefix() + ":" + TAG_SUCCESSOR_SET);
303     
304         try {
305         
306
307             Vector successors = new Vector();
308             AbstractChildObject liveChild = m_child;
309
310             if (m_child.isLiveVersion() == false) {
311                 liveChild = (AbstractChildObject) m_child.getLiveVersion();
312             }
313
314             if (m_child.isHistorical() == true) {
315
316                 List history = m_child.getAllVersions();
317
318                 Iterator histIter = history.iterator();
319
320                 //loop through the whole set in case they're not ordered properly
321
while (histIter.hasNext()) {
322                     AbstractChildObject tmpChild =
323                         (AbstractChildObject) histIter.next();
324
325                     if (tmpChild.getVersionNumber()
326                         > m_child.getVersionNumber()) {
327                         successors.add(tmpChild);
328                     }
329                 }
330             }
331
332             Iterator successorIter = successors.iterator();
333         
334             while (successorIter.hasNext()) {
335                 AbstractChildObject tmpChild =
336                     (AbstractChildObject) successorIter.next();
337                 Element hrefEl =
338                     document.createElementNS(
339                         NamespaceType.DAV.getURI(),
340                         NamespaceType.DAV.getPrefix()
341                             + ":"
342                             + HarmonisePropertiesManager.TAG_HREF);
343                 hrefEl.appendChild(
344                     document.createTextNode(
345                         HarmoniseNameResolver.getVersionPath(tmpChild)));
346                 successorSetEl.appendChild(hrefEl);
347             }
348
349         } catch (DataAccessException e) {
350             throw new WebDAVException(
351                 WebDAVStatus.SC_INTERNAL_SERVER_ERROR,
352                 e.getLocalizedMessage());
353         } catch (NameResolverException e) {
354             throw new WebDAVException(
355                 WebDAVStatus.SC_INTERNAL_SERVER_ERROR,
356                 e.getLocalizedMessage());
357         }
358         return successorSetEl;
359     }
360
361     /**
362      * Adds a populated 'predecessors-set' element to <code>properties</code>.
363      *
364      * @param document
365      * @param properties
366      * @throws WebDAVException
367      * @throws DOMException
368      * @throws NameResolverException
369      * @throws DataAccessException
370      */

371     private Element getPredecessors(Document document)
372         throws
373             WebDAVException,
374             DOMException,
375             NameResolverException,
376             DataAccessException {
377         Element predecessorSetEl =
378                     document.createElementNS(
379                         NamespaceType.DAV.getURI(),
380                         NamespaceType.DAV.getPrefix() + ":" + TAG_PREDECESSOR_SET);
381         ArrayList preds = new ArrayList();
382
383         if (m_child.isHistorical() == false
384             && m_child.isLiveVersion() == false) {
385             preds.add(m_child.getLiveVersion());
386         }
387
388         List hists = m_child.getHistoricalVersions();
389
390         Iterator histIter = hists.iterator();
391
392         while (histIter.hasNext()) {
393             AbstractChildObject tmpChild =
394                 (AbstractChildObject) histIter.next();
395
396             if (tmpChild.getVersionNumber() < m_child.getVersionNumber()) {
397                 preds.add(tmpChild);
398             }
399         }
400
401         Iterator predIter = preds.iterator();
402     
403         while (predIter.hasNext()) {
404             AbstractChildObject tmpChild =
405                 (AbstractChildObject) predIter.next();
406             Element hrefEl =
407                 document.createElementNS(
408                     NamespaceType.DAV.getURI(),
409                     NamespaceType.DAV.getPrefix()
410                         + ":"
411                         + HarmonisePropertiesManager.TAG_HREF);
412             hrefEl.appendChild(
413                 document.createTextNode(
414                     HarmoniseNameResolver.getVersionPath(tmpChild)));
415             predecessorSetEl.appendChild(hrefEl);
416         }
417     
418         return predecessorSetEl;
419     }
420
421     /**
422      * Adds a populated 'checkedout-set' element to <code>properties</code>.
423      *
424      * @param document
425      * @param properties
426      * @throws DataAccessException
427      * @throws DOMException
428      * @throws NameResolverException
429      */

430     private Element getCheckedOutSet(Document document)
431         throws DataAccessException, DOMException, NameResolverException {
432         List pends = m_child.getPendingVersions();
433
434         Iterator iter = pends.iterator();
435         Element checkoutSetEl =
436             document.createElementNS(
437                 NamespaceType.DAV.getURI(),
438                 TAG_CHECKOUT_SET);
439         checkoutSetEl.setPrefix(NamespaceType.DAV.getPrefix());
440         while (iter.hasNext()) {
441             AbstractChildObject tmpChild = (AbstractChildObject) iter.next();
442             Element hrefEl =
443                 document.createElementNS(
444                     NamespaceType.DAV.getURI(),
445                     NamespaceType.DAV.getPrefix()
446                         + ":"
447                         + HarmonisePropertiesManager.TAG_HREF);
448             hrefEl.appendChild(
449                 document.createTextNode(
450                     HarmoniseNameResolver.getVersionPath(tmpChild)));
451             checkoutSetEl.appendChild(hrefEl);
452         }
453     
454         return checkoutSetEl;
455     }
456     
457     /**
458      * Update the version properties that are unique to the
459      * repository implementation.
460      *
461      * @param document
462      * @throws WebDAVException
463      */

464     public void updateVersionProperties(Document document)
465         throws WebDAVException {
466
467         if (m_child == null) {
468             throw new WebDAVException(
469                 WebDAVStatus.SC_NOT_FOUND,
470                 "Could not find resource at this location");
471         }
472
473         try {
474             Element properties = document.getDocumentElement();
475
476             properties.appendChild(getSuccessors(document));
477
478             properties.appendChild(getPredecessors(document));
479
480             if (m_child.isPendingVersion() == true) {
481                 Element checkedOutEl = getCheckedOut(document);
482                 properties.appendChild(checkedOutEl);
483
484             } else if (m_child.isLiveVersion() == true) {
485
486                 Element checkedInEl = getCheckedIn(document);
487                 properties.appendChild(checkedInEl);
488
489                 properties.appendChild(getCheckedOutSet(document));
490
491             } else if (
492                 m_child.isHistorical() == true
493                     && m_child.getLiveVersion() == null) {
494                 AbstractParentObject parent = m_child.getRealParent();
495                 if(parent != null) {
496                     List archived = parent.getArchivedChildren();
497                     
498                     if (archived.contains(m_child) == true) {
499                         Element checkedInEl = getCheckedIn(document);
500                         properties.appendChild(checkedInEl);
501                     }
502                 }
503                 
504             }
505
506             // version name
507
Element versionNameEl = getVersionName(document);
508             properties.appendChild(versionNameEl);
509
510             //supported methods
511
Element supMethodsEl = getSupportedMethods(document);
512
513             properties.appendChild(supMethodsEl);
514
515             //supported live props
516
Element supLivePropsEl = getSupportedLivePropertySet(document);
517
518             properties.appendChild(supLivePropsEl);
519
520             //supported report set
521
Element supReportsEl = getSupportedReportSet(document);
522             properties.appendChild(supReportsEl);
523
524             if (isVersioned() == true) {
525                 Element autoversionEl = getAutoVersion(document);
526
527                 properties.appendChild(autoversionEl);
528             }
529
530         } catch (DataAccessException e) {
531             m_logger.log(Level.WARNING, e.getLocalizedMessage(), e);
532             throw new WebDAVException(
533                 WebDAVStatus.SC_INTERNAL_SERVER_ERROR,
534                 e.getLocalizedMessage());
535         } catch (NameResolverException e) {
536             throw new WebDAVException(
537                 WebDAVStatus.SC_INTERNAL_SERVER_ERROR,
538                 e.getLocalizedMessage());
539         }
540
541     }
542     
543     /**
544      * Returns a 'supported-method-set' element, correct for this resource.
545      *
546      * @param document
547      * @return
548      */

549     private Element getSupportedMethods(Document document) {
550         Element supMethodsEl =
551             document.createElementNS(
552                 NamespaceType.DAV.getURI(),
553                 TAG_SUPPORTED_METHOD_SET);
554
555         supMethodsEl.setPrefix(NamespaceType.DAV.getPrefix());
556
557         //TODO implement - client doesn't support this yet anyway
558

559         return supMethodsEl;
560     }
561     
562     /**
563      * Returns <code>true</code> if this resource is under version control in the
564      * DAV sense, i.e. it has a live Harmonise version.
565      *
566      * @return
567      */

568     public boolean isVersioned() throws WebDAVException {
569         boolean bIsVersioned = false;
570
571         if (m_child != null) {
572             try {
573                 bIsVersioned =
574                     (m_child.isHistorical() == true
575                         || m_child.getLiveVersion() != null);
576             } catch (DataAccessException e) {
577                 throw new WebDAVException(
578                     WebDAVStatus.SC_INTERNAL_SERVER_ERROR,
579                     e.getLocalizedMessage());
580             }
581         }
582
583         return bIsVersioned;
584     }
585     
586     /**
587      * @param names
588      * @return
589      */

590     protected boolean isAllNonPropertyInstanceProperties(PropertyName[] names) {
591         boolean bIsAllLive = true;
592         
593         int i = 0;
594
595
596         while(bIsAllLive == true && i < names.length) {
597             String JavaDoc sLocalPropName = names[i].getLocal();
598
599             bIsAllLive = false;
600
601             bIsAllLive = isLive(sLocalPropName);
602
603             if(bIsAllLive == false) {
604                 bIsAllLive = isVersionProperty(sLocalPropName);
605             }
606
607             if(bIsAllLive == false) {
608                 bIsAllLive = sLocalPropName.equals(TAG_TITLE) ||
609                 sLocalPropName.equals(DAVRange.TAG_RANGE) ||
610                 sLocalPropName.equals(DAVDomain.TAG_DOMAIN) ||
611                 sLocalPropName.equals(TAG_LOCKDISCOVERY);
612             }
613
614             i++;
615         }
616         
617         return bIsAllLive;
618     }
619     
620     /* (non-Javadoc)
621      * @see com.ibm.webdav.impl.PropertiesManager#getProperties(com.ibm.webdav.PropertyName[])
622      */

623     public MultiStatus getProperties(PropertyName[] names)
624         throws WebDAVException {
625         //assuming a partial PROPFIND will only be looking
626
//for non PropertyInstance properties and thus only optimising for
627
//that case
628

629         MultiStatus result = null;
630         if(isAllNonPropertyInstanceProperties(names) == true) {
631             try {
632                 result = new MultiStatus();
633                 
634                 DocumentBuilderFactory factory = DocumentBuilderFactory
635                                                     .newInstance();
636                 factory.setNamespaceAware(true);
637                 
638                 org.w3c.dom.Document JavaDoc propsDoc = factory.newDocumentBuilder()
639                                                     .newDocument();
640                                     
641                 Element properties =
642                     (Element) propsDoc.createElement("properties");
643                 properties.setAttribute("xmlns:D", NamespaceType.DAV.getURI());
644                 propsDoc.appendChild(properties);
645                 
646                 //fill the document with the live props
647
this.updateLiveProperties(propsDoc);
648                 
649                 PropertyResponse newResponse = new PropertyResponse(resource.getURL().getFile());
650                 
651                 //loop through names and find property values
652
for (int i = 0; i < names.length; i++) {
653                     PropertyName tempName = names[i];
654                     
655                     String JavaDoc propName = tempName.getLocal();
656                     
657                     if(propName.equals(TAG_TITLE) && m_child != null) {
658                         Element elTm = propsDoc.createElementNS(names[i].getNamespace(),"X:" + names[i].getLocal());
659     
660                         elTm.setAttribute("xmlns:X", names[i].getNamespace());
661                         
662                         elTm.appendChild(propsDoc.createTextNode(m_child.getDisplayName()));
663                         
664                         newResponse.addProperty(names[i], elTm,
665                                                 WebDAVStatus.SC_OK);
666                     } else if(propName.equals(TAG_HARMONISE_ID) && m_child != null) {
667                         Element elTm = propsDoc.createElementNS(names[i].getNamespace(),"X:" + names[i].getLocal());
668         
669                         elTm.setAttribute("xmlns:X", names[i].getNamespace());
670                             
671                         elTm.appendChild(propsDoc.createTextNode(String.valueOf(m_child.getId())));
672                             
673                         newResponse.addProperty(names[i], elTm,
674                                                 WebDAVStatus.SC_OK);
675                     } else if(propName.equals(TAG_DESCRIPTION) && m_child != null) {
676                         Element elTm = propsDoc.createElementNS(names[i].getNamespace(),"X:" + names[i].getLocal());
677         
678                         elTm.setAttribute("xmlns:X", names[i].getNamespace());
679                             
680                         elTm.appendChild(propsDoc.createTextNode(m_child.getSummary()));
681                             
682                         newResponse.addProperty(names[i], elTm,
683                                                 WebDAVStatus.SC_OK);
684                     } else if(propName.equals(TAG_LOCKDISCOVERY) && m_child != null && m_child.isLocked() == true) {
685                         Element elTm = propsDoc.createElementNS(names[i].getNamespace(),"X:" + names[i].getLocal());
686     
687                         elTm.setAttribute("xmlns:X", names[i].getNamespace());
688
689                         addLockData(elTm);
690                         
691                         newResponse.addProperty(names[i], elTm,
692                                                 WebDAVStatus.SC_OK);
693                     } else if(propName.equals(DAVRange.TAG_RANGE) && m_child != null && m_child instanceof Property) {
694                         
695                             
696                         newResponse.addProperty(names[i], getRangeElement(propsDoc, (Property)m_child),
697                                                 WebDAVStatus.SC_OK);
698                     } else if(propName.equals(DAVDomain.TAG_DOMAIN) && m_child != null && m_child instanceof Property) {
699                         DAVDomain davDomain =new DAVDomain(m_dsi, ((Property)m_child).getDomains());
700
701                         Element domainEl = davDomain.asXML(propsDoc);
702                             
703                         newResponse.addProperty(names[i], getRangeElement(propsDoc, (Property)m_child),
704                                                 WebDAVStatus.SC_OK);
705                     } else if (isVersioned() && isVersionProperty(propName)) {
706                         Element propEl = getVersionProperty(propsDoc, propName);
707                         
708                         if(propEl == null) {
709                             Element elTm = propsDoc.createElementNS(names[i].getNamespace(),"X:" + names[i].getLocal());
710     
711                             elTm.setAttribute("xmlns:X", names[i].getNamespace());
712
713                             newResponse.addProperty(names[i], elTm,
714                                                     WebDAVStatus.SC_NOT_FOUND);
715                         } else {
716                             newResponse.addProperty(names[i], propEl, WebDAVStatus.SC_OK);
717                         }
718                         
719                     } else {
720                         NodeList nodes = properties.getElementsByTagNameNS(
721                             NamespaceType.DAV.getURI(),
722                             propName);
723                         
724                         if(nodes.getLength() > 0) {
725                             Element propEl = (Element)nodes.item(0);
726                     
727                             newResponse.addProperty(tempName, propEl, WebDAVStatus.SC_OK);
728                         } else {
729                             Element elTm = propsDoc.createElementNS(names[i].getNamespace(),"X:" + names[i].getLocal());
730     
731                             elTm.setAttribute("xmlns:X", names[i].getNamespace());
732     
733                             newResponse.addProperty(names[i], elTm,
734                                                     WebDAVStatus.SC_NOT_FOUND);
735                         }
736                     }
737                     
738                 }
739                 
740                 result.addResponse(newResponse);
741             } catch (ServerException e) {
742                 m_logger.log(Level.WARNING, e.getLocalizedMessage(), e);
743             throw new WebDAVException(
744                 WebDAVStatus.SC_INTERNAL_SERVER_ERROR,
745                 e.getLocalizedMessage());
746             } catch (DOMException e) {
747                 m_logger.log(Level.WARNING, e.getLocalizedMessage(), e);
748             throw new WebDAVException(
749                 WebDAVStatus.SC_INTERNAL_SERVER_ERROR,
750                 e.getLocalizedMessage());
751             } catch (ParserConfigurationException e) {
752                 m_logger.log(Level.WARNING, e.getLocalizedMessage(), e);
753             throw new WebDAVException(
754                 WebDAVStatus.SC_INTERNAL_SERVER_ERROR,
755                 e.getLocalizedMessage());
756             } catch (FactoryConfigurationError e) {
757                 m_logger.log(Level.WARNING, e.getLocalizedMessage(), e);
758             throw new WebDAVException(
759                 WebDAVStatus.SC_INTERNAL_SERVER_ERROR,
760                 e.getLocalizedMessage());
761             } catch (DataAccessException e) {
762                 m_logger.log(Level.WARNING, e.getLocalizedMessage(), e);
763             throw new WebDAVException(
764                 WebDAVStatus.SC_INTERNAL_SERVER_ERROR,
765                 e.getLocalizedMessage());
766             } catch (WebDAVException e) {
767                 m_logger.log(Level.WARNING, e.getLocalizedMessage(), e);
768             throw new WebDAVException(
769                 WebDAVStatus.SC_INTERNAL_SERVER_ERROR,
770                 e.getLocalizedMessage());
771             } catch (NameResolverException e) {
772                 m_logger.log(Level.WARNING, e.getLocalizedMessage(), e);
773             throw new WebDAVException(
774                 WebDAVStatus.SC_INTERNAL_SERVER_ERROR,
775                 e.getLocalizedMessage());
776             }
777         } else {
778             result = super.getProperties(names);
779         }
780         
781         return result;
782     }
783
784 }
785
Popular Tags