]> source.dussan.org Git - archiva.git/commitdiff
start work on deleting artifacts tru the ui
authorOlivier Lamy <olamy@apache.org>
Wed, 30 May 2012 16:05:28 +0000 (16:05 +0000)
committerOlivier Lamy <olamy@apache.org>
Wed, 30 May 2012 16:05:28 +0000 (16:05 +0000)
git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1344323 13f79535-47bb-0310-9956-ffa450edef68

archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/RepositoriesService.java
archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java
archiva-modules/archiva-web/archiva-web-common/src/main/resources/org/apache/archiva/i18n/default.properties
archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/search.js
archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/utils.js
archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/templates/archiva/search.html

index 92662b78e98dd18a51d90c6760ee6fc29cf381c3..b82ee5d16d6e86c83f483fbcde67fa18871d4089 100644 (file)
@@ -19,11 +19,11 @@ package org.apache.archiva.rest.api.services;
  * under the License.
  */
 
+import org.apache.archiva.redback.authorization.RedbackAuthorization;
 import org.apache.archiva.repository.scanner.RepositoryScanStatistics;
 import org.apache.archiva.rest.api.model.Artifact;
 import org.apache.archiva.rest.api.model.ArtifactTransferRequest;
 import org.apache.archiva.security.common.ArchivaRoleConstants;
-import org.apache.archiva.redback.authorization.RedbackAuthorization;
 
 import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
@@ -111,20 +111,21 @@ public interface RepositoriesService
 
 
     @Path( "deleteArtifact" )
-    @GET
+    @POST
+    @Consumes( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
     @Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } )
     @RedbackAuthorization( noPermission = true )
     /**
      * <b>permissions are checked in impl</b>
      * @since 1.4-M2
      */
-    Boolean deleteArtifact( @QueryParam( "" ) Artifact artifact, @QueryParam( "repositoryId" ) String repositoryId )
+    Boolean deleteArtifact( Artifact artifact )
         throws ArchivaRestServiceException;
 
     @Path( "isAuthorizedToDeleteArtifacts/{repositoryId}" )
     @GET
     @Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } )
-    @RedbackAuthorization( noPermission = true, noRestriction = true)
+    @RedbackAuthorization( noPermission = true, noRestriction = true )
     Boolean isAuthorizedToDeleteArtifacts( @PathParam( "repositoryId" ) String repoId )
         throws ArchivaRestServiceException;
 
index 4a25b5f87b4229137b5876bee82050d184ce73e3..3890a4cf3fa99be2ea6499cf3d0ee26f67e5736d 100644 (file)
@@ -620,10 +620,11 @@ public class DefaultRepositoriesService
         }
     }
 
-    public Boolean deleteArtifact( Artifact artifact, String repositoryId )
+    public Boolean deleteArtifact( Artifact artifact )
         throws ArchivaRestServiceException
     {
 
+        String repositoryId = artifact.getContext();
         if ( StringUtils.isEmpty( repositoryId ) )
         {
             throw new ArchivaRestServiceException( "repositoryId cannot be null", 400, null );
index 305d3f38b0624dfed9905893ad1718658346cd7b..7a047e59a0faa4ad64e86f9485468ae17d7afb02 100644 (file)
@@ -264,6 +264,7 @@ artifact.detail.tab.header.dependency.tree=Dependency Tree
 artifact.detail.tab.header.used.by=Used By
 artifact.detail.tab.header.file.content=Artifacts Content
 artifact.detail.tab.header.file.download=Artifacts
+artifact.deleted=Artifact deleted.
 browse.artifact.version=Version
 browse.artifact.pom.snippet=POM Snippet
 browse.artifact.parent=Parent
index dd0ab4a7a1cbc5b617d17042a102c9405e7489cf..31f1394ee9262e2d8d6ec2b384543a103ffa7d70 100644 (file)
@@ -273,95 +273,21 @@ define("search",["jquery","i18n","jquery.tmpl","choosen","order!knockout","knock
                 }
 
                 if ($(e.target).attr("href")=="#artifact-details-download-content") {
-                  $.log("artifact metadata");
-                  //
                   mainContent.find("#artifact-details-download-content" ).html(smallSpinnerImg());
                   var artifactDownloadInfosUrl = "restServices/archivaServices/browseService/artifactDownloadInfos/"+encodeURIComponent(self.groupId);
                   artifactDownloadInfosUrl+="/"+encodeURIComponent(self.artifactId)+"/"+encodeURIComponent(self.version);
                   artifactDownloadInfosUrl+="?repositoryId="+encodeURIComponent(getSelectedBrowsingRepository());
                   $.get(artifactDownloadInfosUrl,function(data){
-                    $("#artifact-details-download-content" ).html($("#artifact-details-download-content_tmpl").tmpl({artifactDownloadInfos:data}));
+                    var artifactDetailsDownloadViewModel = new ArtifactDetailsDownloadViewModel(mapArtifacts(data));
+                    mainContent.find("#artifact-details-download-content" ).attr("data-bind",'template:{name:"artifact-details-download-content_tmpl"}');
+                    ko.applyBindings(artifactDetailsDownloadViewModel,mainContent.find("#artifact-details-download-content" ).get(0));
                   });
                   return;
                 }
 
 
                 if ($(e.target).attr("href")=="#artifact-details-files-content") {
-                  mainContent.find("#artifact-details-files-content" ).html(smallSpinnerImg());
-                  var artifactDownloadInfosUrl = "restServices/archivaServices/browseService/artifactDownloadInfos/"+encodeURIComponent(self.groupId);
-                  artifactDownloadInfosUrl+="/"+encodeURIComponent(self.artifactId)+"/"+encodeURIComponent(self.version);
-                  artifactDownloadInfosUrl+="?repositoryId="+encodeURIComponent(getSelectedBrowsingRepository());
-
-                  $.get(artifactDownloadInfosUrl,function(data){
-                    $("#artifact-details-files-content" ).html($("#artifact-details-files-content_tmpl").tmpl({artifactDownloadInfos:data}));
-                    mainContent.find("#artifact-content-list-files li" ).on("click",function(){
-                      mainContent.find("#artifact_content_tree").html("");
-                      mainContent.find("#artifact-content-text" ).html("");
-                      var idValue = $(this ).attr("id");
-                      var splitted = idValue.split(":");
-
-                      var classifier=splitted[0];//idValue.substringBeforeLast(":");
-                      var version=splitted[1];
-                      var type = splitted[2];
-
-                      $.log("click:" + idValue + " -> " + classifier + ":" + type + ":" + version);
-                      if (type=="pom"){
-                        $.log("show pom");
-                        var pomContentUrl = "restServices/archivaServices/browseService/artifactContentText/"+encodeURIComponent(self.groupId);
-                        pomContentUrl+="/"+encodeURIComponent(self.artifactId)+"/"+encodeURIComponent(version);
-                        pomContentUrl+="?repositoryId="+encodeURIComponent(getSelectedBrowsingRepository());
-                        pomContentUrl+="&t=pom";
-                        mainContent.find("#artifact-content-text" ).html(smallSpinnerImg());
-                        $.ajax({
-                          url: pomContentUrl,
-                          success: function(data) {
-                            var text = data.content.replace(/</g,'&lt;');
-                            text=text.replace(/>/g,"&gt;");
-                            mainContent.find("#artifact-content-text" ).html(text);
-                            prettyPrint();
-                            goToAnchor("artifact-content-text-header");
-                          }
-                        });
-                        return;
-                      }
-                      var entriesUrl = "restServices/archivaServices/browseService/artifactContentEntries/"+encodeURIComponent(self.groupId);
-                      entriesUrl+="/"+encodeURIComponent(self.artifactId)+"/"+encodeURIComponent(version);
-                      entriesUrl+="?repositoryId="+encodeURIComponent(getSelectedBrowsingRepository());
-                      if(classifier){
-                        entriesUrl+="&c="+encodeURIComponent(classifier);
-                      }
-                      $("#main-content #artifact_content_tree").fileTree({
-                        script: entriesUrl,
-                        root: ""
-                                 },function(file) {
-                          $.log("file:"+file.substringBeforeLast("/")+',classifier:'+classifier);
-                          var fileContentUrl = "restServices/archivaServices/browseService/artifactContentText/"+encodeURIComponent(self.groupId);
-                          fileContentUrl+="/"+encodeURIComponent(self.artifactId)+"/"+encodeURIComponent(version);
-                          fileContentUrl+="?repositoryId="+encodeURIComponent(getSelectedBrowsingRepository());
-                          if(type){
-                            fileContentUrl+="&t="+encodeURIComponent(type);
-                          }
-                          if(classifier){
-                            fileContentUrl+="&c="+encodeURIComponent(classifier);
-                          }
-                          fileContentUrl+="&p="+encodeURIComponent(file.substringBeforeLast("/"));
-                          $.ajax({
-                           url: fileContentUrl,
-                           success: function(data) {
-                             var text = data.content.replace(/</g,'&lt;');
-                             text=text.replace(/>/g,"&gt;");
-                             mainContent.find("#artifact-content-text" ).html(smallSpinnerImg());
-                             mainContent.find("#artifact-content-text" ).html(text);
-                             prettyPrint();
-                             goToAnchor("artifact-content-text-header");
-                           }
-                          });
-                                 }
-                      );
-                    });
-
-                  });
-
+                  displayArtifactFilesContent(self);
                 }
               });
             }
@@ -461,6 +387,109 @@ define("search",["jquery","i18n","jquery.tmpl","choosen","order!knockout","knock
 
   }
 
+  ArtifactDetailsDownloadViewModel=function(artifacts){
+    this.artifacts=ko.observableArray(artifacts);
+    var self=this;
+    deleteArtifact=function(artifact){
+      $.log("deleteArtifact");
+      clearUserMessages();
+      $.ajax({
+        url:"restServices/archivaServices/repositoriesService/deleteArtifact",
+        type:"POST",
+        dataType:"json",
+        contentType: 'application/json',
+        data: ko.toJSON(artifact),
+        success:function(data){
+          self.artifacts.remove(artifact);
+          displaySuccessMessage( $.i18n.prop('artifact.deleted'));
+        },
+        error:function(data){
+          displayRestError(data,"user-messages");
+        }
+      });
+
+    }
+  }
+
+  displayArtifactFilesContent=function(self){
+    var mainContent = $("#main-content");
+    mainContent.find("#artifact-details-files-content" ).html(smallSpinnerImg());
+    var artifactDownloadInfosUrl = "restServices/archivaServices/browseService/artifactDownloadInfos/"+encodeURIComponent(self.groupId);
+    artifactDownloadInfosUrl+="/"+encodeURIComponent(self.artifactId)+"/"+encodeURIComponent(self.version);
+    artifactDownloadInfosUrl+="?repositoryId="+encodeURIComponent(getSelectedBrowsingRepository());
+
+    $.get(artifactDownloadInfosUrl,function(data){
+      $("#artifact-details-files-content" ).html($("#artifact-details-files-content_tmpl").tmpl({artifactDownloadInfos:data}));
+      mainContent.find("#artifact-content-list-files li" ).on("click",function(){
+        mainContent.find("#artifact_content_tree").html("");
+        mainContent.find("#artifact-content-text" ).html("");
+        var idValue = $(this ).attr("id");
+        var splitted = idValue.split(":");
+
+        var classifier=splitted[0];//idValue.substringBeforeLast(":");
+        var version=splitted[1];
+        var type = splitted[2];
+
+        $.log("click:" + idValue + " -> " + classifier + ":" + type + ":" + version);
+        if (type=="pom"){
+          $.log("show pom");
+          var pomContentUrl = "restServices/archivaServices/browseService/artifactContentText/"+encodeURIComponent(self.groupId);
+          pomContentUrl+="/"+encodeURIComponent(self.artifactId)+"/"+encodeURIComponent(version);
+          pomContentUrl+="?repositoryId="+encodeURIComponent(getSelectedBrowsingRepository());
+          pomContentUrl+="&t=pom";
+          mainContent.find("#artifact-content-text" ).html(smallSpinnerImg());
+          $.ajax({
+            url: pomContentUrl,
+            success: function(data) {
+              var text = data.content.replace(/</g,'&lt;');
+              text=text.replace(/>/g,"&gt;");
+              mainContent.find("#artifact-content-text" ).html(text);
+              prettyPrint();
+              goToAnchor("artifact-content-text-header");
+            }
+          });
+          return;
+        }
+        var entriesUrl = "restServices/archivaServices/browseService/artifactContentEntries/"+encodeURIComponent(self.groupId);
+        entriesUrl+="/"+encodeURIComponent(self.artifactId)+"/"+encodeURIComponent(version);
+        entriesUrl+="?repositoryId="+encodeURIComponent(getSelectedBrowsingRepository());
+        if(classifier){
+          entriesUrl+="&c="+encodeURIComponent(classifier);
+        }
+        $("#main-content #artifact_content_tree").fileTree({
+          script: entriesUrl,
+          root: ""
+                 },function(file) {
+            $.log("file:"+file.substringBeforeLast("/")+',classifier:'+classifier);
+            var fileContentUrl = "restServices/archivaServices/browseService/artifactContentText/"+encodeURIComponent(self.groupId);
+            fileContentUrl+="/"+encodeURIComponent(self.artifactId)+"/"+encodeURIComponent(version);
+            fileContentUrl+="?repositoryId="+encodeURIComponent(getSelectedBrowsingRepository());
+            if(type){
+              fileContentUrl+="&t="+encodeURIComponent(type);
+            }
+            if(classifier){
+              fileContentUrl+="&c="+encodeURIComponent(classifier);
+            }
+            fileContentUrl+="&p="+encodeURIComponent(file.substringBeforeLast("/"));
+            $.ajax({
+             url: fileContentUrl,
+             success: function(data) {
+               var text = data.content.replace(/</g,'&lt;');
+               text=text.replace(/>/g,"&gt;");
+               mainContent.find("#artifact-content-text" ).html(smallSpinnerImg());
+               mainContent.find("#artifact-content-text" ).html(text);
+               prettyPrint();
+               goToAnchor("artifact-content-text-header");
+             }
+            });
+                 }
+        );
+      });
+
+    });
+
+  }
+
   ArtifactContentEntry=function(path,file,depth){
     this.path=path;
     this.file=file;
@@ -1016,7 +1045,7 @@ define("search",["jquery","i18n","jquery.tmpl","choosen","order!knockout","knock
   //-----------------------------------------
   Artifact=function(context,url,groupId,artifactId,repositoryId,version,prefix,goals,bundleVersion,bundleSymbolicName,
                     bundleExportPackage,bundleExportService,bundleDescription,bundleName,bundleLicense,bundleDocUrl,
-                    bundleImportPackage,bundleRequireBundle,classifier,packaging,fileExtension){
+                    bundleImportPackage,bundleRequireBundle,classifier,packaging,fileExtension,size){
 
     var self=this;
 
@@ -1095,6 +1124,8 @@ define("search",["jquery","i18n","jquery.tmpl","choosen","order!knockout","knock
     //private String fileExtension;
     this.fileExtension=fileExtension;
 
+    this.size=size;
+
     this.crumbEntries=function(){
       return calculateCrumbEntries(self.groupId,self.artifactId,self.version);
     }
@@ -1126,7 +1157,7 @@ define("search",["jquery","i18n","jquery.tmpl","choosen","order!knockout","knock
 
   mapArtifacts=function(data){
     if (data){
-      return $.isArray(data )? $.map(data,function(item){return mapArtifact(item)}) : [data];
+      return $.isArray(data)? $.map(data,function(item){return mapArtifact(item)}) : [data];
     }
     return [];
   }
@@ -1137,7 +1168,7 @@ define("search",["jquery","i18n","jquery.tmpl","choosen","order!knockout","knock
                         data.goals,data.bundleVersion,data.bundleSymbolicName,
                         data.bundleExportPackage,data.bundleExportService,data.bundleDescription,data.bundleName,
                         data.bundleLicense,data.bundleDocUrl,
-                        data.bundleImportPackage,data.bundleRequireBundle,data.classifier,data.packaging,data.fileExtension);
+                        data.bundleImportPackage,data.bundleRequireBundle,data.classifier,data.packaging,data.fileExtension,data.size);
     }
     return null;
   }
index 605b7a5fd9e4f090eeae5bc98a4c353c6d8fe2f3..4f2c10c6909b54100a0219af87eefdfe42f56c75 100644 (file)
@@ -293,10 +293,10 @@ define("utils",["jquery","i18n","jquery.tmpl"], function() {
     }
 
     if (data.errorKey && data.errorKey.length>0){
-        displayErrorMessage($.i18n.prop( data.errorKey ),idToAppend);
-      } else {
-        $.log("data.errorMessage:"+data.errorMessage);
-        displayErrorMessage(data.errorMessage,idToAppend);
+      displayErrorMessage($.i18n.prop( data.errorKey ),idToAppend);
+    } else {
+      $.log("data.errorMessage:"+data.errorMessage);
+      displayErrorMessage(data.errorMessage,idToAppend);
     }
 
   }
index ffd93c668bfd27e2c5ced3f96939ae55a89654ea..2a656b4b17605dd30f78616036230088b5a16f2b 100644 (file)
 
 <script id="artifact-details-download-content_tmpl" type="text/html">
     <ul id="artifact-download-list-files">
-    {{each artifactDownloadInfos}}
+    {{each(i, row) artifacts()}}
       <li>
-        <a href="${$value.url}">${$value.packaging}:${$value.version}&nbsp;-&nbsp;${$value.size}</a>
+        <a href="#" data-bind="click: function(){deleteArtifact(row)}">del</a>:<a href="${row.url}">${row.packaging}:${row.version}&nbsp;-&nbsp;${row.size}</a>
       </li>
     {{/each}}
     </ul>