1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.common.util.project;
17
18 import java.util.HashMap;
19 import java.util.Map;
20 import java.util.Properties;
21
22 import org.apache.commons.io.Charsets;
23 import org.apache.commons.lang3.StringUtils;
24 import org.kuali.common.util.Assert;
25 import org.kuali.common.util.PropertyUtils;
26 import org.kuali.common.util.Str;
27 import org.kuali.common.util.maven.MavenConstants;
28 import org.kuali.common.util.property.Constants;
29 import org.springframework.util.PropertyPlaceholderHelper;
30
31 public class DefaultProjectService implements ProjectService {
32
33 private static final Map<String, Project> CACHE = new HashMap<String, Project>();
34 private static final PropertyPlaceholderHelper PPH = Constants.DEFAULT_PROPERTY_PLACEHOLDER_HELPER;
35 private static final String PROPERTIES_ENCODING_KEY = "project.properties.encoding";
36 private static final String PROPERTIES_ENCODING_DEFAULT = Charsets.UTF_8.toString();
37
38 @Override
39 public Project getProject(Properties properties) {
40 String groupId = properties.getProperty(MavenConstants.GROUP_ID_KEY);
41 String artifactId = properties.getProperty(MavenConstants.ARTIFACT_ID_KEY);
42 String version = properties.getProperty(MavenConstants.VERSION_KEY);
43 return new ImmutableProject(groupId, artifactId, version, properties);
44
45 }
46
47 @Override
48 public Project getProject(String projectId) {
49
50 Assert.hasText(projectId, "projectId is blank");
51
52 Project project = CACHE.get(projectId);
53 if (project == null) {
54 project = loadAndCache(projectId);
55 }
56 return project;
57 }
58
59 protected Project loadAndCache(String projectId) {
60
61
62 String[] tokens = StringUtils.split(projectId, ":");
63
64
65 Assert.isTrue(tokens.length == 2, "tokens.length != 2");
66
67
68 String groupId = tokens[0];
69 String artifactId = tokens[1];
70
71
72 String location = getPropertiesFileLocation(groupId, artifactId);
73
74
75 Assert.exists(location, "[" + location + "] does not exist");
76
77
78 Properties global = PropertyUtils.getGlobalProperties();
79
80
81 String encoding = global.getProperty(PROPERTIES_ENCODING_KEY, PROPERTIES_ENCODING_DEFAULT);
82
83
84 Properties properties = PropertyUtils.load(location, encoding);
85
86
87 Project project = getProject(properties);
88
89
90 CACHE.put(projectId, project);
91
92
93 return project;
94 }
95
96 protected String getPropertiesFileLocation(String groupId, String artifactId) {
97 Properties properties = new Properties();
98 properties.setProperty(Constants.GROUP_ID_BASE_PATH_KEY, Str.getPath(groupId));
99 properties.setProperty(Constants.ARTIFACT_ID_KEY, artifactId);
100 return PPH.replacePlaceholders(Constants.PROJECT_PROPERTIES_LOCATION, properties);
101 }
102
103 }