1. Project Clover database Tue Dec 20 2016 21:24:09 CET
  2. Package org.xwiki.extension.internal.converter

File ExtensionConverter.java

 

Coverage histogram

../../../../../img/srcFileCovDistChart10.png
0% of files have more coverage

Code metrics

28
75
7
1
260
180
30
0.4
10.71
7
4.29

Classes

Class Line # Actions
ExtensionConverter 71 75 0% 30 3
0.972727397.3%
 

Contributing tests

This file is covered by 19 tests. .

Source view

1    /*
2    * See the NOTICE file distributed with this work for additional
3    * information regarding copyright ownership.
4    *
5    * This is free software; you can redistribute it and/or modify it
6    * under the terms of the GNU Lesser General Public License as
7    * published by the Free Software Foundation; either version 2.1 of
8    * the License, or (at your option) any later version.
9    *
10    * This software is distributed in the hope that it will be useful,
11    * but WITHOUT ANY WARRANTY; without even the implied warranty of
12    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13    * Lesser General Public License for more details.
14    *
15    * You should have received a copy of the GNU Lesser General Public
16    * License along with this software; if not, write to the Free
17    * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
18    * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
19    */
20    package org.xwiki.extension.internal.converter;
21   
22    import java.lang.reflect.Type;
23    import java.net.MalformedURLException;
24    import java.net.URI;
25    import java.net.URISyntaxException;
26    import java.net.URL;
27    import java.util.ArrayList;
28    import java.util.Collection;
29    import java.util.List;
30    import java.util.Map;
31    import java.util.Properties;
32   
33    import javax.inject.Inject;
34    import javax.inject.Singleton;
35   
36    import org.apache.commons.lang3.StringUtils;
37    import org.apache.maven.model.Dependency;
38    import org.apache.maven.model.Developer;
39    import org.apache.maven.model.IssueManagement;
40    import org.apache.maven.model.License;
41    import org.apache.maven.model.Model;
42    import org.apache.maven.model.Repository;
43    import org.apache.maven.model.Scm;
44    import org.xwiki.component.annotation.Component;
45    import org.xwiki.extension.DefaultExtensionScm;
46    import org.xwiki.extension.Extension;
47    import org.xwiki.extension.ExtensionDependency;
48    import org.xwiki.extension.ExtensionLicense;
49    import org.xwiki.extension.ExtensionLicenseManager;
50    import org.xwiki.extension.ExtensionScmConnection;
51    import org.xwiki.extension.internal.ExtensionFactory;
52    import org.xwiki.extension.internal.ExtensionUtils;
53    import org.xwiki.extension.internal.maven.DefaultMavenExtension;
54    import org.xwiki.extension.internal.maven.DefaultMavenExtensionDependency;
55    import org.xwiki.extension.internal.maven.MavenExtension;
56    import org.xwiki.extension.internal.maven.MavenUtils;
57    import org.xwiki.extension.repository.ExtensionRepositoryDescriptor;
58    import org.xwiki.extension.version.Version;
59    import org.xwiki.extension.version.internal.DefaultVersionConstraint;
60    import org.xwiki.properties.converter.AbstractConverter;
61    import org.xwiki.properties.converter.ConversionException;
62   
63    /**
64    * Create an {@link Extension} from a Maven {@link Model}.
65    *
66    * @version $Id: 9a327f56542119f936fb49be74d47bdb4c5c2777 $
67    * @since 7.0M1
68    */
69    @Component
70    @Singleton
 
71    public class ExtensionConverter extends AbstractConverter<Extension>
72    {
73    @Inject
74    private ExtensionLicenseManager licenseManager;
75   
76    @Inject
77    private ExtensionFactory factory;
78   
 
79  24406 toggle @Override
80    protected <G extends Extension> G convertToType(Type targetType, Object value)
81    {
82  24406 if (value instanceof Model) {
83  24406 return (G) convertToExtension((Model) value);
84    }
85   
86  0 throw new ConversionException(String.format("Unsupported target type [%s]", targetType));
87    }
88   
 
89  24406 toggle private MavenExtension convertToExtension(Model model)
90    {
91  24406 Properties properties = (Properties) model.getProperties().clone();
92   
93  24406 Version version = this.factory.getVersion(MavenUtils.resolveVersion(model));
94  24406 String groupId = MavenUtils.resolveGroupId(model);
95   
96  24406 DefaultMavenExtension extension = new DefaultMavenExtension(null, groupId, model.getArtifactId(), version,
97    MavenUtils.packagingToType(model.getPackaging()));
98   
99  24406 extension.setName(getPropertyString(properties, Extension.FIELD_NAME, true, model.getName()));
100  24406 extension.setSummary(getPropertyString(properties, Extension.FIELD_SUMMARY, true, model.getDescription()));
101  24406 extension.setWebsite(getPropertyString(properties, Extension.FIELD_WEBSITE, true, model.getUrl()));
102   
103    // authors
104  24406 for (Developer developer : model.getDevelopers()) {
105  60966 URL authorURL = null;
106  60966 if (developer.getUrl() != null) {
107  3507 try {
108  3507 authorURL = new URL(developer.getUrl());
109    } catch (MalformedURLException e) {
110    // TODO: log ?
111    }
112    }
113   
114  60966 extension.addAuthor(this.factory
115    .getExtensionAuthor(StringUtils.defaultIfBlank(developer.getName(), developer.getId()), authorURL));
116    }
117   
118    // licenses
119  24406 for (License license : model.getLicenses()) {
120  15792 extension.addLicense(getExtensionLicense(license));
121    }
122   
123    // scm
124  24406 Scm scm = model.getScm();
125  24406 if (scm != null
126    && (scm.getConnection() != null || scm.getDeveloperConnection() != null || scm.getUrl() != null)) {
127  15632 ExtensionScmConnection connection = MavenUtils.toExtensionScmConnection(scm.getConnection());
128  15632 ExtensionScmConnection developerConnection =
129    MavenUtils.toExtensionScmConnection(scm.getDeveloperConnection());
130   
131  15632 extension.setScm(new DefaultExtensionScm(scm.getUrl(), connection, developerConnection));
132    }
133   
134    // issue management
135  24406 IssueManagement issueManagement = model.getIssueManagement();
136  24406 if (issueManagement != null && issueManagement.getUrl() != null) {
137  11331 extension.setIssueManagement(
138    this.factory.getExtensionIssueManagement(issueManagement.getSystem(), issueManagement.getUrl()));
139    }
140   
141    // features
142  24406 String featuresString = getProperty(properties, Extension.FIELD_FEATURES, true);
143  24406 if (StringUtils.isNotBlank(featuresString)) {
144  979 Collection<String> features = ExtensionUtils.importPropertyStringList(featuresString, true);
145  979 extension
146    .setExtensionFeatures(ExtensionIdConverter.toExtensionIdList(features, extension.getId().getVersion()));
147    }
148   
149    // category
150  24406 String categoryString = getProperty(properties, Extension.FIELD_CATEGORY, true);
151  24406 if (StringUtils.isNotBlank(categoryString)) {
152  12 extension.setCategory(categoryString);
153    }
154   
155    // namespaces
156  24406 String namespacesString = getProperty(properties, Extension.FIELD_NAMESPACES, true);
157  24406 if (StringUtils.isNotBlank(namespacesString)) {
158  10 Collection<String> namespaces = ExtensionUtils.importPropertyStringList(namespacesString, true);
159  10 extension.setAllowedNamespaces(namespaces);
160    }
161   
162    // repositories
163  24406 List<ExtensionRepositoryDescriptor> repositories;
164  24406 List<Repository> mavenRepositories = model.getRepositories();
165  24406 if (!mavenRepositories.isEmpty()) {
166  13861 repositories = new ArrayList<>(mavenRepositories.size());
167   
168  13861 for (Repository mavenRepository : mavenRepositories) {
169  46356 try {
170  46356 ExtensionRepositoryDescriptor repositoryDescriptor = this.factory.getExtensionRepositoryDescriptor(
171    mavenRepository.getId(), "maven", new URI(mavenRepository.getUrl()));
172   
173  46356 repositories.add(repositoryDescriptor);
174    } catch (URISyntaxException e) {
175    // TODO: log ?
176    }
177    }
178    } else {
179  10545 repositories = null;
180    }
181  24406 extension.setRepositories(repositories);
182   
183    // dependencies
184  24406 for (Dependency mavenDependency : model.getDependencies()) {
185  121124 if (!mavenDependency.isOptional() && (mavenDependency.getScope() == null
186    || mavenDependency.getScope().equals("compile") || mavenDependency.getScope().equals("runtime"))) {
187  71918 ExtensionDependency extensionDependency = toExtensionDependency(mavenDependency, model, repositories);
188   
189  71918 extension.addDependency(extensionDependency);
190    }
191    }
192   
193    // managed dependencies
194  24406 if (model.getDependencyManagement() != null) {
195  7577 for (Dependency mavenDependency : model.getDependencyManagement().getDependencies()) {
196  650501 ExtensionDependency extensionDependency = toExtensionDependency(mavenDependency, model, repositories);
197   
198  650501 extension.addManagedDependency(extensionDependency);
199    }
200    }
201   
202    // various properties
203   
204  24406 extension.putProperty(MavenUtils.PKEY_MAVEN_MODEL, model);
205   
206  24406 for (Map.Entry<Object, Object> entry : properties.entrySet()) {
207  330193 String key = (String) entry.getKey();
208  330193 if (key.startsWith("xwiki.extension.")) {
209  16 extension.putProperty(key, entry.getValue());
210    }
211    }
212   
213  24406 return extension;
214    }
215   
 
216  722419 toggle private ExtensionDependency toExtensionDependency(Dependency mavenDependency, Model model,
217    List<ExtensionRepositoryDescriptor> repositories)
218    {
219  722419 String dependencyGroupId = MavenUtils.resolveGroupId(mavenDependency.getGroupId(), model, true);
220  722419 String dependencyArtifactId = mavenDependency.getArtifactId();
221  722419 String dependencyClassifier = mavenDependency.getClassifier();
222  722419 String dependencyVersion = MavenUtils.resolveVersion(mavenDependency.getVersion(), model, true);
223   
224  722419 DefaultMavenExtensionDependency dependency = new DefaultMavenExtensionDependency(
225    MavenUtils.toExtensionId(dependencyGroupId, dependencyArtifactId, dependencyClassifier),
226    new DefaultVersionConstraint(dependencyVersion), mavenDependency);
227   
228  722419 dependency.setRepositories(repositories);
229   
230  722419 return this.factory.getExtensionDependency(dependency);
231    }
232   
 
233  146436 toggle private String getProperty(Properties properties, String propertyName, boolean delete)
234    {
235  146436 return delete ? (String) properties.remove(Extension.IKEYPREFIX + propertyName)
236    : properties.getProperty(Extension.IKEYPREFIX + propertyName);
237    }
238   
 
239  73218 toggle private String getPropertyString(Properties properties, String propertyName, boolean delete, String def)
240    {
241  73218 return StringUtils.defaultString(getProperty(properties, propertyName, delete), def);
242    }
243   
244    // TODO: download custom licenses content
 
245  15792 toggle private ExtensionLicense getExtensionLicense(License license)
246    {
247  15792 if (license.getName() == null) {
248  42 return new ExtensionLicense("noname", null);
249    }
250   
251  15750 return createLicenseByName(license.getName());
252    }
253   
 
254  15750 toggle private ExtensionLicense createLicenseByName(String name)
255    {
256  15750 ExtensionLicense extensionLicense = this.licenseManager.getLicense(name);
257   
258  15750 return extensionLicense != null ? extensionLicense : new ExtensionLicense(name, null);
259    }
260    }