⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 specification.java

📁 Use the links below to download a source distribution of Ant from one of our mirrors. It is good pra
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* *  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.tools.ant.taskdefs.optional.extension;import java.text.ParseException;import java.util.ArrayList;import java.util.Arrays;import java.util.Iterator;import java.util.Map;import java.util.jar.Attributes;import java.util.jar.Manifest;import org.apache.tools.ant.util.StringUtils;/** * <p>Utility class that represents either an available "Optional Package" * (formerly known as "Standard Extension") as described in the manifest * of a JAR file, or the requirement for such an optional package.</p> * * <p>For more information about optional packages, see the document * <em>Optional Package Versioning</em> in the documentation bundle for your * Java2 Standard Edition package, in file * <code>guide/extensions/versioning.html</code>.</p> * */public final class Specification {    private static final String MISSING = "Missing ";    /**     * Manifest Attribute Name object for SPECIFICATION_TITLE.     */    public static final Attributes.Name SPECIFICATION_TITLE        = Attributes.Name.SPECIFICATION_TITLE;    /**     * Manifest Attribute Name object for SPECIFICATION_VERSION.     */    public static final Attributes.Name SPECIFICATION_VERSION        = Attributes.Name.SPECIFICATION_VERSION;    /**     * Manifest Attribute Name object for SPECIFICATION_VENDOR.     */    public static final Attributes.Name SPECIFICATION_VENDOR        = Attributes.Name.SPECIFICATION_VENDOR;    /**     * Manifest Attribute Name object for IMPLEMENTATION_TITLE.     */    public static final Attributes.Name IMPLEMENTATION_TITLE        = Attributes.Name.IMPLEMENTATION_TITLE;    /**     * Manifest Attribute Name object for IMPLEMENTATION_VERSION.     */    public static final Attributes.Name IMPLEMENTATION_VERSION        = Attributes.Name.IMPLEMENTATION_VERSION;    /**     * Manifest Attribute Name object for IMPLEMENTATION_VENDOR.     */    public static final Attributes.Name IMPLEMENTATION_VENDOR        = Attributes.Name.IMPLEMENTATION_VENDOR;    /**     * Enum indicating that extension is compatible with other Package     * Specification.     */    public static final Compatibility COMPATIBLE =        new Compatibility("COMPATIBLE");    /**     * Enum indicating that extension requires an upgrade     * of specification to be compatible with other Package Specification.     */    public static final Compatibility REQUIRE_SPECIFICATION_UPGRADE =        new Compatibility("REQUIRE_SPECIFICATION_UPGRADE");    /**     * Enum indicating that extension requires a vendor     * switch to be compatible with other Package Specification.     */    public static final Compatibility REQUIRE_VENDOR_SWITCH =        new Compatibility("REQUIRE_VENDOR_SWITCH");    /**     * Enum indicating that extension requires an upgrade     * of implementation to be compatible with other Package Specification.     */    public static final Compatibility REQUIRE_IMPLEMENTATION_CHANGE =        new Compatibility("REQUIRE_IMPLEMENTATION_CHANGE");    /**     * This enum indicates that an extension is incompatible with     * other Package Specification in ways other than other enums     * indicate. For example, the other Package Specification     * may have a different ID.     */    public static final Compatibility INCOMPATIBLE =        new Compatibility("INCOMPATIBLE");    /**     * The name of the Package Specification.     */    private String specificationTitle;    /**     * The version number (dotted decimal notation) of the specification     * to which this optional package conforms.     */    private DeweyDecimal specificationVersion;    /**     * The name of the company or organization that originated the     * specification to which this specification conforms.     */    private String specificationVendor;    /**     * The title of implementation.     */    private String implementationTitle;    /**     * The name of the company or organization that produced this     * implementation of this specification.     */    private String implementationVendor;    /**     * The version string for implementation. The version string is     * opaque.     */    private String implementationVersion;    /**     * The sections of jar that the specification applies to.     */    private String[] sections;    /**     * Return an array of <code>Package Specification</code> objects.     * If there are no such optional packages, a zero-length array is returned.     *     * @param manifest Manifest to be parsed     * @return the Package Specifications extensions in specified manifest     * @throws ParseException if the attributes of the specifications cannot     * be parsed according to their expected formats.     */    public static Specification[] getSpecifications(final Manifest manifest)        throws ParseException {        if (null == manifest) {            return new Specification[ 0 ];        }        final ArrayList results = new ArrayList();        final Map entries = manifest.getEntries();        final Iterator keys = entries.keySet().iterator();        while (keys.hasNext()) {            final String key = (String) keys.next();            final Attributes attributes = (Attributes) entries.get(key);            final Specification specification                = getSpecification(key, attributes);            if (null != specification) {                results.add(specification);            }        }        final ArrayList trimmedResults = removeDuplicates(results);        return (Specification[]) trimmedResults.toArray(new Specification[trimmedResults.size()]);    }    /**     * The constructor to create Package Specification object.     * Note that every component is allowed to be specified     * but only the specificationTitle is mandatory.     *     * @param specificationTitle the name of specification.     * @param specificationVersion the specification Version.     * @param specificationVendor the specification Vendor.     * @param implementationTitle the title of implementation.     * @param implementationVersion the implementation Version.     * @param implementationVendor the implementation Vendor.     */    public Specification(final String specificationTitle,                          final String specificationVersion,                          final String specificationVendor,                          final String implementationTitle,                          final String implementationVersion,                          final String implementationVendor) {        this(specificationTitle, specificationVersion, specificationVendor,              implementationTitle, implementationVersion, implementationVendor,              null);    }    /**     * The constructor to create Package Specification object.     * Note that every component is allowed to be specified     * but only the specificationTitle is mandatory.     *     * @param specificationTitle the name of specification.     * @param specificationVersion the specification Version.     * @param specificationVendor the specification Vendor.     * @param implementationTitle the title of implementation.     * @param implementationVersion the implementation Version.     * @param implementationVendor the implementation Vendor.     * @param sections the sections/packages that Specification applies to.     */    public Specification(final String specificationTitle,                          final String specificationVersion,                          final String specificationVendor,                          final String implementationTitle,                          final String implementationVersion,                          final String implementationVendor,                          final String[] sections) {        this.specificationTitle = specificationTitle;        this.specificationVendor = specificationVendor;        if (null != specificationVersion) {            try {                this.specificationVersion                    = new DeweyDecimal(specificationVersion);            } catch (final NumberFormatException nfe) {                final String error = "Bad specification version format '"                    + specificationVersion + "' in '" + specificationTitle                    + "'. (Reason: " + nfe + ")";                throw new IllegalArgumentException(error);            }        }        this.implementationTitle = implementationTitle;        this.implementationVendor = implementationVendor;        this.implementationVersion = implementationVersion;        if (null == this.specificationTitle) {            throw new NullPointerException("specificationTitle");        }        String[] copy = null;        if (null != sections) {            copy = new String[ sections.length ];            System.arraycopy(sections, 0, copy, 0, sections.length);        }        this.sections = copy;    }    /**     * Get the title of the specification.     *     * @return the title of speciication     */    public String getSpecificationTitle() {        return specificationTitle;    }    /**     * Get the vendor of the specification.     *     * @return the vendor of the specification.     */    public String getSpecificationVendor() {        return specificationVendor;    }    /**     * Get the title of the specification.     *     * @return the title of the specification.     */    public String getImplementationTitle() {        return implementationTitle;    }    /**     * Get the version of the specification.     *     * @return the version of the specification.     */    public DeweyDecimal getSpecificationVersion() {        return specificationVersion;    }    /**     * Get the vendor of the extensions implementation.     *     * @return the vendor of the extensions implementation.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -