You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by ca...@apache.org on 2014/11/21 10:18:11 UTC

archiva git commit: [MRM-1848] download links for files multi-dot extensions incorrect in Browse view

Repository: archiva
Updated Branches:
  refs/heads/master afee44b4f -> 5d29c9ff1


[MRM-1848] download links for files multi-dot extensions incorrect in Browse view


Project: http://git-wip-us.apache.org/repos/asf/archiva/repo
Commit: http://git-wip-us.apache.org/repos/asf/archiva/commit/5d29c9ff
Tree: http://git-wip-us.apache.org/repos/asf/archiva/tree/5d29c9ff
Diff: http://git-wip-us.apache.org/repos/asf/archiva/diff/5d29c9ff

Branch: refs/heads/master
Commit: 5d29c9ff1d5985db1a8b293ae7a4fb29452041f7
Parents: afee44b
Author: Carlos Sanchez <ca...@apache.org>
Authored: Wed Nov 19 22:32:12 2014 +0100
Committer: Carlos Sanchez <ca...@apache.org>
Committed: Thu Nov 20 10:26:37 2014 +0100

----------------------------------------------------------------------
 .../rest/services/utils/ArtifactBuilder.java    | 49 +++++++-------
 .../services/utils/ArtifactBuilderTest.java     | 68 ++++++++++++++++++++
 2 files changed, 92 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/archiva/blob/5d29c9ff/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/utils/ArtifactBuilder.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/utils/ArtifactBuilder.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/utils/ArtifactBuilder.java
index 423d27a..b01bacf 100644
--- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/utils/ArtifactBuilder.java
+++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/utils/ArtifactBuilder.java
@@ -29,6 +29,8 @@ import java.io.File;
 import java.text.DecimalFormat;
 import java.text.DecimalFormatSymbols;
 import java.util.Locale;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * @author Olivier Lamy
@@ -59,25 +61,6 @@ public class ArtifactBuilder
         return this;
     }
 
-    /**
-     * 
-     * @param filename
-     * @return 
-     */
-    private static String specialExtensions( String filename ) 
-    {
-        String[] special = {
-            "tar.gz"
-        };
-        for ( String extension : special ) 
-        {
-            if ( filename.endsWith( extension ) ) 
-            {
-                return extension;
-            }
-        }
-        return null;
-    }
     public Artifact build()
     {
         ArtifactReference ref = new ArtifactReference();
@@ -98,12 +81,7 @@ public class ArtifactBuilder
         ref.setType( type );
         File file = managedRepositoryContent.toFile( ref );
 
-        String extension = FilenameUtils.getExtension( file.getName() );
-        // handle more than one point extension we know.
-        if ( specialExtensions( file.getName() ) != null ) 
-        {
-            extension = specialExtensions( file.getName() );
-        }
+        String extension = getExtensionFromFile(file);
         
         Artifact artifact = new Artifact( ref.getGroupId(), ref.getArtifactId(), ref.getVersion() );
         artifact.setRepositoryId( artifactMetadata.getRepositoryId() );
@@ -143,4 +121,25 @@ public class ArtifactBuilder
     }
 
 
+    /**
+     * Extract file extension
+     */
+    String getExtensionFromFile( File file )
+    {
+        // we are just interested in the section after the last -
+        String[] parts = file.getName().split( "-" );
+        if ( parts.length > 0 )
+        {
+            // get anything after a dot followed by a letter a-z, including other dots
+            Pattern p = Pattern.compile( "\\.([a-z]+[a-z0-9\\.]*)" );
+            Matcher m = p.matcher( parts[parts.length - 1] );
+            if ( m.find() )
+            {
+                return m.group( 1 );
+            }
+        }
+        // just in case
+        return FilenameUtils.getExtension( file.getName() );
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/archiva/blob/5d29c9ff/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/utils/ArtifactBuilderTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/utils/ArtifactBuilderTest.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/utils/ArtifactBuilderTest.java
new file mode 100644
index 0000000..8b67c43
--- /dev/null
+++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/utils/ArtifactBuilderTest.java
@@ -0,0 +1,68 @@
+package org.apache.archiva.rest.services.utils;
+/*
+ * 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 static org.assertj.core.api.Assertions.*;
+
+import java.io.File;
+
+import org.easymock.TestSubject;
+import org.junit.Test;
+
+public class ArtifactBuilderTest
+{
+    @TestSubject
+    private ArtifactBuilder builder = new ArtifactBuilder();
+
+    @Test
+    public void testBuildSnapshot()
+    {
+        assertThat( builder.getExtensionFromFile( new File( "/tmp/foo-2.3-20141119.064321-40.jar" ) ) ).isEqualTo( "jar" );
+    }
+
+    @Test
+    public void testBuildPom()
+    {
+        assertThat( builder.getExtensionFromFile( new File( "/tmp/foo-1.0.pom" ) ) ).isEqualTo( "pom" );
+    }
+
+    @Test
+    public void testBuildJar()
+    {
+        assertThat( builder.getExtensionFromFile( new File( "/tmp/foo-1.0-sources.jar" ) ) ).isEqualTo( "jar" );
+    }
+
+    @Test
+    public void testBuildTarGz()
+    {
+        assertThat( builder.getExtensionFromFile( new File( "/tmp/foo-1.0.tar.gz" ) ) ).isEqualTo( "tar.gz" );
+    }
+
+    @Test
+    public void testBuildPomZip()
+    {
+        assertThat( builder.getExtensionFromFile( new File( "/tmp/foo-1.0.pom.zip" ) ) ).isEqualTo( "pom.zip" );
+    }
+
+    @Test
+    public void testBuildR00()
+    {
+        assertThat( builder.getExtensionFromFile( new File( "/tmp/foo-1.0.r00" ) ) ).isEqualTo( "r00" );
+    }
+}