View Javadoc

1   /*
2    * Copyright (c) 2006-2007 Creative Sphere Limited.
3    * All rights reserved. This program and the accompanying materials
4    * are made available under the terms of the Eclipse Public License v1.0
5    * which accompanies this distribution, and is available at
6    * http://www.eclipse.org/legal/epl-v10.html
7    *
8    * Contributors:
9    *
10   *   Creative Sphere - initial API and implementation
11   *
12   */
13  package org.abstracthorizon.danube.webdav.spring.properties;
14  
15  import org.abstracthorizon.danube.http.Status;
16  import org.abstracthorizon.danube.webdav.ResourceAdapter;
17  import org.abstracthorizon.danube.webdav.xml.XMLParserHandler;
18  import org.abstracthorizon.danube.webdav.xml.dav.response.properties.ResponseProperty;
19  
20  import java.io.File;
21  import java.io.IOException;
22  
23  import org.springframework.core.io.Resource;
24  
25  /**
26   * This property can set file's last modified timestamp
27   *
28   * @author Daniel Sendula
29   */
30  public class GetLastModified extends org.abstracthorizon.danube.webdav.xml.dav.request.properties.GetLastModified {
31  
32      /**
33       * Constructor
34       * @param parent parser handler
35       */
36      public GetLastModified(XMLParserHandler parent) {
37          super(parent);
38      }
39  
40      /**
41       * Sets file's timestamp
42       * @param adapter adapter
43       * @param resource a file
44       * @return response property
45       */
46      public ResponseProperty processSetProperty(ResourceAdapter adapter, Object resource) {
47          long newTimestamp = getLastModified();
48          Resource res = (Resource)resource;
49          try {
50              File file = res.getFile();
51              long oldTimestamp = file.lastModified();
52              if (newTimestamp != oldTimestamp) {
53                  file.setLastModified(newTimestamp);
54                  File f = new File(file.getParentFile(), file.getName());
55                  if (newTimestamp != f.lastModified()) {
56                      return processResponse(adapter, file);
57                  }
58              }
59          } catch (IOException ignore) {
60          }
61          return constructResponse(Status.FORBIDDEN);
62      }
63  }
64