From fe446f4081657339fe8f3e21fa4c6c27dff716ea Mon Sep 17 00:00:00 2001 From: Olivier Lamy Date: Thu, 16 Feb 2012 23:31:40 +0000 Subject: [PATCH] [MRM-1573] refactor to have more generic REST model result. git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1245254 13f79535-47bb-0310-9956-ffa450edef68 --- ...seGroupIdEntry.java => BrowseIdEntry.java} | 12 +-- ...seGroupIdResult.java => BrowseResult.java} | 20 ++--- .../rest/api/services/BrowseService.java | 6 +- .../rest/services/DefaultBrowseService.java | 33 ++++--- .../src/main/webapp/js/archiva/search.js | 85 +++++++++++-------- .../webapp/js/archiva/templates/search.html | 14 ++- 6 files changed, 98 insertions(+), 72 deletions(-) rename archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/{BrowseGroupIdEntry.java => BrowseIdEntry.java} (83%) rename archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/{BrowseGroupIdResult.java => BrowseResult.java} (62%) diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/BrowseGroupIdEntry.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/BrowseIdEntry.java similarity index 83% rename from archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/BrowseGroupIdEntry.java rename to archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/BrowseIdEntry.java index 32c64f738..598a4fd2a 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/BrowseGroupIdEntry.java +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/BrowseIdEntry.java @@ -24,21 +24,21 @@ import javax.xml.bind.annotation.XmlRootElement; * @author Olivier Lamy * @since 1.4-M3 */ -@XmlRootElement( name = "browseGroupIdEntry" ) -public class BrowseGroupIdEntry - implements Comparable +@XmlRootElement( name = "browseIdEntry" ) +public class BrowseIdEntry + implements Comparable { private String name; private boolean project; - public BrowseGroupIdEntry() + public BrowseIdEntry() { // no op } - public BrowseGroupIdEntry( String name, boolean project ) + public BrowseIdEntry( String name, boolean project ) { this.name = name; this.project = project; @@ -64,7 +64,7 @@ public class BrowseGroupIdEntry this.project = project; } - public int compareTo( BrowseGroupIdEntry browseGroupIdEntry ) + public int compareTo( BrowseIdEntry browseGroupIdEntry ) { return this.name.compareTo( browseGroupIdEntry.name ); } diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/BrowseGroupIdResult.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/BrowseResult.java similarity index 62% rename from archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/BrowseGroupIdResult.java rename to archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/BrowseResult.java index bafad96c6..b7a9cdd5b 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/BrowseGroupIdResult.java +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/BrowseResult.java @@ -26,28 +26,28 @@ import java.util.List; * @author Olivier Lamy * @since 1.4-M3 */ -@XmlRootElement( name = "browseGroupIdResult" ) -public class BrowseGroupIdResult +@XmlRootElement( name = "browseResult" ) +public class BrowseResult { - private List browseGroupIdEntries; + private List browseIdEntries; - public BrowseGroupIdResult() + public BrowseResult() { // no op } - public BrowseGroupIdResult( List browseGroupIdEntries ) + public BrowseResult( List browseIdEntries ) { - this.browseGroupIdEntries = browseGroupIdEntries; + this.browseIdEntries = browseIdEntries; } - public List getBrowseGroupIdEntries() + public List getBrowseIdEntries() { - return browseGroupIdEntries == null ? Collections.emptyList() : browseGroupIdEntries; + return browseIdEntries == null ? Collections.emptyList() : browseIdEntries; } - public void setBrowseGroupIdEntries( List browseGroupIdEntries ) + public void setBrowseIdEntries( List browseIdEntries ) { - this.browseGroupIdEntries = browseGroupIdEntries; + this.browseIdEntries = browseIdEntries; } } diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/BrowseService.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/BrowseService.java index a1fd181f6..1e7584a8a 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/BrowseService.java +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/BrowseService.java @@ -18,7 +18,7 @@ package org.apache.archiva.rest.api.services; * under the License. */ -import org.apache.archiva.rest.api.model.BrowseGroupIdResult; +import org.apache.archiva.rest.api.model.BrowseResult; import org.apache.archiva.rest.api.model.GroupIdList; import org.codehaus.plexus.redback.authorization.RedbackAuthorization; @@ -39,13 +39,13 @@ public interface BrowseService @GET @Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } ) @RedbackAuthorization( noRestriction = true, noPermission = false ) - GroupIdList getRootGroups() + BrowseResult getRootGroups() throws ArchivaRestServiceException; @Path( "browseGroupId/{groupId}" ) @GET @Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } ) @RedbackAuthorization( noRestriction = true, noPermission = false ) - BrowseGroupIdResult browseGroupId(@PathParam( "groupId" ) String groupId ) + BrowseResult browseGroupId(@PathParam( "groupId" ) String groupId ) throws ArchivaRestServiceException; } diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java index 7bee58a43..d30463ea4 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java @@ -21,9 +21,8 @@ package org.apache.archiva.rest.services; import org.apache.archiva.metadata.repository.MetadataResolutionException; import org.apache.archiva.metadata.repository.MetadataResolver; import org.apache.archiva.metadata.repository.RepositorySession; -import org.apache.archiva.rest.api.model.BrowseGroupIdEntry; -import org.apache.archiva.rest.api.model.BrowseGroupIdResult; -import org.apache.archiva.rest.api.model.GroupIdList; +import org.apache.archiva.rest.api.model.BrowseIdEntry; +import org.apache.archiva.rest.api.model.BrowseResult; import org.apache.archiva.rest.api.services.ArchivaRestServiceException; import org.apache.archiva.rest.api.services.BrowseService; import org.apache.commons.collections.CollectionUtils; @@ -47,14 +46,14 @@ public class DefaultBrowseService implements BrowseService { - public GroupIdList getRootGroups() + public BrowseResult getRootGroups() throws ArchivaRestServiceException { List selectedRepos = getObservableRepos(); if ( CollectionUtils.isEmpty( selectedRepos ) ) { // FIXME 403 ??? - return new GroupIdList( Collections.emptyList() ); + return new BrowseResult(); } Set namespaces = new LinkedHashSet(); @@ -89,10 +88,17 @@ public class DefaultBrowseService repositorySession.close(); } - return new GroupIdList( getSortedList( namespaces ) ); + List browseGroupIdEntries = new ArrayList( namespaces.size() ); + for ( String namespace : namespaces ) + { + browseGroupIdEntries.add( new BrowseIdEntry( namespace, false ) ); + } + + Collections.sort( browseGroupIdEntries ); + return new BrowseResult( browseGroupIdEntries ); } - public BrowseGroupIdResult browseGroupId( String groupId ) + public BrowseResult browseGroupId( String groupId ) throws ArchivaRestServiceException { @@ -100,7 +106,7 @@ public class DefaultBrowseService if ( CollectionUtils.isEmpty( selectedRepos ) ) { // FIXME 403 ??? - return new BrowseGroupIdResult(); + return new BrowseResult(); } Set projects = new LinkedHashSet(); @@ -139,22 +145,21 @@ public class DefaultBrowseService { repositorySession.close(); } - List browseGroupIdEntries = - new ArrayList( namespaces.size() + projects.size() ); + List browseGroupIdEntries = new ArrayList( namespaces.size() + projects.size() ); for ( String namespace : namespaces ) { - browseGroupIdEntries.add( new BrowseGroupIdEntry( namespace, false ) ); + browseGroupIdEntries.add( new BrowseIdEntry( namespace, false ) ); } for ( String project : projects ) { - browseGroupIdEntries.add( new BrowseGroupIdEntry( project, true ) ); + browseGroupIdEntries.add( new BrowseIdEntry( project, true ) ); } Collections.sort( browseGroupIdEntries ); - return new BrowseGroupIdResult( browseGroupIdEntries ); + return new BrowseResult( browseGroupIdEntries ); } -//--------------------------- + //--------------------------- // internals //--------------------------- diff --git a/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/search.js b/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/search.js index ec021cf35..cdcb8ac43 100644 --- a/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/search.js +++ b/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/search.js @@ -18,37 +18,21 @@ */ $(function() { - BrowseTopViewModel=function(groupIds){ - this.groupIds=groupIds; - var mainContent = $("#main-content"); - var browseResult=mainContent.find("#browse_result"); - displayGroupDetail=function(groupId){ - browseResult.hide( "slide", {}, 500, - function(){ - browseResult.html(mediumSpinnerImg()); - browseResult.show(); - $.ajax("restServices/archivaServices/browseService/browseGroupId/"+encodeURIComponent(groupId), { - type: "GET", - dataType: 'json', - success: function(data) { - var browseGroupIdEntryies = $.isArray(data.browseGroupIdResult.browseGroupIdEntries) ? - $.map(data.browseGroupIdResult.browseGroupIdEntries,function(item){ - return new BrowseGroupIdEntry(item.name, item.project); - }): [data.browseGroupIdResult.browseGroupIdEntries]; - browseResult.html($("#browse-groups-div-tmpl" ).tmpl()); - var browseGroupsViewModel = new BrowseGroupsViewModel(browseGroupIdEntryies); - - ko.applyBindings(browseGroupsViewModel,mainContent.find("#browse-groups-div" ).get(0)); - } - }); - } - ); - + BrowseTopViewModel=function(browseIdEntries){ + this.browseIdEntries=browseIdEntries; + displayGroupId=function(groupId){ + displayGroupDetail(groupId,".."); } + } - BrowseGroupsViewModel=function(browseGroupIdEntryies){ - this.browseGroupIdEntryies=browseGroupIdEntryies; + BrowseGroupsViewModel=function(browseIdEntries,parentGroupdId){ + var self = this; + this.browseIdEntries=browseIdEntries; + this.parentGroupdId=parentGroupdId; + displayGroupId=function(groupId){ + displayGroupDetail(groupId,self.parentGroupdId); + } } displayBrowse=function(){ @@ -59,23 +43,54 @@ $(function() { type: "GET", dataType: 'json', success: function(data) { - var groupdIds = - $.isArray(data.groupIdList.groupIds)? $.map(data.groupIdList.groupIds,function(item){ - return item; - }): [data.groupIdList.groupIds]; - $.log("size:"+groupdIds.length); - var browseTopViewModel = new BrowseTopViewModel(groupdIds); + var browseIdEntries = mapBrowseIdEntries(data); + $.log("size:"+browseIdEntries.length); + var browseTopViewModel = new BrowseTopViewModel(browseIdEntries); ko.applyBindings(browseTopViewModel,mainContent.find("#browse_result" ).get(0)); } }); } + displayGroupDetail=function(groupId,parentGroupdId){ + var mainContent = $("#main-content"); + var browseResult=mainContent.find("#browse_result"); + browseResult.hide( "slide", {}, 500, + function(){ + browseResult.html(mediumSpinnerImg()); + browseResult.show(); + var url = "restServices/archivaServices/browseService/browseGroupId/"+encodeURIComponent(groupId); + $.ajax(url, { + type: "GET", + dataType: 'json', + success: function(data) { + var browseIdEntries = mapBrowseIdEntries(data); + browseResult.html($("#browse-groups-div-tmpl" ).tmpl()); + var browseGroupsViewModel = new BrowseGroupsViewModel(browseIdEntries,parentGroupdId); + + ko.applyBindings(browseGroupsViewModel,mainContent.find("#browse-groups-div" ).get(0)); + } + }); + } + ); + + } + displaySearch=function(){ $("#main-content" ).html("coming soon :-)"); } - BrowseGroupIdEntry=function(name,project){ + mapBrowseIdEntries=function(data){ + if (data.browseResult && data.browseResult.browseIdEntries) { + return $.isArray(data.browseResult.browseIdEntries) ? + $.map(data.browseResult.browseIdEntries,function(item){ + return new BrowseIdEntry(item.name, item.project); + }): [data.browseResult.browseIdEntries]; + } + return []; + } + + BrowseIdEntry=function(name,project){ this.name=name; this.project=project; } diff --git a/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/templates/search.html b/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/templates/search.html index 3aa741654..e065450fc 100644 --- a/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/templates/search.html +++ b/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/templates/search.html @@ -22,6 +22,9 @@ + +
+
@@ -31,9 +34,9 @@