* ExtensionSet: (Contains set of extensions - oh der) * LibFileSet: allows you to extract a list of extensions from a fileset. It also allows you to explicitly pick certain features to include in extension set (ie don't include implementation attributes or url attributes unless explicitly required) git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@272603 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -0,0 +1,169 @@ | |||||
| /* | |||||
| * The Apache Software License, Version 1.1 | |||||
| * | |||||
| * Copyright (c) 2002 The Apache Software Foundation. All rights | |||||
| * reserved. | |||||
| * | |||||
| * Redistribution and use in source and binary forms, with or without | |||||
| * modification, are permitted provided that the following conditions | |||||
| * are met: | |||||
| * | |||||
| * 1. Redistributions of source code must retain the above copyright | |||||
| * notice, this list of conditions and the following disclaimer. | |||||
| * | |||||
| * 2. Redistributions in binary form must reproduce the above copyright | |||||
| * notice, this list of conditions and the following disclaimer in | |||||
| * the documentation and/or other materials provided with the | |||||
| * distribution. | |||||
| * | |||||
| * 3. The end-user documentation included with the redistribution, if | |||||
| * any, must include the following acknowlegement: | |||||
| * "This product includes software developed by the | |||||
| * Apache Software Foundation (http://www.apache.org/)." | |||||
| * Alternately, this acknowlegement may appear in the software itself, | |||||
| * if and wherever such third-party acknowlegements normally appear. | |||||
| * | |||||
| * 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||||
| * Foundation" must not be used to endorse or promote products derived | |||||
| * from this software without prior written permission. For written | |||||
| * permission, please contact apache@apache.org. | |||||
| * | |||||
| * 5. Products derived from this software may not be called "Apache" | |||||
| * nor may "Apache" appear in their names without prior written | |||||
| * permission of the Apache Group. | |||||
| * | |||||
| * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||||
| * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||||
| * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||||
| * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||||
| * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||||
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||||
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||||
| * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||||
| * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||||
| * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||||
| * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
| * SUCH DAMAGE. | |||||
| * ==================================================================== | |||||
| * | |||||
| * This software consists of voluntary contributions made by many | |||||
| * individuals on behalf of the Apache Software Foundation. For more | |||||
| * information on the Apache Software Foundation, please see | |||||
| * <http://www.apache.org/>. | |||||
| */ | |||||
| package org.apache.tools.ant.taskdefs.optional.extension; | |||||
| import java.util.ArrayList; | |||||
| import java.util.Arrays; | |||||
| import org.apache.tools.ant.BuildException; | |||||
| import org.apache.tools.ant.Project; | |||||
| import org.apache.tools.ant.types.DataType; | |||||
| import org.apache.tools.ant.types.Reference; | |||||
| import org.apache.tools.ant.types.FileSet; | |||||
| /** | |||||
| * The Extension set lists a set of "Optional Packages" / | |||||
| * "Extensions". | |||||
| * | |||||
| * @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||||
| * @version $Revision$ $Date$ | |||||
| * @ant.data-type name="extension-set" | |||||
| */ | |||||
| public class ExtensionSet | |||||
| extends DataType | |||||
| { | |||||
| /** | |||||
| * ExtensionAdapter objects representing extensions. | |||||
| */ | |||||
| private final ArrayList m_extensions = new ArrayList(); | |||||
| /** | |||||
| * Filesets specifying all the extensions wanted. | |||||
| */ | |||||
| private final ArrayList m_extensionsFilesets = new ArrayList(); | |||||
| /** | |||||
| * Adds an extension that this library requires. | |||||
| * | |||||
| * @param extensionAdapter an extension that this library requires. | |||||
| */ | |||||
| public void addExtension( final ExtensionAdapter extensionAdapter ) | |||||
| { | |||||
| m_extensions.add( extensionAdapter ); | |||||
| } | |||||
| /** | |||||
| * Adds a set of files about which extensions data will be extracted. | |||||
| * | |||||
| * @param fileSet a set of files about which extensions data will be extracted. | |||||
| */ | |||||
| public void addLibfileset( final LibFileSet fileSet ) | |||||
| { | |||||
| m_extensionsFilesets.add( fileSet ); | |||||
| } | |||||
| /** | |||||
| * Adds a set of files about which extensions data will be extracted. | |||||
| * | |||||
| * @param fileSet a set of files about which extensions data will be extracted. | |||||
| */ | |||||
| public void addFileset( final FileSet fileSet ) | |||||
| { | |||||
| m_extensionsFilesets.add( fileSet ); | |||||
| } | |||||
| /** | |||||
| * Extract a set of Extension objects from the ExtensionSet. | |||||
| * | |||||
| * @throws BuildException if an error occurs | |||||
| */ | |||||
| public Extension[] toExtensions( final Project project ) | |||||
| throws BuildException | |||||
| { | |||||
| final ArrayList extensions = ExtensionUtil.toExtensions( m_extensions ); | |||||
| ExtensionUtil.extractExtensions( project, extensions, m_extensionsFilesets ); | |||||
| return (Extension[])extensions.toArray( new Extension[ extensions.size() ] ); | |||||
| } | |||||
| /** | |||||
| * Makes this instance in effect a reference to another ExtensionSet | |||||
| * instance. | |||||
| * | |||||
| * <p>You must not set another attribute or nest elements inside | |||||
| * this element if you make it a reference.</p> | |||||
| * | |||||
| * @param reference the reference to which this instance is associated | |||||
| * @exception BuildException if this instance already has been configured. | |||||
| */ | |||||
| public void setRefid( final Reference reference ) | |||||
| throws BuildException | |||||
| { | |||||
| if( !m_extensions.isEmpty() || | |||||
| !m_extensionsFilesets.isEmpty() ) | |||||
| { | |||||
| throw tooManyAttributes(); | |||||
| } | |||||
| // change this to get the objects from the other reference | |||||
| final Object object = | |||||
| reference.getReferencedObject( getProject() ); | |||||
| if( object instanceof ExtensionSet ) | |||||
| { | |||||
| final ExtensionSet other = (ExtensionSet)object; | |||||
| m_extensions.addAll( other.m_extensions ); | |||||
| m_extensionsFilesets.addAll( other.m_extensionsFilesets ); | |||||
| } | |||||
| else | |||||
| { | |||||
| final String message = | |||||
| reference.getRefId() + " doesn\'t refer to a ExtensionSet"; | |||||
| throw new BuildException( message ); | |||||
| } | |||||
| super.setRefid( reference ); | |||||
| } | |||||
| public String toString() | |||||
| { | |||||
| return "ExtensionSet" + Arrays.asList( toExtensions( getProject() ) ); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,238 @@ | |||||
| /* | |||||
| * The Apache Software License, Version 1.1 | |||||
| * | |||||
| * Copyright (c) 2002 The Apache Software Foundation. All rights | |||||
| * reserved. | |||||
| * | |||||
| * Redistribution and use in source and binary forms, with or without | |||||
| * modification, are permitted provided that the following conditions | |||||
| * are met: | |||||
| * | |||||
| * 1. Redistributions of source code must retain the above copyright | |||||
| * notice, this list of conditions and the following disclaimer. | |||||
| * | |||||
| * 2. Redistributions in binary form must reproduce the above copyright | |||||
| * notice, this list of conditions and the following disclaimer in | |||||
| * the documentation and/or other materials provided with the | |||||
| * distribution. | |||||
| * | |||||
| * 3. The end-user documentation included with the redistribution, if | |||||
| * any, must include the following acknowlegement: | |||||
| * "This product includes software developed by the | |||||
| * Apache Software Foundation (http://www.apache.org/)." | |||||
| * Alternately, this acknowlegement may appear in the software itself, | |||||
| * if and wherever such third-party acknowlegements normally appear. | |||||
| * | |||||
| * 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||||
| * Foundation" must not be used to endorse or promote products derived | |||||
| * from this software without prior written permission. For written | |||||
| * permission, please contact apache@apache.org. | |||||
| * | |||||
| * 5. Products derived from this software may not be called "Apache" | |||||
| * nor may "Apache" appear in their names without prior written | |||||
| * permission of the Apache Group. | |||||
| * | |||||
| * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||||
| * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||||
| * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||||
| * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||||
| * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||||
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||||
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||||
| * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||||
| * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||||
| * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||||
| * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
| * SUCH DAMAGE. | |||||
| * ==================================================================== | |||||
| * | |||||
| * This software consists of voluntary contributions made by many | |||||
| * individuals on behalf of the Apache Software Foundation. For more | |||||
| * information on the Apache Software Foundation, please see | |||||
| * <http://www.apache.org/>. | |||||
| */ | |||||
| package org.apache.tools.ant.taskdefs.optional.extension; | |||||
| import java.io.File; | |||||
| import java.util.ArrayList; | |||||
| import java.util.Iterator; | |||||
| import java.util.jar.JarFile; | |||||
| import org.apache.tools.ant.BuildException; | |||||
| import org.apache.tools.ant.DirectoryScanner; | |||||
| import org.apache.tools.ant.Project; | |||||
| import org.apache.tools.ant.types.FileSet; | |||||
| /** | |||||
| * A set of useful methods relating to extensions. | |||||
| * | |||||
| * @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||||
| * @version $Revision$ $Date$ | |||||
| */ | |||||
| public class ExtensionUtil | |||||
| { | |||||
| /** | |||||
| * Convert a list of extensionAdapter objects to extensions. | |||||
| * | |||||
| * @param adapters the list of ExtensionAdapterss to add to convert | |||||
| * @throws BuildException if an error occurs | |||||
| */ | |||||
| static ArrayList toExtensions( final ArrayList adapters ) | |||||
| throws BuildException | |||||
| { | |||||
| final ArrayList results = new ArrayList(); | |||||
| final int size = adapters.size(); | |||||
| for( int i = 0; i < size; i++ ) | |||||
| { | |||||
| final ExtensionAdapter adapter = | |||||
| (ExtensionAdapter)adapters.get( i ); | |||||
| final Extension extension = adapter.toExtension(); | |||||
| results.add( extension ); | |||||
| } | |||||
| return results; | |||||
| } | |||||
| /** | |||||
| * Generate a list of extensions from a specified fileset. | |||||
| * | |||||
| * @param librarys the list to add extensions to | |||||
| * @param fileset the filesets containing librarys | |||||
| * @throws BuildException if an error occurs | |||||
| */ | |||||
| static void extractExtensions( final Project project, | |||||
| final ArrayList librarys, | |||||
| final ArrayList fileset ) | |||||
| throws BuildException | |||||
| { | |||||
| if( !fileset.isEmpty() ) | |||||
| { | |||||
| final Extension[] extensions = getExtensions( project, | |||||
| fileset ); | |||||
| for( int i = 0; i < extensions.length; i++ ) | |||||
| { | |||||
| librarys.add( extensions[ i ] ); | |||||
| } | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Retrieve extensions from the specified librarys. | |||||
| * | |||||
| * @param librarys the filesets for librarys | |||||
| * @return the extensions contained in librarys | |||||
| * @throws BuildException if failing to scan librarys | |||||
| */ | |||||
| private static Extension[] getExtensions( final Project project, | |||||
| final ArrayList librarys ) | |||||
| throws BuildException | |||||
| { | |||||
| final ArrayList extensions = new ArrayList(); | |||||
| final Iterator iterator = librarys.iterator(); | |||||
| while( iterator.hasNext() ) | |||||
| { | |||||
| final FileSet fileSet = (FileSet)iterator.next(); | |||||
| boolean includeImpl = true; | |||||
| boolean includeURL = true; | |||||
| if( fileSet instanceof LibFileSet ) | |||||
| { | |||||
| LibFileSet libFileSet = (LibFileSet)fileSet; | |||||
| includeImpl = libFileSet.isIncludeImpl(); | |||||
| includeURL = libFileSet.isIncludeURL(); | |||||
| } | |||||
| final DirectoryScanner scanner = fileSet.getDirectoryScanner( project ); | |||||
| final File basedir = scanner.getBasedir(); | |||||
| final String[] files = scanner.getIncludedFiles(); | |||||
| for( int i = 0; i < files.length; i++ ) | |||||
| { | |||||
| final File file = new File( basedir, files[ i ] ); | |||||
| loadExtensions( file, extensions, includeImpl, includeURL ); | |||||
| } | |||||
| } | |||||
| return (Extension[])extensions.toArray( new Extension[ extensions.size() ] ); | |||||
| } | |||||
| /** | |||||
| * Load list of available extensions from specified file. | |||||
| * | |||||
| * @param file the file | |||||
| * @param extensionList the list to add available extensions to | |||||
| * @throws BuildException if there is an error | |||||
| */ | |||||
| private static void loadExtensions( final File file, | |||||
| final ArrayList extensionList, | |||||
| final boolean includeImpl, | |||||
| final boolean includeURL ) | |||||
| throws BuildException | |||||
| { | |||||
| try | |||||
| { | |||||
| final JarFile jarFile = new JarFile( file ); | |||||
| final Extension[] extensions = | |||||
| Extension.getAvailable( jarFile.getManifest() ); | |||||
| for( int i = 0; i < extensions.length; i++ ) | |||||
| { | |||||
| final Extension extension = extensions[ i ]; | |||||
| addExtension( extensionList, extension, includeImpl, includeURL ); | |||||
| } | |||||
| } | |||||
| catch( final Exception e ) | |||||
| { | |||||
| throw new BuildException( e.getMessage(), e ); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Add extension to list. | |||||
| * If extension should not have implementation details but | |||||
| * does strip them. If extension should not have url but does | |||||
| * then strip it. | |||||
| * | |||||
| * @param extensionList the list of extensions to add to | |||||
| * @param originalExtension the extension | |||||
| * @param includeImpl false to exclude implementation details | |||||
| * @param includeURL false to exclude implementation URL | |||||
| */ | |||||
| private static void addExtension( final ArrayList extensionList, | |||||
| final Extension originalExtension, | |||||
| final boolean includeImpl, | |||||
| final boolean includeURL ) | |||||
| { | |||||
| Extension extension = originalExtension; | |||||
| if( !includeURL && | |||||
| null != extension.getImplementationURL() ) | |||||
| { | |||||
| extension = | |||||
| new Extension( extension.getExtensionName(), | |||||
| extension.getSpecificationVersion().toString(), | |||||
| extension.getSpecificationVendor(), | |||||
| extension.getImplementationVersion().toString(), | |||||
| extension.getImplementationVendor(), | |||||
| extension.getImplementationVendorID(), | |||||
| null ); | |||||
| } | |||||
| final boolean hasImplAttributes = | |||||
| null != extension.getImplementationURL() || | |||||
| null != extension.getImplementationVersion() || | |||||
| null != extension.getImplementationVendorID() || | |||||
| null != extension.getImplementationVendor(); | |||||
| if( !includeImpl && hasImplAttributes ) | |||||
| { | |||||
| extension = | |||||
| new Extension( extension.getExtensionName(), | |||||
| extension.getSpecificationVersion().toString(), | |||||
| extension.getSpecificationVendor(), | |||||
| null, | |||||
| null, | |||||
| null, | |||||
| extension.getImplementationURL() ); | |||||
| } | |||||
| extensionList.add( extension ); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,165 @@ | |||||
| /* | |||||
| * The Apache Software License, Version 1.1 | |||||
| * | |||||
| * Copyright (c) 2002 The Apache Software Foundation. All rights | |||||
| * reserved. | |||||
| * | |||||
| * Redistribution and use in source and binary forms, with or without | |||||
| * modification, are permitted provided that the following conditions | |||||
| * are met: | |||||
| * | |||||
| * 1. Redistributions of source code must retain the above copyright | |||||
| * notice, this list of conditions and the following disclaimer. | |||||
| * | |||||
| * 2. Redistributions in binary form must reproduce the above copyright | |||||
| * notice, this list of conditions and the following disclaimer in | |||||
| * the documentation and/or other materials provided with the | |||||
| * distribution. | |||||
| * | |||||
| * 3. The end-user documentation included with the redistribution, if | |||||
| * any, must include the following acknowlegement: | |||||
| * "This product includes software developed by the | |||||
| * Apache Software Foundation (http://www.apache.org/)." | |||||
| * Alternately, this acknowlegement may appear in the software itself, | |||||
| * if and wherever such third-party acknowlegements normally appear. | |||||
| * | |||||
| * 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||||
| * Foundation" must not be used to endorse or promote products derived | |||||
| * from this software without prior written permission. For written | |||||
| * permission, please contact apache@apache.org. | |||||
| * | |||||
| * 5. Products derived from this software may not be called "Apache" | |||||
| * nor may "Apache" appear in their names without prior written | |||||
| * permission of the Apache Group. | |||||
| * | |||||
| * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||||
| * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||||
| * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||||
| * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||||
| * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||||
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||||
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||||
| * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||||
| * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||||
| * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||||
| * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
| * SUCH DAMAGE. | |||||
| * ==================================================================== | |||||
| * | |||||
| * This software consists of voluntary contributions made by many | |||||
| * individuals on behalf of the Apache Software Foundation. For more | |||||
| * information on the Apache Software Foundation, please see | |||||
| * <http://www.apache.org/>. | |||||
| */ | |||||
| package org.apache.tools.ant.taskdefs.optional.extension; | |||||
| import org.apache.tools.ant.types.FileSet; | |||||
| /** | |||||
| * LibFileSet represents a fileset containing libraries. | |||||
| * Asociated with the libraries is data pertaining to | |||||
| * how they are to be handled when building manifests. | |||||
| * | |||||
| * @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||||
| * @version $Revision$ $Date$ | |||||
| */ | |||||
| public class LibFileSet | |||||
| extends FileSet | |||||
| { | |||||
| /** | |||||
| * Flag indicating whether should include the | |||||
| * "Implementation-URL" attribute in manifest. | |||||
| * Defaults to false. | |||||
| */ | |||||
| private boolean m_includeURL; | |||||
| /** | |||||
| * Flag indicating whether should include the | |||||
| * "Implementation-*" attributes in manifest. | |||||
| * Defaults to false. | |||||
| */ | |||||
| private boolean m_includeImpl; | |||||
| /** | |||||
| * String that is the base URL for the librarys | |||||
| * when constructing the "Implementation-URL" | |||||
| * attribute. For instance setting the base to | |||||
| * "http://jakarta.apache.org/avalon/libs/" and then | |||||
| * including the library "excalibur-cli-1.0.jar" in the | |||||
| * fileset will result in the "Implementation-URL" attribute | |||||
| * being set to "http://jakarta.apache.org/avalon/libs/excalibur-cli-1.0.jar" | |||||
| * | |||||
| * Note this is only used if the library does not define | |||||
| * "Implementation-URL" itself. | |||||
| * | |||||
| * Note that this also implies includeURL=true | |||||
| */ | |||||
| private String m_urlBase; | |||||
| /** | |||||
| * Flag indicating whether should include the | |||||
| * "Implementation-URL" attribute in manifest. | |||||
| * Defaults to false. | |||||
| * | |||||
| * @param includeURL the flag | |||||
| * @see #m_includeURL | |||||
| */ | |||||
| public void setIncludeUrl( boolean includeURL ) | |||||
| { | |||||
| m_includeURL = includeURL; | |||||
| } | |||||
| /** | |||||
| * Flag indicating whether should include the | |||||
| * "Implementation-*" attributes in manifest. | |||||
| * Defaults to false. | |||||
| * | |||||
| * @param includeImpl the flag | |||||
| * @see #m_includeImpl | |||||
| */ | |||||
| public void setIncludeImpl( boolean includeImpl ) | |||||
| { | |||||
| m_includeImpl = includeImpl; | |||||
| } | |||||
| /** | |||||
| * Set the url base for fileset. | |||||
| * | |||||
| * @param urlBase the base url | |||||
| * @see #m_urlBase | |||||
| */ | |||||
| public void setUrlBase( String urlBase ) | |||||
| { | |||||
| m_urlBase = urlBase; | |||||
| } | |||||
| /** | |||||
| * Get the includeURL flag. | |||||
| * | |||||
| * @return the includeURL flag. | |||||
| */ | |||||
| boolean isIncludeURL() | |||||
| { | |||||
| return m_includeURL; | |||||
| } | |||||
| /** | |||||
| * Get the includeImpl flag. | |||||
| * | |||||
| * @return the includeImpl flag. | |||||
| */ | |||||
| boolean isIncludeImpl() | |||||
| { | |||||
| return m_includeImpl; | |||||
| } | |||||
| /** | |||||
| * Get the urlbase. | |||||
| * | |||||
| * @return the urlbase. | |||||
| */ | |||||
| String getUrlBase() | |||||
| { | |||||
| return m_urlBase; | |||||
| } | |||||
| } | |||||