/*
* RCoreResultImpl.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.core.RCoreResult;
import com.revo.deployr.client.data.RData;
import com.revo.deployr.client.util.RDataUtil;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import org.apache.http.Header;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class RCoreResultImpl implements RCoreResult {
private Log log = LogFactory.getLog(RCoreResult.class);
private Header[] headers;
private boolean success;
private String call;
private String uid;
private Map<String, String> identity;
private Map<String, Integer> limits;
private Map project;
private List<Map> projects;
private Map repoFile;
private List<Map> repoFiles;
private List<Map> repoScripts;
private Map repoDirectory;
private List<Map> repoDirectories;
private Map job;
private List<Map> jobs;
private Map execution;
private String console;
private List<String> warnings;
private List<Map> results;
private List<Map> artifacts;
private Map directoryFile;
private List<Map> directoryFiles;
private List<Map> history;
private List<Map> packages;
private List<RData> robjects = new ArrayList<RData>();
private int statusCode;
private String statusMsg;
private String error;
private int errorCode;
public RCoreResultImpl(Header[] headers) {
this.headers = headers;
}
public Header[] getHeaders() {
return headers;
}
public boolean isSuccess() {
return success;
}
public String getCall() {
return call;
}
public String getUid() {
return uid;
}
public Map<String, String> getIdentity() {
return identity;
}
public Map<String, Integer> getLimits() {
return limits;
}
public List<Map> getProjects() {
return projects;
}
public Map getProject() {
return project;
}
public Map getRepoFile() {
return repoFile;
}
public List<Map> getRepoFiles() {
return repoFiles;
}
public Map getRepoDirectory() {
return repoDirectory;
}
public List<Map> getRepoDirectories() {
return repoDirectories;
}
public List<Map> getRepoScripts() {
return repoScripts;
}
public Map getJob() {
return job;
}
public List<Map> getJobs() {
return jobs;
}
public String getConsole() {
return console;
}
public List<String> getWarnings() {
return warnings;
}
public List<Map> getResults() {
return results;
}
public List<Map> getArtifacts() {
return artifacts;
}
public Map getDirectoryFile() {
return directoryFile;
}
public List<Map> getDirectoryFiles() {
return directoryFiles;
}
public Map getExecution() {
return execution;
}
public List<Map> getHistory() {
return history;
}
public List<Map> getPackages() {
return packages;
}
public List<RData> getRObjects() {
return robjects;
}
public String getError() {
return error;
}
public int getErrorCode() {
return errorCode;
}
public int getStatusCode() {
return statusCode;
}
public String getStatusMsg() {
return statusMsg;
}
public void parseMarkup(String markup, String call, int statusCode, String statusMsg) {
this.call = call;
this.statusCode = statusCode;
this.statusMsg = statusMsg;
log.debug("RCoreResultImpl: parseMarkup, markup=" + markup + ", statusCode=" + statusCode + " statusMsg=" + statusMsg);
if(statusCode == 200) {
ObjectMapper mapper = new ObjectMapper();
Map markupMap = null;
try {
markupMap = (Map) mapper.readValue(markup, Map.class);
} catch(UnsupportedEncodingException ueex) {
log.warn("RCoreResultImpl: parseMarkup, unsupported encoding exception=", ueex);
} catch(IOException ioex) {
log.warn("RCoreResultImpl: parseMarkup, io exception=", ioex);
}
// Extract RCoreResult data from the Phoenix API JSON response markup.
if(markupMap != null) {
// Top-level JSON deployr object.
Map deployrMap = (Map) markupMap.get("deployr");
// Property: response object.
Map responseMap = (Map) deployrMap.get("response");
log.debug("RCoreResult: responseMap=" + responseMap);
// Properties: success, call, uid, session, error, hisotry.
success = (Boolean) responseMap.get("success");
call = (String) responseMap.get("call");
uid = (String) responseMap.get("uid");
error = (String) responseMap.get("error");
if(responseMap.get("errorCode") != null) {
errorCode = (Integer) responseMap.get("errorCode");
}
log.debug("RCoreResult: success=" + success + " call=" + call);
log.debug("RCoreResult: uid=" + uid);
log.debug("RCoreResult: error=" + error + " errorCode=" + errorCode);
// Property: User Identity.
identity = (Map) responseMap.get("user");
log.debug("RCoreResult: identity=" + identity);
// Property: User Limits.
limits = (Map) responseMap.get("limits");
log.debug("RCoreResult: limits=" + limits);
// Property: Project.
project = (Map) responseMap.get("project");
log.debug("RCoreResult: project=" + project);
// Property: Projects.
projects = (List<Map>) responseMap.get("projects");
log.debug("RCoreResult: projects=" + projects);
// Property: Project Execution.
execution = (Map) responseMap.get("execution");
log.debug("RCoreResult: execution=" + execution);
if(execution != null) {
console = (String) execution.get("console");
log.debug("RCoreResult: console=" + console);
warnings = (List<String>) execution.get("warnings");
log.debug("RCoreResult: warnings=" + warnings);
results = (List<Map>) execution.get("results");
log.debug("RCoreResult: results=" + results);
artifacts = (List<Map>) execution.get("artifacts");
log.debug("RCoreResult: artifacts=" + artifacts);
// Property: Project History.
history = (List<Map>) execution.get("history");
log.debug("RCoreResult: history=" + history);
}
Map directory = (Map) responseMap.get("directory");
if(directory != null) {
directoryFile = (Map) directory.get("file");
log.debug("RCoreResult: directory file=" + directoryFile);
directoryFiles = (List<Map>) directory.get("files");
log.debug("RCoreResult: directory files=" + directoryFiles);
}
// Property: Project History.
packages = (List<Map>) responseMap.get("packages");
log.debug("RCoreResult: packages=" + packages);
// Property: Workspace Objects.
Map workspace = (Map) responseMap.get("workspace");
if(workspace != null) {
List<Map> robjectsList = (List<Map>) workspace.get("objects");
log.debug("RCoreResult: plural robjectsList=" + robjectsList);
if(robjectsList != null) {
for(Map robjectMap : robjectsList) {
String name = (String) robjectMap.get("name");
RData rData = RDataUtil.fromJSON(name, robjectMap);
robjects.add(rData);
}
log.debug("RCoreResult: plural robjects=" + robjects);
}
if(robjectsList == null) {
Map robjectMap = (Map) workspace.get("object");
log.debug("RCoreResult: singular robjectMap=" + robjectMap);
if(robjectMap != null) {
String name = (String) robjectMap.get("name");
RData rData = RDataUtil.fromJSON(name, robjectMap);
robjects.add(rData);
log.debug("RCoreResult: singular robjects=" + robjects);
}
}
}
// Property: Repository.
Map repository = (Map) responseMap.get("repository");
log.debug("RCoreResult: repository=" + repository);
if(repository != null) {
// Property: Repository file.
repoFile = (Map) repository.get("file");
log.debug("RCoreResult: repoFile=" + repoFile);
// Property: Repository files.
repoFiles = (List<Map>) repository.get("files");
log.debug("RCoreResult: repoFiles=" + repoFiles);
// Property: Repository scripts.
repoScripts = (List<Map>) repository.get("scripts");
log.debug("RCoreResult: repoScripts=" + repoScripts);
// Property: Repository directory.
repoDirectory = (Map) repository.get("directory");
log.debug("RCoreResult: repoDirectory=" + repoDirectory);
// Property: Repository directories.
Map directories = (Map) repository.get("directories");
if(directories != null) {
repoDirectories = (List<Map>) directories.get("user");
List<Map> systemDirectories = (List<Map>) directories.get("system");
if(systemDirectories != null)
repoDirectories.addAll(systemDirectories);
}
log.debug("RCoreResult: repoDirectories=" + repoDirectories);
}
// Property: Job.
job = (Map) responseMap.get("job");
log.debug("RCoreResult: job=" + job);
// Property: Jobs.
jobs = (List<Map>) responseMap.get("jobs");
log.debug("RCoreResult: jobs=" + jobs);
}
}
}
}