]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.support.castor/src/main/java/org/argeo/slc/core/process/FileSlcExecutionNotifier.java
Split org.argeo.slc.agent
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.castor / src / main / java / org / argeo / slc / core / process / FileSlcExecutionNotifier.java
1 package org.argeo.slc.core.process;
2
3 import java.io.File;
4 import java.io.FileWriter;
5 import java.text.SimpleDateFormat;
6 import java.util.Date;
7 import java.util.HashMap;
8 import java.util.List;
9 import java.util.Map;
10
11 import javax.xml.transform.stream.StreamResult;
12
13 import org.apache.commons.io.IOUtils;
14 import org.argeo.slc.core.SlcException;
15 import org.springframework.oxm.Marshaller;
16
17 public class FileSlcExecutionNotifier implements SlcExecutionNotifier {
18 private final static SimpleDateFormat sdf = new SimpleDateFormat(
19 "yyyyMMdd-HHmmss");
20
21 private String basePath;
22 private Marshaller marshaller;
23
24 private Map<String, String> uuidToDir = new HashMap<String, String>();
25
26 public void addSteps(SlcExecution slcExecution,
27 List<SlcExecutionStep> additionalSteps) {
28 writeSlcExecution(slcExecution);
29 }
30
31 public void newExecution(SlcExecution slcExecution) {
32 String dirPath = basePath + File.separator + sdf.format(new Date())
33 + '-' + slcExecution.getUuid();
34 File dir = new File(dirPath);
35 dir.mkdirs();
36
37 uuidToDir.put(slcExecution.getUuid(), dirPath);
38
39 writeSlcExecution(slcExecution);
40 }
41
42 public void updateExecution(SlcExecution slcExecution) {
43 writeSlcExecution(slcExecution);
44 }
45
46 public void updateStatus(SlcExecution slcExecution, String oldStatus,
47 String newStatus) {
48 writeSlcExecution(slcExecution);
49 }
50
51 protected void writeSlcExecution(SlcExecution slcExecution) {
52 FileWriter out = null;
53 try {
54 out = new FileWriter(getFilePath(slcExecution));
55 marshaller.marshal(slcExecution, new StreamResult(out));
56 } catch (Exception e) {
57 throw new SlcException("Cannot marshall SlcExecution to "
58 + getFilePath(slcExecution), e);
59 } finally {
60 IOUtils.closeQuietly(out);
61 }
62 }
63
64 protected String getFileName(SlcExecution slcExecution) {
65 return "SlcExecution-" + slcExecution.getUuid() + ".xml";
66 }
67
68 protected String getFilePath(SlcExecution slcExecution) {
69 String dirPath = uuidToDir.get(slcExecution.getUuid());
70 return dirPath + File.separator + "SlcExecution-"
71 + slcExecution.getUuid() + ".xml";
72 }
73
74 public void setBasePath(String basePath) {
75 this.basePath = basePath;
76 }
77
78 public void setMarshaller(Marshaller marshaller) {
79 this.marshaller = marshaller;
80 }
81
82 }