Author: ogusakov Date: Mon Oct 13 10:48:23 2008 New Revision: 704182 URL: http://svn.apache.org/viewvc?rev=704182&view=rev Log: added FS based metadata cache implementation
Added: maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/ (with props) maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/pom.xml maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/CachedGAMetadata.java maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/CachedGAVMetadata.java maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/CachedMetadata.java maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/Messages.properties maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/MetadataCacheFs.java maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/mdo/ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/mdo/cached-metadata.mdo maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/java/ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/java/org/ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/java/org/apache/ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/java/org/apache/maven/ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/java/org/apache/maven/mercury/ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/java/org/apache/maven/mercury/repository/ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/java/org/apache/maven/mercury/repository/cache/ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/java/org/apache/maven/mercury/repository/cache/fs/ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/java/org/apache/maven/mercury/repository/cache/fs/CachedGATest.java maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/java/org/apache/maven/mercury/repository/cache/fs/CachedGAVTest.java maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/resources/ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/resources/ga-metadata.xml maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/resources/gav-metadata.xml Modified: maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryGAMetadata.java maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryGAVMetadata.java maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryMetadataCache.java maven/mercury/trunk/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/ArtifactLocation.java maven/mercury/trunk/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2.java maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java maven/mercury/trunk/mercury-repo/pom.xml maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/FileUtil.java Modified: maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryGAMetadata.java URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryGAMetadata.java?rev=704182&r1=704181&r2=704182&view=diff ============================================================================== --- maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryGAMetadata.java (original) +++ maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryGAMetadata.java Mon Oct 13 10:48:23 2008 @@ -26,14 +26,18 @@ { private static final Language _lang = new DefaultLanguage( RepositoryGAVMetadata.class ); - ArtifactCoordinates ga; + protected ArtifactCoordinates ga; /** a list of last discovered versions, ordered ascending */ - protected TreeSet<String> versions; + protected TreeSet<String> versions = new TreeSet<String>( new VersionComparator() ); /** GMT timestamp of the last metadata check */ protected long lastCheck; + protected RepositoryGAMetadata() + { + } + /** * @param versions * @param lastCheck @@ -41,7 +45,6 @@ public RepositoryGAMetadata( ArtifactCoordinates ga, Collection<String> versions ) { this.ga = ga; - this.versions = new TreeSet<String>( new VersionComparator() ); if( ! Util.isEmpty( versions ) ) this.versions.addAll( versions ); @@ -64,8 +67,6 @@ this.ga = new ArtifactCoordinates( md.getGroupId(), md.getArtifactId(), md.getVersion() ); - this.versions = new TreeSet<String>( new VersionComparator() ); - List<String> vers = null; if( md.getVersioning() != null ) Modified: maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryGAVMetadata.java URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryGAVMetadata.java?rev=704182&r1=704181&r2=704182&view=diff ============================================================================== --- maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryGAVMetadata.java (original) +++ maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryGAVMetadata.java Mon Oct 13 10:48:23 2008 @@ -26,16 +26,20 @@ { private static final Language _lang = new DefaultLanguage( RepositoryGAVMetadata.class ); - ArtifactCoordinates gav; + protected ArtifactCoordinates gav; /** a list of last discovered snapshots, ordered descending */ - protected TreeSet<String> snapshots; + protected TreeSet<String> snapshots = new TreeSet<String>( new VersionComparator() ); /** a list of last discovered versions, ordered ascending */ protected Collection<String> classifiers; /** GMT timestamp of the last metadata check */ protected long lastCheck; + + protected RepositoryGAVMetadata() + { + } /** * initialization of md object from scratch @@ -47,8 +51,6 @@ { this.gav = gav; - this.snapshots = new TreeSet<String>( new VersionComparator() ); - if( !Util.isEmpty( snapshots ) ) this.snapshots.addAll( snapshots ); @@ -72,8 +74,6 @@ this.gav = new ArtifactCoordinates( md.getGroupId(), md.getArtifactId(), md.getVersion() ); - this.snapshots = new TreeSet<String>( new VersionComparator() ); - List<String> versions = null; if( md.getVersioning() != null ) Modified: maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryMetadataCache.java URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryMetadataCache.java?rev=704182&r1=704181&r2=704182&view=diff ============================================================================== --- maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryMetadataCache.java (original) +++ maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryMetadataCache.java Mon Oct 13 10:48:23 2008 @@ -1,9 +1,6 @@ package org.apache.maven.mercury.repository.api; -import java.util.Collection; - import org.apache.maven.mercury.artifact.ArtifactBasicMetadata; -import org.apache.maven.mercury.repository.metadata.Metadata; /** * this object abstracts the existence of multiple repositories and repository @@ -18,26 +15,18 @@ public interface RepositoryMetadataCache { /** - * initialize cache implementor with a collection of remote repositories. Order - * does not matter here because access is defined by repository policy. - * - * @param repos - */ - public void init( Collection<RemoteRepository> repos ); - - /** - * check if GA level metadata exists in this cache + * check if GA level metadata exists in this cache for the given repo. Read from repo, if does not exists * * @param bmd - bare GA coordinates of the requisted metadata * @return */ - public RepositoryGAMetadata findGA( ArtifactBasicMetadata bmd ); + public RepositoryGAMetadata findGA( RemoteRepository repo, ArtifactBasicMetadata bmd ); /** - * check if GAV level metadata exists in this cache + * check if GAV level metadata exists in this cache for the given repo. Read from repo, if does not exists * * @param bmd - bare GAV coordinates of the requisted metadata * @return */ - public RepositoryGAMetadata findGAV( ArtifactBasicMetadata bmd ); + public RepositoryGAMetadata findGAV( RemoteRepository repo, ArtifactBasicMetadata bmd ); } Propchange: maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/ ------------------------------------------------------------------------------ --- svn:ignore (added) +++ svn:ignore Mon Oct 13 10:48:23 2008 @@ -0,0 +1,4 @@ +.settings +target +.classpath +.project Added: maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/pom.xml URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/pom.xml?rev=704182&view=auto ============================================================================== --- maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/pom.xml (added) +++ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/pom.xml Mon Oct 13 10:48:23 2008 @@ -0,0 +1,45 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <groupId>org.apache.maven.mercury</groupId> + <parent> + <groupId>org.apache.maven.mercury</groupId> + <artifactId>mercury-repo</artifactId> + <version>1.0.0-alpha-2-SNAPSHOT</version> + </parent> + <artifactId>mercury-repo-cache-fs</artifactId> + <name>Mercury Repository FS Cahe: ${project.version}</name> + + <build> + <plugins> + <plugin> + <groupId>org.codehaus.modello</groupId> + <artifactId>modello-maven-plugin</artifactId> + <!-- + <version>1.0-alpha-17</version> + --> + <configuration> + <version>1.0.0</version> + <model>src/main/mdo/cached-metadata.mdo</model> + </configuration> + <executions> + <execution> + <id>standard</id> + <goals> + <goal>java</goal> + <goal>xpp3-reader</goal> + <goal>xpp3-writer</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> + + <dependencies> + <dependency> + <groupId>org.apache.maven.mercury</groupId> + <artifactId>mercury-repo-api</artifactId> + <version>${project.version}</version> + </dependency> + </dependencies> +</project> \ No newline at end of file Added: maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/CachedGAMetadata.java URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/CachedGAMetadata.java?rev=704182&view=auto ============================================================================== --- maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/CachedGAMetadata.java (added) +++ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/CachedGAMetadata.java Mon Oct 13 10:48:23 2008 @@ -0,0 +1,88 @@ +package org.apache.maven.mercury.repository.cache.fs; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.List; + +import org.apache.maven.mercury.artifact.ArtifactCoordinates; +import org.apache.maven.mercury.repository.api.MetadataCorruptionException; +import org.apache.maven.mercury.repository.api.RepositoryGAMetadata; +import org.apache.maven.mercury.repository.metadata.MetadataException; +import org.apache.maven.mercury.util.Util; +import org.codehaus.plexus.util.xml.pull.XmlPullParserException; + +/** + * + * + * @author Oleg Gusakov + * @version $Id$ + * + */ +public class CachedGAMetadata +extends RepositoryGAMetadata +{ + public static final String ELEM_COORDINATES = "coordinates"; + public static final String ATTR_GROUP_ID = "groupId"; + public static final String ATTR_ARTIFACT_ID = "artifactId"; + public static final String ATTR_VERSION = "version"; + + public static final String ELEM_VERSIONS = "versions"; + + CachedMetadata cm; + + public CachedGAMetadata( File mdFile ) + throws FileNotFoundException, IOException, XmlPullParserException, MetadataCorruptionException + { + cm = new CachedMetadata( mdFile ); + fromXml(); + } + + public CachedGAMetadata( byte [] mdBytes ) + throws MetadataException + { + super( mdBytes ); + + cm = new CachedMetadata(); + + toXml(); + } + + /** + * fill GA with data from cm + * + * @throws MetadataCorruptionException + */ + private void fromXml() + throws MetadataCorruptionException + { + ga = new ArtifactCoordinates( + cm.getAttribute( ELEM_COORDINATES, ATTR_GROUP_ID, true ) + , cm.getAttribute( ELEM_COORDINATES, ATTR_ARTIFACT_ID, true ) + , null + ); + + List<String> verList = cm.findAttributes( ELEM_VERSIONS, ATTR_VERSION ); + + if( ! Util.isEmpty( verList ) ) + this.versions.addAll( verList ); + + String lChk = cm.getLastUpdate(); + + lastCheck = Long.parseLong( lChk ); + } + + private void toXml() + { + cm.clean(); + + cm.setAttribute( ELEM_COORDINATES, ATTR_GROUP_ID, ga.getGroupId() ); + cm.setAttribute( ELEM_COORDINATES, ATTR_ARTIFACT_ID, ga.getArtifactId() ); + + if( !Util.isEmpty( versions ) ) + cm.setAttribute( ELEM_VERSIONS, ATTR_VERSION, versions ); + + cm.setLastUpdate( ""+lastCheck ); + } + +} Added: maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/CachedGAVMetadata.java URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/CachedGAVMetadata.java?rev=704182&view=auto ============================================================================== --- maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/CachedGAVMetadata.java (added) +++ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/CachedGAVMetadata.java Mon Oct 13 10:48:23 2008 @@ -0,0 +1,95 @@ +package org.apache.maven.mercury.repository.cache.fs; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.List; + +import org.apache.maven.mercury.artifact.ArtifactCoordinates; +import org.apache.maven.mercury.repository.api.MetadataCorruptionException; +import org.apache.maven.mercury.repository.api.RepositoryGAMetadata; +import org.apache.maven.mercury.repository.api.RepositoryGAVMetadata; +import org.apache.maven.mercury.repository.metadata.Metadata; +import org.apache.maven.mercury.repository.metadata.MetadataException; +import org.apache.maven.mercury.util.Util; +import org.codehaus.plexus.util.xml.pull.XmlPullParserException; + +/** + * + * + * @author Oleg Gusakov + * @version $Id$ + * + */ +public class CachedGAVMetadata +extends RepositoryGAVMetadata +{ + public static final String ELEM_SNAPSHOTS = "snapshots"; + public static final String ATTR_SNAPSHOT = "snapshot"; + + public static final String ELEM_CLASSIFIERS = "classifiers"; + public static final String ATTR_CLASSIFIER = "classifier"; + + CachedMetadata cm; + + public CachedGAVMetadata( File mdFile ) + throws FileNotFoundException, IOException, XmlPullParserException, MetadataCorruptionException + { + cm = new CachedMetadata( mdFile ); + fromXml(); + } + + public CachedGAVMetadata( byte [] mdBytes ) + throws MetadataException + { + super( mdBytes ); + + cm = new CachedMetadata(); + + toXml(); + } + + /** + * fill GA with data from cm + * + * @throws MetadataCorruptionException + */ + private void fromXml() + throws MetadataCorruptionException + { + gav = new ArtifactCoordinates( + cm.getAttribute( CachedGAMetadata.ELEM_COORDINATES, CachedGAMetadata.ATTR_GROUP_ID, true ) + , cm.getAttribute( CachedGAMetadata.ELEM_COORDINATES, CachedGAMetadata.ATTR_ARTIFACT_ID, true ) + , cm.getAttribute( CachedGAMetadata.ELEM_COORDINATES, CachedGAMetadata.ATTR_VERSION, true ) + ); + + List<String> snList = cm.findAttributes( ELEM_SNAPSHOTS, ATTR_SNAPSHOT ); + + if( ! Util.isEmpty( snList ) ) + this.snapshots.addAll( snList ); + + List<String> clList = cm.findAttributes( ELEM_CLASSIFIERS, ATTR_CLASSIFIER ); + + if( ! Util.isEmpty( clList ) ) + this.classifiers.addAll( clList ); + + String lChk = cm.getLastUpdate(); + + lastCheck = Long.parseLong( lChk ); + } + + private void toXml() + { + cm.clean(); + + cm.setAttribute( CachedGAMetadata.ELEM_COORDINATES, CachedGAMetadata.ATTR_GROUP_ID, gav.getGroupId() ); + cm.setAttribute( CachedGAMetadata.ELEM_COORDINATES, CachedGAMetadata.ATTR_ARTIFACT_ID, gav.getArtifactId() ); + cm.setAttribute( CachedGAMetadata.ELEM_COORDINATES, CachedGAMetadata.ATTR_VERSION, gav.getVersion() ); + + if( !Util.isEmpty( snapshots ) ) + cm.setAttribute( ELEM_SNAPSHOTS, ATTR_SNAPSHOT, snapshots ); + + cm.setLastUpdate( ""+lastCheck ); + } + +} Added: maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/CachedMetadata.java URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/CachedMetadata.java?rev=704182&view=auto ============================================================================== --- maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/CachedMetadata.java (added) +++ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/CachedMetadata.java Mon Oct 13 10:48:23 2008 @@ -0,0 +1,212 @@ +package org.apache.maven.mercury.repository.cache.fs; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import org.apache.maven.mercury.repository.api.MetadataCorruptionException; +import org.apache.maven.mercury.repository.api.RepositoryGAVMetadata; +import org.apache.maven.mercury.repository.cache.md.Attribute; +import org.apache.maven.mercury.repository.cache.md.CachedRawMetadata; +import org.apache.maven.mercury.repository.cache.md.Element; +import org.apache.maven.mercury.repository.cache.md.io.xpp3.CachedMetadataXpp3Reader; +import org.apache.maven.mercury.repository.cache.md.io.xpp3.CachedMetadataXpp3Writer; +import org.apache.maven.mercury.util.Util; +import org.codehaus.plexus.lang.DefaultLanguage; +import org.codehaus.plexus.lang.Language; +import org.codehaus.plexus.util.xml.pull.XmlPullParserException; + +/** + * metadata serialization helper - saves/restores element/attribute xml. + * + * @author Oleg Gusakov + * @version $Id$ + * + */ +class CachedMetadata +{ + private static final Language _lang = new DefaultLanguage( CachedMetadata.class ); + + private CachedRawMetadata crm; + + private File mdFile; + + private static CachedRawMetadata readRawMetadata( File mdFile ) + throws FileNotFoundException, IOException, XmlPullParserException + { + CachedMetadataXpp3Reader reader = new CachedMetadataXpp3Reader(); + return reader.read( new FileReader(mdFile) ); + } + + private static void writeRawMetadata( CachedRawMetadata cmd, File mdFile ) + throws FileNotFoundException, IOException, XmlPullParserException + { + CachedMetadataXpp3Writer writer = new CachedMetadataXpp3Writer(); + writer.write( new FileWriter(mdFile), cmd ); + } + + protected CachedMetadata() + { + crm = new CachedRawMetadata(); + } + + protected CachedMetadata( File mdFile ) + throws FileNotFoundException, IOException, XmlPullParserException + { + if( mdFile.exists() ) + crm = readRawMetadata( mdFile ); + else + crm = new CachedRawMetadata(); + + this.mdFile = mdFile; + } + + public void save( File mdFile ) + throws FileNotFoundException, IOException, XmlPullParserException + { + writeRawMetadata( crm, mdFile ); + } + + protected Element findElement( String elem ) + { + List<Element> el = crm.getElements(); + if( Util.isEmpty( el ) ) + { + el = new ArrayList<Element>(); + crm.setElements( el ); + } + + Element e = null; + + for( Element le : el ) + if( le.getName().equals( elem ) ) + { + e = le; + break; + } + + if( e == null ) + { + e = new Element(); + e.setName( elem ); + el.add( e ); + } + + return e; + } + + protected void cleanAttribute( Element e, String attr ) + { + List<Attribute> al = e.getAttributes(); + + if( Util.isEmpty( al )) + return; + + int sz = al.size(); + + for( int i= (sz-1); i >= 0; i-- ) + { + Attribute a = al.get( i ); + if( a.getName().equals( attr ) ) + al.remove( i ); + } + } + + protected List<String> findAttributes( Element e, String attr ) + { + List<Attribute> al = e.getAttributes(); + + if( Util.isEmpty( al )) + { + al = new ArrayList<Attribute>(); + e.setAttributes( al ); + return null; + } + + List<String> a = null; + + for( Attribute la : al ) + if( la.getName().equals( attr ) ) + { + if( a == null ) + a = new ArrayList<String>(); + a.add( la.getValue() ); + } + + return a; + } + + protected List<String> findAttributes( String elem, String attr ) + { + Element e = findElement( elem ); + return findAttributes( e, attr ); + } + + protected String getAttribute( String elem, String attr, boolean mandatory ) + throws MetadataCorruptionException + { + Element e = findElement( elem ); + + List<String> a = findAttributes( e, attr ); + + if( Util.isEmpty( a ) ) + if( mandatory ) + throw new MetadataCorruptionException( _lang.getMessage( "no.mandatory.attribute", elem, attr ) ); + else + return null; + + return a.get( 0 ); + } + + protected void addAttribute( Element e, String attr, String val ) + { + List<Attribute> al = e.getAttributes(); + if( al == null ) + { + al = new ArrayList<Attribute>(); + e.setAttributes( al ); + } + + Attribute a = new Attribute(); + a.setName( attr ); + a.setValue( val ); + + al.add( a ); + } + + protected void setAttribute( String elem, String attr, String val) + { + Element e = findElement( elem ); + cleanAttribute( e, attr ); + addAttribute( e, attr, val ); + } + + protected void setAttribute( String elem, String attr, Collection<String> vals ) + { + Element e = findElement( elem ); + cleanAttribute( e, attr ); + for( String val : vals ) + addAttribute( e, attr, val ); + } + + protected void setLastUpdate( String lastUpdated ) + { + crm.setLastUpdated( lastUpdated ); + } + + protected String getLastUpdate() + { + return crm.getLastUpdated(); + } + + protected void clean() + { + crm.setElements( null ); + } + +} Added: maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/Messages.properties URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/Messages.properties?rev=704182&view=auto ============================================================================== --- maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/Messages.properties (added) +++ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/Messages.properties Mon Oct 13 10:48:23 2008 @@ -0,0 +1,2 @@ +bad.root.file=bad root folder {0} +no.mandatory.attribute=for element {0} mandatory attribute {1} is missing \ No newline at end of file Added: maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/MetadataCacheFs.java URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/MetadataCacheFs.java?rev=704182&view=auto ============================================================================== --- maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/MetadataCacheFs.java (added) +++ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/MetadataCacheFs.java Mon Oct 13 10:48:23 2008 @@ -0,0 +1,121 @@ +package org.apache.maven.mercury.repository.cache.fs; + +import java.io.File; +import java.io.IOException; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import org.apache.maven.mercury.artifact.Artifact; +import org.apache.maven.mercury.artifact.ArtifactBasicMetadata; +import org.apache.maven.mercury.artifact.Quality; +import org.apache.maven.mercury.repository.api.RemoteRepository; +import org.apache.maven.mercury.repository.api.RepositoryGAMetadata; +import org.apache.maven.mercury.repository.api.RepositoryGAVMetadata; +import org.apache.maven.mercury.repository.api.RepositoryMetadataCache; +import org.apache.maven.mercury.util.FileUtil; +import org.codehaus.plexus.lang.DefaultLanguage; +import org.codehaus.plexus.lang.Language; + +/** + * + * + * @author Oleg Gusakov + * @version $Id$ + * + */ +public class MetadataCacheFs +implements RepositoryMetadataCache +{ + private static final Language _lang = new DefaultLanguage( RepositoryGAVMetadata.class ); + + static volatile Map<String, MetadataCacheFs> fsCaches = Collections.synchronizedMap( new HashMap<String, MetadataCacheFs>(2) ); + + volatile HashMap<String, RepositoryGAMetadata> gaCache; + volatile HashMap<String, RepositoryGAVMetadata> gavCache; + + private File root; + + /** + * access to all known FS caches + * + * @param root + * @return + * @throws IOException + */ + public static MetadataCacheFs getCache( File root ) + throws IOException + { + if( root == null + || ( root.exists() && root.isFile() ) + ) + throw new IllegalArgumentException( _lang.getMessage( "bad.root.file", root == null ? "null" : root.getAbsolutePath() ) ); + + String key = root.getCanonicalPath(); + + MetadataCacheFs fsc = fsCaches.get(key); + + if( fsc == null ) + { + fsc = new MetadataCacheFs( root ); + fsCaches.put( key, fsc ); + } + + return fsc; + } + + /** + * + */ + private MetadataCacheFs( File root ) + { + this.root = root; + } + + public RepositoryGAMetadata findGA( RemoteRepository repo, ArtifactBasicMetadata bmd ) + { + File gam = getGADir( bmd ); + + return null; + } + + public RepositoryGAMetadata findGAV( RemoteRepository repo, ArtifactBasicMetadata bmd ) + { + return null; + } + + private File getGADir( ArtifactBasicMetadata bmd ) + { + File dir = new File( root, bmd.getGroupId()+FileUtil.SEP+bmd.getArtifactId() ); + + if( ! dir.exists() ) + dir.mkdirs(); + + return dir; + } + + private String getGAFileName( RemoteRepository repo ) + { + return ""; + } + + private File getGAVDir( ArtifactBasicMetadata bmd ) + { + String version = bmd.getVersion(); + + Quality q = new Quality( version ); + + if( q.compareTo( Quality.SNAPSHOT_TS_QUALITY ) == 0 ) + { + version = Artifact.SNAPSHOT_VERSION; + } + + File dir = new File( getGADir( bmd ), bmd.getArtifactId()+FileUtil.DASH+version ); + + if( ! dir.exists() ) + dir.mkdirs(); + + return dir; + } + +} Added: maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/mdo/cached-metadata.mdo URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/mdo/cached-metadata.mdo?rev=704182&view=auto ============================================================================== --- maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/mdo/cached-metadata.mdo (added) +++ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/mdo/cached-metadata.mdo Mon Oct 13 10:48:23 2008 @@ -0,0 +1,106 @@ +<!-- +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. +--> + +<model> + <id>cached-metadata</id> + + <name>CachedMetadata</name> + <description>Per-directory repository metadata.</description> + + <defaults> + <default> + <key>package</key> + <value>org.apache.maven.mercury.repository.cache.md</value> + </default> + </defaults> + + <classes> + + <class rootElement="true"> + <name>CachedRawMetadata</name> + <version>1.0.0</version> + <fields> + + <field> + <name>lastUpdated</name> + <version>1.0.0</version> + <type>String</type> + <description>When the metadata was last updated</description> + </field> + + <field> + <name>elements</name> + <version>1.0.0</version> + <description>group of metadata elements</description> + <association> + <type>Element</type> + <multiplicity>*</multiplicity> + </association> + </field> + </fields> + </class> + + <class> + <name>Element</name> + <version>1.0.0</version> + <description>metadata element</description> + <fields> + <field> + <name>name</name> + <version>1.0.0</version> + <description>name of this element</description> + <type>String</type> + </field> + + <field> + <name>attributes</name> + <version>1.0.0</version> + <description>group of metadata element attributes</description> + <association> + <type>Attribute</type> + <multiplicity>*</multiplicity> + </association> + </field> + </fields> + </class> + + <class> + <name>Attribute</name> + <version>1.0.0</version> + <description>generic attribute - name/value pair</description> + <fields> + <field> + <name>name</name> + <type>String</type> + <required>true</required> + <version>1.0.0</version> + <description>name of this attribute</description> + </field> + <field> + <name>value</name> + <type>String</type> + <required>true</required> + <version>1.0.0</version> + <description>value of this attribute</description> + </field> + </fields> + </class> + + </classes> +</model> Added: maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/java/org/apache/maven/mercury/repository/cache/fs/CachedGATest.java URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/java/org/apache/maven/mercury/repository/cache/fs/CachedGATest.java?rev=704182&view=auto ============================================================================== --- maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/java/org/apache/maven/mercury/repository/cache/fs/CachedGATest.java (added) +++ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/java/org/apache/maven/mercury/repository/cache/fs/CachedGATest.java Mon Oct 13 10:48:23 2008 @@ -0,0 +1,71 @@ +package org.apache.maven.mercury.repository.cache.fs; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +import org.apache.maven.mercury.artifact.ArtifactCoordinates; +import org.apache.maven.mercury.repository.api.RepositoryGAMetadata; +import org.apache.maven.mercury.repository.metadata.Metadata; +import org.apache.maven.mercury.repository.metadata.MetadataBuilder; +import org.apache.maven.mercury.util.FileUtil; + +import junit.framework.TestCase; + +/** + * + * + * @author Oleg Gusakov + * @version $Id$ + * + */ +public class CachedGATest + extends TestCase +{ + + byte [] mdBytes; + + CachedGAMetadata gam; + + Metadata omd; + + @Override + protected void setUp() + throws Exception + { + InputStream is = CachedGATest.class.getResourceAsStream( "/ga-metadata.xml" ); + + mdBytes = FileUtil.readRawData( is ); + + omd = MetadataBuilder.getMetadata( mdBytes ); + + gam = new CachedGAMetadata( mdBytes ); + } + + public void testData() + throws Exception + { + assertEquals( omd.getGroupId(), gam.getGA().getGroupId() ); + assertEquals( omd.getArtifactId(), gam.getGA().getArtifactId() ); + + assertEquals( omd.getVersioning().getVersions().size(), gam.getVersions().size() ); + } + + public void testRead() + throws Exception + { + File mf = File.createTempFile( "test-ga-", ".xml", new File("./target") ); + gam.cm.save( mf ); + + CachedGAMetadata gam2 = new CachedGAMetadata( mf ); + + assertEquals( omd.getGroupId(), gam2.getGA().getGroupId() ); + assertEquals( omd.getArtifactId(), gam2.getGA().getArtifactId() ); + + assertEquals( omd.getVersioning().getVersions().size(), gam2.getVersions().size() ); + } + + +} Added: maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/java/org/apache/maven/mercury/repository/cache/fs/CachedGAVTest.java URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/java/org/apache/maven/mercury/repository/cache/fs/CachedGAVTest.java?rev=704182&view=auto ============================================================================== --- maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/java/org/apache/maven/mercury/repository/cache/fs/CachedGAVTest.java (added) +++ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/java/org/apache/maven/mercury/repository/cache/fs/CachedGAVTest.java Mon Oct 13 10:48:23 2008 @@ -0,0 +1,72 @@ +package org.apache.maven.mercury.repository.cache.fs; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +import org.apache.maven.mercury.artifact.ArtifactCoordinates; +import org.apache.maven.mercury.repository.api.RepositoryGAMetadata; +import org.apache.maven.mercury.repository.metadata.Metadata; +import org.apache.maven.mercury.repository.metadata.MetadataBuilder; +import org.apache.maven.mercury.util.FileUtil; + +import junit.framework.TestCase; + +/** + * + * + * @author Oleg Gusakov + * @version $Id$ + * + */ +public class CachedGAVTest + extends TestCase +{ + + byte [] mdBytes; + + CachedGAVMetadata gam; + + Metadata omd; + + @Override + protected void setUp() + throws Exception + { + InputStream is = CachedGAVTest.class.getResourceAsStream( "/gav-metadata.xml" ); + + mdBytes = FileUtil.readRawData( is ); + + omd = MetadataBuilder.getMetadata( mdBytes ); + + gam = new CachedGAVMetadata( mdBytes ); + } + + public void testData() + throws Exception + { + assertEquals( omd.getGroupId(), gam.getGAV().getGroupId() ); + assertEquals( omd.getArtifactId(), gam.getGAV().getArtifactId() ); + assertEquals( omd.getVersion(), gam.getGAV().getVersion() ); + + assertEquals( omd.getVersioning().getVersions().size(), gam.getSnapshots().size() ); + } + + public void testRead() + throws Exception + { + File mf = File.createTempFile( "test-ga-", ".xml", new File("./target") ); + gam.cm.save( mf ); + + CachedGAVMetadata gam2 = new CachedGAVMetadata( mf ); + + assertEquals( omd.getGroupId(), gam2.getGAV().getGroupId() ); + assertEquals( omd.getArtifactId(), gam2.getGAV().getArtifactId() ); + assertEquals( omd.getVersion(), gam2.getGAV().getVersion() ); + + assertEquals( omd.getVersioning().getVersions().size(), gam2.getSnapshots().size() ); + } + +} Added: maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/resources/ga-metadata.xml URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/resources/ga-metadata.xml?rev=704182&view=auto ============================================================================== --- maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/resources/ga-metadata.xml (added) +++ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/resources/ga-metadata.xml Mon Oct 13 10:48:23 2008 @@ -0,0 +1,12 @@ +<metadata> + <groupId>activemq</groupId> + <artifactId>activemq-jaas</artifactId> + <version>4.0-M1</version> + <versioning> + <versions> + <version>4.0-M1</version> + <version>4.0-M2</version> + <version>4.0-M3</version> + </versions> + </versioning> +</metadata> \ No newline at end of file Added: maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/resources/gav-metadata.xml URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/resources/gav-metadata.xml?rev=704182&view=auto ============================================================================== --- maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/resources/gav-metadata.xml (added) +++ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/resources/gav-metadata.xml Mon Oct 13 10:48:23 2008 @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<metadata> + <groupId>org.apache.maven.mercury</groupId> + <artifactId>mercury-transport-http</artifactId> + <version>1.0.0-alpha-2-SNAPSHOT</version> + <versioning> + <snapshot> + <localCopy>true</localCopy> + </snapshot> + <lastUpdated>20081009213718</lastUpdated> + <versions> + <version>1.0.0-alpha-2-20081006.174832-2</version> + <version>1.0.0-alpha-2-20081006.174832-9</version> + <version>1.0.0-alpha-2-20081006.174840-10</version> + <version>1.0.0-alpha-2-20081006.174840-11</version> + </versions> + </versioning> +</metadata> Modified: maven/mercury/trunk/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/ArtifactLocation.java URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/ArtifactLocation.java?rev=704182&r1=704181&r2=704182&view=diff ============================================================================== --- maven/mercury/trunk/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/ArtifactLocation.java (original) +++ maven/mercury/trunk/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/ArtifactLocation.java Mon Oct 13 10:48:23 2008 @@ -2,6 +2,7 @@ import org.apache.maven.mercury.artifact.ArtifactBasicMetadata; import org.apache.maven.mercury.artifact.version.DefaultArtifactVersion; +import org.apache.maven.mercury.util.FileUtil; /** * artifact relative location data object - used by repositories to hold on to intermediate path calculations @@ -13,10 +14,6 @@ */ public class ArtifactLocation { - public static final String SEP = "/"; - public static final char SEP_CHAR = SEP.charAt( 0 ); - public static final String DASH = "-"; - public static final char DASH_CHAR = DASH.charAt( 0 ); public static final String POM_EXT = ".pom"; private String prefix; @@ -38,7 +35,7 @@ this.bmd = bmd; this.prefix = prefix; - this.gaPath = bmd.getGroupId().replace( '.', SEP_CHAR ) + SEP + bmd.getArtifactId(); + this.gaPath = bmd.getGroupId().replace( '.', FileUtil.SEP_CHAR ) + FileUtil.SEP + bmd.getArtifactId(); this.version = bmd.getVersion(); this.baseName = bmd.getArtifactId(); this.versionDir = this.version; @@ -48,12 +45,12 @@ public String getRelPath() { - return gaPath+SEP+versionDir+SEP+baseName+DASH+version+getDashedClassifier()+'.'+type; + return gaPath+FileUtil.SEP+versionDir+FileUtil.SEP+baseName+FileUtil.DASH+version+getDashedClassifier()+'.'+type; } public String getRelPomPath() { - return gaPath+SEP+versionDir+SEP+baseName+DASH+version+POM_EXT; + return gaPath+FileUtil.SEP+versionDir+FileUtil.SEP+baseName+FileUtil.DASH+version+POM_EXT; } public String getAbsPath() @@ -74,7 +71,7 @@ public String getGavPath() { - return getGaPath()+SEP+versionDir; + return getGaPath()+FileUtil.SEP+versionDir; } public String getBaseVersion() @@ -125,7 +122,7 @@ } public String getDashedClassifier() { - return (classifier == null||classifier.length()<1) ? "" : DASH+classifier; + return (classifier == null||classifier.length()<1) ? "" : FileUtil.DASH+classifier; } public void setClassifier( String classifier ) { @@ -148,7 +145,7 @@ if( prefix == null ) return null; - return prefix+(prefix.endsWith( SEP ) ? "" : SEP); + return prefix+(prefix.endsWith( FileUtil.SEP ) ? "" : FileUtil.SEP); } public void setPrefix( String prefix ) { Modified: maven/mercury/trunk/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2.java URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2.java?rev=704182&r1=704181&r2=704182&view=diff ============================================================================== --- maven/mercury/trunk/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2.java (original) +++ maven/mercury/trunk/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2.java Mon Oct 13 10:48:23 2008 @@ -161,7 +161,7 @@ // time stamped snapshot requested else if( vq.equals( Quality.SNAPSHOT_TS_QUALITY )) { - loc.setVersionDir( loc.getBaseVersion()+loc.DASH+Artifact.SNAPSHOT_VERSION ); + loc.setVersionDir( loc.getBaseVersion()+FileUtil.DASH+Artifact.SNAPSHOT_VERSION ); } return loc; Modified: maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java?rev=704182&r1=704181&r2=704182&view=diff ============================================================================== --- maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java (original) +++ maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java Mon Oct 13 10:48:23 2008 @@ -142,7 +142,7 @@ { ArtifactLocation loc = new ArtifactLocation( root, bmd ); - byte [] mdBytes = readRawData( loc.getGaPath()+loc.SEP+ _repo.getMetadataName() ); + byte [] mdBytes = readRawData( loc.getGaPath()+FileUtil.SEP+ _repo.getMetadataName() ); if( mdBytes == null ) throw new RepositoryException( _lang.getMessage( "no.group.md", _repo.getServer().getURL().toString(), loc.getGaPath() ) ); @@ -193,7 +193,7 @@ // time stamped snapshot requested else if( vq.equals( Quality.SNAPSHOT_TS_QUALITY )) { - loc.setVersionDir( loc.getBaseVersion()+loc.DASH+Artifact.SNAPSHOT_VERSION ); + loc.setVersionDir( loc.getBaseVersion()+FileUtil.DASH+Artifact.SNAPSHOT_VERSION ); } return loc; @@ -380,7 +380,7 @@ byte[] mavenMetadata; try { - mavenMetadata = readRawData( loc.getGaPath()+loc.SEP+_repo.getMetadataName() ); + mavenMetadata = readRawData( loc.getGaPath()+FileUtil.SEP+_repo.getMetadataName() ); } catch( MetadataReaderException e ) { @@ -403,7 +403,7 @@ if( mmd == null || mmd.getVersioning() == null ) { - _log.warn( _lang.getMessage( "maven.bad.metadata", loc.getGaPath()+loc.SEP+_repo.getMetadataName(), _repo.getId() ) ); + _log.warn( _lang.getMessage( "maven.bad.metadata", loc.getGaPath()+FileUtil.SEP+_repo.getMetadataName(), _repo.getId() ) ); continue; } @@ -411,7 +411,7 @@ if( mmd == null || mmd.getVersioning() == null ) { - _log.warn( _lang.getMessage( "maven.metadata.no.versions", loc.getGaPath()+loc.SEP+_repo.getMetadataName(), _repo.getId() ) ); + _log.warn( _lang.getMessage( "maven.metadata.no.versions", loc.getGaPath()+FileUtil.SEP+_repo.getMetadataName(), _repo.getId() ) ); continue; } Modified: maven/mercury/trunk/mercury-repo/pom.xml URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/pom.xml?rev=704182&r1=704181&r2=704182&view=diff ============================================================================== --- maven/mercury/trunk/mercury-repo/pom.xml (original) +++ maven/mercury/trunk/mercury-repo/pom.xml Mon Oct 13 10:48:23 2008 @@ -15,6 +15,7 @@ <module>mercury-repo-api</module> <module>mercury-repo-local-m2</module> <module>mercury-repo-remote-m2</module> + <module>mercury-repo-cache-fs</module> </modules> </project> \ No newline at end of file Modified: maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/FileUtil.java URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/FileUtil.java?rev=704182&r1=704181&r2=704182&view=diff ============================================================================== --- maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/FileUtil.java (original) +++ maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/FileUtil.java Mon Oct 13 10:48:23 2008 @@ -5,7 +5,6 @@ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; @@ -50,8 +49,15 @@ */ public class FileUtil { + public static final String SEP = "/"; + public static final char SEP_CHAR = SEP.charAt( 0 ); + + public static final String DASH = "-"; + public static final char DASH_CHAR = DASH.charAt( 0 ); + public static final String LOCK_FILE = ".lock"; public static final String DEFAULT_CHARSET = "utf-8"; + public static final int K = 1024; public static final int DEFAULT_BUFFER_SIZE = 10 * K; //---------------------------------------------------------------------------------------------------------------