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