blob: 166f46b197ec423e86658282338557cf27b10091 [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
*
* https://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.ivy.core.module.descriptor;
import java.io.File;
import java.io.IOException;
import java.text.ParseException;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.apache.ivy.core.module.id.ArtifactId;
import org.apache.ivy.core.module.id.ModuleId;
import org.apache.ivy.core.module.id.ModuleRevisionId;
import org.apache.ivy.core.module.id.ModuleRules;
import org.apache.ivy.plugins.conflict.ConflictManager;
import org.apache.ivy.plugins.latest.ArtifactInfo;
import org.apache.ivy.plugins.parser.ModuleDescriptorParser;
import org.apache.ivy.plugins.repository.Resource;
import org.apache.ivy.plugins.version.VersionMatcher;
import org.apache.ivy.util.extendable.ExtendableItem;
/**
* Descriptor of a module. This is the Java representation of an ivy.xml
*/
public interface ModuleDescriptor extends ExtendableItem, ArtifactInfo,
DependencyDescriptorMediator {
String DEFAULT_CONFIGURATION = "default";
String CALLER_ALL_CONFIGURATION = "all";
/**
* @return true if this descriptor is a default one, i.e. one generated for a module not
* actually having one.
*/
boolean isDefault();
ModuleRevisionId getModuleRevisionId();
/**
* @return the resolved module revision id; it is never the latest one. If the revision has not
* been resolved, a null revision should be returned by getRevision() of the returned
* ModuleRevisionId. This revision must be the same as the module descriptor resolved
* revision id unless no module descriptor is defined
*/
ModuleRevisionId getResolvedModuleRevisionId();
/**
* This method updates the resolved module revision id
*
* @param revId ModuleRevisionId
*/
void setResolvedModuleRevisionId(ModuleRevisionId revId);
/**
* @return the list of parent descriptors imported via an <extends> element. Only directly
* imported descriptors are included; the parent's parents are not included.
*/
ExtendsDescriptor[] getInheritedDescriptors();
/**
* This method update the resolved publication date
*
* @param publicationDate Date
*/
void setResolvedPublicationDate(Date publicationDate);
String getStatus();
/**
* @return the publication date or null when not known in the descriptor itself.
*/
Date getPublicationDate();
/**
* The publication date of the module revision should be the date at which it has been
* published, i.e. in general the date of any of its published artifacts, since all published
* artifact of a module should follow the same publishing cycle.
*
* @return Date
*/
Date getResolvedPublicationDate();
/**
* @return all the configurations declared by this module as an array. This array is never empty
* (a 'default' conf is assumed when none is declared in the ivy file).
*/
Configuration[] getConfigurations();
String[] getConfigurationsNames();
String[] getPublicConfigurationsNames();
Artifact[] getArtifacts(String conf);
/**
* @return all published artifacts of this module, excluding the artifact corresponding to the
* module descriptor.
* @see #getMetadataArtifact()
*/
Artifact[] getAllArtifacts();
/**
* @return The dependencies of the module. If there are no dependencies return an empty array
* (non null)
*/
DependencyDescriptor[] getDependencies();
/**
* @param matcher VersionMatcher
* @param md ModuleDescriptor
* @return true if the module described by this descriptor depends directly upon the given
* module descriptor
*/
boolean dependsOn(VersionMatcher matcher, ModuleDescriptor md);
/**
* @param confName ditto
* @return Configuration
*/
Configuration getConfiguration(String confName);
/**
* @param id ModuleId
* @return the conflict manager to use for the given ModuleId, or null if no specific conflict
* manager is associated with the given module id in this module descriptor.
*/
ConflictManager getConflictManager(ModuleId id);
/**
* @return the licenses of the module described by this descriptor
*/
License[] getLicenses();
String getHomePage();
String getDescription();
long getLastModified();
/**
* Writes this module descriptor as an ivy file. If this descriptor was obtained through the
* parsing of an ivy file, it should keep the layout of the file the most possible similar to
* the original one.
*
* @param ivyFile
* the destination ivy file
* @throws ParseException if something goes wrong
* @throws IOException if something goes wrong
*/
void toIvyFile(File ivyFile) throws ParseException, IOException;
/**
* @return the ModuleDescriptorParser used to parse this module descriptor, null is no parser was used.
*/
ModuleDescriptorParser getParser();
/**
* @return the resource being the source of this module descriptor, null if no resource
* corresponds to this module descriptor.
*/
Resource getResource();
/**
* Even though the module descriptor is never described as a published artifact of a module in
* the module descriptor itself, it is often useful to consider it as any other artifact of the
* module. This method allows to access to the Artifact object representing this module
* descriptor for this purpose.
*
* @return the Artifact representing this module descriptor itself.
*/
Artifact getMetadataArtifact();
/**
* @return true if this descriptor contains any exclusion rule.
*/
boolean canExclude();
/**
* @param moduleConfs String[]
* @param artifactId ditto
* @return true if an exclude rule of this module attached to any of the given configurations
* matches the given artifact id, and thus exclude it
*/
boolean doesExclude(String[] moduleConfs, ArtifactId artifactId);
/**
* Module Descriptor exclude rules are used to exclude (usually transitive) dependencies for the
* whole module.
*
* @return an array of all {@link ExcludeRule} this module descriptor currently holds.
*/
ExcludeRule[] getAllExcludeRules();
/**
* @return all the {@link DependencyDescriptorMediator}s used by this
* {@link ModuleDescriptor}, as an instance of {@link ModuleRules}.
*/
ModuleRules<DependencyDescriptorMediator> getAllDependencyDescriptorMediators();
/**
* @return the list of xml namespaces used by extra attributes, as Map from prefix to namespace
* URIs. The returned list is never null, it is empty when no extra attribute is used or
* if extra attributes are used without xml namespaces
*/
Map<String, String> getExtraAttributesNamespaces();
/**
* @return the custom info provided in the info tag. All the tags except the description are
* given. The key is the name of the tag, the value is its content.
* @deprecated this method is not returning the full content of the extra info: to get the full
* structure of the extra infos, use getExtraInfos()
*/
@Deprecated
Map<String, String> getExtraInfo();
/**
* @since 2.4.0
* @return a list of extras infos (tag name, attributes and content). All the tags except the
* description are given.
*/
List<ExtraInfoHolder> getExtraInfos();
/**
* @since 2.4.0
* @param tagName String
* @return content from first extrainfo matching with given tag name.
*/
String getExtraInfoContentByTagName(String tagName);
/**
* @since 2.4.0
* @param tagName String
* @return first extrainfo matching with given tag name.
*/
ExtraInfoHolder getExtraInfoByTagName(String tagName);
}