001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one
003     * or more contributor license agreements. See the NOTICE file
004     * distributed with this work for additional information
005     * regarding copyright ownership. The ASF licenses this file
006     * to you under the Apache License, Version 2.0 (the  "License");
007     * you may not use this file except in compliance with the License.
008     * You may obtain a copy of the License at
009     *
010     *     http://www.apache.org/licenses/LICENSE-2.0
011     *
012     * Unless required by applicable law or agreed to in writing, software
013     * distributed under the License is distributed on an "AS IS" BASIS,
014     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015     * See the License for the specific language governing permissions and
016     * limitations under the License.
017     */
018    /*
019     * $Id: Version.java 577939 2007-09-20 21:45:37Z minchau $
020     */
021    package org.apache.xalan;
022    
023    /**
024     * Administrative class to keep track of the version number of
025     * the Xalan release.
026     * <P>This class implements the upcoming standard of having
027     * org.apache.project-name.Version.getVersion() be a standard way 
028     * to get version information.  This class will replace the older 
029     * org.apache.xalan.processor.Version class.</P>
030     * <P>See also: org/apache/xalan/res/XSLTInfo.properties for 
031     * information about the version of the XSLT spec we support.</P>
032     * @xsl.usage general
033     */
034    public class Version
035    {
036    
037      /**
038       * Get the basic version string for the current Xalan release.
039       * Version String formatted like 
040       * <CODE>"<B>Xalan</B> <B>Java</B> v.r[.dd| <B>D</B>nn]"</CODE>.
041       *
042       * Futurework: have this read version info from jar manifest.
043       *
044       * @return String denoting our current version
045       */
046      public static String getVersion()
047      {
048         return getProduct()+" "+getImplementationLanguage()+" "
049               +getMajorVersionNum()+"."+getReleaseVersionNum()+"."
050               +( (getDevelopmentVersionNum() > 0) ? 
051                   ("D"+getDevelopmentVersionNum()) : (""+getMaintenanceVersionNum()));  
052      }
053    
054      /**
055       * Print the processor version to the command line.
056       *
057       * @param argv command line arguments, unused.
058       */
059      public static void main(String argv[])
060      {
061        System.out.println(getVersion());
062      }
063      
064      /**
065       * Name of product: Xalan.
066       */
067      public static String getProduct()
068      {
069        return "Xalan";
070      }
071    
072      /**
073       * Implementation Language: Java.
074       */
075      public static String getImplementationLanguage()
076      {
077        return "Java";
078      }
079      
080      
081      /**
082       * Major version number.
083       * Version number. This changes only when there is a
084       *          significant, externally apparent enhancement from
085       *          the previous release. 'n' represents the n'th
086       *          version.
087       *
088       *          Clients should carefully consider the implications
089       *          of new versions as external interfaces and behaviour
090       *          may have changed.
091       */
092      public static int getMajorVersionNum()
093      {
094        return 2;
095        
096      }  
097    
098      /**
099       * Release Number.
100       * Release number. This changes when:
101       *            -  a new set of functionality is to be added, eg,
102       *               implementation of a new W3C specification.
103       *            -  API or behaviour change.
104       *            -  its designated as a reference release.
105       */
106      public static int getReleaseVersionNum()
107      {
108        return 7;
109      }
110      
111      /**
112       * Maintenance Drop Number.
113       * Optional identifier used to designate maintenance
114       *          drop applied to a specific release and contains
115       *          fixes for defects reported. It maintains compatibility
116       *          with the release and contains no API changes.
117       *          When missing, it designates the final and complete
118       *          development drop for a release.
119       */
120      public static int getMaintenanceVersionNum()
121      {
122        return 1;
123      }
124    
125      /**
126       * Development Drop Number.
127       * Optional identifier designates development drop of
128       *          a specific release. D01 is the first development drop
129       *          of a new release.
130       *
131       *          Development drops are works in progress towards a
132       *          compeleted, final release. A specific development drop
133       *          may not completely implement all aspects of a new
134       *          feature, which may take several development drops to
135       *          complete. At the point of the final drop for the
136       *          release, the D suffix will be omitted.
137       *
138       *          Each 'D' drops can contain functional enhancements as
139       *          well as defect fixes. 'D' drops may not be as stable as
140       *          the final releases.
141       */
142      public static int getDevelopmentVersionNum()
143      { 
144        try {   
145            if ((new String("")).length() == 0)
146              return 0;
147            else  
148              return Integer.parseInt("");
149        } catch (NumberFormatException nfe) {
150               return 0;
151        }    
152      }      
153    }