1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.module.blossom.dialog;
35
36 import java.util.HashMap;
37 import java.util.List;
38 import java.util.Map;
39 import javax.jcr.RepositoryException;
40
41 import org.slf4j.Logger;
42 import org.slf4j.LoggerFactory;
43 import org.springframework.beans.factory.InitializingBean;
44
45 import info.magnolia.cms.beans.config.ContentRepository;
46 import info.magnolia.cms.core.Content;
47 import info.magnolia.cms.core.HierarchyManager;
48 import info.magnolia.context.MgnlContext;
49 import info.magnolia.module.blossom.support.RepositoryUtils;
50
51
52
53
54
55
56 public class DefaultBlossomDialogRegistry implements BlossomDialogRegistry, InitializingBean {
57
58 private static final String DIALOGS_PATH = "/modules/blossom/dialogs/autodetected";
59
60 private final Logger logger = LoggerFactory.getLogger(getClass());
61
62 private DialogDescriptionBuilder descriptionBuilder;
63 private Map<String, BlossomDialogDescription> dialogs = new HashMap<String, BlossomDialogDescription>();
64
65 public BlossomDialogDescription getDialogDescription(String name) {
66 return this.dialogs.get(name);
67 }
68
69 public void setDescriptionBuilder(DialogDescriptionBuilder descriptionBuilder) {
70 this.descriptionBuilder = descriptionBuilder;
71 }
72
73 public void registerDialogFactory(Object factoryObject) throws RepositoryException {
74 addDialogDescription(descriptionBuilder.buildDescription(factoryObject));
75 }
76
77 public void registerDialogFactory(String name, String label, Object factoryObject) throws RepositoryException {
78 addDialogDescription(descriptionBuilder.buildDescription(name, label, factoryObject));
79 }
80
81 public void registerDialogFactories(final Object handler) throws RepositoryException {
82 List<BlossomDialogDescription> descriptions = descriptionBuilder.buildDescriptions(handler);
83 for (BlossomDialogDescription description : descriptions) {
84 addDialogDescription(description);
85 }
86 }
87
88 public void addDialogDescription(BlossomDialogDescription dialogDescription) throws RepositoryException {
89 dialogs.put(dialogDescription.getName(), dialogDescription);
90 writeDialogDefinition(dialogDescription);
91 if (logger.isDebugEnabled())
92 logger.debug("Registered dialog [" + dialogDescription.getName() + "]");
93 }
94
95 protected void writeDialogDefinition(BlossomDialogDescription dialogDescription) throws RepositoryException {
96 HierarchyManager hierarchyManager = MgnlContext.getSystemContext().getHierarchyManager(ContentRepository.CONFIG);
97 Content configNode = RepositoryUtils.createContentNode(hierarchyManager, DIALOGS_PATH, dialogDescription.getName());
98 configNode.createNodeData("class", dialogDescription.getDialogClass());
99 configNode.getParent().save();
100 }
101
102 public void afterPropertiesSet() throws Exception {
103
104 HierarchyManager hierarchyManager = MgnlContext.getSystemContext().getHierarchyManager(ContentRepository.CONFIG);
105 RepositoryUtils.deleteContent(hierarchyManager, DIALOGS_PATH);
106
107 if (descriptionBuilder == null)
108 descriptionBuilder = new DialogDescriptionBuilder();
109 }
110 }