mirror of https://github.com/apache/archiva.git
start work on deleting artifacts tru the ui
git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1344323 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
e9c63be0d2
commit
bbadcdcf91
|
@ -19,11 +19,11 @@ package org.apache.archiva.rest.api.services;
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import org.apache.archiva.redback.authorization.RedbackAuthorization;
|
||||||
import org.apache.archiva.repository.scanner.RepositoryScanStatistics;
|
import org.apache.archiva.repository.scanner.RepositoryScanStatistics;
|
||||||
import org.apache.archiva.rest.api.model.Artifact;
|
import org.apache.archiva.rest.api.model.Artifact;
|
||||||
import org.apache.archiva.rest.api.model.ArtifactTransferRequest;
|
import org.apache.archiva.rest.api.model.ArtifactTransferRequest;
|
||||||
import org.apache.archiva.security.common.ArchivaRoleConstants;
|
import org.apache.archiva.security.common.ArchivaRoleConstants;
|
||||||
import org.apache.archiva.redback.authorization.RedbackAuthorization;
|
|
||||||
|
|
||||||
import javax.ws.rs.Consumes;
|
import javax.ws.rs.Consumes;
|
||||||
import javax.ws.rs.GET;
|
import javax.ws.rs.GET;
|
||||||
|
@ -111,20 +111,21 @@ public interface RepositoriesService
|
||||||
|
|
||||||
|
|
||||||
@Path( "deleteArtifact" )
|
@Path( "deleteArtifact" )
|
||||||
@GET
|
@POST
|
||||||
|
@Consumes( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
|
||||||
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } )
|
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } )
|
||||||
@RedbackAuthorization( noPermission = true )
|
@RedbackAuthorization( noPermission = true )
|
||||||
/**
|
/**
|
||||||
* <b>permissions are checked in impl</b>
|
* <b>permissions are checked in impl</b>
|
||||||
* @since 1.4-M2
|
* @since 1.4-M2
|
||||||
*/
|
*/
|
||||||
Boolean deleteArtifact( @QueryParam( "" ) Artifact artifact, @QueryParam( "repositoryId" ) String repositoryId )
|
Boolean deleteArtifact( Artifact artifact )
|
||||||
throws ArchivaRestServiceException;
|
throws ArchivaRestServiceException;
|
||||||
|
|
||||||
@Path( "isAuthorizedToDeleteArtifacts/{repositoryId}" )
|
@Path( "isAuthorizedToDeleteArtifacts/{repositoryId}" )
|
||||||
@GET
|
@GET
|
||||||
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } )
|
@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 )
|
Boolean isAuthorizedToDeleteArtifacts( @PathParam( "repositoryId" ) String repoId )
|
||||||
throws ArchivaRestServiceException;
|
throws ArchivaRestServiceException;
|
||||||
|
|
||||||
|
|
|
@ -620,10 +620,11 @@ public class DefaultRepositoriesService
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean deleteArtifact( Artifact artifact, String repositoryId )
|
public Boolean deleteArtifact( Artifact artifact )
|
||||||
throws ArchivaRestServiceException
|
throws ArchivaRestServiceException
|
||||||
{
|
{
|
||||||
|
|
||||||
|
String repositoryId = artifact.getContext();
|
||||||
if ( StringUtils.isEmpty( repositoryId ) )
|
if ( StringUtils.isEmpty( repositoryId ) )
|
||||||
{
|
{
|
||||||
throw new ArchivaRestServiceException( "repositoryId cannot be null", 400, null );
|
throw new ArchivaRestServiceException( "repositoryId cannot be null", 400, null );
|
||||||
|
|
|
@ -264,6 +264,7 @@ artifact.detail.tab.header.dependency.tree=Dependency Tree
|
||||||
artifact.detail.tab.header.used.by=Used By
|
artifact.detail.tab.header.used.by=Used By
|
||||||
artifact.detail.tab.header.file.content=Artifacts Content
|
artifact.detail.tab.header.file.content=Artifacts Content
|
||||||
artifact.detail.tab.header.file.download=Artifacts
|
artifact.detail.tab.header.file.download=Artifacts
|
||||||
|
artifact.deleted=Artifact deleted.
|
||||||
browse.artifact.version=Version
|
browse.artifact.version=Version
|
||||||
browse.artifact.pom.snippet=POM Snippet
|
browse.artifact.pom.snippet=POM Snippet
|
||||||
browse.artifact.parent=Parent
|
browse.artifact.parent=Parent
|
||||||
|
|
|
@ -273,95 +273,21 @@ define("search",["jquery","i18n","jquery.tmpl","choosen","order!knockout","knock
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($(e.target).attr("href")=="#artifact-details-download-content") {
|
if ($(e.target).attr("href")=="#artifact-details-download-content") {
|
||||||
$.log("artifact metadata");
|
|
||||||
//
|
|
||||||
mainContent.find("#artifact-details-download-content" ).html(smallSpinnerImg());
|
mainContent.find("#artifact-details-download-content" ).html(smallSpinnerImg());
|
||||||
var artifactDownloadInfosUrl = "restServices/archivaServices/browseService/artifactDownloadInfos/"+encodeURIComponent(self.groupId);
|
var artifactDownloadInfosUrl = "restServices/archivaServices/browseService/artifactDownloadInfos/"+encodeURIComponent(self.groupId);
|
||||||
artifactDownloadInfosUrl+="/"+encodeURIComponent(self.artifactId)+"/"+encodeURIComponent(self.version);
|
artifactDownloadInfosUrl+="/"+encodeURIComponent(self.artifactId)+"/"+encodeURIComponent(self.version);
|
||||||
artifactDownloadInfosUrl+="?repositoryId="+encodeURIComponent(getSelectedBrowsingRepository());
|
artifactDownloadInfosUrl+="?repositoryId="+encodeURIComponent(getSelectedBrowsingRepository());
|
||||||
$.get(artifactDownloadInfosUrl,function(data){
|
$.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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if ($(e.target).attr("href")=="#artifact-details-files-content") {
|
if ($(e.target).attr("href")=="#artifact-details-files-content") {
|
||||||
mainContent.find("#artifact-details-files-content" ).html(smallSpinnerImg());
|
displayArtifactFilesContent(self);
|
||||||
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,'<');
|
|
||||||
text=text.replace(/>/g,">");
|
|
||||||
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,'<');
|
|
||||||
text=text.replace(/>/g,">");
|
|
||||||
mainContent.find("#artifact-content-text" ).html(smallSpinnerImg());
|
|
||||||
mainContent.find("#artifact-content-text" ).html(text);
|
|
||||||
prettyPrint();
|
|
||||||
goToAnchor("artifact-content-text-header");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -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,'<');
|
||||||
|
text=text.replace(/>/g,">");
|
||||||
|
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,'<');
|
||||||
|
text=text.replace(/>/g,">");
|
||||||
|
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){
|
ArtifactContentEntry=function(path,file,depth){
|
||||||
this.path=path;
|
this.path=path;
|
||||||
this.file=file;
|
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,
|
Artifact=function(context,url,groupId,artifactId,repositoryId,version,prefix,goals,bundleVersion,bundleSymbolicName,
|
||||||
bundleExportPackage,bundleExportService,bundleDescription,bundleName,bundleLicense,bundleDocUrl,
|
bundleExportPackage,bundleExportService,bundleDescription,bundleName,bundleLicense,bundleDocUrl,
|
||||||
bundleImportPackage,bundleRequireBundle,classifier,packaging,fileExtension){
|
bundleImportPackage,bundleRequireBundle,classifier,packaging,fileExtension,size){
|
||||||
|
|
||||||
var self=this;
|
var self=this;
|
||||||
|
|
||||||
|
@ -1095,6 +1124,8 @@ define("search",["jquery","i18n","jquery.tmpl","choosen","order!knockout","knock
|
||||||
//private String fileExtension;
|
//private String fileExtension;
|
||||||
this.fileExtension=fileExtension;
|
this.fileExtension=fileExtension;
|
||||||
|
|
||||||
|
this.size=size;
|
||||||
|
|
||||||
this.crumbEntries=function(){
|
this.crumbEntries=function(){
|
||||||
return calculateCrumbEntries(self.groupId,self.artifactId,self.version);
|
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){
|
mapArtifacts=function(data){
|
||||||
if (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 [];
|
return [];
|
||||||
}
|
}
|
||||||
|
@ -1137,7 +1168,7 @@ define("search",["jquery","i18n","jquery.tmpl","choosen","order!knockout","knock
|
||||||
data.goals,data.bundleVersion,data.bundleSymbolicName,
|
data.goals,data.bundleVersion,data.bundleSymbolicName,
|
||||||
data.bundleExportPackage,data.bundleExportService,data.bundleDescription,data.bundleName,
|
data.bundleExportPackage,data.bundleExportService,data.bundleDescription,data.bundleName,
|
||||||
data.bundleLicense,data.bundleDocUrl,
|
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;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -293,10 +293,10 @@ define("utils",["jquery","i18n","jquery.tmpl"], function() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.errorKey && data.errorKey.length>0){
|
if (data.errorKey && data.errorKey.length>0){
|
||||||
displayErrorMessage($.i18n.prop( data.errorKey ),idToAppend);
|
displayErrorMessage($.i18n.prop( data.errorKey ),idToAppend);
|
||||||
} else {
|
} else {
|
||||||
$.log("data.errorMessage:"+data.errorMessage);
|
$.log("data.errorMessage:"+data.errorMessage);
|
||||||
displayErrorMessage(data.errorMessage,idToAppend);
|
displayErrorMessage(data.errorMessage,idToAppend);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -835,9 +835,9 @@
|
||||||
|
|
||||||
<script id="artifact-details-download-content_tmpl" type="text/html">
|
<script id="artifact-details-download-content_tmpl" type="text/html">
|
||||||
<ul id="artifact-download-list-files">
|
<ul id="artifact-download-list-files">
|
||||||
{{each artifactDownloadInfos}}
|
{{each(i, row) artifacts()}}
|
||||||
<li>
|
<li>
|
||||||
<a href="${$value.url}">${$value.packaging}:${$value.version} - ${$value.size}</a>
|
<a href="#" data-bind="click: function(){deleteArtifact(row)}">del</a>:<a href="${row.url}">${row.packaging}:${row.version} - ${row.size}</a>
|
||||||
</li>
|
</li>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</ul>
|
</ul>
|
||||||
|
|
Loading…
Reference in New Issue