//______________________________________________________________________________
//
// $Id$
// $Author$
//
//
// created 04/08 by Dmitry Litvintsev (litvinse@fnal.gov)
//______________________________________________________________________________
package gov.fnal.srm.util;
import eu.emi.security.authn.x509.X509Credential;
import org.apache.axis.types.URI;
import java.io.IOException;
import java.util.Date;
import org.dcache.srm.client.SRMClientV2;
import org.dcache.srm.util.RequestStatusTool;
import org.dcache.srm.v2_2.ArrayOfAnyURI;
import org.dcache.srm.v2_2.ISRM;
import org.dcache.srm.v2_2.SrmAbortFilesRequest;
import org.dcache.srm.v2_2.SrmAbortFilesResponse;
import org.dcache.srm.v2_2.TReturnStatus;
import org.dcache.srm.v2_2.TSURLReturnStatus;
public class SRMAbortFilesClientV2 extends SRMClient {
private ISRM isrm;
private X509Credential credential;
public SRMAbortFilesClientV2(Configuration configuration) {
super(configuration);
}
@Override
public void connect() throws Exception {
credential= getCredential();
isrm = new SRMClientV2(configuration.getSrmUrl(),
credential,
configuration.getRetry_timeout(),
configuration.getRetry_num(),
doDelegation,
fullDelegation,
gss_expected_name,
configuration.getWebservice_path(),
configuration.getX509_user_trusted_certificates(),
configuration.getTransport());
}
@Override
public void start() throws Exception{
if (credential.getCertificate().getNotAfter().before(new Date())) {
throw new RuntimeException("credentials have expired");
}
StringBuilder sb = new StringBuilder();
boolean failed=false;
if (configuration.getArrayOfRequestTokens()!=null) {
for (String requestToken : configuration.getArrayOfRequestTokens()) {
SrmAbortFilesRequest request = new SrmAbortFilesRequest();
request.setRequestToken(requestToken);
ArrayOfAnyURI arrayOfSURLs = new ArrayOfAnyURI();
URI[] urlArray = new URI[1];
urlArray[0] = new URI(configuration.getSrmUrl().toASCIIString());
arrayOfSURLs.setUrlArray(urlArray);
request.setArrayOfSURLs(arrayOfSURLs);
SrmAbortFilesResponse response = isrm.srmAbortFiles(request);
if (response==null) {
throw new IOException(" null SrmAbortFilesRespinse for request token " +requestToken);
}
TReturnStatus rs = response.getReturnStatus();
if ( rs == null) {
throw new IOException(" null TReturnStatus for request token "+requestToken);
}
if (RequestStatusTool.isFailedRequestStatus(rs)) {
failed=true;
sb.append("SrmAbortFiles failed for request token ")
.append(requestToken).append(":\n ");
sb.append("return status: ").append(rs.getStatusCode())
.append(", Explanation : ")
.append(rs.getExplanation()).append("\n");
}
if (response.getArrayOfFileStatuses()!=null) {
if (response.getArrayOfFileStatuses().getStatusArray()!=null) {
if (response.getArrayOfFileStatuses().getStatusArray().length>0) {
for(TSURLReturnStatus status: response.getArrayOfFileStatuses().getStatusArray()) {
TReturnStatus st = status.getStatus();
if (st==null) {
sb.append(status.getSurl())
.append(" TReturnStatus is null\n");
}
else {
sb.append(status.getSurl())
.append(" return code ")
.append(st.getStatusCode())
.append(", Explanation ")
.append(st.getExplanation())
.append("\n");
}
}
}
else {
sb.append("TSURLReturnStatus is empty\n");
}
}
else {
sb.append("TSURLReturnStatus is null\n");
}
}
else {
sb.append("getArrayOfFileStatuses is null");
}
}
if (failed) {
throw new IOException(sb.toString());
}
}
else if (configuration.getSurls()!=null) {
SrmAbortFilesRequest request = new SrmAbortFilesRequest();
ArrayOfAnyURI arrayOfSURLs = new ArrayOfAnyURI();
URI[] urlArray = new URI[configuration.getSurls().length];
for(int i=0; i<configuration.getSurls().length;i++) {
urlArray[i] = new URI((new java.net.URI(configuration.getSurls()[i])).toASCIIString());
}
arrayOfSURLs.setUrlArray(urlArray);
request.setArrayOfSURLs(arrayOfSURLs);
SrmAbortFilesResponse response = isrm.srmAbortFiles(request);
if (response==null) {
throw new IOException(" null SrmAbortFilesResponse ");
}
TReturnStatus rs = response.getReturnStatus();
if ( rs == null) {
throw new IOException(" null TReturnStatus ");
}
if (RequestStatusTool.isFailedRequestStatus(rs)) {
sb.append("SrmAbortFiles failed:\n ");
sb.append("return status: ").append(rs.getStatusCode())
.append(", Explanation : ").append(rs.getExplanation())
.append("\n");
}
if (response.getArrayOfFileStatuses()!=null) {
if (response.getArrayOfFileStatuses().getStatusArray()!=null) {
if (response.getArrayOfFileStatuses().getStatusArray().length>0) {
for(TSURLReturnStatus status: response.getArrayOfFileStatuses().getStatusArray()) {
TReturnStatus st = status.getStatus();
if (st==null) {
sb.append(status.getSurl())
.append(" TReturnStatus is null\n");
}
else {
sb.append(status.getSurl())
.append(" return code ")
.append(st.getStatusCode())
.append(", Explanation ")
.append(st.getExplanation())
.append("\n");
}
}
}
else {
sb.append("TSURLReturnStatus is empty\n");
}
}
else {
sb.append("TSURLReturnStatus is null\n");
}
}
else {
sb.append("getArrayOfFileStatuses is null");
}
if (RequestStatusTool.isFailedRequestStatus(rs)) {
throw new IOException(sb.toString());
}
}
}
}