blob: b5546558e682cbb8bb62c8bd1260da36f836e1a1 [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.netbeans.modules.maven.embedder.impl;
import java.io.File;
import java.util.ArrayList;
import org.apache.maven.model.InputLocation;
import org.apache.maven.model.InputSource;
import org.apache.maven.model.Model;
import org.apache.maven.model.building.ModelBuildingRequest;
import org.apache.maven.model.building.ModelProblemCollector;
import org.apache.maven.model.inheritance.DefaultInheritanceAssembler;
import org.codehaus.plexus.util.StringUtils;
/**
*
* just a piece of experimental code, that allows one collecting the entire inheritance sequence
* while loading the project itself, which is information otherwise inaccessable in maven
* we collect the file locations and model coordinates
* @author mkleint
*/
public class NbInheritanceAssembler extends DefaultInheritanceAssembler {
public static final String NETBEANS_INHERITANCE = "Netbeans_inheritance";
@Override
public void assembleModelInheritance(Model child, Model parent, ModelBuildingRequest request, ModelProblemCollector problems) {
InputLocation ploc = parent.getLocation("modelVersion");
InputLocation parentLocation = parent.getLocation(NETBEANS_INHERITANCE);
File file = parent.getPomFile();
if (parentLocation == null) {
InputSource source = new InputSource();
if (ploc != null) {
source.setLocation(ploc.getSource().getLocation());
source.setModelId(ploc.getSource().getModelId());
}
parentLocation = new InputLocation(-1, -1, source);
parent.setLocation(NETBEANS_INHERITANCE, parentLocation);
}
InputLocation cloc = child.getLocation("modelVersion");
InputSource source = new InputSource();
if (cloc != null) {
source.setLocation((parentLocation.getSource().getLocation() != null ? parentLocation.getSource().getLocation() : "null") + "||" + cloc.getSource().getLocation());
source.setModelId((parentLocation.getSource().getModelId() != null ? parentLocation.getSource().getModelId() : "null") + "||" + cloc.getSource().getModelId());
}
InputLocation childLocation = new InputLocation(-1, -1, source);
child.setLocation(NETBEANS_INHERITANCE, childLocation);
super.assembleModelInheritance(child, parent, request, problems);
}
/**
* retrieve the collected inheritance chain from the model.
* @param model null if the data is not present in the model, otherwise an array of InputSource instance, first one is the current model.
* @return
*/
public static InputSource[] getInheritanceSource(Model model) {
InputLocation location = model.getLocation(NETBEANS_INHERITANCE);
if (location != null) {
ArrayList<InputSource> toRet = new ArrayList<InputSource>();
InputSource source = location.getSource();
String locations = source.getLocation();
String models = source.getModelId();
String[] locs = StringUtils.split(locations, "||");
String[] mdls = StringUtils.split(models, "||");
assert locs.length == mdls.length;
int i = 0;
while (i < locs.length) {
InputSource is = new InputSource();
String loc = locs[i];
String mdl = mdls[i];
if (!"null".equals(loc)) {
is.setLocation(loc);
}
if (!"null".equals(mdl)) {
is.setModelId(mdl);
}
toRet.add(0, is);
}
return toRet.toArray(new InputSource[0]);
}
return null;
}
}