blob: a9851bc0be65f26763aaefb55cfc20f9871e9ff5 [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.easyant.core.report;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.easyant.core.descriptor.PropertyDescriptor;
import org.apache.ivy.core.module.descriptor.ModuleDescriptor;
import org.apache.ivy.core.report.ResolveReport;
/**
* This class represent a report of an easyant module It contains all informations about properties / parameters /
* plugins / etc..
*/
public class EasyAntReport {
private List<TargetReport> targetReports = new ArrayList<TargetReport>();
private List<ExtensionPointReport> extensionPointReports = new ArrayList<ExtensionPointReport>();
private List<ParameterReport> parameterReports = new ArrayList<ParameterReport>();
private Set<ImportedModuleReport> importedModuleReports = new HashSet<ImportedModuleReport>();
private Map<String, PropertyDescriptor> propertyReports = new HashMap<String, PropertyDescriptor>();
private List<TargetReport> targetReportsFromCurrentModule = new ArrayList<TargetReport>();
private List<ExtensionPointReport> extensionPointReportsFromCurrentModule = new ArrayList<ExtensionPointReport>();
private List<ParameterReport> parameterReportsFromCurrentModule = new ArrayList<ParameterReport>();
private Set<ImportedModuleReport> importedModuleReportsFromCurrentModule = new HashSet<ImportedModuleReport>();
private Map<String, PropertyDescriptor> propertyReportsFromCurrentModule = new HashMap<String, PropertyDescriptor>();
private ResolveReport resolveReport;
private ModuleDescriptor moduleDescriptor;
private boolean extensionPointsConfigured;
/**
* Get a list of targets available in this module
*
* @return
*/
public List<TargetReport> getTargetReports() {
return Collections.unmodifiableList(targetReports);
}
public TargetReport getTargetReport(String name) {
if (name == null || name.equals("")) {
throw new IllegalArgumentException("target name cannot be null");
}
for (TargetReport target : targetReports) {
if (target.getName().equals(name)) {
return target;
}
}
return null;
}
/**
* Add a given targetReport to the list of know target
*
* @param targetReport
* a given targeReport
*/
public void addTargetReport(TargetReport targetReport, boolean isCurrentModule) {
if (targetReport == null) {
throw new IllegalArgumentException("targetReport cannot be null");
}
targetReports.add(targetReport);
if (isCurrentModule) {
targetReportsFromCurrentModule.add(targetReport);
}
}
/**
* Get an extension point by its name Return null if no extensionPointReport where found with this name
*
* @param name
* represent the extension point name
* @return an extension point report
*/
public ExtensionPointReport getExtensionPointReport(String name) {
if (name == null || name.equals("")) {
throw new IllegalArgumentException("extension point name cannot be null");
}
maybeConfigureExtensionPoints();
for (ExtensionPointReport extensionPointReport : extensionPointReports) {
if (extensionPointReport.getName().equals(name)) {
return extensionPointReport;
}
}
return null;
}
/**
* Get a list of extension points available in this module
*
* @return a list of extension points
*/
public List<ExtensionPointReport> getExtensionPointReports() {
maybeConfigureExtensionPoints();
return Collections.unmodifiableList(extensionPointReports);
}
private void maybeConfigureExtensionPoints() {
if (!extensionPointsConfigured) {
for (TargetReport targetReport : targetReports) {
if (targetReport.getExtensionPoint() != null) {
for (ExtensionPointReport extensionPointReport : extensionPointReports) {
if (extensionPointReport.getName().equals(targetReport.getExtensionPoint())) {
extensionPointReport.addTargetReport(targetReport);
}
}
}
}
extensionPointsConfigured = true;
}
}
/**
* Add a given extensionPointReport
*
* @param extensionPointReport
* a given extensionPointReport
* @param isCurrentModule
*/
public void addExtensionPointReport(ExtensionPointReport extensionPointReport, boolean isCurrentModule) {
if (extensionPointReport == null) {
throw new IllegalArgumentException("extensionPointReport cannot be null");
}
extensionPointReports.add(extensionPointReport);
if (isCurrentModule) {
extensionPointReportsFromCurrentModule.add(extensionPointReport);
}
}
/**
* Get a list of all parameters defined in this module
*
* @return a list of parameters
*/
public List<ParameterReport> getParameterReports() {
return Collections.unmodifiableList(parameterReports);
}
/**
* Get a parameter reports by its name Return null if not found
*
* @param name
* represent parameter name
* @return a parameter report
*/
public ParameterReport getParameterReport(String parameterName) {
if (parameterName == null || parameterName.equals("")) {
throw new IllegalArgumentException("parameterName cannot be null");
}
for (ParameterReport parameterReport : parameterReports) {
if (parameterReport.getName().equals(parameterName)) {
return parameterReport;
}
}
return null;
}
/**
* Add a parameterReport
*
* @param parameterReport
* a parameterReport
* @param isCurrentModule
*/
public void addParameterReport(ParameterReport parameterReport, boolean isCurrentModule) {
if (parameterReport == null) {
throw new IllegalArgumentException("parameterReport cannot be null");
}
parameterReports.add(parameterReport);
if (isCurrentModule) {
parameterReportsFromCurrentModule.add(parameterReport);
}
}
/**
* Get a list of all imported modules
*
* @return a list of imported modules
*/
public Set<ImportedModuleReport> getImportedModuleReports() {
return Collections.unmodifiableSet(importedModuleReports);
}
/**
* Returns the imported module indicated by the passed parameter.
*
* The method attempts to match either the complete module id, module name or the module alias as specified in the
* build module.
*
* @param module
* name of the module - either module id or the module alias.
*
* @return instance of the exact module report queried for, if such a module exists. it returns null otherwise.
*/
public ImportedModuleReport getImportedModuleReport(String module) {
if (module.indexOf(';') > 0) {
module = module.substring(0, module.indexOf(';'));
}
ImportedModuleReport retVal = null;
for (ImportedModuleReport moduleRep : importedModuleReports) {
if (moduleRep.getModuleMrid() != null && moduleRep.getModuleMrid().startsWith(module)) {
retVal = moduleRep;
break;
} else if (module.equals(moduleRep.getModuleRevisionId().getName())) {
retVal = moduleRep;
break;
} else if (moduleRep.getAs() != null && moduleRep.getAs().equals(module)) {
retVal = moduleRep;
break;
}
if (moduleRep.getEasyantReport() != null) {
retVal = moduleRep.getEasyantReport().getImportedModuleReport(module);
if (retVal != null) {
break;
}
}
}
return retVal;
}
/**
* Add an imported module
*
* @param importedModuleReport
* a report that represent the importedModule
* @param isCurrentModule
*/
public void addImportedModuleReport(ImportedModuleReport importedModuleReport, boolean isCurrentModule) {
if (importedModuleReport == null) {
throw new IllegalArgumentException("importedModuleReport cannot be null");
}
importedModuleReports.add(importedModuleReport);
if (isCurrentModule) {
importedModuleReportsFromCurrentModule.add(importedModuleReport);
}
}
/**
* Add a property
*
* @param propertyName
* the property name
* @param propertyDescriptor
* a property descriptor that contains several info on the propery (description / required or not etc...)
* @param isCurrentModule
*/
public void addPropertyDescriptor(String propertyName, PropertyDescriptor propertyDescriptor,
boolean isCurrentModule) {
if (propertyName == null || propertyDescriptor == null) {
throw new IllegalArgumentException("propertyName and propertyDescriptor cannot be null");
}
addProperty(propertyDescriptor, propertyReports);
if (isCurrentModule) {
addProperty(propertyDescriptor, propertyReportsFromCurrentModule);
}
}
/**
* Add all properties contained in an other propertyDescriptor
*
* @param properties
* a map of propertyDescriptor to inject
*/
public void addAllPropertyDescriptor(Map<String, PropertyDescriptor> properties) {
if (properties == null) {
throw new IllegalArgumentException("properties cannot be null");
}
this.propertyReports.putAll(properties);
}
/**
* Return a map of the properties
*
* @return a map of the properties
*/
public Map<String, PropertyDescriptor> getPropertyDescriptors() {
return Collections.unmodifiableMap(propertyReports);
}
/**
* Get a list of all the properties available in this module or in all imported modules
*
* @return a list of all the properties available in this module or in all imported modules
* @deprecated since 0.10 use getPropertyDescriptors() method instead or getPropertiesFromCurrentModule()
*/
public Map<String, PropertyDescriptor> getAvailableProperties() {
return getPropertyDescriptors();
}
private void addProperty(PropertyDescriptor propertyDescriptor, Map<String, PropertyDescriptor> availableProperties) {
if (availableProperties.containsKey(propertyDescriptor.getName())) {
PropertyDescriptor existingProperty = availableProperties.get(propertyDescriptor.getName());
if (existingProperty.getDescription() == null) {
existingProperty.setDescription(propertyDescriptor.getDescription());
}
if (existingProperty.getBuildConfigurations() == null) {
existingProperty.setBuildConfigurations(propertyDescriptor.getBuildConfigurations());
}
if (existingProperty.getDefaultValue() == null) {
existingProperty.setDefaultValue(propertyDescriptor.getDefaultValue());
}
if (existingProperty.getValue() == null) {
existingProperty.setValue(propertyDescriptor.getValue());
}
availableProperties.put(propertyDescriptor.getName(), existingProperty);
} else {
availableProperties.put(propertyDescriptor.getName(), propertyDescriptor);
}
}
/**
* Return a list of target that are not bound to any extension-points
*/
public List<TargetReport> getUnboundTargets() {
List<TargetReport> targets = new ArrayList<TargetReport>();
for (TargetReport targetReport : targetReports) {
if (targetReport.getExtensionPoint() == null) {
targets.add(targetReport);
}
}
return targets;
}
public ResolveReport getResolveReport() {
return resolveReport;
}
public void setResolveReport(ResolveReport resolveReport) {
this.resolveReport = resolveReport;
}
/**
* Get attached module descriptor
*
* @return attached module descriptor
*/
public ModuleDescriptor getModuleDescriptor() {
return moduleDescriptor;
}
/**
* Set attached module descriptor
*
* @param moduleDescriptor
* attached module descriptor
*/
public void setModuleDescriptor(ModuleDescriptor moduleDescriptor) {
this.moduleDescriptor = moduleDescriptor;
}
public List<TargetReport> getTargetReportsFromCurrentModule() {
return Collections.unmodifiableList(targetReportsFromCurrentModule);
}
public List<ExtensionPointReport> getExtensionPointReportsFromCurrentModule() {
return Collections.unmodifiableList(extensionPointReportsFromCurrentModule);
}
public List<ParameterReport> getParameterReportsFromCurrentModule() {
return Collections.unmodifiableList(parameterReportsFromCurrentModule);
}
public Set<ImportedModuleReport> getImportedModuleReportsFromCurrentModule() {
return Collections.unmodifiableSet(importedModuleReportsFromCurrentModule);
}
public Map<String, PropertyDescriptor> getPropertyReportsFromCurrentModule() {
return Collections.unmodifiableMap(propertyReportsFromCurrentModule);
}
}