aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/AbstractRepositoryMetadata.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/AbstractRepositoryMetadata.java')
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/AbstractRepositoryMetadata.java255
1 files changed, 255 insertions, 0 deletions
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/AbstractRepositoryMetadata.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/AbstractRepositoryMetadata.java
new file mode 100644
index 00000000..e1e5fe3f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/AbstractRepositoryMetadata.java
@@ -0,0 +1,255 @@
+package org.apache.maven.artifact.repository.metadata;
+
+/*
+ * 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.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Writer;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader;
+import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Writer;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.ReaderFactory;
+import org.codehaus.plexus.util.WriterFactory;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+/**
+ * Shared methods of the repository metadata handling.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public abstract class AbstractRepositoryMetadata
+ implements RepositoryMetadata
+{
+ private Metadata metadata;
+
+ protected AbstractRepositoryMetadata( Metadata metadata )
+ {
+ this.metadata = metadata;
+ }
+
+ public String getRemoteFilename()
+ {
+ return "maven-metadata.xml";
+ }
+
+ public String getLocalFilename( ArtifactRepository repository )
+ {
+ return "maven-metadata-" + repository.getKey() + ".xml";
+ }
+
+ public void storeInLocalRepository( ArtifactRepository localRepository,
+ ArtifactRepository remoteRepository )
+ throws RepositoryMetadataStoreException
+ {
+ try
+ {
+ updateRepositoryMetadata( localRepository, remoteRepository );
+ }
+ catch ( IOException e )
+ {
+ throw new RepositoryMetadataStoreException( "Error updating group repository metadata", e );
+ }
+ catch ( XmlPullParserException e )
+ {
+ throw new RepositoryMetadataStoreException( "Error updating group repository metadata", e );
+ }
+ }
+
+ protected void updateRepositoryMetadata( ArtifactRepository localRepository,
+ ArtifactRepository remoteRepository )
+ throws IOException, XmlPullParserException
+ {
+ MetadataXpp3Reader mappingReader = new MetadataXpp3Reader();
+
+ Metadata metadata = null;
+
+ File metadataFile = new File( localRepository.getBasedir(),
+ localRepository.pathOfLocalRepositoryMetadata( this, remoteRepository ) );
+
+ if ( metadataFile.length() == 0 )
+ {
+ if ( !metadataFile.delete() )
+ {
+ // sleep for 10ms just in case this is windows holding a file lock
+ try
+ {
+ Thread.sleep( 10 );
+ }
+ catch ( InterruptedException e )
+ {
+ // ignore
+ }
+ metadataFile.delete(); // if this fails, forget about it, we'll try to overwrite it anyway so no need
+ // to delete on exit
+ }
+ }
+ else if ( metadataFile.exists() )
+ {
+ Reader reader = null;
+
+ try
+ {
+ reader = ReaderFactory.newXmlReader( metadataFile );
+
+ metadata = mappingReader.read( reader, false );
+ }
+ finally
+ {
+ IOUtil.close( reader );
+ }
+ }
+
+ boolean changed;
+
+ // If file could not be found or was not valid, start from scratch
+ if ( metadata == null )
+ {
+ metadata = this.metadata;
+
+ changed = true;
+ }
+ else
+ {
+ changed = metadata.merge( this.metadata );
+ }
+
+ // beware meta-versions!
+ String version = metadata.getVersion();
+ if ( version != null && ( Artifact.LATEST_VERSION.equals( version ) || Artifact.RELEASE_VERSION.equals(
+ version ) ) )
+ {
+ // meta-versions are not valid <version/> values...don't write them.
+ metadata.setVersion( null );
+ }
+
+ if ( changed || !metadataFile.exists() )
+ {
+ Writer writer = null;
+ try
+ {
+ metadataFile.getParentFile().mkdirs();
+ writer = WriterFactory.newXmlWriter( metadataFile );
+
+ MetadataXpp3Writer mappingWriter = new MetadataXpp3Writer();
+
+ mappingWriter.write( writer, metadata );
+ }
+ finally
+ {
+ IOUtil.close( writer );
+ }
+ }
+ else
+ {
+ metadataFile.setLastModified( System.currentTimeMillis() );
+ }
+ }
+
+ public String toString()
+ {
+ return "repository metadata for: \'" + getKey() + "\'";
+ }
+
+ protected static Metadata createMetadata( Artifact artifact,
+ Versioning versioning )
+ {
+ Metadata metadata = new Metadata();
+ metadata.setGroupId( artifact.getGroupId() );
+ metadata.setArtifactId( artifact.getArtifactId() );
+ metadata.setVersion( artifact.getVersion() );
+ metadata.setVersioning( versioning );
+ return metadata;
+ }
+
+ protected static Versioning createVersioning( Snapshot snapshot )
+ {
+ Versioning versioning = new Versioning();
+ versioning.setSnapshot( snapshot );
+ versioning.updateTimestamp();
+ return versioning;
+ }
+
+ public void setMetadata( Metadata metadata )
+ {
+ this.metadata = metadata;
+ }
+
+ public Metadata getMetadata()
+ {
+ return metadata;
+ }
+
+ public void merge( org.apache.maven.repository.legacy.metadata.ArtifactMetadata metadata )
+ {
+ // TODO: not sure that it should assume this, maybe the calls to addMetadata should pre-merge, then artifact replaces?
+ AbstractRepositoryMetadata repoMetadata = (AbstractRepositoryMetadata) metadata;
+ this.metadata.merge( repoMetadata.getMetadata() );
+ }
+
+ public void merge( ArtifactMetadata metadata )
+ {
+ // TODO: not sure that it should assume this, maybe the calls to addMetadata should pre-merge, then artifact replaces?
+ AbstractRepositoryMetadata repoMetadata = (AbstractRepositoryMetadata) metadata;
+ this.metadata.merge( repoMetadata.getMetadata() );
+ }
+
+ public String extendedToString()
+ {
+ StringBuilder buffer = new StringBuilder();
+
+ buffer.append( "\nRepository Metadata\n--------------------------" );
+ buffer.append( "\nGroupId: " ).append( getGroupId() );
+ buffer.append( "\nArtifactId: " ).append( getArtifactId() );
+ buffer.append( "\nMetadata Type: " ).append( getClass().getName() );
+
+ return buffer.toString();
+ }
+
+ public int getNature()
+ {
+ return RELEASE;
+ }
+
+ public ArtifactRepositoryPolicy getPolicy( ArtifactRepository repository )
+ {
+ int nature = getNature();
+ if ( ( nature & RepositoryMetadata.RELEASE_OR_SNAPSHOT ) == RepositoryMetadata.RELEASE_OR_SNAPSHOT )
+ {
+ ArtifactRepositoryPolicy policy = new ArtifactRepositoryPolicy( repository.getReleases() );
+ policy.merge( repository.getSnapshots() );
+ return policy;
+ }
+ else if ( ( nature & RepositoryMetadata.SNAPSHOT ) != 0 )
+ {
+ return repository.getSnapshots();
+ }
+ else
+ {
+ return repository.getReleases();
+ }
+ }
+
+}