You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Richard S. Hall" <he...@ungoverned.org> on 2007/08/15 01:10:34 UTC

Re: svn commit: r565965 - in /felix/sandbox/donsez/urlhandler.maven: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/felix/ src/main/java/org/apache/felix/sandbox/ src/main/java/org/apache/felix/sandbo...

Interesting...

-> richard

On Aug 14, 2007, at 7:13 PM, donsez@apache.org wrote:

> Author: donsez
> Date: Tue Aug 14 16:13:17 2007
> New Revision: 565965
>
> URL: http://svn.apache.org/viewvc?view=rev&rev=565965
> Log:
> creation of the bundle urlhandler.maven
>
> The Maven URLHandler looks for bundles jar files located in the local  
> Maven repository.
> This URLHandler enables to write deployment scripts insensible to  
> version change.
>
> Added:
>     felix/sandbox/donsez/urlhandler.maven/
>     felix/sandbox/donsez/urlhandler.maven/README.txt   (with props)
>     felix/sandbox/donsez/urlhandler.maven/pom.xml   (with props)
>     felix/sandbox/donsez/urlhandler.maven/src/
>     felix/sandbox/donsez/urlhandler.maven/src/main/
>     felix/sandbox/donsez/urlhandler.maven/src/main/java/
>     felix/sandbox/donsez/urlhandler.maven/src/main/java/org/
>     felix/sandbox/donsez/urlhandler.maven/src/main/java/org/apache/
>      
> felix/sandbox/donsez/urlhandler.maven/src/main/java/org/apache/felix/
>      
> felix/sandbox/donsez/urlhandler.maven/src/main/java/org/apache/felix/ 
> sandbox/
>      
> felix/sandbox/donsez/urlhandler.maven/src/main/java/org/apache/felix/ 
> sandbox/urlhandler/
>      
> felix/sandbox/donsez/urlhandler.maven/src/main/java/org/apache/felix/ 
> sandbox/urlhandler/maven/
>      
> felix/sandbox/donsez/urlhandler.maven/src/main/java/org/apache/felix/ 
> sandbox/urlhandler/maven/MavenURLStreamHandlerService.java   (with  
> props)
>      
> felix/sandbox/donsez/urlhandler.maven/src/main/java/org/apache/felix/ 
> sandbox/util/
>      
> felix/sandbox/donsez/urlhandler.maven/src/main/java/org/apache/felix/ 
> sandbox/util/MavenCompliantVersion.java   (with props)
>      
> felix/sandbox/donsez/urlhandler.maven/src/main/java/org/apache/felix/ 
> sandbox/util/Version.java   (with props)
>     felix/sandbox/donsez/urlhandler.maven/src/site/
>     felix/sandbox/donsez/urlhandler.maven/src/site/script.txt   (with  
> props)
>     felix/sandbox/donsez/urlhandler.maven/src/test/
>     felix/sandbox/donsez/urlhandler.maven/src/test/java/
>     felix/sandbox/donsez/urlhandler.maven/src/test/java/org/
>     felix/sandbox/donsez/urlhandler.maven/src/test/java/org/apache/
>      
> felix/sandbox/donsez/urlhandler.maven/src/test/java/org/apache/felix/
>      
> felix/sandbox/donsez/urlhandler.maven/src/test/java/org/apache/felix/ 
> sandbox/
>      
> felix/sandbox/donsez/urlhandler.maven/src/test/java/org/apache/felix/ 
> sandbox/urlhandler/
>      
> felix/sandbox/donsez/urlhandler.maven/src/test/java/org/apache/felix/ 
> sandbox/urlhandler/maven/
>      
> felix/sandbox/donsez/urlhandler.maven/src/test/java/org/apache/felix/ 
> sandbox/urlhandler/maven/test/
>      
> felix/sandbox/donsez/urlhandler.maven/src/test/java/org/apache/felix/ 
> sandbox/urlhandler/maven/test/MavenURLStreamHandlerServiceTest.java    
> (with props)
>      
> felix/sandbox/donsez/urlhandler.maven/src/test/java/org/apache/felix/ 
> sandbox/util/
>      
> felix/sandbox/donsez/urlhandler.maven/src/test/java/org/apache/felix/ 
> sandbox/util/test/
>      
> felix/sandbox/donsez/urlhandler.maven/src/test/java/org/apache/felix/ 
> sandbox/util/test/MavenCompliantVersionTest.java   (with props)
>
> Added: felix/sandbox/donsez/urlhandler.maven/README.txt
> URL:  
> http://svn.apache.org/viewvc/felix/sandbox/donsez/urlhandler.maven/ 
> README.txt?view=auto&rev=565965
> ======================================================================= 
> =======
> --- felix/sandbox/donsez/urlhandler.maven/README.txt (added)
> +++ felix/sandbox/donsez/urlhandler.maven/README.txt Tue Aug 14  
> 16:13:17 2007
> @@ -0,0 +1,29 @@
> +Apache Felix Maven URLHandler
> +Author: Didier Donsez
> +
> +
> +The Maven URLHandler looks for (bundles) jar files located in the  
> local Maven repository.
> +This URLHandler enables to write deployment scripts insensible to  
> version change.
> +
> +
> +URL schema samples:
> +
> +mvn:<groupId>:<artifactId>:<version>
> +	the version of the artifact
> +
> +mvn:<groupId>:<artifactId>
> +	the higher version of the artifact
> +
> +mvn:<groupId>:<artifactId>:(<regexpOnVersion>)
> +	the higher version of the artifact that match the regular  
> expression. Can be use to exclude snapshots, ...
> +
> +mvn:<groupId>:<artifactId>:<version>@<alternativeRepositoryRootURL>
> +	the version of the artifact in a remote repository
> +
> +
> +The default local repository is  
> file:C:\Docume~1\${user.name}\.m2\repository\ (under Windows)
> +
> +TODOLIST
> +--------
> +* use Maven Archiva for updating the local cache ...
> +
>
> Propchange: felix/sandbox/donsez/urlhandler.maven/README.txt
> ----------------------------------------------------------------------- 
> -------
>     svn:eol-style = native
>
> Added: felix/sandbox/donsez/urlhandler.maven/pom.xml
> URL:  
> http://svn.apache.org/viewvc/felix/sandbox/donsez/urlhandler.maven/ 
> pom.xml?view=auto&rev=565965
> ======================================================================= 
> =======
> --- felix/sandbox/donsez/urlhandler.maven/pom.xml (added)
> +++ felix/sandbox/donsez/urlhandler.maven/pom.xml Tue Aug 14 16:13:17  
> 2007
> @@ -0,0 +1,126 @@
> +<!--
> + 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.
> +-->
> +<project>
> +
> +	<properties>
> +		<repositoryLocation>http://www.apache.org/~donsez/dev/felix/</ 
> repositoryLocation>
> +		<description>provides a URLHandler to located bundle jarfiles in  
> the local Maven reposity</description>
> +	</properties>
> +
> +  <parent>
> +    <groupId>org.apache.felix</groupId>
> +    <artifactId>felix</artifactId>
> +    <version>0.9.0-incubator-SNAPSHOT</version>
> +  </parent>
> +  <modelVersion>4.0.0</modelVersion>
> +  <packaging>bundle</packaging>
> +  <name>Apache Felix Maven URLHandler</name>
> +  <artifactId>org.apache.felix.sandbox.urlhandler.maven</artifactId>
> +  <description>${description}</description>
> +  <dependencies>
> +
> +    <dependency>
> +      <groupId>${pom.groupId}</groupId>
> +      <artifactId>org.osgi.core</artifactId>
> +      <version>${pom.version}</version>
> +    </dependency>
> +    <dependency>
> +      <groupId>${pom.groupId}</groupId>
> +      <artifactId>org.osgi.compendium</artifactId>
> +      <version>${pom.version}</version>
> +    </dependency>
> +
> +    <dependency>
> +      <groupId>junit</groupId>
> +      <artifactId>junit</artifactId>
> +      <version>3.8.1</version>
> +      <scope>test</scope>
> +    </dependency>
> +
> +
> +  </dependencies>
> +  <build>
> +    <plugins>
> +      <plugin>
> +        <groupId>org.apache.felix</groupId>
> +        <artifactId>maven-bundle-plugin</artifactId>
> +        <extensions>true</extensions>
> +        <configuration>
> +          <instructions>
> +
> +          	<!-- docs in  
> http://cwiki.apache.org/FELIX/bundle-plugin-for-maven-bnd.html and  
> http://cwiki.apache.org/FELIX/osgi-plugin-for-maven-2.html -->
> +          	
> +            <Import-Package>*</Import-Package>
> +             
> <Private-Package>${pom.artifactId},org.apache.felix.sandbox.util</ 
> Private-Package>
> +
> +             
> <Export-Service>org.osgi.service.url.URLStreamHandlerService</Export- 
> Service>
> +
> +             
> <Bundle-Activator>${pom.artifactId}.MavenURLStreamHandlerService</ 
> Bundle-Activator>
> +
> +            <!--
> +             
> <Bundle-DocURL>${repositoryLocation}${pom.artifactId}/index.html</ 
> Bundle-DocURL>
> +             
> <Bundle-Url>${repositoryLocation}${pom.artifactId}/${pom.artifactId}- 
> ${pom.version}.jar</Bundle-Url>
> +             
> <Bundle-Source>${repositoryLocation}${pom.artifactId}/ 
> ${pom.artifactId}-${pom.version}-src.jar</Bundle-Source>
> +			-->
> +
> +            <!-- for experiment with OBR and Maven -->
> +             
> <Maven-URL>mvn:${pom.groupId}:${pom.artifactId}:${pom.version}</Maven- 
> URL>
> +
> +          </instructions>
> +        </configuration>
> +      </plugin>
> +
> +    </plugins>
> +  </build>
> +
> +  <reporting>
> +	<plugins>
> +      <plugin>
> +        <groupId>org.codehaus.mojo</groupId>
> +  		<artifactId>taglist-maven-plugin</artifactId>
> +  		<configuration>
> +			<tags>
> +				<tag>TODO</tag>
> +				<tag>@todo</tag>
> +				<tag>FIXME</tag>
> +				<tag>XXX</tag>
> +				<tag>CHECKME</tag>
> +			</tags>
> +		</configuration>  		
> +   	  </plugin>
> +    </plugins>
> +  </reporting>
> +
> +  <!--
> +  <repositories>
> +    <repository>
> +      <id>apache.m2.incubator</id>
> +      <name>Apache M2 Incubator Repository</name>
> +       
> <url>http://people.apache.org/repo/m2-incubating-repository/</url>
> +    </repository>
> +  </repositories>
> +  <pluginRepositories>
> +    <pluginRepository>
> +      <id>apache.m2.incubator</id>
> +      <name>Apache M2 Incubator Repository</name>
> +       
> <url>http://people.apache.org/repo/m2-incubating-repository/</url>
> +    </pluginRepository>
> +  </pluginRepositories>
> +  -->
> +</project>
>
> Propchange: felix/sandbox/donsez/urlhandler.maven/pom.xml
> ----------------------------------------------------------------------- 
> -------
>     svn:eol-style = native
>
> Added:  
> felix/sandbox/donsez/urlhandler.maven/src/main/java/org/apache/felix/ 
> sandbox/urlhandler/maven/MavenURLStreamHandlerService.java
> URL:  
> http://svn.apache.org/viewvc/felix/sandbox/donsez/urlhandler.maven/ 
> src/main/java/org/apache/felix/sandbox/urlhandler/maven/ 
> MavenURLStreamHandlerService.java?view=auto&rev=565965
> ======================================================================= 
> =======
> ---  
> felix/sandbox/donsez/urlhandler.maven/src/main/java/org/apache/felix/ 
> sandbox/urlhandler/maven/MavenURLStreamHandlerService.java (added)
> +++  
> felix/sandbox/donsez/urlhandler.maven/src/main/java/org/apache/felix/ 
> sandbox/urlhandler/maven/MavenURLStreamHandlerService.java Tue Aug 14  
> 16:13:17 2007
> @@ -0,0 +1,201 @@
> +/*
> + * 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.felix.sandbox.urlhandler.maven;
> +
> +import java.io.File;
> +import java.io.IOException;
> +import java.net.MalformedURLException;
> +import java.net.URL;
> +import java.net.URLConnection;
> +import java.util.Dictionary;
> +import java.util.Hashtable;
> +import java.util.StringTokenizer;
> +import java.util.regex.Pattern;
> +import java.util.regex.PatternSyntaxException;
> +
> +import org.apache.felix.sandbox.util.MavenCompliantVersion;
> +import org.osgi.framework.BundleActivator;
> +import org.osgi.framework.BundleContext;
> +import org.osgi.framework.ServiceRegistration;
> +import org.osgi.service.url.AbstractURLStreamHandlerService;
> +import org.osgi.service.url.URLConstants;
> +
> +/**
> + * this class provides a URLHandler to located bundle jarfiles in the  
> local Maven reposity.
> + * @author <a href="mailto:dev@felix.apache.org">Felix Project  
> Team</a>
> + */
> +
> +public class MavenURLStreamHandlerService extends  
> AbstractURLStreamHandlerService
> +    implements BundleActivator
> +{
> +	public String MAVEN_URL_HANDLER_PROTOCOL="mvn";
> +	
> +    private BundleContext bundleContext;
> +    private ServiceRegistration serviceRegistration;
> +	/**
> +     * @see  
> org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleConte 
> xt)
> +     */
> +    public void start(BundleContext context) throws Exception
> +    {
> +    	bundleContext=context;
> +        Dictionary prop = new Hashtable();
> +        prop.put(URLConstants.URL_HANDLER_PROTOCOL, new String[] {  
> MAVEN_URL_HANDLER_PROTOCOL });
> +        serviceRegistration=context.registerService(
> +             
> org.osgi.service.url.URLStreamHandlerService.class.getName(), this,  
> prop);
> +    }
> +
> +    /**
> +     * @see  
> org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContex 
> t)
> +     */
> +    public void stop(BundleContext context) throws Exception
> +    {
> +    	serviceRegistration.unregister();
> +    }
> +
> +
> +    /**
> +     * @see  
> org.osgi.service.url.AbstractURLStreamHandlerService#openConnection(jav 
> a.net.URL)
> +     */
> +    public URLConnection openConnection(URL u) throws IOException
> +    {
> +    	 return openConnection(u.toString());
> +    }
> +
> +    /**
> +     * for unit testing purpose only
> +     * since the url handler must be registered at runtime by the  
> osgi framework
> +     */
> +    public URLConnection openConnection(String urlstr) throws  
> IOException
> +    {
> +    	String alternativeRepositoryField=null;
> +    	int index=urlstr.indexOf("@");
> +    	if(index>=0) {
> +    		if(index+1==urlstr.length()) {
> +        		throw new MalformedURLException(urlstr+" syntax is  
> incorrect");	
> +    		}	
> +    		alternativeRepositoryField=urlstr.substring(index+1);
> +    		urlstr=urlstr.substring(0,index);
> +    	}
> +    	
> +    	// translate the mvn url in file url
> +    	
> +    	StringTokenizer st=new StringTokenizer(urlstr,":");
> +    	int countTokens=st.countTokens();
> +    	if(countTokens!=3 && countTokens!=4) {
> +    		throw new MalformedURLException(urlstr+" syntax is incorrect");	
> +    	}
> +    	st.nextToken(); // discard mvn
> +    	String groupId=st.nextToken();
> +    	String artifactId=st.nextToken();
> +    	String versionStr=null;
> +    	Pattern versionPattern = null;
> +    	
> +    	
> +    	if(countTokens==4) {
> +    		versionStr=st.nextToken();
> +    		if(versionStr.startsWith("(")){
> +    			// the version string is a reg exp on artifact version
> +    			try {
> +    				versionPattern=Pattern.compile(versionStr);
> +    			} catch (PatternSyntaxException e){
> +    	    		throw new MalformedURLException("version regexp in " +  
> urlstr+" is incorrect");	    				
> +    			}
> +    		}
> +    	}
> +    	
> +    	// TODO check for a new version to the remote repository !! may  
> be use the Maven Archiva
> +
> +    	String artifactRootUrlStr=null;
> +
> +    	if(alternativeRepositoryField!=null) {
> +	    	artifactRootUrlStr=alternativeRepositoryField
> +	     
> 	 
> +(alternativeRepositoryField.endsWith(""+File.separatorChar)?"":""+File 
> .separatorChar)
> +			+groupId.replace('.', File.separatorChar)+File.separatorChar
> +			+artifactId;
> +			if(countTokens==3 || versionPattern!=null){
> +		    	// TODO may be use the Maven Archiva
> +		    	// TODO list files in the url started by file:
> +				throw new IOException("Can not get the higher version in the  
> repository "+alternativeRepositoryField);									
> +			}
> +	    	
> +    	} else {
> +	    	String mavenRepositoryRootDir;
> +	     
> 	if(System.getProperty("os.name").toLowerCase().startsWith("win")){     
>  	// bundleContext.getProperty(Constants.FRAMEWORK_OS_NAME)
> +	     
> 		mavenRepositoryRootDir="C: 
> \\Docume~1\\"+System.getProperty("user.name")+"\\.m2\\repository\\";    
> 		
> +	    	} else {
> +	     
> 		mavenRepositoryRootDir=System.getProperty("user.dir")+"/.m2/ 
> repository/";    		
> +	    	}
> +	    	String artifactRootDirStr=mavenRepositoryRootDir
> +										+groupId.replace('.', File.separatorChar)+File.separatorChar
> +										+artifactId;
> +			if(countTokens==3 || versionPattern!=null){
> +				// find the higher version that matches with the regexp
> +				File artifactRootDir=new File(artifactRootDirStr);
> +				if(artifactRootDir.isDirectory()){
> +					File files[]=artifactRootDir.listFiles();
> +					
> +					MavenCompliantVersion higherVersion=null;
> +					for (int i = 0; i < files.length; i++) {
> +						File file = files[i];
> +						if(!file.isDirectory()) continue;
> +						String filename=file.getName();
> +						if(versionPattern!=null &&  
> !versionPattern.matcher(filename).matches()){
> +							continue;	
> +						}
> +						try {
> +							// TODO OSGi version could not parser versions terminated by  
> (.+(\\-incubator)?\\-SNAPSHOT$)
> +							MavenCompliantVersion currentVersion=new  
> MavenCompliantVersion(filename);
> +							if(higherVersion==null) {
> +								higherVersion=currentVersion;							
> +							} else {
> +								int res=currentVersion.compareTo(higherVersion);
> +								if(res>0) {
> +									higherVersion=currentVersion;
> +								}
> +							}		
> +						} catch (java.lang.IllegalArgumentException  e) {
> +							continue;
> +						}		
> +					}
> +					if(higherVersion!=null)
> +						versionStr=higherVersion.toString();
> +					else
> +						throw new IOException("No version matches the regexp  
> "+versionPattern);					
> +				} else {
> +					throw new IOException(artifactRootDir+" is not a directory");
> +				}
> +			}
> +			artifactRootUrlStr="file:"+artifactRootDirStr;
> +    	}
> +		
> +		String translatedUrlStr=artifactRootUrlStr+File.separatorChar
> +								+versionStr+File.separatorChar
> +								+artifactId+'-'+versionStr+".jar";
> +		
> +		if(translatedUrlStr.startsWith("http:")) {
> +			translatedUrlStr=translatedUrlStr.replace(File.separatorChar, '/');
> +		}
> +		
> +		//System.err.println(translatedUrlStr);
> +		
> +    	URL translatedUrl=new URL(translatedUrlStr);
> +		return translatedUrl.openConnection();
> +
> +    }
> +}
> \ No newline at end of file
>
> Propchange:  
> felix/sandbox/donsez/urlhandler.maven/src/main/java/org/apache/felix/ 
> sandbox/urlhandler/maven/MavenURLStreamHandlerService.java
> ----------------------------------------------------------------------- 
> -------
>     svn:eol-style = native
>
> Added:  
> felix/sandbox/donsez/urlhandler.maven/src/main/java/org/apache/felix/ 
> sandbox/util/MavenCompliantVersion.java
> URL:  
> http://svn.apache.org/viewvc/felix/sandbox/donsez/urlhandler.maven/ 
> src/main/java/org/apache/felix/sandbox/util/ 
> MavenCompliantVersion.java?view=auto&rev=565965
> ======================================================================= 
> =======
> ---  
> felix/sandbox/donsez/urlhandler.maven/src/main/java/org/apache/felix/ 
> sandbox/util/MavenCompliantVersion.java (added)
> +++  
> felix/sandbox/donsez/urlhandler.maven/src/main/java/org/apache/felix/ 
> sandbox/util/MavenCompliantVersion.java Tue Aug 14 16:13:17 2007
> @@ -0,0 +1,196 @@
> +/*
> + * 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.felix.sandbox.util;
> +
> +import org.osgi.framework.Version;
> +
> +/**
> + * Version identifier for Maven artifacts.
> + * This class reuses for the moment the comparison methods of the  
> org.osgi.framework.Version
> + *
> + * <p>
> + * Version identifiers have four components.
> + * <ol>
> + * <li>Major version. A non-negative integer.</li>
> + * <li>Minor version. A non-negative integer.</li>
> + * <li>Micro version. A non-negative integer.</li>
> + * <li>Qualifier. A text string. See  
> <code>MavenCompliantVersion(String)</code> for the
> + * format of the qualifier string.</li>
> + * </ol>
> + *
> + * <p>
> + * <code>MavenCompliantVersion</code> objects are immutable.
> + *
> + * @author <a href="mailto:dev@felix.apache.org">Felix Project  
> Team</a>
> + * @version $Revision$
> + * $Id$
> + */
> +
> +public class MavenCompliantVersion implements Comparable {
> +	private Version			version;
> +	private static final String	SEPARATOR		= ".";
> +
> +	/**
> +	 * Created a version identifier from the specified string.
> +	 *
> +	 * <p>
> +	 * Here is the grammar for version strings.
> +	 *
> +	 * <pre>
> +	 * version ::= major('.'minor('.'micro(qualifier)?)?)?
> +	 * major ::= digit+
> +	 * minor ::= digit+
> +	 * micro ::= digit+
> +	 * qualifier ::= (alpha|'_'|'-')(alpha|digit|'_'|'-')*
> +	 * digit ::= [0..9]
> +	 * alpha ::= [a..zA..Z]
> +	 * </pre>
> +	 *
> +	 * There must be no whitespace in version.
> +	 *
> +	 * @param versionStr String representation of the version identifier.
> +	 * @throws IllegalArgumentException If <code>version</code> is  
> improperly
> +	 *         formatted.
> +	 */
> +	public MavenCompliantVersion(String versionStr) {
> +		int major = 0;
> +		int minor = 0;
> +		int micro = 0;
> +		String qualifier = "";
> +
> +		try {
> +			int sep1=versionStr.indexOf(SEPARATOR);
> +			if(sep1<0) {
> +				major = Integer.parseInt(versionStr);
> +			} else if (sep1>0 ){
> +				major = Integer.parseInt(versionStr.substring(0, sep1));
> +				
> +				int sep2=versionStr.indexOf(SEPARATOR,sep1+1);
> +				if(sep2<0) {
> +					minor = Integer.parseInt(versionStr.substring(sep1+1));
> +				} else if (sep2>0 ){
> +					minor = Integer.parseInt(versionStr.substring(sep1+1, sep2));
> +
> +					int sep3=sep2+1;
> +					for(;sep3<versionStr.length();sep3++){
> +						if(!Character.isDigit(versionStr.charAt(sep3))){
> +							break;
> +						}
> +					}
> +					
> +					if(sep3<versionStr.length()) {
> +						micro = Integer.parseInt(versionStr.substring(sep2+1,sep3));
> +						qualifier=versionStr.substring(sep3);
> +					} else {
> +						micro = Integer.parseInt(versionStr.substring(sep2+1));						
> +					}
> +				} else {
> +					throw new IllegalArgumentException("invalid format");
> +				}
> +				
> +			} else {
> +				throw new IllegalArgumentException("invalid format");
> +			}
> +		}
> +		catch (NumberFormatException e) {
> +			throw new IllegalArgumentException("invalid format");
> +		}
> +		
> +		version=new Version(major,minor,micro,qualifier);
> +		return;
> +
> +	}
> +
> +	/**
> +	 * Returns the string representation of this version identifier.
> +	 *
> +	 * <p>
> +	 * The format of the version string will be  
> <code>major.minor.micro</code>
> +	 * if qualifier is the empty string or
> +	 * <code>major.minor.microqualifier</code> otherwise.
> +	 *
> +	 * @return The string representation of this version identifier.
> +	 */
> +	public String toString() {
> +		String base = version.getMajor() + SEPARATOR + version.getMinor() +  
> SEPARATOR + version.getMicro();
> +		if (version.getQualifier().length() == 0) {
> +			return base;
> +		}
> +		else {
> +			return base + version.getQualifier();
> +		}
> +	}
> +
> +	/**
> +	 * Returns a hash code value for the object.
> +	 *
> +	 * @return An integer which is a hash code value for this object.
> +	 */
> +	public int hashCode() {
> +		return version.hashCode();
> +	}
> +
> +	/**
> +	 * for equals and compareTo methods
> +	 * @return the version
> +	 */
> +	private Version getVersion() {
> +		return version;
> +	}
> +	
> +	/**
> +	 * Compares this <code>MavenCompliantVersion</code> object to  
> another object.
> +	 * 	 *
> +	 * @param object The <code>MavenCompliantVersion</code> object to be  
> compared.
> +	 * @return <code>true</code> if <code>object</code> is a
> +	 *         <code>MavenCompliantVersion</code> and is equal to this  
> object;
> +	 *         <code>false</code> otherwise.
> +	 */
> +	public boolean equals(Object object) {
> +		if (object == this) { // quicktest
> +			return true;
> +		}
> +
> +		if (!(object instanceof MavenCompliantVersion)) {
> +			return false;
> +		}
> +
> +		MavenCompliantVersion other = (MavenCompliantVersion) object;
> +		return version.equals(other.getVersion());
> +	}
> +
> +	/**
> +	 * Compares this <code>MavenCompliantVersion</code> object to  
> another object.
> +	 *
> +	 * @param object The <code>MavenCompliantVersion</code> object to be  
> compared.
> +	 * @return A negative integer, zero, or a positive integer if this  
> object is
> +	 *         less than, equal to, or greater than the specified
> +	 *         <code>MavenCompliantVersion</code> object.
> +	 * @throws ClassCastException If the specified object is not a
> +	 *         <code>MavenCompliantVersion</code>.
> +	 */
> +	public int compareTo(Object object) {
> +		if (object == this) { // quicktest
> +			return 0;
> +		}
> +		MavenCompliantVersion other = (MavenCompliantVersion) object;
> +		return version.compareTo(other.getVersion()); // TODO do something  
> special for comparison of 1.0.0 with 1.0.0-rc1, 1.0.0-rc2,  
> 1.0.0-SNAPSHOT, ...
> +	}
> +}
>
> Propchange:  
> felix/sandbox/donsez/urlhandler.maven/src/main/java/org/apache/felix/ 
> sandbox/util/MavenCompliantVersion.java
> ----------------------------------------------------------------------- 
> -------
>     svn:eol-style = native
>
> Added:  
> felix/sandbox/donsez/urlhandler.maven/src/main/java/org/apache/felix/ 
> sandbox/util/Version.java
> URL:  
> http://svn.apache.org/viewvc/felix/sandbox/donsez/urlhandler.maven/ 
> src/main/java/org/apache/felix/sandbox/util/Version.java? 
> view=auto&rev=565965
> ======================================================================= 
> =======
> ---  
> felix/sandbox/donsez/urlhandler.maven/src/main/java/org/apache/felix/ 
> sandbox/util/Version.java (added)
> +++  
> felix/sandbox/donsez/urlhandler.maven/src/main/java/org/apache/felix/ 
> sandbox/util/Version.java Tue Aug 14 16:13:17 2007
> @@ -0,0 +1,366 @@
> +/*
> + * $Header:  
> /cvshome/build/org.osgi.framework/src/org/osgi/framework/ 
> Version.java,v 1.16 2006/06/16 16:31:18 hargrave Exp $
> + *
> + * Copyright (c) OSGi Alliance (2004, 2006). All Rights Reserved.
> + *
> + * Licensed 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.felix.sandbox.util;
> +
> +import java.util.NoSuchElementException;
> +import java.util.StringTokenizer;
> +
> +/**
> + * Version identifier for bundles and packages.
> + *
> + * <p>
> + * Version identifiers have four components.
> + * <ol>
> + * <li>Major version. A non-negative integer.</li>
> + * <li>Minor version. A non-negative integer.</li>
> + * <li>Micro version. A non-negative integer.</li>
> + * <li>Qualifier. A text string. See <code>Version(String)</code> for  
> the
> + * format of the qualifier string.</li>
> + * </ol>
> + *
> + * <p>
> + * <code>Version</code> objects are immutable.
> + *
> + * @version $Revision: 1.16 $
> + * @since 1.3
> + */
> +
> +public class Version implements Comparable {
> +	private final int			major;
> +	private final int			minor;
> +	private final int			micro;
> +	private final String		qualifier;
> +	private static final String	SEPARATOR		= ".";					//$NON-NLS-1$
> +
> +	/**
> +	 * The empty version "0.0.0". Equivalent to calling
> +	 * <code>new Version(0,0,0)</code>.
> +	 */
> +	public static final Version	emptyVersion	= new Version(0, 0, 0);
> +
> +	/**
> +	 * Creates a version identifier from the specified numerical  
> components.
> +	 *
> +	 * <p>
> +	 * The qualifier is set to the empty string.
> +	 *
> +	 * @param major Major component of the version identifier.
> +	 * @param minor Minor component of the version identifier.
> +	 * @param micro Micro component of the version identifier.
> +	 * @throws IllegalArgumentException If the numerical components are
> +	 *         negative.
> +	 */
> +	public Version(int major, int minor, int micro) {
> +		this(major, minor, micro, null);
> +	}
> +
> +	/**
> +	 * Creates a version identifier from the specifed components.
> +	 *
> +	 * @param major Major component of the version identifier.
> +	 * @param minor Minor component of the version identifier.
> +	 * @param micro Micro component of the version identifier.
> +	 * @param qualifier Qualifier component of the version identifier. If
> +	 *        <code>null</code> is specified, then the qualifier will be  
> set
> +	 *        to the empty string.
> +	 * @throws IllegalArgumentException If the numerical components are  
> negative
> +	 *         or the qualifier string is invalid.
> +	 */
> +	public Version(int major, int minor, int micro, String qualifier) {
> +		if (qualifier == null) {
> +			qualifier = ""; //$NON-NLS-1$
> +		}
> +
> +		this.major = major;
> +		this.minor = minor;
> +		this.micro = micro;
> +		this.qualifier = qualifier;
> +		//validate();
> +	}
> +
> +	/**
> +	 * Created a version identifier from the specified string.
> +	 *
> +	 * <p>
> +	 * Here is the grammar for version strings.
> +	 *
> +	 * <pre>
> +	 * version ::= major('.'minor('.'micro(qualifier)?)?)?
> +	 * major ::= digit+
> +	 * minor ::= digit+
> +	 * micro ::= digit+
> +	 * qualifier ::= (alpha|'_'|'-')(alpha|digit|'_'|'-')*
> +	 * digit ::= [0..9]
> +	 * alpha ::= [a..zA..Z]
> +	 * </pre>
> +	 *
> +	 * There must be no whitespace in version.
> +	 *
> +	 * @param version String representation of the version identifier.
> +	 * @throws IllegalArgumentException If <code>version</code> is  
> improperly
> +	 *         formatted.
> +	 */
> +	public Version(String version) {
> +		int major = 0;
> +		int minor = 0;
> +		int micro = 0;
> +		String qualifier = ""; //$NON-NLS-1$
> +
> +		try {
> +			int sep1=version.indexOf(SEPARATOR);
> +			if(sep1<0) {
> +				major = Integer.parseInt(version);
> +			} else if (sep1>0 ){
> +				major = Integer.parseInt(version.substring(0, sep1));
> +				
> +				int sep2=version.indexOf(SEPARATOR,sep1+1);
> +				if(sep2<0) {
> +					minor = Integer.parseInt(version.substring(sep1+1));
> +				} else if (sep2>0 ){
> +					minor = Integer.parseInt(version.substring(sep1+1, sep2));
> +
> +					int sep3=sep2+1;
> +					for(;sep3<version.length();sep3++){
> +						if(!Character.isDigit(version.charAt(sep3))){
> +							break;
> +						}
> +					}
> +					
> +					if(sep3<version.length()) {
> +						micro = Integer.parseInt(version.substring(sep2+1,sep3));
> +						qualifier=version.substring(sep3);
> +					} else {
> +						micro = Integer.parseInt(version.substring(sep2+1));						
> +					}
> +				} else {
> +					throw new IllegalArgumentException("invalid format");
> +				}
> +				
> +			} else {
> +				throw new IllegalArgumentException("invalid format");
> +			}
> +		}
> +		catch (NumberFormatException e) {
> +			throw new IllegalArgumentException("invalid format");
> +		}
> +		
> +		this.major = major;
> +		this.minor = minor;
> +		this.micro = micro;
> +		this.qualifier = qualifier;
> +		validate();
> +		return;
> +
> +	}
> +
> +	/**
> +	 * Called by the Version constructors to validate the version  
> components.
> +	 *
> +	 * @throws IllegalArgumentException If the numerical components are  
> negative
> +	 *         or the qualifier string is invalid.
> +	 */
> +	private void validate() {
> +		if (major < 0) {
> +			throw new IllegalArgumentException("negative major"); //$NON-NLS-1$
> +		}
> +		if (minor < 0) {
> +			throw new IllegalArgumentException("negative minor"); //$NON-NLS-1$
> +		}
> +		if (micro < 0) {
> +			throw new IllegalArgumentException("negative micro"); //$NON-NLS-1$
> +		}
> +		int length = qualifier.length();
> +		for (int i = 0; i < length; i++) {
> +			if  
> ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-".ind 
> exOf(qualifier.charAt(i)) == -1) { //$NON-NLS-1$
> +				throw new IllegalArgumentException("invalid qualifier");  
> //$NON-NLS-1$
> +			}
> +		}
> +	}
> +
> +	/**
> +	 * Parses a version identifier from the specified string.
> +	 *
> +	 * <p>
> +	 * See <code>Version(String)</code> for the format of the version  
> string.
> +	 *
> +	 * @param version String representation of the version identifier.  
> Leading
> +	 *        and trailing whitespace will be ignored.
> +	 * @return A <code>Version</code> object representing the version
> +	 *         identifier. If <code>version</code> is <code>null</code>  
> or
> +	 *         the empty string then <code>emptyVersion</code> will be
> +	 *         returned.
> +	 * @throws IllegalArgumentException If <code>version</code> is  
> improperly
> +	 *         formatted.
> +	 */
> +	public static Version parseVersion(String version) {
> +		if (version == null) {
> +			return emptyVersion;
> +		}
> +
> +		version = version.trim();
> +		if (version.length() == 0) {
> +			return emptyVersion;
> +		}
> +
> +		return new Version(version);
> +	}
> +
> +	/**
> +	 * Returns the major component of this version identifier.
> +	 *
> +	 * @return The major component.
> +	 */
> +	public int getMajor() {
> +		return major;
> +	}
> +
> +	/**
> +	 * Returns the minor component of this version identifier.
> +	 *
> +	 * @return The minor component.
> +	 */
> +	public int getMinor() {
> +		return minor;
> +	}
> +
> +	/**
> +	 * Returns the micro component of this version identifier.
> +	 *
> +	 * @return The micro component.
> +	 */
> +	public int getMicro() {
> +		return micro;
> +	}
> +
> +	/**
> +	 * Returns the qualifier component of this version identifier.
> +	 *
> +	 * @return The qualifier component.
> +	 */
> +	public String getQualifier() {
> +		return qualifier;
> +	}
> +
> +	/**
> +	 * Returns the string representation of this version identifier.
> +	 *
> +	 * <p>
> +	 * The format of the version string will be  
> <code>major.minor.micro</code>
> +	 * if qualifier is the empty string or
> +	 * <code>major.minor.micro.qualifier</code> otherwise.
> +	 *
> +	 * @return The string representation of this version identifier.
> +	 */
> +	public String toString() {
> +		String base = major + SEPARATOR + minor + SEPARATOR + micro;
> +		if (qualifier.length() == 0) { //$NON-NLS-1$
> +			return base;
> +		}
> +		else {
> +			return base + qualifier;
> +		}
> +	}
> +
> +	/**
> +	 * Returns a hash code value for the object.
> +	 *
> +	 * @return An integer which is a hash code value for this object.
> +	 */
> +	public int hashCode() {
> +		return (major << 24) + (minor << 16) + (micro << 8)
> +				+ qualifier.hashCode();
> +	}
> +
> +	/**
> +	 * Compares this <code>Version</code> object to another object.
> +	 *
> +	 * <p>
> +	 * A version is considered to be <b>equal to </b> another version if  
> the
> +	 * major, minor and micro components are equal and the qualifier  
> component
> +	 * is equal (using <code>String.equals</code>).
> +	 *
> +	 * @param object The <code>Version</code> object to be compared.
> +	 * @return <code>true</code> if <code>object</code> is a
> +	 *         <code>Version</code> and is equal to this object;
> +	 *         <code>false</code> otherwise.
> +	 */
> +	public boolean equals(Object object) {
> +		if (object == this) { // quicktest
> +			return true;
> +		}
> +
> +		if (!(object instanceof Version)) {
> +			return false;
> +		}
> +
> +		Version other = (Version) object;
> +		return (major == other.major) && (minor == other.minor)
> +				&& (micro == other.micro) && qualifier.equals(other.qualifier);
> +	}
> +
> +	/**
> +	 * Compares this <code>Version</code> object to another object.
> +	 *
> +	 * <p>
> +	 * A version is considered to be <b>less than </b> another version  
> if its
> +	 * major component is less than the other version's major component,  
> or the
> +	 * major components are equal and its minor component is less than  
> the other
> +	 * version's minor component, or the major and minor components are  
> equal
> +	 * and its micro component is less than the other version's micro  
> component,
> +	 * or the major, minor and micro components are equal and it's  
> qualifier
> +	 * component is less than the other version's qualifier component  
> (using
> +	 * <code>String.compareTo</code>).
> +	 *
> +	 * <p>
> +	 * A version is considered to be <b>equal to</b> another version if  
> the
> +	 * major, minor and micro components are equal and the qualifier  
> component
> +	 * is equal (using <code>String.compareTo</code>).
> +	 *
> +	 * @param object The <code>Version</code> object to be compared.
> +	 * @return A negative integer, zero, or a positive integer if this  
> object is
> +	 *         less than, equal to, or greater than the specified
> +	 *         <code>Version</code> object.
> +	 * @throws ClassCastException If the specified object is not a
> +	 *         <code>Version</code>.
> +	 */
> +	public int compareTo(Object object) {
> +		if (object == this) { // quicktest
> +			return 0;
> +		}
> +
> +		Version other = (Version) object;
> +
> +		int result = major - other.major;
> +		if (result != 0) {
> +			return result;
> +		}
> +
> +		result = minor - other.minor;
> +		if (result != 0) {
> +			return result;
> +		}
> +
> +		result = micro - other.micro;
> +		if (result != 0) {
> +			return result;
> +		}
> +
> +		return qualifier.compareTo(other.qualifier);
> +	}
> +}
>
> Propchange:  
> felix/sandbox/donsez/urlhandler.maven/src/main/java/org/apache/felix/ 
> sandbox/util/Version.java
> ----------------------------------------------------------------------- 
> -------
>     svn:eol-style = native
>
> Added: felix/sandbox/donsez/urlhandler.maven/src/site/script.txt
> URL:  
> http://svn.apache.org/viewvc/felix/sandbox/donsez/urlhandler.maven/ 
> src/site/script.txt?view=auto&rev=565965
> ======================================================================= 
> =======
> --- felix/sandbox/donsez/urlhandler.maven/src/site/script.txt (added)
> +++ felix/sandbox/donsez/urlhandler.maven/src/site/script.txt Tue Aug  
> 14 16:13:17 2007
> @@ -0,0 +1,11 @@
> +start  
> file:C: 
> \Docume~1\Donsez\.m2\repository\org\apache\felix\org.apache.felix.sandb 
> ox.urlhandler.maven\0.9.0-incubator- 
> SNAPSHOT\org.apache.felix.sandbox.urlhandler.maven-0.9.0-incubator- 
> SNAPSHOT.jar
> +
> +start  
> mvn:org.apache.felix:org.osgi.core:1.0.0@http://repo1.maven.org/maven2
> +start mvn:org.apache.felix:javax.servlet
> +start mvn:org.apache.felix:org.osgi.compendium:1.0.0
> +start mvn:org.apache.felix:org.apache.felix.scr
> +start mvn:org.apache.felix:org.apache.felix.eventadmin
> +start mvn:org.apache.felix:org.apache.felix.wireadmin
> +
> +rem update <bid> mvn:org.apache.felix:org.apache.felix.<subproject>
> +
>
> Propchange: felix/sandbox/donsez/urlhandler.maven/src/site/script.txt
> ----------------------------------------------------------------------- 
> -------
>     svn:eol-style = native
>
> Added:  
> felix/sandbox/donsez/urlhandler.maven/src/test/java/org/apache/felix/ 
> sandbox/urlhandler/maven/test/MavenURLStreamHandlerServiceTest.java
> URL:  
> http://svn.apache.org/viewvc/felix/sandbox/donsez/urlhandler.maven/ 
> src/test/java/org/apache/felix/sandbox/urlhandler/maven/test/ 
> MavenURLStreamHandlerServiceTest.java?view=auto&rev=565965
> ======================================================================= 
> =======
> ---  
> felix/sandbox/donsez/urlhandler.maven/src/test/java/org/apache/felix/ 
> sandbox/urlhandler/maven/test/MavenURLStreamHandlerServiceTest.java  
> (added)
> +++  
> felix/sandbox/donsez/urlhandler.maven/src/test/java/org/apache/felix/ 
> sandbox/urlhandler/maven/test/MavenURLStreamHandlerServiceTest.java  
> Tue Aug 14 16:13:17 2007
> @@ -0,0 +1,108 @@
> +/*
> + * 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.felix.sandbox.urlhandler.maven.test;
> +
> +import java.io.IOException;
> +import java.net.URL;
> +
> +import  
> org.apache.felix.sandbox.urlhandler.maven.MavenURLStreamHandlerService;
> +
> +import junit.framework.Test;
> +import junit.framework.TestCase;
> +import junit.framework.TestSuite;
> +
> +/**
> + * Unit test for MavenURLStreamHandlerService.
> + * @author <a href="mailto:dev@felix.apache.org">Felix Project  
> Team</a>
> + * @version $Revision$
> + * $Id$
> + */
> +public class MavenURLStreamHandlerServiceTest
> +    extends TestCase
> +{
> +    /**
> +     * Create the test case
> +     *
> +     * @param testName name of the test case
> +     */
> +    public MavenURLStreamHandlerServiceTest( String testName )
> +    {
> +        super( testName );
> +    }
> +
> +    /**
> +     * @return the suite of tests being tested
> +     */
> +    public static Test suite()
> +    {
> +        return new TestSuite( MavenURLStreamHandlerServiceTest.class  
> );
> +    }
> +
> +	private MavenURLStreamHandlerService mavenURLStreamHandlerService;
> +
> +    protected void setUp() throws Exception {
> +    	super.setUp();
> +    	mavenURLStreamHandlerService=new MavenURLStreamHandlerService();
> +    }
> +
> +    /**
> +     */
> +    public void testURLWithGroupidArtifactidVersion() throws  
> IOException
> +    {
> +        	assertNotNull(mavenURLStreamHandlerService.openConnection(
> +                 
> 	"mvn:org.apache.felix:org.osgi.core:0.9.0-incubator-SNAPSHOT"
> +            ) );	
> +    }
> +
> +    /**
> +     */
> +    public void testURLWithGroupidArtifactid() throws IOException
> +    {
> +	        assertNotNull(mavenURLStreamHandlerService.openConnection(
> +	            	"mvn:org.apache.felix:org.osgi.core"
> +	        ) );
> +    }
> +    /**
> +     */
> +    public void testURLWithGroupidArtifactidVersionregexp() throws  
> IOException
> +    {
> +	        //  
> http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html
> +	        assertNotNull(mavenURLStreamHandlerService.openConnection(
> +	             
> 	"mvn:org.apache.felix:org.osgi.core:(0\\.9\\.0(.*SNAPSHOT$))"
> +	        ) );
> +    }
> +
> +    /**
> +     */
> +//    public void testURLWithFileAlternativeRepository() throws  
> IOException
> +//    {
> +//	        assertNull(mavenURLStreamHandlerService.openConnection(
> +//	             
> 	"mvn:org.apache.felix:org.osgi.core:0.9.0-SNAPSHOT@file:C: 
> \\Docume~1\\foobar\\.m2\\repository"
> +//	        ) );
> +//    }
> +
> +    /**
> +     */
> +    public void testURLWithHttpAlternativeRepository() throws  
> IOException
> +    {
> +	        assertNotNull(mavenURLStreamHandlerService.openConnection(
> +	             
> 	"mvn:org.apache.felix:org.osgi.core:1.0.0@http://repo1.maven.org/ 
> maven2"
> +	        ) );
> +    }
> +}
>
> Propchange:  
> felix/sandbox/donsez/urlhandler.maven/src/test/java/org/apache/felix/ 
> sandbox/urlhandler/maven/test/MavenURLStreamHandlerServiceTest.java
> ----------------------------------------------------------------------- 
> -------
>     svn:eol-style = native
>
> Added:  
> felix/sandbox/donsez/urlhandler.maven/src/test/java/org/apache/felix/ 
> sandbox/util/test/MavenCompliantVersionTest.java
> URL:  
> http://svn.apache.org/viewvc/felix/sandbox/donsez/urlhandler.maven/ 
> src/test/java/org/apache/felix/sandbox/util/test/ 
> MavenCompliantVersionTest.java?view=auto&rev=565965
> ======================================================================= 
> =======
> ---  
> felix/sandbox/donsez/urlhandler.maven/src/test/java/org/apache/felix/ 
> sandbox/util/test/MavenCompliantVersionTest.java (added)
> +++  
> felix/sandbox/donsez/urlhandler.maven/src/test/java/org/apache/felix/ 
> sandbox/util/test/MavenCompliantVersionTest.java Tue Aug 14 16:13:17  
> 2007
> @@ -0,0 +1,64 @@
> +/*
> + * 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.felix.sandbox.util.test;
> +
> +import org.apache.felix.sandbox.util.MavenCompliantVersion;
> +
> +import junit.framework.Test;
> +import junit.framework.TestCase;
> +import junit.framework.TestSuite;
> +
> +
> +/**
> + * Unit test for MavenCompliantVersionTest.
> + * @author <a href="mailto:dev@felix.apache.org">Felix Project  
> Team</a>
> + */
> +public class MavenCompliantVersionTest
> +    extends TestCase
> +{
> +    /**
> +     * Create the test case
> +     *
> +     * @param testName name of the test case
> +     */
> +    public MavenCompliantVersionTest( String testName )
> +    {
> +        super( testName );
> +    }
> +
> +    /**
> +     * @return the suite of tests being tested
> +     */
> +    public static Test suite()
> +    {
> +        return new TestSuite( MavenCompliantVersionTest.class );
> +    }
> +
> +    /**
> +     */
> +    public void testMavenCompliantMavenCompliantVersion() throws  
> Exception
> +    {
> +            assertNotNull(new  
> MavenCompliantVersion("0.9.0-incubator-SNAPSHOT"));
> +//            assertEquals(new  
> MavenCompliantVersion(0,9,0,"-incubator-SNAPSHOT"),new  
> MavenCompliantVersion("0.9.0-incubator-SNAPSHOT"));
> +//            assertNotNull(new  
> MavenCompliantVersion(0,9,0,"-incubator-SNAPSHOT").getQualifier());
> +//            assertEquals((new  
> MavenCompliantVersion(0,9,0,"-incubator-SNAPSHOT")).getMajor(),0);
> +//            assertEquals((new  
> MavenCompliantVersion(0,9,0,"-incubator-SNAPSHOT")).getMinor(),9);
> +//            assertEquals((new  
> MavenCompliantVersion(0,9,0,"-incubator-SNAPSHOT")).getMicro(),0);			
> +    }
> +}
>
> Propchange:  
> felix/sandbox/donsez/urlhandler.maven/src/test/java/org/apache/felix/ 
> sandbox/util/test/MavenCompliantVersionTest.java
> ----------------------------------------------------------------------- 
> -------
>     svn:eol-style = native
>
>