/*
* RProjectFileImpl.java
*
* Copyright (C) 2010-2016, Microsoft Corporation
*
* This program is licensed to you under the terms of Version 2.0 of the
* Apache License. This program is distributed WITHOUT
* ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
* Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0) for more details.
*
*/
package com.revo.deployr.client.core.impl;
import com.revo.deployr.client.RClientException;
import com.revo.deployr.client.RSecurityException;
import com.revo.deployr.client.core.RCoreResult;
import com.revo.deployr.client.core.RClientExecutor;
import com.revo.deployr.client.call.RCall;
import com.revo.deployr.client.call.project.ProjectDirectoryUpdateCall;
import com.revo.deployr.client.call.project.ProjectDirectoryStoreCall;
import com.revo.deployr.client.call.project.ProjectDirectoryDeleteCall;
import com.revo.deployr.client.RProjectFile;
import com.revo.deployr.client.RRepositoryFile;
import com.revo.deployr.client.about.RProjectDetails;
import com.revo.deployr.client.about.RProjectFileDetails;
import com.revo.deployr.client.about.RRepositoryFileDetails;
import com.revo.deployr.client.params.RepoUploadOptions;
import com.revo.deployr.client.core.REndpoints;
import com.revo.deployr.client.util.REntityUtil;
import org.apache.http.client.utils.URIBuilder;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.InputStream;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* DeployR project directory file.
*/
public class RProjectFileImpl implements RProjectFile {
private Log log = LogFactory.getLog(RProjectFile.class);
RProjectDetails project;
RProjectFileDetails about;
RLiveContext liveContext;
public RProjectFileImpl(RProjectDetails project, RProjectFileDetails about, RLiveContext liveContext) {
this.project = project;
this.about = about;
this.liveContext = liveContext;
}
public RProjectFileDetails about() {
return about;
}
public RProjectFile update(String rename, String descr, boolean overwrite)
throws RClientException, RSecurityException {
RCall rCall = new ProjectDirectoryUpdateCall(this.project.id, this.about.filename, rename, descr, overwrite);
RCoreResult rResult = liveContext.executor.processCall(rCall);
Map dirFileMap = rResult.getDirectoryFile();
log.debug("updateDirectoryFile: rResult.getDirectoryFile=" + dirFileMap);
RProjectFileDetails details = REntityUtil.getProjectFileDetails(dirFileMap);
RProjectFile projectFile = new RProjectFileImpl(this.project, details, liveContext);
boolean success = rResult.isSuccess();
String error = rResult.getError();
int errorCode = rResult.getErrorCode();
log.debug("updateDirectoryFile: projectFile, success=" + success + " error=" + error + " errorCode=" + errorCode);
return projectFile;
}
public RRepositoryFile store(RepoUploadOptions options)
throws RClientException, RSecurityException {
if(options.filename != this.about.filename) {
options.filename = this.about.filename;
}
RCall rCall = new ProjectDirectoryStoreCall(this.project.id, options);
RCoreResult rResult = liveContext.executor.processCall(rCall);
Map repoFileMap = rResult.getRepoFile();
log.debug("uploadFile: rResult.getRepoFile=" + repoFileMap);
RRepositoryFileDetails details = REntityUtil.getRepositoryFileDetails(repoFileMap, liveContext);
RRepositoryFile repoFile = new RRepositoryFileImpl(details, liveContext);
boolean success = rResult.isSuccess();
String error = rResult.getError();
int errorCode = rResult.getErrorCode();
log.debug("store: repoFile, success=" + success + " error=" + error + " errorCode=" + errorCode);
return repoFile;
}
public void delete()
throws RClientException, RSecurityException {
RCall rCall = new ProjectDirectoryDeleteCall(this.project.id, this.about.filename);
RCoreResult rResult = liveContext.executor.processCall(rCall);
boolean success = rResult.isSuccess();
String error = rResult.getError();
int errorCode = rResult.getErrorCode();
log.debug("delete: projectFile, success=" + success + " error=" + error + " errorCode=" + errorCode);
}
public InputStream download()
throws RClientException, RSecurityException {
try {
String urlBase = liveContext.serverurl +
REndpoints.RPROJECTDIRECTORYDOWNLOAD;
String urlPath = urlBase + ";jsessionid=" + liveContext.httpcookie;
URIBuilder builder = new URIBuilder(urlPath);
builder.addParameter("project", this.project.id);
builder.addParameter("filename", this.about.filename);
return liveContext.executor.download(builder);
} catch(Exception dex) {
throw new RClientException("Download failed: " + dex.getMessage());
}
}
}