1 19 20 package org.openharmonise.dav.server.property.ranges; 21 22 import java.text.*; 23 import java.text.SimpleDateFormat ; 24 25 import org.openharmonise.commons.dsi.*; 26 import org.openharmonise.commons.xml.*; 27 import org.openharmonise.commons.xml.namespace.*; 28 import org.openharmonise.rm.resources.metadata.properties.ranges.*; 29 import org.w3c.dom.Document ; 30 import org.w3c.dom.Element ; 31 32 import com.ibm.webdav.*; 33 import com.ibm.webdav.WebDAVException; 34 35 43 public class DAVDateRange extends DAVRange { 44 45 static final public String DATETIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss G"; 46 static final public String DATE_FORMAT = "yyyy-MM-dd G"; 47 static final private SimpleDateFormat m_datetime_formatter = new SimpleDateFormat (DATETIME_FORMAT); 48 static final private SimpleDateFormat m_date_formatter = new SimpleDateFormat (DATE_FORMAT); 49 50 53 public DAVDateRange(AbstractDataStoreInterface dsi) { 54 super(dsi, new DateRange()); 55 56 } 57 58 62 public DAVDateRange(AbstractDataStoreInterface dsi, Range range) { 63 super(dsi, range); 64 65 } 66 67 71 public DAVDateRange(AbstractDataStoreInterface dsi, Element davPropEl) 72 throws WebDAVException { 73 super(dsi, new DateRange(), davPropEl); 74 75 } 76 77 85 protected void addRangeDetails( 86 Element rangeEl, 87 Range range, 88 Document doc) { 89 90 Element restrEl = 91 doc.createElementNS( 92 NamespaceType.XML_SCHEMA.getURI(), 93 TAG_RESTRICTION); 94 restrEl.setPrefix(NamespaceType.XML_SCHEMA.getPrefix()); 95 96 DateRange dateRange = (DateRange) range; 97 98 String sDateTag = TYPE_DATETIME; 99 100 if(dateRange.includeTime() == false) { 101 sDateTag = TYPE_DATE; 102 } 103 104 restrEl.setAttributeNS( 105 NamespaceType.XML_SCHEMA.getURI(), 106 ATTRIB_PREFIXED_BASE, 107 sDateTag); 108 109 restrEl.setAttribute( 110 "xmlns:" + NamespaceType.XML_SCHEMA.getPrefix(), 111 NamespaceType.XML_SCHEMA.getURI()); 112 113 114 115 if (dateRange.hasMin() == true) { 116 String sTag = TAG_MININCLUSIVE; 117 118 Element minEl = 119 doc.createElementNS( 120 NamespaceType.XML_SCHEMA.getURI(), 121 sTag); 122 minEl.setPrefix(NamespaceType.XML_SCHEMA.getPrefix()); 123 minEl.appendChild( 124 doc.createTextNode(m_datetime_formatter.format(dateRange.getMin()))); 125 126 restrEl.appendChild(minEl); 127 } 128 129 if (dateRange.hasMax() == true) { 130 String sTag = TAG_MAXINCLUSIVE; 131 132 Element maxEl = 133 doc.createElementNS( 134 NamespaceType.XML_SCHEMA.getURI(), 135 sTag); 136 maxEl.setPrefix(NamespaceType.XML_SCHEMA.getPrefix()); 137 maxEl.appendChild( 138 doc.createTextNode(m_datetime_formatter.format(dateRange.getMax()))); 139 restrEl.appendChild(maxEl); 140 } 141 142 rangeEl.appendChild(restrEl); 143 } 144 145 148 public void populate(Element propEl) throws WebDAVException { 149 DateRange range = (DateRange) m_range; 150 151 Element restrEl = XMLUtils.getFirstNamedChild(propEl, TAG_RESTRICTION); 152 153 String base = restrEl.getAttributeNS(NamespaceType.XML_SCHEMA.getURI(), "base"); 154 155 SimpleDateFormat formatter = m_datetime_formatter; 156 157 if(base.equals(restrEl.getPrefix() + ":date")) { 158 formatter = m_date_formatter; 159 range.includeTime(false); 160 } 161 162 try { 163 Element maxEl = XMLUtils.getFirstNamedChild(restrEl, TAG_MAXINCLUSIVE); 164 165 166 167 if (maxEl != null) { 168 String sVal = maxEl.getChildNodes().item(0).getNodeValue(); 169 170 range.setMax(formatter.parse(sVal)); 171 172 } 173 174 Element minEl = 175 XMLUtils.getFirstNamedChild(restrEl, TAG_MININCLUSIVE); 176 177 178 if (minEl != null) { 179 String sVal = minEl.getChildNodes().item(0).getNodeValue(); 180 181 range.setMin(formatter.parse(sVal)); 182 183 } 184 } catch (ParseException e) { 185 throw new WebDAVException( 186 WebDAVStatus.SC_BAD_REQUEST, 187 "Wrong date format"); 188 } 189 } 190 191 } 192 | Popular Tags |