001: /*
002: * Copyright (c) 2000, Jacob Smullyan.
003: *
004: * This is part of SkunkDAV, a WebDAV client. See http://skunkdav.sourceforge.net/
005: * for the latest version.
006: *
007: * SkunkDAV is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License as published
009: * by the Free Software Foundation; either version 2, or (at your option)
010: * any later version.
011: *
012: * SkunkDAV is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * General Public License for more details.
016: *
017: * You should have received a copy of the GNU General Public License
018: * along with SkunkDAV; see the file COPYING. If not, write to the Free
019: * Software Foundation, 59 Temple Place - Suite 330, Boston, MA
020: * 02111-1307, USA.
021: */
022:
023: package org.skunk.dav.client.method;
024:
025: import java.io.IOException;
026: import java.util.Map;
027: import org.skunk.dav.client.AbstractWriteDAVMethod;
028: import org.skunk.dav.client.DAVConstants;
029: import org.skunk.dav.client.DAVFile;
030: import org.skunk.dav.client.DAVMethodName;
031: import org.skunk.dav.client.Depth;
032: import org.skunk.dav.client.IfHeader;
033: import org.skunk.minixml.MalformedXMLException;
034: import org.skunk.minixml.XMLDocument;
035: import org.skunk.minixml.XMLElement;
036: import org.skunk.minixml.XMLParser;
037: import org.skunk.minixml.XMLViewer;
038: import org.skunk.trace.Debug;
039:
040: public class CopyMethod extends AbstractWriteDAVMethod {
041: private boolean overwrite;
042: private String destination;
043: private Depth depth;
044: private String sourceLockToken;
045: private String destLockToken;
046:
047: public CopyMethod(String source, String destination,
048: boolean overwrite, Depth depth) {
049: super (source);
050: this .destination = destination;
051: this .overwrite = overwrite;
052: if (depth.equals(Depth.ONE))
053: throw new IllegalArgumentException(
054: "Depth must be 0 or Infinity");
055: this .depth = depth;
056: }
057:
058: public CopyMethod(String source, String destination) {
059: this (source, destination, true, Depth.INFINITY);
060: }
061:
062: public DAVMethodName getRequestMethodName() {
063: return DAVMethodName.COPY;
064: }
065:
066: /**
067: * convenience function for the case when a locktoken is
068: * associated with the source resource. Incompatible with
069: * accessing the IfHeader directly; may be deprecated in a future
070: * version.
071: */
072: public void setSourceLockToken(String sourceLockToken) {
073: this .sourceLockToken = sourceLockToken;
074: }
075:
076: /**
077: * convenience function for the case when a locktoken is
078: * associated with the destination resource. Incompatible with
079: * accessing the IfHeader directly; may be deprecated in a future
080: * version.
081: */
082: public void setDestLockToken(String destLockToken) {
083: this .destLockToken = destLockToken;
084: }
085:
086: public void processRequestHeaders() {
087: Map headers = getRequestHeaders();
088: headers.put(DAVConstants.DESTINATION_HEADER, destination);
089: if (!overwrite)
090: headers.put(DAVConstants.OVERWRITE_HEADER, "F");
091: if (depth.equals(Depth.ZERO))
092: headers.put(DAVConstants.DEPTH_HEADER, depth);
093:
094: boolean sourceNull = sourceLockToken == null;
095: boolean destNull = destLockToken == null;
096: if (!(sourceNull && destNull)) {
097: IfHeader iffy = new IfHeader(true);
098: if (!sourceNull) {
099: iffy.addStateToken(getRequestURL(), sourceLockToken);
100: }
101: if (!destNull) {
102: iffy.addStateToken(destination, destLockToken);
103: }
104: this .setIfHeader(iffy);
105: }
106: super .processRequestHeaders();
107: }
108: }
109:
110: // public void processRequestBody()
111: // {
112: // //PROPERTYBEHAVIOR stuff should go here, if specified.
113: // //note that apache mod_dav does not honor this; consequently, low priority task
114: // }
115:
116: /* $Log: CopyMethod.java,v $
117: /* Revision 1.6 2001/07/17 04:41:32 smulloni
118: /* integrated IfHeader more closely into method package; added lock test.
119: /*
120: /* Revision 1.5 2001/07/15 18:16:37 smulloni
121: /* fixed some copyright notices.
122: /*
123: /* Revision 1.4 2000/12/03 23:53:26 smulloni
124: /* added license and copyright preamble to java files.
125: /*
126: /* Revision 1.3 2000/11/09 23:35:06 smullyan
127: /* log added to every Java file, with the help of python. Lock stealing
128: /* implemented, and treatment of locks made more robust.
129: /* */
|