1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.jumpmind.symmetric.service.impl;
22
23 import java.util.List;
24 import java.util.Map;
25
26 import org.apache.commons.lang.StringUtils;
27 import org.apache.commons.logging.Log;
28 import org.apache.commons.logging.LogFactory;
29 import org.jumpmind.symmetric.Version;
30 import org.jumpmind.symmetric.model.Node;
31 import org.jumpmind.symmetric.service.INodeService;
32 import org.jumpmind.symmetric.service.IUpgradeService;
33 import org.jumpmind.symmetric.upgrade.IUpgradeTask;
34
35 public class UpgradeService extends AbstractService implements IUpgradeService {
36
37 private static final Log logger = LogFactory.getLog(UpgradeService.class);
38
39 private INodeService nodeService;
40
41 private Map<String, List<IUpgradeTask>> upgradeTaskMap;
42
43 public boolean isUpgradeNecessary() {
44 boolean isUpgradeNecessary = false;
45 Node node = nodeService.findIdentity();
46 if (node != null && !StringUtils.isBlank(node.getSymmetricVersion()) && !node.getSymmetricVersion().equals("development")) {
47 if (Version.isOlderMinorVersion(node.getSymmetricVersion())) {
48 isUpgradeNecessary = true;
49 }
50 }
51 return isUpgradeNecessary;
52 }
53
54 public void upgrade() {
55 Node node = nodeService.findIdentity();
56 if (node != null) {
57 int[] fromVersion = Version.parseVersion(node.getSymmetricVersion());
58
59 if (Version.isOlderMinorVersion(node.getSymmetricVersion())) {
60 runUpgrade(node, fromVersion);
61 node.setSymmetricVersion(Version.version());
62 nodeService.updateNode(node);
63 }
64 } else {
65 logger.warn("Cannot upgrade an unregistered node");
66 }
67 }
68
69 private void runUpgrade(Node node, int[] fromVersion) {
70 String majorMinorVersion = fromVersion[0] + "." + fromVersion[1];
71 List<IUpgradeTask> upgradeTaskList = upgradeTaskMap.get(majorMinorVersion);
72 logger.warn("Starting upgrade from version " + majorMinorVersion + " to " + Version.version());
73 boolean isRegistrationServer = StringUtils.isEmpty(parameterService.getRegistrationUrl());
74 if (upgradeTaskList != null) {
75 for (IUpgradeTask upgradeTask : upgradeTaskList) {
76 if ((isRegistrationServer && upgradeTask.isUpgradeRegistrationServer())
77 || (!isRegistrationServer && upgradeTask.isUpgradeNonRegistrationServer())) {
78 upgradeTask.upgrade(node, fromVersion);
79 }
80 }
81 }
82 logger.warn("Completed upgrade");
83 }
84
85 public void setUpgradeTaskMap(Map<String, List<IUpgradeTask>> upgradeTaskMap) {
86 this.upgradeTaskMap = upgradeTaskMap;
87 }
88
89 public void setNodeService(INodeService nodeService) {
90 this.nodeService = nodeService;
91 }
92
93 }