/* * RProjectImpl.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.RDataException; import com.revo.deployr.client.RSecurityException; import com.revo.deployr.client.RGridException; import com.revo.deployr.client.core.RCoreResult; import com.revo.deployr.client.core.RClientExecutor; import com.revo.deployr.client.core.REndpoints; import com.revo.deployr.client.call.RCall; import com.revo.deployr.client.call.user.AboutCall; import com.revo.deployr.client.call.project.ProjectRecycleCall; import com.revo.deployr.client.call.project.ProjectPingCall; import com.revo.deployr.client.call.project.ProjectAboutUpdateCall; import com.revo.deployr.client.call.project.ProjectGrantCall; import com.revo.deployr.client.call.project.ProjectSaveCall; import com.revo.deployr.client.call.project.ProjectSaveAsCall; import com.revo.deployr.client.call.project.ProjectCloseCall; import com.revo.deployr.client.call.project.ProjectDeleteCall; import com.revo.deployr.client.call.project.ProjectExecuteConsoleCall; import com.revo.deployr.client.call.project.ProjectExecuteCodeCall; import com.revo.deployr.client.call.project.ProjectExecuteScriptCall; import com.revo.deployr.client.call.project.ProjectExecuteInterruptCall; import com.revo.deployr.client.call.project.ProjectExecuteHistoryCall; import com.revo.deployr.client.call.project.ProjectExecuteFlushCall; import com.revo.deployr.client.call.project.ProjectExecuteResultListCall; import com.revo.deployr.client.call.project.ProjectExecuteResultDeleteCall; import com.revo.deployr.client.call.project.ProjectWorkspaceListCall; import com.revo.deployr.client.call.project.ProjectWorkspaceGetCall; import com.revo.deployr.client.call.project.ProjectWorkspaceUploadCall; import com.revo.deployr.client.call.project.ProjectWorkspaceTransferCall; import com.revo.deployr.client.call.project.ProjectWorkspacePushCall; import com.revo.deployr.client.call.project.ProjectWorkspaceSaveCall; import com.revo.deployr.client.call.project.ProjectWorkspaceStoreCall; import com.revo.deployr.client.call.project.ProjectWorkspaceLoadCall; import com.revo.deployr.client.call.project.ProjectWorkspaceDeleteCall; import com.revo.deployr.client.call.project.ProjectDirectoryListCall; import com.revo.deployr.client.call.project.ProjectDirectoryUploadCall; import com.revo.deployr.client.call.project.ProjectDirectoryTransferCall; import com.revo.deployr.client.call.project.ProjectDirectoryWriteCall; import com.revo.deployr.client.call.project.ProjectDirectoryLoadCall; import com.revo.deployr.client.call.project.ProjectPackageListCall; import com.revo.deployr.client.call.project.ProjectPackageAttachCall; import com.revo.deployr.client.call.project.ProjectPackageDetachCall; import com.revo.deployr.client.RProject; import com.revo.deployr.client.RProjectPackage; import com.revo.deployr.client.RProjectExecution; import com.revo.deployr.client.RProjectResult; import com.revo.deployr.client.RProjectFile; import com.revo.deployr.client.RRepositoryFile; import com.revo.deployr.client.RRepositoryDirectory; import com.revo.deployr.client.core.impl.RProjectExecutionImpl; import com.revo.deployr.client.core.impl.RProjectResultImpl; import com.revo.deployr.client.data.RData; import com.revo.deployr.client.about.RProjectDetails; import com.revo.deployr.client.about.RProjectExecutionDetails; import com.revo.deployr.client.about.RProjectResultDetails; import com.revo.deployr.client.about.RProjectFileDetails; import com.revo.deployr.client.about.RProjectPackageDetails; import com.revo.deployr.client.about.RRepositoryFileDetails; import com.revo.deployr.client.params.ProjectCloseOptions; import com.revo.deployr.client.params.ProjectDropOptions; import com.revo.deployr.client.params.ProjectExecutionOptions; import com.revo.deployr.client.params.ProjectHistoryOptions; import com.revo.deployr.client.params.ProjectWorkspaceOptions; import com.revo.deployr.client.params.DirectoryUploadOptions; import com.revo.deployr.client.util.REntityUtil; import java.util.List; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.Map; import java.io.File; import java.io.InputStream; import java.net.*; import org.apache.http.client.utils.URIBuilder; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * DeployR Project. */ public class RProjectImpl implements RProject { private Log log = LogFactory.getLog(RProject.class); public RProjectDetails about; RLiveContext liveContext; public RProjectImpl(RProjectDetails about, RLiveContext liveContext) { this.about = about; this.liveContext = liveContext; } public RProjectDetails about() { return about; } /* * RProject Interfaces. */ public boolean ping() throws RClientException, RSecurityException { RCall rCall = new ProjectPingCall(about.id); RCoreResult rResult = liveContext.executor.processCall(rCall); Map project = rResult.getProject(); boolean live = (Boolean) project.get("live"); boolean success = rResult.isSuccess(); String error = rResult.getError(); int errorCode = rResult.getErrorCode(); log.debug("ping: success=" + success + " error=" + error + " errorCode=" + errorCode); return live; } public RProjectDetails update(RProjectDetails details) throws RClientException, RSecurityException { RCall rCall = new ProjectAboutUpdateCall(details); RCoreResult rResult = liveContext.executor.processCall(rCall); Map project = rResult.getProject(); this.about = REntityUtil.getProjectDetails(project); boolean success = rResult.isSuccess(); String error = rResult.getError(); int errorCode = rResult.getErrorCode(); log.debug("update: success=" + success + " error=" + error + " errorCode=" + errorCode); return this.about; } public RProjectDetails grant(String username) throws RClientException, RSecurityException { RCall rCall = new ProjectGrantCall(about.id, username); RCoreResult rResult = liveContext.executor.processCall(rCall); Map project = rResult.getProject(); this.about = REntityUtil.getProjectDetails(project); boolean success = rResult.isSuccess(); String error = rResult.getError(); int errorCode = rResult.getErrorCode(); log.debug("grant: success=" + success + " error=" + error + " errorCode=" + errorCode); return this.about; } public RProjectDetails save() throws RClientException, RSecurityException { return save(this.about); } public RProjectDetails save(RProjectDetails details) throws RClientException, RSecurityException { return save(details, null); } public RProjectDetails save(RProjectDetails details, ProjectDropOptions dropOptions) throws RClientException, RSecurityException { RCall rCall = new ProjectSaveCall(details, dropOptions); RCoreResult rResult = liveContext.executor.processCall(rCall); Map project = rResult.getProject(); log.debug("save: rResult returns project=" + project); log.debug("save: rResult new about details have been updated."); this.about = REntityUtil.getProjectDetails(project); boolean success = rResult.isSuccess(); String error = rResult.getError(); int errorCode = rResult.getErrorCode(); log.debug("save: rResult has been parsed."); log.debug("save: success=" + success + " error=" + error + " errorCode=" + errorCode); return this.about; } public RProject saveAs(RProjectDetails details) throws RClientException, RSecurityException { return saveAs(details, null); } public RProject saveAs(RProjectDetails details, ProjectDropOptions dropOptions) throws RClientException, RSecurityException { RCall rCall = new ProjectSaveCall(details, dropOptions); RCoreResult rResult = liveContext.executor.processCall(rCall); Map project = rResult.getProject(); RProjectDetails saveasDetails = REntityUtil.getProjectDetails(project); RProject rProject = new RProjectImpl(saveasDetails, liveContext); boolean success = rResult.isSuccess(); String error = rResult.getError(); int errorCode = rResult.getErrorCode(); log.debug("saveAs: success=" + success + " error=" + error + " errorCode=" + errorCode); return rProject; } public RProjectDetails recycle() throws RClientException, RSecurityException { return recycle(false, false); } public RProjectDetails recycle(boolean preserveWorkspace, boolean preserveDirectory) throws RClientException, RSecurityException { RCall rCall = new ProjectRecycleCall(about.id, preserveWorkspace, preserveDirectory); RCoreResult rResult = liveContext.executor.processCall(rCall); Map project = rResult.getProject(); log.debug("recycle: rResult returns project=" + project); this.about = REntityUtil.getProjectDetails(project); boolean success = rResult.isSuccess(); String error = rResult.getError(); int errorCode = rResult.getErrorCode(); log.debug("recycle: success=" + success + " error=" + error + " errorCode=" + errorCode); return this.about; } public void close() throws RClientException, RSecurityException { close(null); } public void close(ProjectCloseOptions options) throws RClientException, RSecurityException { RCall rCall = new ProjectCloseCall(this.about, options); RCoreResult rResult = liveContext.executor.processCall(rCall); boolean success = rResult.isSuccess(); String error = rResult.getError(); int errorCode = rResult.getErrorCode(); log.debug("close: success=" + success + " error=" + error + " errorCode=" + errorCode); } public void delete() throws RClientException, RSecurityException { RCall rCall = new ProjectDeleteCall(this.about); RCoreResult rResult = liveContext.executor.processCall(rCall); boolean success = rResult.isSuccess(); String error = rResult.getError(); int errorCode = rResult.getErrorCode(); log.debug("delete: success=" + success + " error=" + error + " errorCode=" + errorCode); } public InputStream export() throws RClientException, RSecurityException { try { String urlBase = this.liveContext.serverurl + REndpoints.RPROJECTEXPORT; String urlPath = urlBase + "/" + this.about.id + ";jsessionid=" + this.liveContext.httpcookie; URIBuilder builder = new URIBuilder(urlPath); builder.addParameter("project", this.about.id); return liveContext.executor.download(builder); } catch(Exception ex) { throw new RClientException("Export failed: " + ex.getMessage()); } } /* * RProjectExecuteCalls Interfaces. */ public RProjectExecution executeCode(String code) throws RClientException, RSecurityException, RDataException, RGridException { RCall rCall = new ProjectExecuteCodeCall(this.about.id, code, null); RCoreResult rResult = liveContext.executor.processCallOnGrid(rCall); Map execution = (Map) rResult.getExecution(); List<RData> robjects = rResult.getRObjects(); List<Map> repofiles = rResult.getRepoFiles(); String error = rResult.getError(); int errorCode = rResult.getErrorCode(); RProjectExecutionDetails about = REntityUtil.getProjectExecutionDetails(this.about, execution, robjects, repofiles, error, errorCode, liveContext); RProjectExecution rExecution = new RProjectExecutionImpl(this.about, about, liveContext); boolean success = rResult.isSuccess(); log.debug("executeCode: success=" + success + " error=" + error + " errorCode=" + errorCode); return rExecution; } public RProjectExecution executeCode(String code, ProjectExecutionOptions options) throws RClientException, RSecurityException, RDataException, RGridException { RCall rCall = new ProjectExecuteCodeCall(this.about.id, code, options); RCoreResult rResult = liveContext.executor.processCallOnGrid(rCall); Map execution = (Map) rResult.getExecution(); List<RData> robjects = rResult.getRObjects(); List<Map> repofiles = rResult.getRepoFiles(); String error = rResult.getError(); int errorCode = rResult.getErrorCode(); RProjectExecutionDetails about = REntityUtil.getProjectExecutionDetails(this.about, execution, robjects, repofiles, error, errorCode, liveContext); RProjectExecution rExecution = new RProjectExecutionImpl(this.about, about, liveContext); boolean success = rResult.isSuccess(); log.debug("executeCode: success=" + success + " error=" + error + " errorCode=" + errorCode); return rExecution; } public RProjectExecution executeScript(RRepositoryFile script) throws RClientException, RSecurityException, RDataException, RGridException { return _executeScript(script.about().filename, script.about().directory, script.about().author, script.about().version, null); } public RProjectExecution executeScript(String scriptName, String scriptAuthor, String scriptVersion) throws RClientException, RSecurityException, RDataException, RGridException { return _executeScript(scriptName, RRepositoryDirectory.ROOT, scriptAuthor, scriptVersion, null); } public RProjectExecution executeScript(String scriptName, String scriptDirectory, String scriptAuthor, String scriptVersion) throws RClientException, RSecurityException, RDataException, RGridException { return _executeScript(scriptName, scriptDirectory, scriptAuthor, scriptVersion, null); } public RProjectExecution executeScript(RRepositoryFile script, ProjectExecutionOptions options) throws RClientException, RSecurityException, RDataException, RGridException { return _executeScript(script.about().filename, script.about().directory, script.about().author, script.about().version, options); } public RProjectExecution executeScript(String scriptName, String scriptAuthor, String scriptVersion, ProjectExecutionOptions options) throws RClientException, RSecurityException, RDataException, RGridException { return _executeScript(scriptName, RRepositoryDirectory.ROOT, scriptAuthor, scriptVersion, options); } public RProjectExecution executeScript(String scriptName, String scriptDirectory, String scriptAuthor, String scriptVersion, ProjectExecutionOptions options) throws RClientException, RSecurityException, RDataException, RGridException { return _executeScript(scriptName, scriptDirectory, scriptAuthor, scriptVersion, options); } private RProjectExecution _executeScript(String scriptName, String scriptDirectory, String scriptAuthor, String scriptVersion, ProjectExecutionOptions options) throws RClientException, RSecurityException, RDataException, RGridException { RCall rCall = new ProjectExecuteScriptCall(this.about.id, scriptName, scriptDirectory, scriptAuthor, scriptVersion, null, options); RCoreResult rResult = liveContext.executor.processCallOnGrid(rCall); Map execution = (Map) rResult.getExecution(); List<RData> robjects = rResult.getRObjects(); List<Map> repofiles = rResult.getRepoFiles(); String error = rResult.getError(); int errorCode = rResult.getErrorCode(); RProjectExecutionDetails about = REntityUtil.getProjectExecutionDetails(this.about, execution, robjects, repofiles, error, errorCode, liveContext); RProjectExecution rExecution = new RProjectExecutionImpl(this.about, about, liveContext); boolean success = rResult.isSuccess(); log.debug("executeScript: success=" + success + " error=" + error + " errorCode=" + errorCode); return rExecution; } public RProjectExecution executeExternal(String externalSource, ProjectExecutionOptions options) throws RClientException, RSecurityException, RDataException, RGridException { RCall rCall = new ProjectExecuteScriptCall(this.about.id, null, null, null, null, externalSource, options); RCoreResult rResult = liveContext.executor.processCallOnGrid(rCall); Map execution = (Map) rResult.getExecution(); List<RData> robjects = rResult.getRObjects(); List<Map> repofiles = rResult.getRepoFiles(); String error = rResult.getError(); int errorCode = rResult.getErrorCode(); RProjectExecutionDetails about = REntityUtil.getProjectExecutionDetails(this.about, execution, robjects, repofiles, error, errorCode, liveContext); RProjectExecution rExecution = new RProjectExecutionImpl(this.about, about, liveContext); boolean success = rResult.isSuccess(); log.debug("executeScript: success=" + success + " error=" + error + " errorCode=" + errorCode); return rExecution; } public String getConsole() throws RClientException, RSecurityException { RCall rCall = new ProjectExecuteConsoleCall(about.id); RCoreResult rResult = liveContext.executor.processCall(rCall); String console = rResult.getConsole(); boolean success = rResult.isSuccess(); String error = rResult.getError(); int errorCode = rResult.getErrorCode(); log.debug("getConsole: success=" + success + " error=" + error + " errorCode=" + errorCode); return console; } public void interruptExecution() throws RClientException, RSecurityException { RCall rCall = new ProjectExecuteInterruptCall(about.id); RCoreResult rResult = liveContext.executor.processCall(rCall); boolean success = rResult.isSuccess(); String error = rResult.getError(); int errorCode = rResult.getErrorCode(); log.debug("interruptExecution: success=" + success + " error=" + error + " errorCode=" + errorCode); } public List<RProjectExecution> getHistory() throws RClientException, RSecurityException { return getHistory(null); } public List<RProjectExecution> getHistory(ProjectHistoryOptions options) throws RClientException, RSecurityException { RCall rCall = new ProjectExecuteHistoryCall(this.about.id, options); RCoreResult rResult = liveContext.executor.processCall(rCall); List<RProjectExecution> history = new ArrayList<RProjectExecution>(); String error = rResult.getError(); int errorCode = rResult.getErrorCode(); List<Map> historyList = (List<Map>) rResult.getHistory(); for(Map executionMap : historyList) { String histError = (String) executionMap.get("error"); int histErrorCode = 0; if(executionMap.get("errorCode") != null) { histErrorCode = (Integer) executionMap.get("errorCode"); } RProjectExecutionDetails about = REntityUtil.getProjectExecutionDetails(this.about, executionMap, null, null, histError, histErrorCode, liveContext); RProjectExecution rExecution = new RProjectExecutionImpl(this.about, about, liveContext); history.add(rExecution); } boolean success = rResult.isSuccess(); log.debug("executeCode: success=" + success + " error=" + error + " errorCode=" + errorCode); return history; } public void flushHistory() throws RClientException, RSecurityException { RCall rCall = new ProjectExecuteFlushCall(this.about.id, null); RCoreResult rResult = liveContext.executor.processCall(rCall); boolean success = rResult.isSuccess(); String error = rResult.getError(); int errorCode = rResult.getErrorCode(); log.debug("flushHistory: success=" + success + " error=" + error + " errorCode=" + errorCode); } public List<RProjectResult> listResults() throws RClientException, RSecurityException { RCall rCall = new ProjectExecuteResultListCall(this.about.id, null); RCoreResult rResult = liveContext.executor.processCall(rCall); List<Map> results = rResult.getResults(); List<RProjectResult> resultList = new ArrayList<RProjectResult>(); for(Map resultMap : results) { RProjectResultDetails resultDetails = REntityUtil.getProjectResultDetails(resultMap); RProjectResult result = new RProjectResultImpl(this.about, resultDetails, liveContext); resultList.add(result); } boolean success = rResult.isSuccess(); String error = rResult.getError(); int errorCode = rResult.getErrorCode(); log.debug("listResults: success=" + success + " error=" + error + " errorCode=" + errorCode); return resultList; } public void deleteResults() throws RClientException, RSecurityException { RCall rCall = new ProjectExecuteResultDeleteCall(this.about.id, null, null); RCoreResult rResult = liveContext.executor.processCall(rCall); boolean success = rResult.isSuccess(); String error = rResult.getError(); int errorCode = rResult.getErrorCode(); log.debug("deleteResults: success=" + success + " error=" + error + " errorCode=" + errorCode); } public InputStream downloadResults() throws RClientException, RSecurityException { try { String urlPath = liveContext.serverurl + REndpoints.RPROJECTEXECUTERESULTDOWNLOAD; urlPath = urlPath + ";jsessionid=" + liveContext.httpcookie; URIBuilder builder = new URIBuilder(urlPath); builder.addParameter("project", this.about.id); return liveContext.executor.download(builder); } catch(Exception ex) { throw new RClientException("Download failed: " + ex.getMessage()); } } /* * RProjectWorkspaceCalls Interfaces. */ public List<RData> listObjects() throws RClientException, RSecurityException { return listObjects(null); } public List<RData> listObjects(ProjectWorkspaceOptions options) throws RClientException, RSecurityException { RCall rCall = new ProjectWorkspaceListCall(this.about.id, options); RCoreResult rResult = liveContext.executor.processCall(rCall); List<RData> robjects = rResult.getRObjects(); String error = rResult.getError(); boolean success = rResult.isSuccess(); int errorCode = rResult.getErrorCode(); log.debug("listObjects: success=" + success + " error=" + error + " errorCode=" + errorCode); return robjects; } public RData getObject(String objectName) throws RClientException, RSecurityException { return getObject(objectName, false); } public RData getObject(String objectName, boolean encodeDataFramePrimitiveAsVector) throws RClientException, RSecurityException { List<String> objectNames = new ArrayList<String>(); objectNames.add(objectName); List<RData> objects = getObjects(objectNames, encodeDataFramePrimitiveAsVector); return (objects.size() > 0) ? objects.get(0) : null; } public List<RData> getObjects(List<String> objectNames) throws RClientException, RSecurityException { return getObjects(objectNames, false); } public List<RData> getObjects(List<String> objectNames, boolean encodeDataFramePrimitiveAsVector) throws RClientException, RSecurityException { RCall rCall = new ProjectWorkspaceGetCall(this.about.id, objectNames, encodeDataFramePrimitiveAsVector); RCoreResult rResult = liveContext.executor.processCall(rCall); List<RData> robjects = rResult.getRObjects(); String error = rResult.getError(); boolean success = rResult.isSuccess(); int errorCode = rResult.getErrorCode(); log.debug("getObject: success=" + success + " error=" + error + " errorCode=" + errorCode); return robjects; } public void uploadObject(String name, InputStream fileStream) throws RClientException, RSecurityException { RCall rCall = new ProjectWorkspaceUploadCall(this.about.id, name, fileStream); RCoreResult rResult = liveContext.executor.processCall(rCall); boolean success = rResult.isSuccess(); String error = rResult.getError(); int errorCode = rResult.getErrorCode(); log.debug("uploadObject: success=" + success + " error=" + error + " errorCode=" + errorCode); } public void transferObject(String name, URL url) throws RClientException, RSecurityException { RCall rCall = new ProjectWorkspaceTransferCall(this.about.id, name, url.toString()); RCoreResult rResult = liveContext.executor.processCall(rCall); boolean success = rResult.isSuccess(); String error = rResult.getError(); int errorCode = rResult.getErrorCode(); log.debug("transferObject: success=" + success + " error=" + error + " errorCode=" + errorCode); } public void pushObject(RData object) throws RClientException, RSecurityException, RDataException { List<RData> objects = Arrays.asList(object); pushObject(objects); } public void pushObject(List<RData> objects) throws RClientException, RSecurityException, RDataException { RCall rCall = new ProjectWorkspacePushCall(this.about.id, objects); RCoreResult rResult = liveContext.executor.processCall(rCall); boolean success = rResult.isSuccess(); String error = rResult.getError(); int errorCode = rResult.getErrorCode(); log.debug("pushObject: success=" + success + " error=" + error + " errorCode=" + errorCode); } public RProjectFile saveObject(String name, String descr, boolean versioning) throws RClientException, RSecurityException { RCall rCall = new ProjectWorkspaceSaveCall(this.about.id, name, descr, versioning); RCoreResult rResult = liveContext.executor.processCall(rCall); Map dirFileMap = rResult.getDirectoryFile(); log.debug("saveObject: rResult.getDirectoryFile=" + dirFileMap); RProjectFileDetails details = REntityUtil.getProjectFileDetails(dirFileMap); RProjectFile projectFile = new RProjectFileImpl(this.about, details, liveContext); boolean success = rResult.isSuccess(); String error = rResult.getError(); int errorCode = rResult.getErrorCode(); log.debug("saveObject: projectFile, success=" + success + " error=" + error + " errorCode=" + errorCode); return projectFile; } public RRepositoryFile storeObject(String name, String descr, boolean versioning, String restricted, boolean shared, boolean published) throws RClientException, RSecurityException { RCall rCall = new ProjectWorkspaceStoreCall(this.about.id, name, descr, versioning, restricted, shared, published); RCoreResult rResult = liveContext.executor.processCall(rCall); boolean success = rResult.isSuccess(); String error = rResult.getError(); int errorCode = rResult.getErrorCode(); Map repoFileMap = rResult.getRepoFile(); log.debug("storeObject: rResult.getRepoFile=" + repoFileMap); RRepositoryFileDetails details = REntityUtil.getRepositoryFileDetails(repoFileMap, liveContext); RRepositoryFile repoFile = new RRepositoryFileImpl(details, liveContext); log.debug("storeObject: success=" + success + " error=" + error + " errorCode=" + errorCode); return repoFile; } public void loadObject(RRepositoryFile repoFile) throws RClientException, RSecurityException { RCall rCall = new ProjectWorkspaceLoadCall(this.about.id, repoFile.about().filename, repoFile.about().directory, repoFile.about().author, repoFile.about().version); RCoreResult rResult = liveContext.executor.processCall(rCall); boolean success = rResult.isSuccess(); String error = rResult.getError(); int errorCode = rResult.getErrorCode(); log.debug("loadObject: success=" + success + " error=" + error + " errorCode=" + errorCode); } public void deleteObject(String objectName) throws RClientException, RSecurityException { List<String> objectNames = new ArrayList<String>(); objectNames.add(objectName); deleteObject(objectNames); } public void deleteObject(List<String> objectNames) throws RClientException, RSecurityException { RCall rCall = new ProjectWorkspaceDeleteCall(this.about.id, objectNames); RCoreResult rResult = liveContext.executor.processCall(rCall); boolean success = rResult.isSuccess(); String error = rResult.getError(); int errorCode = rResult.getErrorCode(); log.debug("deleteObject: success=" + success + " error=" + error + " errorCode=" + errorCode); } /* * RProjectDirectoryCalls Interfaces. */ public List<RProjectFile> listFiles() throws RClientException, RSecurityException { RCall rCall = new ProjectDirectoryListCall(this.about.id); RCoreResult rResult = liveContext.executor.processCall(rCall); List<Map> files = rResult.getDirectoryFiles(); List<RProjectFile> fileList = new ArrayList<RProjectFile>(); for(Map fileMap : files) { RProjectFileDetails fileDetails = REntityUtil.getProjectFileDetails(fileMap); RProjectFile file = new RProjectFileImpl(this.about, fileDetails, liveContext); fileList.add(file); } boolean success = rResult.isSuccess(); String error = rResult.getError(); int errorCode = rResult.getErrorCode(); log.debug("listFiles: success=" + success + " error=" + error + " errorCode=" + errorCode); return fileList; } public RProjectFile uploadFile(InputStream fileStream, DirectoryUploadOptions options) throws RClientException, RSecurityException { RCall rCall = new ProjectDirectoryUploadCall(this.about.id, fileStream, options); RCoreResult rResult = liveContext.executor.processCall(rCall); Map dirFileMap = rResult.getDirectoryFile(); log.debug("uploadFile: rResult.getDirectoryFile=" + dirFileMap); RProjectFileDetails details = REntityUtil.getProjectFileDetails(dirFileMap); RProjectFile projectFile = new RProjectFileImpl(this.about, details, liveContext); boolean success = rResult.isSuccess(); String error = rResult.getError(); int errorCode = rResult.getErrorCode(); log.debug("uploadFile: projectFile, success=" + success + " error=" + error + " errorCode=" + errorCode); return projectFile; } public RProjectFile transferFile(URL url, DirectoryUploadOptions options) throws RClientException, RSecurityException { RCall rCall = new ProjectDirectoryTransferCall(this.about.id, url, options); RCoreResult rResult = liveContext.executor.processCall(rCall); Map dirFileMap = rResult.getDirectoryFile(); log.debug("transferFile: rResult.getDirectoryFile=" + dirFileMap); RProjectFileDetails details = REntityUtil.getProjectFileDetails(dirFileMap); RProjectFile projectFile = new RProjectFileImpl(this.about, details, liveContext); boolean success = rResult.isSuccess(); String error = rResult.getError(); int errorCode = rResult.getErrorCode(); log.debug("transferFile: projectFile, success=" + success + " error=" + error + " errorCode=" + errorCode); return projectFile; } public RProjectFile writeFile(String text, DirectoryUploadOptions options) throws RClientException, RSecurityException { RCall rCall = new ProjectDirectoryWriteCall(this.about.id, text, options); RCoreResult rResult = liveContext.executor.processCall(rCall); Map dirFileMap = rResult.getDirectoryFile(); log.debug("writeFile: rResult.getDirectoryFile=" + dirFileMap); RProjectFileDetails details = REntityUtil.getProjectFileDetails(dirFileMap); RProjectFile projectFile = new RProjectFileImpl(this.about, details, liveContext); boolean success = rResult.isSuccess(); String error = rResult.getError(); int errorCode = rResult.getErrorCode(); log.debug("writeFile: projectFile, success=" + success + " error=" + error + " errorCode=" + errorCode); return projectFile; } public RProjectFile loadFile(RRepositoryFile repoFile) throws RClientException, RSecurityException { RCall rCall = new ProjectDirectoryLoadCall(this.about.id, repoFile.about().filename, repoFile.about().directory, repoFile.about().author, repoFile.about().version); RCoreResult rResult = liveContext.executor.processCall(rCall); Map dirFileMap = rResult.getDirectoryFile(); log.debug("loadFile: rResult.getDirectoryFile=" + dirFileMap); RProjectFileDetails details = REntityUtil.getProjectFileDetails(dirFileMap); RProjectFile projectFile = new RProjectFileImpl(this.about, details, liveContext); boolean success = rResult.isSuccess(); String error = rResult.getError(); int errorCode = rResult.getErrorCode(); log.debug("loadFile: projectFile, success=" + success + " error=" + error + " errorCode=" + errorCode); return projectFile; } public InputStream downloadFiles() throws RClientException, RSecurityException { return downloadFiles(null); } public InputStream downloadFiles(List<String> files) throws RClientException, RSecurityException { try { String fileNames = null; if(files != null) { for(String fileName : files) { if(fileNames != null) { fileNames = fileNames + "," + fileName; } else { fileNames = fileName; } } } String urlPath = liveContext.serverurl + REndpoints.RPROJECTDIRECTORYDOWNLOAD; urlPath = urlPath + ";jsessionid=" + liveContext.httpcookie; URIBuilder builder = new URIBuilder(urlPath); builder.addParameter("project", this.about.id); if(fileNames != null) { builder.addParameter("filename", fileNames); } return liveContext.executor.download(builder); } catch(Exception ex) { throw new RClientException("Download failed: " + ex.getMessage()); } } /* * RProjectPackageCalls Interfaces. */ public List<RProjectPackage> listPackages(boolean installed) throws RClientException, RSecurityException { RCall rCall = new ProjectPackageListCall(this.about.id, installed); RCoreResult rResult = liveContext.executor.processCall(rCall); List<Map> packageList = rResult.getPackages(); log.debug("listPackages: rResult.getPackages=" + packageList); List<RProjectPackage> packages = new ArrayList<RProjectPackage>(); for(Map pkgMap : packageList) { RProjectPackageDetails details = REntityUtil.getProjectPackageDetails(pkgMap); RProjectPackage projectPackage = new RProjectPackageImpl(this.about, details, liveContext); packages.add(projectPackage); } boolean success = rResult.isSuccess(); String error = rResult.getError(); int errorCode = rResult.getErrorCode(); log.debug("listPackages: projectFile, success=" + success + " error=" + error + " errorCode=" + errorCode); return packages; } public List<RProjectPackage> attachPackage(String packageName, String repo) throws RClientException, RSecurityException { List<String> packageNames = new ArrayList<String>(); packageNames.add(packageName); return attachPackage(packageNames, repo); } public List<RProjectPackage> attachPackage(List<String> packageNames, String repo) throws RClientException, RSecurityException { RCall rCall = new ProjectPackageAttachCall(this.about.id, packageNames, repo); RCoreResult rResult = liveContext.executor.processCall(rCall); List<Map> packageList = rResult.getPackages(); log.debug("attachPackage: rResult.getPackages=" + packageList); List<RProjectPackage> packages = new ArrayList<RProjectPackage>(); for(Map pkgMap : packageList) { RProjectPackageDetails details = REntityUtil.getProjectPackageDetails(pkgMap); RProjectPackage projectPackage = new RProjectPackageImpl(this.about, details, liveContext); packages.add(projectPackage); } boolean success = rResult.isSuccess(); String error = rResult.getError(); int errorCode = rResult.getErrorCode(); log.debug("attachPackage: success=" + success + " error=" + error + " errorCode=" + errorCode); return packages; } public List<RProjectPackage> detachPackage(String packageName) throws RClientException, RSecurityException { List<String> packageNames = new ArrayList<String>(); packageNames.add(packageName); return detachPackage(packageNames); } public List<RProjectPackage> detachPackage(List<String> packageNames) throws RClientException, RSecurityException { RCall rCall = new ProjectPackageDetachCall(this.about.id, packageNames); RCoreResult rResult = liveContext.executor.processCall(rCall); List<Map> packageList = rResult.getPackages(); log.debug("detachPackage: rResult.getPackages=" + packageList); List<RProjectPackage> packages = new ArrayList<RProjectPackage>(); for(Map pkgMap : packageList) { RProjectPackageDetails details = REntityUtil.getProjectPackageDetails(pkgMap); RProjectPackage projectPackage = new RProjectPackageImpl(this.about, details, liveContext); packages.add(projectPackage); } boolean success = rResult.isSuccess(); String error = rResult.getError(); int errorCode = rResult.getErrorCode(); log.debug("detachPackages: success=" + success + " error=" + error + " errorCode=" + errorCode); return packages; } }