Project

General

Profile

1
package eu.dnetlib.functionality.modular.ui.workflows.util;
2

    
3
import java.io.StringReader;
4
import java.util.ArrayList;
5
import java.util.Iterator;
6
import java.util.List;
7

    
8
import org.apache.commons.logging.Log;
9
import org.apache.commons.logging.LogFactory;
10
import org.dom4j.Document;
11
import org.dom4j.Node;
12
import org.dom4j.io.SAXReader;
13

    
14
import com.google.common.base.Function;
15
import com.google.common.base.Splitter;
16
import com.google.common.collect.Lists;
17

    
18
import eu.dnetlib.functionality.modular.ui.workflows.objects.AtomicWorkflowDescriptor;
19
import eu.dnetlib.functionality.modular.ui.workflows.objects.MetaWorkflowDescriptor;
20
import eu.dnetlib.functionality.modular.ui.workflows.objects.NodeInfo;
21
import eu.dnetlib.miscutils.datetime.DateUtils;
22
import eu.dnetlib.msro.workflows.util.WorkflowParam;
23
import eu.dnetlib.msro.workflows.util.WorkflowsConstants.WorkflowStatus;
24

    
25
public class TransformerUtils {
26

    
27
	private static final Log log = LogFactory.getLog(TransformerUtils.class);
28

    
29

    
30
	public static final Function<String, MetaWorkflowDescriptor> toMetaWorkflow = new Function<String, MetaWorkflowDescriptor>() {
31

    
32
		@Override
33
		public MetaWorkflowDescriptor apply(final String s) {
34
			Iterator<String> iter = Splitter.on("@@@").trimResults().split(s).iterator();
35
			String id = iter.next();
36
			String name = iter.next();
37
			String family = iter.next();
38
			WorkflowStatus status = WorkflowStatus.valueOf(iter.next());
39
			return new MetaWorkflowDescriptor(id, name, status, family);
40
		}
41
	};
42

    
43
	public static final Function<String, NodeInfo> toNodeInfo = new Function<String, NodeInfo>() {
44

    
45
		@Override
46
		public NodeInfo apply(final String xml) {
47
			try {
48
				final SAXReader reader = new SAXReader();
49
				final Document doc = reader.read(new StringReader(xml));
50
				final List<WorkflowParam> params = Lists.newArrayList();
51

    
52
				for (Object o : doc.selectNodes("//PARAM")) {
53
					Node n = (Node) o;
54
					String key = n.valueOf("@name");
55
					boolean required = "true".equalsIgnoreCase(n.valueOf("@required"));
56
					String type = n.valueOf("@type");
57
					String function = n.valueOf("@function");
58
					String value = n.getText();
59
					boolean userParam = "user".equals(n.valueOf("@managedBy"));
60
					
61
					params.add(new WorkflowParam(key, value, required, userParam, type, function));
62
				}
63
				String name = doc.valueOf("/NODE/@name");
64
				String desc = doc.valueOf("//DESCRIPTION");
65

    
66
				return new NodeInfo(name, desc, params);
67
			} catch (Exception e) {
68
				log.error("Error parsing xml: " + xml, e);
69
			}
70
			return new NodeInfo("", "", new ArrayList<WorkflowParam>());
71
		}
72
	};
73

    
74
	public static final Function<String, AtomicWorkflowDescriptor> toAtomicWorkflow= new Function<String, AtomicWorkflowDescriptor>() {
75

    
76
		@Override
77
		public AtomicWorkflowDescriptor apply(final String xml) {
78
			try {
79
				final SAXReader reader = new SAXReader();
80
				final Document doc = reader.read(new StringReader(xml));
81

    
82
				final String id = doc.valueOf("//RESOURCE_IDENTIFIER/@value");
83
				final String name = doc.valueOf("//WORKFLOW_NAME");
84
				final String imageUrl = "wf_atomic_workflow.img?id=" + id + "&t=" + DateUtils.now();
85
				final String lastExecutionDate = doc.valueOf("//STATUS/LAST_EXECUTION_DATE");
86
				final String start = doc.valueOf("//CONFIGURATION/@start");
87
				final boolean ready = doc.selectNodes("//PARAM[@required='true' and string-length(normalize-space(.)) = 0]").isEmpty();
88
				
89
				return new AtomicWorkflowDescriptor(id, name, "", null, imageUrl, ready, start, lastExecutionDate, 0, 0);
90
			} catch (Exception e) {
91
				log.error("Error parsing xml: " + xml, e);
92
			}
93
			return new AtomicWorkflowDescriptor("", "", "", null, "", false, "disabled", "", 0, 0);
94
		}
95
	};
96

    
97
}
(3-3/3)