/* * 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.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 { public static final String DEFAULT_CONFIGURATION = "default"; public static final String CALLER_ALL_CONFIGURATION = "all"; /** * Returns true if this descriptor is a default one, i.e. one generated for a module not * actually having one. * * @return */ boolean isDefault(); ModuleRevisionId getModuleRevisionId(); /** * The module revision id returned here is the resolved one, i.e. it is never a 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 * * @return */ ModuleRevisionId getResolvedModuleRevisionId(); /** * This method update the resolved module revision id * * @param revId */ void setResolvedModuleRevisionId(ModuleRevisionId revId); /** * Get 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 */ void setResolvedPublicationDate(Date publicationDate); String getStatus(); /** * May be <code>null</code> if unknown in the descriptor itself. * * @return The publication date or <code>null</code> when not knwon. */ 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. */ Date getResolvedPublicationDate(); /** * Returns 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) * * @return all the configurations declared by this module as an array. */ Configuration[] getConfigurations(); String[] getConfigurationsNames(); String[] getPublicConfigurationsNames(); Artifact[] getArtifacts(String conf); /** * Returns all artifacts of this module, excluding the artifact corresponding to the module * descriptor. * * @return all published artifacts of this module * @see #getMetadataArtifact() */ Artifact[] getAllArtifacts(); /** * @retun The dependencies of the module. If there is no dependencies return an empty array (non * null) */ DependencyDescriptor[] getDependencies(); /** * Returns true if the module described by this descriptor dependes directly upon the given * module descriptor * * @param md * @return */ boolean dependsOn(VersionMatcher matcher, ModuleDescriptor md); /** * @param confName * @return */ Configuration getConfiguration(String confName); /** * Returns the conflict manager to use for the given ModuleId, or <code>null</code> if no * specific conflict manager is associated with the given module id in this module descriptor. * * @param id * @return */ ConflictManager getConflictManager(ModuleId id); /** * Returns the licenses of the module described by this descriptor * * @return */ 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 */ void toIvyFile(File ivyFile) throws ParseException, IOException; /** * The ModuleDescriptorParser used to parse this module descriptor, null is no parser was used. * * @return */ ModuleDescriptorParser getParser(); /** * The resource being the source of this module descriptor, null if no resource corresponds to * this module descriptor * * @return */ Resource getResource(); /** * Returns the Artifact representing this module descriptor itself. * <p> * 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. * </p> * * @return the Artifact representing this module descriptor itself. */ Artifact getMetadataArtifact(); /** * Returns true if this descriptor contains any exclusion rule * * @return true if this descriptor contains any exclusion rule */ boolean canExclude(); /** * Returns true if an exclude rule of this module attached to any of the given configurations * matches the given artifact id, and thus exclude it * * @param moduleConfs * @param artifactId * @return */ boolean doesExclude(String[] moduleConfs, ArtifactId artifactId); /** * Returns an array of all the exclude rules this module descriptor currently holds. Module * Descriptor exclude rules are used to exclude (usually transitive) dependencies for the whole * module. * * @return an array of {@link ExcludeRule} this module descriptor holds */ public ExcludeRule[] getAllExcludeRules(); /** * Returns all the dependency descriptor mediators used by this {@link ModuleDescriptor}, as an * instance of {@link ModuleRules}. * <p> * All rules in the {@link ModuleRules} object returned are {@link DependencyDescriptorMediator} * . * </p> * * @return all the dependency descriptor mediators used by this {@link ModuleDescriptor}. */ public ModuleRules/* <DependencyDescriptorMediator> */getAllDependencyDescriptorMediators(); /** * Returns the list of xml namespaces used by extra attributes, as Map from prefix to namespace * URIs. * <p> * The returned list is never <code>null</code>, it is empty when no extra attribute is used or * if extra attributes are used without xml namespaces * </p> * * @return the list of xml namespaces used by extra attributes, as Map from prefix to namespace * URIs. */ Map<String, String> getExtraAttributesNamespaces(); /** * Returns 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. <br /> * * @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(); /** * Returns a list of extras infos (tag name, attributes and content). All the tags except the * description are given. * * @since 2.4.0 * @return */ List<ExtraInfoHolder> getExtraInfos(); /** * Returns content from first extrainfo matching with given tag name * * @since 2.4.0 * @return */ String getExtraInfoContentByTagName(String tagName); /** * Returns first extrainfo matching with given tag name * * @since 2.4.0 * @return */ ExtraInfoHolder getExtraInfoByTagName(String tagName); }