]> git.argeo.org Git - gpl/argeo-slc.git/blob - cms/org.argeo.slc.spring/src/org/argeo/slc/core/deploy/VersionedDirSync.java
Clarify SLC project structure.
[gpl/argeo-slc.git] / cms / org.argeo.slc.spring / src / org / argeo / slc / core / deploy / VersionedDirSync.java
1 package org.argeo.slc.core.deploy;
2
3 import java.io.File;
4 import java.io.IOException;
5
6 import org.apache.commons.io.FileUtils;
7 import org.apache.commons.logging.Log;
8 import org.apache.commons.logging.LogFactory;
9 import org.argeo.slc.SlcException;
10 import org.argeo.slc.deploy.VersioningDriver;
11
12 /**
13 * Synchronizes an URL to a local directory, taking into account versioning
14 * information if possible.
15 */
16 public class VersionedDirSync implements Runnable {
17 private final static Log log = LogFactory.getLog(VersionedDirSync.class);
18
19 private VersioningDriver versioningDriver;
20 private File dir;
21 private String url;
22 private Boolean clean = false;
23
24 private Boolean changed = null;
25
26 public void run() {
27 changed = null;
28 if (clean) {
29 try {
30 log.info("Clean " + dir);
31 FileUtils.deleteDirectory(dir);
32 } catch (IOException e) {
33 throw new SlcException("Cannot delete checkout directory "
34 + dir, e);
35 }
36 dir.mkdirs();
37 }
38 log.info("Checkout " + url + " to " + dir);
39 changed = versioningDriver.checkout(url, dir, true);
40 if (log.isDebugEnabled())
41 log.debug("Synchronized " + url + " to " + dir);
42 }
43
44 public void setVersioningDriver(VersioningDriver versioningDriver) {
45 this.versioningDriver = versioningDriver;
46 }
47
48 public void setDir(File dir) {
49 this.dir = dir;
50 }
51
52 public void setUrl(String url) {
53 this.url = url;
54 }
55
56 /** Delete before checkout */
57 public void setClean(Boolean clean) {
58 this.clean = clean;
59 }
60
61 /** Whether last call has changed the directory */
62 public Boolean getChanged() {
63 if (changed == null)
64 throw new SlcException("Sync has not run");
65 return changed;
66 }
67
68 }