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.commands;
35
36 import java.util.Iterator;
37
38 import info.magnolia.cms.beans.config.ObservedManager;
39 import info.magnolia.cms.core.Content;
40 import info.magnolia.cms.core.ItemType;
41 import info.magnolia.content2bean.Content2BeanException;
42 import info.magnolia.content2bean.Content2BeanTransformer;
43 import info.magnolia.content2bean.Content2BeanUtil;
44 import info.magnolia.objectfactory.Components;
45
46 import org.apache.commons.chain.Catalog;
47 import org.apache.commons.chain.CatalogFactory;
48 import org.apache.commons.chain.Command;
49 import org.apache.commons.lang.StringUtils;
50
51
52
53
54
55
56
57
58 public class CommandsManager extends ObservedManager {
59
60 public static final String DEFAULT_CATALOG = "default";
61
62 public static final String COMMAND_DELIM = "-";
63
64 protected static Content2BeanTransformer COMMAND_TRANSFORMER = new CommandTransformer();
65
66
67
68
69 protected void onRegister(Content node) {
70
71 if(node.getChildren(ItemType.CONTENT).size() == 0){
72 registerCatalog(node);
73 }
74 else{
75 for (Iterator iter = node.getChildren(ItemType.CONTENT).iterator(); iter.hasNext();) {
76 onRegister((Content) iter.next());
77 }
78 }
79 }
80
81 protected void registerCatalog(Content node) {
82 try {
83 MgnlCatalog catalog = (MgnlCatalog) Content2BeanUtil.toBean(node, true, COMMAND_TRANSFORMER);
84 CatalogFactory.getInstance().addCatalog(catalog.getName(), catalog);
85
86 log.debug("Catalog {} registered: {}", new Object[]{catalog.getName(), catalog});
87 }
88 catch (Content2BeanException e) {
89 log.error("Can't create catalog [" + node + "]", e);
90 }
91 }
92
93
94
95
96 protected void onClear() {
97 CatalogFactory.clear();
98 }
99
100
101
102
103
104
105
106 public Command getCommand(String catalogName, String commandName) {
107 Catalog catalog = CatalogFactory.getInstance().getCatalog(catalogName);
108 if (catalog != null) {
109 return catalog.getCommand(commandName);
110 }
111
112 return null;
113 }
114
115
116
117
118
119
120 public Command getCommand(String commandName) {
121 String catalogName = DEFAULT_CATALOG;
122 if (StringUtils.contains(commandName, COMMAND_DELIM)) {
123 catalogName = StringUtils.substringBefore(commandName, COMMAND_DELIM);
124 commandName = StringUtils.substringAfter(commandName, COMMAND_DELIM);
125 }
126
127 Command command = getCommand(catalogName, commandName);
128 if (command == null) {
129 command = getCommand(DEFAULT_CATALOG, commandName);
130 }
131 return command;
132 }
133
134
135
136
137 public static CommandsManager getInstance() {
138 return Components.getSingleton(CommandsManager.class);
139 }
140
141 }