Author: olamy
Date: Wed Sep 28 21:34:34 2011
New Revision: 1177069
URL: http://svn.apache.org/viewvc?rev=1177069&view=rev
Log:
rest search service must provide the real url artifact
Added:
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContext.java
(with props)
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContextThreadLocal.java
(with props)
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContextThreadLocalCleaner.java
(with props)
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContextThreadLocalInterceptor.java
(with props)
Modified:
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultSearchService.java
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/resources/META-INF/spring-context.xml
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/SearchServiceTest.java
Modified:
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java?rev=1177069&r1=1177068&r2=1177069&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java
(original)
+++
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java
Wed Sep 28 21:34:34 2011
@@ -450,8 +450,6 @@ public class NexusRepositorySearch
hit.setArtifactId( artifactInfo.artifactId );
hit.setGroupId( artifactInfo.groupId );
hit.setRepositoryId( artifactInfo.repository );
- // FIXME archiva url ??
- hit.setUrl( artifactInfo.repository + "/" + artifactInfo.fname
);
hit.addVersion( artifactInfo.version );
hit.setBundleExportPackage( artifactInfo.bundleExportPackage );
hit.setBundleExportService( artifactInfo.bundleExportService );
@@ -459,7 +457,6 @@ public class NexusRepositorySearch
hit.setBundleVersion( artifactInfo.bundleVersion );
hit.setBundleDescription( artifactInfo.bundleDescription );
hit.setBundleDocUrl( artifactInfo.bundleDocUrl );
-
hit.setBundleRequireBundle( artifactInfo.bundleRequireBundle );
hit.setBundleImportPackage( artifactInfo.bundleImportPackage );
hit.setBundleLicense( artifactInfo.bundleLicense );
@@ -469,7 +466,6 @@ public class NexusRepositorySearch
hit.setPrefix( artifactInfo.prefix );
hit.setPackaging( artifactInfo.packaging );
hit.setClassifier( artifactInfo.classifier );
- // sure ??
hit.setUrl( artifactInfo.remoteUrl );
}
Modified:
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultSearchService.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultSearchService.java?rev=1177069&r1=1177068&r2=1177069&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultSearchService.java
(original)
+++
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultSearchService.java
Wed Sep 28 21:34:34 2011
@@ -30,6 +30,8 @@ import org.apache.archiva.rest.api.model
import org.apache.archiva.rest.api.model.SearchRequest;
import org.apache.archiva.rest.api.services.ArchivaRestServiceException;
import org.apache.archiva.rest.api.services.SearchService;
+import org.apache.archiva.rest.services.interceptors.HttpContext;
+import org.apache.archiva.rest.services.interceptors.HttpContextThreadLocal;
import org.apache.archiva.security.AccessDeniedException;
import org.apache.archiva.security.ArchivaSecurityException;
import org.apache.archiva.security.PrincipalNotFoundException;
@@ -43,6 +45,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import javax.inject.Inject;
+import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -78,7 +81,7 @@ public class DefaultSearchService
SearchResults searchResults =
repositorySearch.search( getPrincipal(), getObservableRepos(),
queryString, limits,
Collections.<String>emptyList() );
- return getArtifacts( searchResults);
+ return getArtifacts( searchResults );
}
catch ( RepositorySearchException e )
@@ -182,6 +185,8 @@ public class DefaultSearchService
protected List<Artifact> getArtifacts( SearchResults searchResults )
{
+
+ HttpContext httpContext = HttpContextThreadLocal.get();
if ( searchResults == null || searchResults.isEmpty() )
{
return Collections.emptyList();
@@ -221,11 +226,13 @@ public class DefaultSearchService
// FIXME archiva url ??
Artifact versionned = new BeanReplicator().replicateBean(
hit, Artifact.class );
+
if ( StringUtils.isNotBlank( version ) )
{
versionned.setVersion( version );
+ versionned.setUrl( getArtifactUrl( httpContext,
versionned ) );
- artifacts.add( versionned );
+ artifacts.add( versionned );
}
}
@@ -233,4 +240,47 @@ public class DefaultSearchService
}
return artifacts;
}
+
+ private String getArtifactUrl( HttpContext httpContext, Artifact artifact )
+ {
+ if ( httpContext == null )
+ {
+ return null;
+ }
+ if ( httpContext.getHttpServletRequest() == null )
+ {
+ return null;
+ }
+ StringBuilder sb = new StringBuilder( getBaseUrl(
httpContext.getHttpServletRequest() ) );
+
+ sb.append( "/repository" );
+
+ if ( StringUtils.startsWith( artifact.getContext(), "remote-" ) )
+ {
+ // if context is 'remote-*' we have to set a repo which the
current user can use
+ }
+ else
+ {
+ sb.append( '/' ).append( artifact.getContext() );
+ }
+
+ sb.append( '/' ).append( StringUtils.replaceChars(
artifact.getGroupId(), '.', '/' ) );
+ sb.append( '/' ).append( artifact.getArtifactId() );
+ sb.append( '/' ).append( artifact.getVersion() );
+ sb.append( '/' ).append( artifact.getArtifactId() );
+ if ( StringUtils.isNotBlank( artifact.getClassifier() ) )
+ {
+ sb.append( '-' ).append( artifact.getClassifier() );
+ }
+ sb.append( '-' ).append( artifact.getVersion() );
+ sb.append( '.' ).append( artifact.getPackaging() );
+
+ return sb.toString();
+ }
+
+ protected String getBaseUrl( HttpServletRequest req )
+ {
+ return req.getScheme() + "://" + req.getServerName()
+ + ( req.getServerPort() == 80 ? "" : ":" + req.getServerPort() ) +
req.getContextPath();
+ }
}
Added:
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContext.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContext.java?rev=1177069&view=auto
==============================================================================
---
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContext.java
(added)
+++
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContext.java
Wed Sep 28 21:34:34 2011
@@ -0,0 +1,48 @@
+package org.apache.archiva.rest.services.interceptors;
+/*
+ * 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 javax.servlet.http.HttpServletRequest;
+import java.io.Serializable;
+
+/**
+ * @author Olivier Lamy
+ * @since 1.4
+ */
+public class HttpContext
+ implements Serializable
+{
+ private HttpServletRequest httpServletRequest;
+
+ public HttpContext()
+ {
+ // no op
+ }
+
+ public HttpServletRequest getHttpServletRequest()
+ {
+ return httpServletRequest;
+ }
+
+ public HttpContext setHttpServletRequest( HttpServletRequest
httpServletRequest )
+ {
+ this.httpServletRequest = httpServletRequest;
+ return this;
+ }
+}
Propchange:
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContext.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContext.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added:
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContextThreadLocal.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContextThreadLocal.java?rev=1177069&view=auto
==============================================================================
---
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContextThreadLocal.java
(added)
+++
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContextThreadLocal.java
Wed Sep 28 21:34:34 2011
@@ -0,0 +1,41 @@
+package org.apache.archiva.rest.services.interceptors;
+/*
+ * 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 org.codehaus.redback.rest.services.RedbackRequestInformation;
+
+/**
+ * @author Olivier Lamy
+ * @since 1.4
+ */
+public class HttpContextThreadLocal
+{
+ private static final ThreadLocal<HttpContext> userThreadLocal =
+ new ThreadLocal<HttpContext>();
+
+ public static void set( HttpContext httpContext )
+ {
+ userThreadLocal.set( httpContext );
+ }
+
+ public static HttpContext get()
+ {
+ return userThreadLocal.get();
+ }
+}
Propchange:
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContextThreadLocal.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContextThreadLocal.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added:
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContextThreadLocalCleaner.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContextThreadLocalCleaner.java?rev=1177069&view=auto
==============================================================================
---
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContextThreadLocalCleaner.java
(added)
+++
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContextThreadLocalCleaner.java
Wed Sep 28 21:34:34 2011
@@ -0,0 +1,77 @@
+package org.apache.archiva.rest.services.interceptors;
+/*
+ * 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 org.apache.cxf.interceptor.Fault;
+import org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor;
+import org.apache.cxf.jaxrs.model.OperationResourceInfo;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.AbstractPhaseInterceptor;
+import org.apache.cxf.phase.Phase;
+import org.apache.cxf.phase.PhaseInterceptor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import javax.ws.rs.core.Response;
+
+/**
+ * @author Olivier Lamy
+ * @since 1.4
+ */
+@Service( "httpContextThreadLocalCleaner#rest" )
+public class HttpContextThreadLocalCleaner
+ extends AbstractPhaseInterceptor<Message>
+ implements PhaseInterceptor<Message>
+{
+ private Logger log = LoggerFactory.getLogger( getClass() );
+
+ public HttpContextThreadLocalCleaner( String phase )
+ {
+ super( phase );
+ addAfter( JAXRSInInterceptor.class.getName() );
+ }
+
+
+ public HttpContextThreadLocalCleaner()
+ {
+ super( Phase.PRE_STREAM );
+ addAfter( JAXRSInInterceptor.class.getName() );
+ }
+
+
+ public Response handleResponse( Message message, OperationResourceInfo
operationResourceInfo, Response response )
+ {
+ log.debug( "handleResponse" );
+ cleanup();
+ return null;
+ }
+
+ private void cleanup()
+ {
+ HttpContextThreadLocal.set( null );
+ }
+
+ public void handleMessage( Message message )
+ throws Fault
+ {
+ log.debug( "handleMessage" );
+ cleanup();
+ }
+}
Propchange:
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContextThreadLocalCleaner.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContextThreadLocalCleaner.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added:
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContextThreadLocalInterceptor.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContextThreadLocalInterceptor.java?rev=1177069&view=auto
==============================================================================
---
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContextThreadLocalInterceptor.java
(added)
+++
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContextThreadLocalInterceptor.java
Wed Sep 28 21:34:34 2011
@@ -0,0 +1,47 @@
+package org.apache.archiva.rest.services.interceptors;
+/*
+ * 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 org.apache.cxf.jaxrs.ext.RequestHandler;
+import org.apache.cxf.jaxrs.model.ClassResourceInfo;
+import org.apache.cxf.message.Message;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.core.Response;
+
+/**
+ * @author Olivier Lamy
+ */
+@Service( "httpContextThreadLocalInterceptor#rest" )
+public class HttpContextThreadLocalInterceptor
+ implements RequestHandler
+{
+ public Response handleRequest( Message m, ClassResourceInfo resourceClass )
+ {
+ HttpContextThreadLocal.set( new HttpContext().setHttpServletRequest(
getHttpServletRequest( m ) ) );
+ return null;
+ }
+
+ public HttpServletRequest getHttpServletRequest( Message message )
+ {
+ // FIXME use a constant from cxf
+ return (HttpServletRequest) message.get( "HTTP.REQUEST" );
+ }
+}
Propchange:
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContextThreadLocalInterceptor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContextThreadLocalInterceptor.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified:
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/resources/META-INF/spring-context.xml
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/resources/META-INF/spring-context.xml?rev=1177069&r1=1177068&r2=1177069&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/resources/META-INF/spring-context.xml
(original)
+++
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/resources/META-INF/spring-context.xml
Wed Sep 28 21:34:34 2011
@@ -44,7 +44,7 @@
<jaxrs:providers>
<ref bean="authenticationInterceptor#rest"/>
<ref bean="permissionInterceptor#rest"/>
- <ref bean="repositoriesService#rest"/>
+ <ref bean="httpContextThreadLocalInterceptor#rest"/>
</jaxrs:providers>
<jaxrs:serviceBeans>
@@ -61,6 +61,7 @@
<jaxrs:outInterceptors>
<ref bean="threadLocalUserCleaner#rest"/>
+ <ref bean="httpContextThreadLocalCleaner#rest"/>
</jaxrs:outInterceptors>
</jaxrs:server>
Modified:
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/SearchServiceTest.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/SearchServiceTest.java?rev=1177069&r1=1177068&r2=1177069&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/SearchServiceTest.java
(original)
+++
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/SearchServiceTest.java
Wed Sep 28 21:34:34 2011
@@ -214,6 +214,7 @@ public class SearchServiceTest
assertTrue( " not 1 results for Bundle ExportPackage
org.apache.karaf.features.command.completers but "
+ artifacts.size() + ":" + artifacts, artifacts.size()
== 1 );
+ log.info( "artifcat url " + artifacts.get( 0 ).getUrl() );
deleteTestRepo( testRepoId, targetRepo );
}