blob: 9348098075a3aa0b576d877e87451e7b43ae090a [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.maven.model.building;
import java.io.File;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import org.apache.maven.model.Model;
import org.apache.maven.model.Profile;
import org.apache.maven.model.resolution.ModelResolver;
import org.apache.maven.model.resolution.WorkspaceModelResolver;
/**
* Collects settings that control building of effective models.
*
*/
public class DefaultModelBuildingRequest implements ModelBuildingRequest {
private Model fileModel;
private File pomFile;
private ModelSource modelSource;
private int validationLevel = VALIDATION_LEVEL_STRICT;
private boolean processPlugins;
private boolean twoPhaseBuilding;
private boolean locationTracking;
private List<Profile> profiles;
private List<String> activeProfileIds;
private List<String> inactiveProfileIds;
private Properties systemProperties;
private Properties userProperties;
private Date buildStartTime;
private ModelResolver modelResolver;
private ModelBuildingListener modelBuildingListener;
private ModelCache modelCache;
private WorkspaceModelResolver workspaceResolver;
private TransformerContextBuilder contextBuilder;
private Path rootDirectory;
/**
* Creates an empty request.
*/
public DefaultModelBuildingRequest() {}
/**
* Creates a shallow copy of the specified request.
*
* @param request The request to copy, must not be {@code null}.
*/
public DefaultModelBuildingRequest(ModelBuildingRequest request) {
setPomFile(request.getPomFile());
setModelSource(request.getModelSource());
setValidationLevel(request.getValidationLevel());
setProcessPlugins(request.isProcessPlugins());
setTwoPhaseBuilding(request.isTwoPhaseBuilding());
setLocationTracking(request.isLocationTracking());
setProfiles(request.getProfiles());
setActiveProfileIds(request.getActiveProfileIds());
setInactiveProfileIds(request.getInactiveProfileIds());
setSystemProperties(request.getSystemProperties());
setUserProperties(request.getUserProperties());
setBuildStartTime(request.getBuildStartTime());
setModelResolver(request.getModelResolver());
setModelBuildingListener(request.getModelBuildingListener());
setModelCache(request.getModelCache());
setWorkspaceModelResolver(request.getWorkspaceModelResolver());
setTransformerContextBuilder(request.getTransformerContextBuilder());
setRootDirectory(request.getRootDirectory());
}
@Override
public File getPomFile() {
return pomFile;
}
@Override
public DefaultModelBuildingRequest setPomFile(File pomFile) {
this.pomFile = (pomFile != null) ? pomFile.getAbsoluteFile() : null;
return this;
}
@Override
public synchronized ModelSource getModelSource() {
if (modelSource == null && pomFile != null) {
modelSource = new FileModelSource(pomFile);
}
return modelSource;
}
@Override
public DefaultModelBuildingRequest setModelSource(ModelSource modelSource) {
this.modelSource = modelSource;
return this;
}
@Override
public int getValidationLevel() {
return validationLevel;
}
@Override
public DefaultModelBuildingRequest setValidationLevel(int validationLevel) {
this.validationLevel = validationLevel;
return this;
}
@Override
public boolean isProcessPlugins() {
return processPlugins;
}
@Override
public DefaultModelBuildingRequest setProcessPlugins(boolean processPlugins) {
this.processPlugins = processPlugins;
return this;
}
@Override
public boolean isTwoPhaseBuilding() {
return twoPhaseBuilding;
}
@Override
public DefaultModelBuildingRequest setTwoPhaseBuilding(boolean twoPhaseBuilding) {
this.twoPhaseBuilding = twoPhaseBuilding;
return this;
}
@Override
public boolean isLocationTracking() {
return locationTracking;
}
@Override
public DefaultModelBuildingRequest setLocationTracking(boolean locationTracking) {
this.locationTracking = locationTracking;
return this;
}
@Override
public List<Profile> getProfiles() {
if (profiles == null) {
profiles = new ArrayList<>();
}
return profiles;
}
@Override
public DefaultModelBuildingRequest setProfiles(List<Profile> profiles) {
if (profiles != null) {
this.profiles = new ArrayList<>(profiles);
} else {
this.profiles = null;
}
return this;
}
@Override
public List<String> getActiveProfileIds() {
if (activeProfileIds == null) {
activeProfileIds = new ArrayList<>();
}
return activeProfileIds;
}
@Override
public DefaultModelBuildingRequest setActiveProfileIds(List<String> activeProfileIds) {
if (activeProfileIds != null) {
this.activeProfileIds = new ArrayList<>(activeProfileIds);
} else {
this.activeProfileIds = null;
}
return this;
}
@Override
public List<String> getInactiveProfileIds() {
if (inactiveProfileIds == null) {
inactiveProfileIds = new ArrayList<>();
}
return inactiveProfileIds;
}
@Override
public DefaultModelBuildingRequest setInactiveProfileIds(List<String> inactiveProfileIds) {
if (inactiveProfileIds != null) {
this.inactiveProfileIds = new ArrayList<>(inactiveProfileIds);
} else {
this.inactiveProfileIds = null;
}
return this;
}
@Override
public Properties getSystemProperties() {
if (systemProperties == null) {
systemProperties = new Properties();
}
return systemProperties;
}
@Override
public DefaultModelBuildingRequest setSystemProperties(Properties systemProperties) {
if (systemProperties != null) {
this.systemProperties = new Properties();
synchronized (systemProperties) { // avoid concurrent modification if someone else sets/removes an unrelated
// system property
this.systemProperties.putAll(systemProperties);
}
} else {
this.systemProperties = null;
}
return this;
}
@Override
public Properties getUserProperties() {
if (userProperties == null) {
userProperties = new Properties();
}
return userProperties;
}
@Override
public DefaultModelBuildingRequest setUserProperties(Properties userProperties) {
if (userProperties != null) {
this.userProperties = new Properties();
this.userProperties.putAll(userProperties);
} else {
this.userProperties = null;
}
return this;
}
@Override
public Date getBuildStartTime() {
return buildStartTime;
}
@Override
public ModelBuildingRequest setBuildStartTime(Date buildStartTime) {
this.buildStartTime = buildStartTime;
return this;
}
@Override
public ModelResolver getModelResolver() {
return this.modelResolver;
}
@Override
public DefaultModelBuildingRequest setModelResolver(ModelResolver modelResolver) {
this.modelResolver = modelResolver;
return this;
}
@Override
public ModelBuildingListener getModelBuildingListener() {
return modelBuildingListener;
}
@Override
public ModelBuildingRequest setModelBuildingListener(ModelBuildingListener modelBuildingListener) {
this.modelBuildingListener = modelBuildingListener;
return this;
}
@Override
public ModelCache getModelCache() {
return this.modelCache;
}
@Override
public DefaultModelBuildingRequest setModelCache(ModelCache modelCache) {
this.modelCache = modelCache;
return this;
}
@Override
public Model getFileModel() {
return fileModel;
}
@Override
public ModelBuildingRequest setFileModel(Model fileModel) {
this.fileModel = fileModel;
return this;
}
@Override
public Model getRawModel() {
return null;
}
@Override
public ModelBuildingRequest setRawModel(Model rawModel) {
return this;
}
@Override
public WorkspaceModelResolver getWorkspaceModelResolver() {
return workspaceResolver;
}
@Override
public ModelBuildingRequest setWorkspaceModelResolver(WorkspaceModelResolver workspaceResolver) {
this.workspaceResolver = workspaceResolver;
return this;
}
@Override
public TransformerContextBuilder getTransformerContextBuilder() {
return contextBuilder;
}
@Override
public ModelBuildingRequest setTransformerContextBuilder(TransformerContextBuilder contextBuilder) {
this.contextBuilder = contextBuilder;
return this;
}
@Override
public Path getRootDirectory() {
return rootDirectory;
}
@Override
public ModelBuildingRequest setRootDirectory(Path rootDirectory) {
this.rootDirectory = rootDirectory;
return this;
}
}