1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  package org.kuali.common.util.execute;
17  
18  import org.kuali.common.util.Assert;
19  import org.kuali.common.util.CollectionUtils;
20  import org.kuali.common.util.FormatUtils;
21  import org.kuali.common.util.ScmUtils;
22  import org.kuali.common.util.scm.ScmRequest;
23  import org.kuali.common.util.service.ScmService;
24  import org.slf4j.Logger;
25  import org.slf4j.LoggerFactory;
26  
27  public class ScmExecutable implements Executable {
28  
29  	private static final Logger logger = LoggerFactory.getLogger(ScmExecutable.class);
30  
31  	boolean skip;
32  	boolean logConfiguration;
33  	ScmService service;
34  	ScmRequest request;
35  
36  	@Override
37  	public void execute() {
38  
39  		
40  		if (logConfiguration) {
41  			log(this);
42  		}
43  
44  		
45  		if (skip) {
46  			logger.info("Skipping execution");
47  			return;
48  		}
49  
50  		
51  		Assert.notNull(request);
52  
53  		
54  		if (isEmpty(request)) {
55  			logger.info("Skipping execution.  Nothing to do!");
56  			return;
57  		}
58  
59  		
60  		validateConfiguration(service, request);
61  
62  		
63  		if (!CollectionUtils.isEmpty(request.getAdds())) {
64  			service.add(request.getAdds());
65  		}
66  
67  		
68  		if (!CollectionUtils.isEmpty(request.getDeletes())) {
69  			service.delete(request.getDeletes());
70  		}
71  
72  		
73  		if (!CollectionUtils.isEmpty(request.getCommits())) {
74  			service.commit(request.getCommits(), request.getCommitMessage());
75  		}
76  	}
77  
78  	protected void validateConfiguration(ScmService service, ScmRequest request) {
79  		
80  		Assert.notNull(service, "service is null");
81  		if (!CollectionUtils.isEmpty(request.getCommits())) {
82  			Assert.hasText(request.getCommitMessage(), "commitMessage has no text");
83  		}
84  	}
85  
86  	protected void log(ScmExecutable exec) {
87  		ScmRequest request = ScmUtils.cloneOrNew(exec.getRequest());
88  		String adds = FormatUtils.getCount(CollectionUtils.toEmptyList(request.getAdds()).size());
89  		String deletes = FormatUtils.getCount(CollectionUtils.toEmptyList(request.getDeletes()).size());
90  		String commits = FormatUtils.getCount(CollectionUtils.toEmptyList(request.getCommits()).size());
91  
92  		logger.info(" -- SCM --");
93  		logger.info("Adds: {}", adds);
94  		logger.info("Deletes: {}", deletes);
95  		logger.info("Commits: {}", commits);
96  		logger.info("Skip: {}", skip);
97  	}
98  
99  	public boolean isEmpty(ScmRequest request) {
100 		if (!CollectionUtils.isEmpty(request.getAdds())) {
101 			return false;
102 		}
103 		if (!CollectionUtils.isEmpty(request.getDeletes())) {
104 			return false;
105 		}
106 		if (!CollectionUtils.isEmpty(request.getCommits())) {
107 			return false;
108 		}
109 		return true;
110 	}
111 
112 	public ScmService getService() {
113 		return service;
114 	}
115 
116 	public void setService(ScmService service) {
117 		this.service = service;
118 	}
119 
120 	public boolean isSkip() {
121 		return skip;
122 	}
123 
124 	public void setSkip(boolean skip) {
125 		this.skip = skip;
126 	}
127 
128 	public ScmRequest getRequest() {
129 		return request;
130 	}
131 
132 	public void setRequest(ScmRequest request) {
133 		this.request = request;
134 	}
135 
136 	public boolean isLogConfiguration() {
137 		return logConfiguration;
138 	}
139 
140 	public void setLogConfiguration(boolean logConfiguration) {
141 		this.logConfiguration = logConfiguration;
142 	}
143 
144 }