001: /*
002: * The contents of this file are subject to the
003: * Mozilla Public License Version 1.1 (the "License");
004: * you may not use this file except in compliance with the License.
005: * You may obtain a copy of the License at http://www.mozilla.org/MPL/
006: *
007: * Software distributed under the License is distributed on an "AS IS"
008: * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
009: * See the License for the specific language governing rights and
010: * limitations under the License.
011: *
012: * The Initial Developer of the Original Code is Simulacra Media Ltd.
013: * Portions created by Simulacra Media Ltd are Copyright (C) Simulacra Media Ltd, 2004.
014: *
015: * All Rights Reserved.
016: *
017: * Contributor(s):
018: */
019:
020: package org.openharmonise.dav.server.property.ranges;
021:
022: import java.text.*;
023: import java.text.SimpleDateFormat;
024:
025: import org.openharmonise.commons.dsi.*;
026: import org.openharmonise.commons.xml.*;
027: import org.openharmonise.commons.xml.namespace.*;
028: import org.openharmonise.rm.resources.metadata.properties.ranges.*;
029: import org.w3c.dom.Document;
030: import org.w3c.dom.Element;
031:
032: import com.ibm.webdav.*;
033: import com.ibm.webdav.WebDAVException;
034:
035: /**
036: * A subclass of <code>DAVRange</code> which handles
037: * date property ranges.
038: *
039: * @author Michael Bell
040: * @version $Revision: 1.2 $
041: * @since November 20, 2003
042: */
043: public class DAVDateRange extends DAVRange {
044:
045: static final public String DATETIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss G";
046: static final public String DATE_FORMAT = "yyyy-MM-dd G";
047: static final private SimpleDateFormat m_datetime_formatter = new SimpleDateFormat(
048: DATETIME_FORMAT);
049: static final private SimpleDateFormat m_date_formatter = new SimpleDateFormat(
050: DATE_FORMAT);
051:
052: /**
053: * @param dsi
054: */
055: public DAVDateRange(AbstractDataStoreInterface dsi) {
056: super (dsi, new DateRange());
057:
058: }
059:
060: /**
061: * @param dsi
062: * @param range
063: */
064: public DAVDateRange(AbstractDataStoreInterface dsi, Range range) {
065: super (dsi, range);
066:
067: }
068:
069: /**
070: * @param dsi
071: * @param davPropEl
072: */
073: public DAVDateRange(AbstractDataStoreInterface dsi,
074: Element davPropEl) throws WebDAVException {
075: super (dsi, new DateRange(), davPropEl);
076:
077: }
078:
079: /**
080: * Adds range details for to the given range element for date ranges
081: *
082: * @param rangeEl
083: * @param range
084: * @param doc
085: * @throws WebDAVException
086: */
087: protected void addRangeDetails(Element rangeEl, Range range,
088: Document doc) {
089:
090: Element restrEl = doc.createElementNS(NamespaceType.XML_SCHEMA
091: .getURI(), TAG_RESTRICTION);
092: restrEl.setPrefix(NamespaceType.XML_SCHEMA.getPrefix());
093:
094: DateRange dateRange = (DateRange) range;
095:
096: String sDateTag = TYPE_DATETIME;
097:
098: if (dateRange.includeTime() == false) {
099: sDateTag = TYPE_DATE;
100: }
101:
102: restrEl.setAttributeNS(NamespaceType.XML_SCHEMA.getURI(),
103: ATTRIB_PREFIXED_BASE, sDateTag);
104:
105: restrEl.setAttribute("xmlns:"
106: + NamespaceType.XML_SCHEMA.getPrefix(),
107: NamespaceType.XML_SCHEMA.getURI());
108:
109: if (dateRange.hasMin() == true) {
110: String sTag = TAG_MININCLUSIVE;
111:
112: Element minEl = doc.createElementNS(
113: NamespaceType.XML_SCHEMA.getURI(), sTag);
114: minEl.setPrefix(NamespaceType.XML_SCHEMA.getPrefix());
115: minEl.appendChild(doc.createTextNode(m_datetime_formatter
116: .format(dateRange.getMin())));
117:
118: restrEl.appendChild(minEl);
119: }
120:
121: if (dateRange.hasMax() == true) {
122: String sTag = TAG_MAXINCLUSIVE;
123:
124: Element maxEl = doc.createElementNS(
125: NamespaceType.XML_SCHEMA.getURI(), sTag);
126: maxEl.setPrefix(NamespaceType.XML_SCHEMA.getPrefix());
127: maxEl.appendChild(doc.createTextNode(m_datetime_formatter
128: .format(dateRange.getMax())));
129: restrEl.appendChild(maxEl);
130: }
131:
132: rangeEl.appendChild(restrEl);
133: }
134:
135: /* (non-Javadoc)
136: * @see org.openharmonise.dav.server.property.ranges.DAVRange#populate(org.w3c.dom.Element)
137: */
138: public void populate(Element propEl) throws WebDAVException {
139: DateRange range = (DateRange) m_range;
140:
141: Element restrEl = XMLUtils.getFirstNamedChild(propEl,
142: TAG_RESTRICTION);
143:
144: String base = restrEl.getAttributeNS(NamespaceType.XML_SCHEMA
145: .getURI(), "base");
146:
147: SimpleDateFormat formatter = m_datetime_formatter;
148:
149: if (base.equals(restrEl.getPrefix() + ":date")) {
150: formatter = m_date_formatter;
151: range.includeTime(false);
152: }
153:
154: try {
155: Element maxEl = XMLUtils.getFirstNamedChild(restrEl,
156: TAG_MAXINCLUSIVE);
157:
158: if (maxEl != null) {
159: String sVal = maxEl.getChildNodes().item(0)
160: .getNodeValue();
161:
162: range.setMax(formatter.parse(sVal));
163:
164: }
165:
166: Element minEl = XMLUtils.getFirstNamedChild(restrEl,
167: TAG_MININCLUSIVE);
168:
169: if (minEl != null) {
170: String sVal = minEl.getChildNodes().item(0)
171: .getNodeValue();
172:
173: range.setMin(formatter.parse(sVal));
174:
175: }
176: } catch (ParseException e) {
177: throw new WebDAVException(WebDAVStatus.SC_BAD_REQUEST,
178: "Wrong date format");
179: }
180: }
181:
182: }
|