blob: 7f33b46efde1ce9a240a371aa5a77245f70b9449 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.hyracks.maven.license;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.maven.model.Model;
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.logging.Log;
import org.apache.maven.plugin.resources.remote.Supplement;
import org.apache.maven.plugin.resources.remote.SupplementalDataModel;
import org.apache.maven.plugin.resources.remote.io.xpp3.SupplementalDataModelXpp3Reader;
import org.apache.maven.project.inheritance.ModelInheritanceAssembler;
import org.codehaus.plexus.util.xml.Xpp3Dom;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
public class SupplementalModelHelper {
private SupplementalModelHelper() {
}
// following code taken from ProcessRemoteResourcesMojo (org.apache.maven.plugins:maven-remote-resources-plugin:1.5)
static String generateSupplementMapKey(String groupId, String artifactId) {
return groupId.trim() + ":" + artifactId.trim();
}
static Map<String, Model> loadSupplements(Log log, String[] models) throws MojoExecutionException {
if (models == null) {
log.debug("Supplemental data models won't be loaded. " + "No models specified.");
return Collections.emptyMap();
}
List<Supplement> supplements = new ArrayList<>();
for (String set : models) {
log.debug("Preparing ruleset: " + set);
try {
File f = new File(set);
if (!f.exists()) {
throw new MojoExecutionException("Cold not resolve " + set);
}
if (!f.canRead()) {
throw new MojoExecutionException("Supplemental data models won't be loaded. " + "File "
+ f.getAbsolutePath() + " cannot be read, check permissions on the file.");
}
log.debug("Loading supplemental models from " + f.getAbsolutePath());
SupplementalDataModelXpp3Reader reader = new SupplementalDataModelXpp3Reader();
try (FileInputStream fis = new FileInputStream(f); Reader fileReader = new InputStreamReader(fis)) {
SupplementalDataModel supplementalModel = reader.read(fileReader);
supplements.addAll(supplementalModel.getSupplement());
}
} catch (Exception e) {
String msg = "Error loading supplemental data models: " + e.getMessage();
log.error(msg, e);
throw new MojoExecutionException(msg, e);
}
}
log.debug("Loading supplements complete.");
Map<String, Model> supplementMap = new HashMap<>();
for (Supplement sd : supplements) {
Xpp3Dom dom = (Xpp3Dom) sd.getProject();
Model m = getSupplement(log, dom);
supplementMap.put(generateSupplementMapKey(m.getGroupId(), m.getArtifactId()), m);
}
return supplementMap;
}
protected static Model getSupplement(Log log, Xpp3Dom supplementModelXml) throws MojoExecutionException {
MavenXpp3Reader modelReader = new MavenXpp3Reader();
Model model = null;
try {
model = modelReader.read(new StringReader(supplementModelXml.toString()));
String groupId = model.getGroupId();
String artifactId = model.getArtifactId();
if (groupId == null || "".equals(groupId.trim())) {
throw new MojoExecutionException(
"Supplemental project XML requires that a <groupId> element be present.");
}
if (artifactId == null || "".equals(artifactId.trim())) {
throw new MojoExecutionException(
"Supplemental project XML requires that a <artifactId> element be present.");
}
} catch (IOException e) {
log.warn("Unable to read supplemental XML: " + e.getMessage(), e);
} catch (XmlPullParserException e) {
log.warn("Unable to parse supplemental XML: " + e.getMessage(), e);
}
return model;
}
protected static Model mergeModels(ModelInheritanceAssembler assembler, Model parent, Model child) {
assembler.assembleModelInheritance(child, parent);
// ModelInheritanceAssembler doesn't push the name, do it here
if (child.getName() == null) {
child.setName(parent.getName());
}
return child;
}
}