1 package org.exoplatform.wcm.addons.rdbms.listener;
2
3 import javax.jcr.Node;
4 import javax.jcr.RepositoryException;
5 import javax.jcr.Session;
6
7 import org.exoplatform.commons.utils.ActivityTypeUtils;
8 import org.exoplatform.commons.utils.CommonsUtils;
9 import org.exoplatform.services.listener.Event;
10 import org.exoplatform.services.listener.Listener;
11 import org.exoplatform.services.log.ExoLogger;
12 import org.exoplatform.services.log.Log;
13 import org.exoplatform.social.core.activity.model.ExoSocialActivity;
14 import org.exoplatform.social.plugin.doc.UIDocActivity;
15 import org.exoplatform.wcm.ext.component.activity.UILinkActivity;
16 import org.exoplatform.wcm.ext.component.activity.listener.Utils;
17
18 public class WCMActivityUpdaterListener extends Listener<ExoSocialActivity, String> {
19 private static final Log LOG = ExoLogger.getLogger(WCMActivityUpdaterListener.class);
20
21 public WCMActivityUpdaterListener() {
22 }
23
24 @Override
25 public void onEvent(Event<ExoSocialActivity, String> event) throws Exception {
26 ExoSocialActivity oldActivity = event.getSource();
27 String type = (oldActivity.getType() == null) ? "" : oldActivity.getType();
28 switch (type) {
29 case UILinkActivity.ACTIVITY_TYPE:
30 migrationLinkActivity(oldActivity, event.getData());
31 break;
32 case Utils.CONTENT_SPACES:
33 migrationContentSpaceActivity(oldActivity, event.getData());
34 break;
35 case Utils.FILE_SPACES:
36 migrationFileSpaceActivity(oldActivity, event.getData());
37 break;
38 default:
39 break;
40 }
41 }
42
43 private void migrationLinkActivity(ExoSocialActivity oldActivity, String newId) {
44 }
45
46 private void migrationContentSpaceActivity(ExoSocialActivity oldActivity, String newId) {
47 }
48
49 private void migrationFileSpaceActivity(ExoSocialActivity activity, String newId) throws RepositoryException {
50 if (activity.isComment()) {
51
52
53
54
55
56 LOG.info(String.format("Migration file-spaces comment '%s' with new id's %s", activity.getTitle(), newId));
57
58 migrationDoc(activity, newId);
59 } else {
60 LOG.info(String.format("Migration file-spaces activity '%s' with new id's %s", activity.getTitle(), newId));
61
62 migrationDoc(activity, newId);
63 }
64 }
65
66 private void migrationDoc(ExoSocialActivity activity, String newId) throws RepositoryException {
67 String workspace = activity.getTemplateParams().get(UIDocActivity.WORKSPACE);
68 if(workspace == null) {
69 workspace = activity.getTemplateParams().get(UIDocActivity.WORKSPACE.toLowerCase());
70 }
71 String docId = activity.getTemplateParams().get(UIDocActivity.ID);
72 Node docNode = getDocNode(workspace, activity.getUrl(), docId);
73 if (docNode != null && docNode.isNodeType(ActivityTypeUtils.EXO_ACTIVITY_INFO)) {
74 LOG.info("Migration doc: " + docNode.getPath());
75 try {
76 ActivityTypeUtils.attachActivityId(docNode, newId);
77 docNode.getSession().save();
78 } catch (RepositoryException e) {
79 LOG.warn("Updates the file-spaces activity is unsuccessful!");
80 LOG.debug("Updates the file-spaces activity is unsuccessful!", e);
81 }
82 } else {
83 LOG.info(String.format("Missing document's path/Id on template-parameters. Do not migrate this file-spaces activity width old id %s - new id %s" , activity.getId(), newId));
84 }
85 }
86
87
88
89
90
91
92
93
94
95 private Node getDocNode(String workspace, String path, String nodeId) {
96 if (workspace == null || (nodeId == null && path == null)) {
97 return null;
98 }
99 try {
100 Session session = CommonsUtils.getSystemSessionProvider().getSession(workspace, CommonsUtils.getRepository());
101 try {
102 return session.getNodeByUUID(nodeId);
103 } catch (Exception e) {
104 return (Node) session.getItem(path);
105 }
106 } catch (RepositoryException e) {
107 return null;
108 }
109 }
110 }