From: Olivier Lamy Date: Thu, 16 Feb 2012 23:31:40 +0000 (+0000) Subject: [MRM-1573] X-Git-Tag: archiva-1.4-M3~1271 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=fe446f4081657339fe8f3e21fa4c6c27dff716ea;p=archiva.git [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 --- 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/BrowseGroupIdEntry.java deleted file mode 100644 index 32c64f738..000000000 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/BrowseGroupIdEntry.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.apache.archiva.rest.api.model; -/* - * 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.xml.bind.annotation.XmlRootElement; - -/** - * @author Olivier Lamy - * @since 1.4-M3 - */ -@XmlRootElement( name = "browseGroupIdEntry" ) -public class BrowseGroupIdEntry - implements Comparable -{ - - private String name; - - private boolean project; - - public BrowseGroupIdEntry() - { - // no op - } - - public BrowseGroupIdEntry( String name, boolean project ) - { - this.name = name; - this.project = project; - } - - public String getName() - { - return name; - } - - public void setName( String name ) - { - this.name = name; - } - - public boolean isProject() - { - return project; - } - - public void setProject( boolean project ) - { - this.project = project; - } - - public int compareTo( BrowseGroupIdEntry 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/BrowseGroupIdResult.java deleted file mode 100644 index bafad96c6..000000000 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/BrowseGroupIdResult.java +++ /dev/null @@ -1,53 +0,0 @@ -package org.apache.archiva.rest.api.model; -/* - * 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.xml.bind.annotation.XmlRootElement; -import java.util.Collections; -import java.util.List; - -/** - * @author Olivier Lamy - * @since 1.4-M3 - */ -@XmlRootElement( name = "browseGroupIdResult" ) -public class BrowseGroupIdResult -{ - private List browseGroupIdEntries; - - public BrowseGroupIdResult() - { - // no op - } - - public BrowseGroupIdResult( List browseGroupIdEntries ) - { - this.browseGroupIdEntries = browseGroupIdEntries; - } - - public List getBrowseGroupIdEntries() - { - return browseGroupIdEntries == null ? Collections.emptyList() : browseGroupIdEntries; - } - - public void setBrowseGroupIdEntries( List browseGroupIdEntries ) - { - this.browseGroupIdEntries = browseGroupIdEntries; - } -} diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/BrowseIdEntry.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/BrowseIdEntry.java new file mode 100644 index 000000000..598a4fd2a --- /dev/null +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/BrowseIdEntry.java @@ -0,0 +1,71 @@ +package org.apache.archiva.rest.api.model; +/* + * 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.xml.bind.annotation.XmlRootElement; + +/** + * @author Olivier Lamy + * @since 1.4-M3 + */ +@XmlRootElement( name = "browseIdEntry" ) +public class BrowseIdEntry + implements Comparable +{ + + private String name; + + private boolean project; + + public BrowseIdEntry() + { + // no op + } + + public BrowseIdEntry( String name, boolean project ) + { + this.name = name; + this.project = project; + } + + public String getName() + { + return name; + } + + public void setName( String name ) + { + this.name = name; + } + + public boolean isProject() + { + return project; + } + + public void setProject( boolean project ) + { + this.project = project; + } + + 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/BrowseResult.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/BrowseResult.java new file mode 100644 index 000000000..b7a9cdd5b --- /dev/null +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/BrowseResult.java @@ -0,0 +1,53 @@ +package org.apache.archiva.rest.api.model; +/* + * 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.xml.bind.annotation.XmlRootElement; +import java.util.Collections; +import java.util.List; + +/** + * @author Olivier Lamy + * @since 1.4-M3 + */ +@XmlRootElement( name = "browseResult" ) +public class BrowseResult +{ + private List browseIdEntries; + + public BrowseResult() + { + // no op + } + + public BrowseResult( List browseIdEntries ) + { + this.browseIdEntries = browseIdEntries; + } + + public List getBrowseIdEntries() + { + return browseIdEntries == null ? Collections.emptyList() : browseIdEntries; + } + + public void setBrowseIdEntries( List browseIdEntries ) + { + 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 @@