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.repository.definition;
35
36 import java.io.IOException;
37 import java.io.InputStream;
38 import java.util.HashMap;
39 import java.util.List;
40 import java.util.Map;
41
42 import org.apache.commons.lang3.BooleanUtils;
43 import org.jdom.Document;
44 import org.jdom.Element;
45 import org.jdom.JDOMException;
46 import org.jdom.input.SAXBuilder;
47
48
49
50
51 public class RepositoryMappingDefinitionReader {
52
53
54
55
56 private static final String ELEMENT_REPOSITORY = "Repository";
57
58 private static final String ELEMENT_REPOSITORYMAPPING = "RepositoryMapping";
59
60 private static final String ELEMENT_PARAM = "param";
61
62 private static final String ELEMENT_WORKSPACE = "workspace";
63
64
65
66
67 private static final String ATTRIBUTE_NAME = "name";
68
69 private static final String ATTRIBUTE_LOAD_ON_STARTUP = "loadOnStartup";
70
71 private static final String ATTRIBUTE_PROVIDER = "provider";
72
73 private static final String ATTRIBUTE_VALUE = "value";
74
75 private static final String ATTRIBUTE_REPOSITORY_NAME = "repositoryName";
76
77 private static final String ATTRIBUTE_WORKSPACE_NAME = "workspaceName";
78
79 private static final String DEFAULT_WORKSPACE_NAME = "default";
80
81
82
83
84
85 public RepositoryMappingDefinition read(InputStream stream) throws JDOMException, IOException {
86 SAXBuilder builder = new SAXBuilder();
87 Document document = builder.build(stream);
88
89 Element root = document.getRootElement();
90 RepositoryMappingDefinition definition = new RepositoryMappingDefinition();
91 parseRepositoryMapping(root, definition);
92 parseRepositories(root, definition);
93
94 return definition;
95 }
96
97
98
99
100 private void parseRepositories(Element root, RepositoryMappingDefinition definition) {
101 @SuppressWarnings("unchecked")
102 List<Element> repositoryElements = root.getChildren(ELEMENT_REPOSITORY);
103 for (Element repositoryElement : repositoryElements) {
104 parseRepository(repositoryElement, definition);
105 }
106 }
107
108 private void parseRepository(Element repositoryElement, RepositoryMappingDefinition definition) {
109
110 String name = repositoryElement.getAttributeValue(ATTRIBUTE_NAME);
111 String loadOnStartup = repositoryElement.getAttributeValue(ATTRIBUTE_LOAD_ON_STARTUP);
112 String provider = repositoryElement.getAttributeValue(ATTRIBUTE_PROVIDER);
113
114 RepositoryDefinition repository = new RepositoryDefinition();
115 repository.setName(name);
116 repository.setProvider(provider);
117 repository.setLoadOnStartup(BooleanUtils.toBoolean(loadOnStartup));
118
119
120 Map<String, String> parameters = new HashMap<String, String>();
121 for (Object element : repositoryElement.getChildren(ELEMENT_PARAM)) {
122 Element parameterElement = (Element) element;
123 String parameterName = parameterElement.getAttributeValue(ATTRIBUTE_NAME);
124 String value = parameterElement.getAttributeValue(ATTRIBUTE_VALUE);
125 parameters.put(parameterName, value);
126 }
127
128 repository.setParameters(parameters);
129
130
131 @SuppressWarnings("unchecked")
132 List<Element> workspaces = repositoryElement.getChildren(ELEMENT_WORKSPACE);
133 if (workspaces == null || workspaces.isEmpty()) {
134
135 repository.addWorkspace(DEFAULT_WORKSPACE_NAME);
136 } else {
137 for (Element element : workspaces) {
138 String workspaceName = element.getAttributeValue(ATTRIBUTE_NAME);
139 repository.addWorkspace(workspaceName);
140 }
141 }
142
143 definition.addRepository(repository);
144 }
145
146
147
148
149 private void parseRepositoryMapping(Element root, RepositoryMappingDefinition definition) {
150 Element repositoryMappingElement = root.getChild(ELEMENT_REPOSITORYMAPPING);
151 @SuppressWarnings("unchecked")
152 List<Element> children = repositoryMappingElement.getChildren();
153 for (Element child : children) {
154 definition.addMapping(
155 child.getAttributeValue(ATTRIBUTE_NAME),
156 child.getAttributeValue(ATTRIBUTE_REPOSITORY_NAME),
157 child.getAttributeValue(ATTRIBUTE_WORKSPACE_NAME));
158 }
159 }
160
161 }