Project

General

Profile

1
package eu.dnetlib.msro.workflows.nodes.collect;
2

    
3
import java.text.SimpleDateFormat;
4
import java.util.Date;
5
import java.util.Iterator;
6
import java.util.Map;
7

    
8
import javax.annotation.Resource;
9

    
10
import org.apache.commons.lang.math.NumberUtils;
11
import org.apache.commons.logging.Log;
12
import org.apache.commons.logging.LogFactory;
13

    
14
import com.googlecode.sarasvati.Arc;
15
import com.googlecode.sarasvati.NodeToken;
16

    
17
import eu.dnetlib.common.logging.DnetLogger;
18
import eu.dnetlib.msro.rmi.MSROException;
19
import eu.dnetlib.msro.workflows.nodes.SimpleJobNode;
20
import eu.dnetlib.msro.workflows.util.WorkflowsConstants;
21

    
22
public class FindDateRangeForIncrementalHarvestingJobNode extends SimpleJobNode {
23
	
24
	private String fromDateParam;
25
	private String untilDateParam;
26
	private long ONE_DAY = 1000 * 60 * 60 * 24;	
27
	
28
	@Resource(name = "msroWorkflowLogger")
29
	private DnetLogger dnetLogger;
30
	
31
	private static final Log log = LogFactory.getLog(FindDateRangeForIncrementalHarvestingJobNode.class);
32
	
33
	@Override
34
	protected String execute(NodeToken token) throws Exception {
35
		final String profId = findCurrentWfProfileId(token);
36
		final String fromDate = calculateFromDate(profId); 
37
		final String untilDate = null;
38
		
39
		log.info("Incremental Harv Details - profId: " + profId + " - from: " + fromDate + " - until: " + untilDate);
40
		
41
		if (fromDate != null) {
42
			token.getEnv().setAttribute(getFromDateParam(), fromDate);
43
		}
44
		
45
		//if (untilDate != null) {
46
		//	token.getEnv().setAttribute(getUntilDateParam(), untilDate);
47
		//}
48
		
49
		return Arc.DEFAULT_ARC;
50
	}	
51
	
52
	private String calculateFromDate(final String profId) {
53
		final long d = findLastSuccessStartDate(profId);
54
		return (d > 0) ? (new SimpleDateFormat("yyyy-MM-dd")).format(new Date(d - ONE_DAY)) : null;
55
	}
56

    
57
	private long findLastSuccessStartDate(String profId) {
58
		long res = -1;
59
		
60
		final Iterator<Map<String, String>> iter = dnetLogger.find(WorkflowsConstants.SYSTEM_WF_PROFILE_ID, profId);
61
		while (iter.hasNext()) {
62
			final Map<String, String> map = iter.next();
63
			if ("true".equalsIgnoreCase(map.get(WorkflowsConstants.SYSTEM_COMPLETED_SUCCESSFULLY))) {
64
				final long curr = NumberUtils.toLong(map.get(WorkflowsConstants.SYSTEM_START_DATE), -1);
65
				if (curr > res) {
66
					res = curr;
67
				}
68
			}
69
		}
70
		return res;
71
	}
72

    
73
	private String findCurrentWfProfileId(NodeToken token) throws MSROException {
74
		final String p1 = token.getEnv().getAttribute(WorkflowsConstants.SYSTEM_WF_PROFILE_ID);
75
		if (p1 != null && !p1.isEmpty()) {
76
			return p1;
77
		}
78
		final String p2 = token.getFullEnv().getAttribute(WorkflowsConstants.SYSTEM_WF_PROFILE_ID);
79
		if (p2 != null && !p2.isEmpty()) {
80
			return p2;
81
		}
82
		final String p3 = token.getProcess().getEnv().getAttribute(WorkflowsConstants.SYSTEM_WF_PROFILE_ID);
83
		if (p3 != null && !p3.isEmpty()) {
84
			return p3;
85
		}
86
		throw new MSROException("Missing property in env: " + WorkflowsConstants.SYSTEM_WF_PROFILE_ID);
87
	}
88

    
89
	public String getFromDateParam() {
90
		return fromDateParam;
91
	}
92
	public void setFromDateParam(String fromDateParam) {
93
		this.fromDateParam = fromDateParam;
94
	}
95
	public String getUntilDateParam() {
96
		return untilDateParam;
97
	}
98
	public void setUntilDateParam(String untilDateParam) {
99
		this.untilDateParam = untilDateParam;
100
	}
101
	
102
}
(3-3/3)