Project

General

Profile

1
package eu.dnetlib.msro.workflows.sarasvati.loader;
2

    
3
import java.io.File;
4
import java.io.FileOutputStream;
5
import java.io.StringReader;
6

    
7
import org.apache.commons.io.IOUtils;
8
import org.apache.commons.logging.Log;
9
import org.apache.commons.logging.LogFactory;
10
import org.dom4j.Document;
11
import org.dom4j.DocumentException;
12
import org.dom4j.io.SAXReader;
13
import org.springframework.beans.factory.annotation.Required;
14

    
15
import com.googlecode.sarasvati.Graph;
16
import com.googlecode.sarasvati.mem.MemEngine;
17

    
18
public class GraphLoader {
19
	private MemEngine engine;
20
	
21
	private static final Log log = LogFactory.getLog(GraphLoader.class);
22
	
23
	public Graph loadGraph(String xml) throws Exception {
24
		final File tmpFile = File.createTempFile("wftfs", null);
25
		try {
26
			IOUtils.copy(new StringReader(xml), new FileOutputStream(tmpFile));
27
			
28
			SAXReader reader = new SAXReader();
29
			Document doc = reader.read(tmpFile);
30
			String graphName = doc.valueOf("/process-definition/@name");
31
			
32
			getEngine().getLoader().load(tmpFile);
33

    
34
			final Graph graph = getEngine().getRepository().getLatestGraph(graphName);
35
			if (graph == null) {
36
				throw new IllegalArgumentException("graph called " + graphName + " doesn't exist");
37
			}
38
			return graph;
39
		} catch (DocumentException e) {
40
			log.error("Error parsing xml: " + xml, e);
41
			throw e;
42
		} finally {
43
			tmpFile.delete();
44
		}
45
	}
46
	
47

    
48
	public MemEngine getEngine() {
49
		return engine;
50
	}
51

    
52
	@Required
53
	public void setEngine(MemEngine engine) {
54
		this.engine = engine;
55
	}
56
	
57
}
(1-1/8)