com.box.sdk.BoxFileVersionLegalHold Maven / Gradle / Ivy
package com.box.sdk;
import com.eclipsesource.json.Json;
import com.eclipsesource.json.JsonArray;
import com.eclipsesource.json.JsonObject;
import com.eclipsesource.json.JsonValue;
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* Representing all holds on a file version.
* Note that every file version can have a maximum of one file version legal hold.
*/
@BoxResourceType("file_version_legal_hold")
public class BoxFileVersionLegalHold extends BoxResource {
/**
* The URL template used for operation with file version legal hold with given ID.
*
* @see #getInfo(String...)
*/
public static final URLTemplate FILE_VERSION_HOLD_URL_TEMPLATE = new URLTemplate("file_version_legal_holds/%s");
/**
* Constructs a file version legal hold with a given ID.
*
* @param api the API connection to be used by the resource.
* @param id the ID of the resource.
*/
public BoxFileVersionLegalHold(BoxAPIConnection api, String id) {
super(api, id);
}
/**
* @param fields the fields to retrieve.
* @return information about this file version legal hold.
*/
public BoxFileVersionLegalHold.Info getInfo(String... fields) {
QueryStringBuilder builder = new QueryStringBuilder();
if (fields.length > 0) {
builder.appendParam("fields", fields);
}
URL url = FILE_VERSION_HOLD_URL_TEMPLATE.buildWithQuery(
this.getAPI().getBaseURL(), builder.toString(), this.getID());
BoxJSONRequest request = new BoxJSONRequest(this.getAPI(), url, "GET");
try (BoxJSONResponse response = request.send()) {
JsonObject responseJSON = Json.parse(response.getJSON()).asObject();
return new Info(responseJSON);
}
}
/**
* Contains information about the file version legal hold.
*/
public class Info extends BoxResource.Info {
/**
* Used for file version in case it was retrieved separately from file.
*/
private static final String DEFAULT_FILE_ID = "0";
/**
* @see #getFileVersion()
*/
private BoxFileVersion fileVersion;
/**
* @see #getFile()
*/
private BoxFile.Info file;
/**
* @see #getAssignments()
*/
private List assignments;
/**
* @see #getDeletedAt()
*/
private Date deletedAt;
/**
* Constructs an empty Info object.
*/
public Info() {
super();
}
/**
* Constructs an Info object by parsing information from a JSON string.
*
* @param json the JSON string to parse.
*/
public Info(String json) {
super(json);
}
/**
* Constructs an Info object using an already parsed JSON object.
*
* @param jsonObject the parsed JSON object.
*/
Info(JsonObject jsonObject) {
super(jsonObject);
}
/**
* {@inheritDoc}
*/
@Override
public BoxResource getResource() {
return BoxFileVersionLegalHold.this;
}
/**
* @return the file version that is held.
*/
public BoxFileVersion getFileVersion() {
return this.fileVersion;
}
/**
* @return the parent file of the file version that is held.
* Note that there is no guarantee that the current version of this file is held.
*/
public BoxFile.Info getFile() {
return this.file;
}
/**
* @return iterable with the assignments contributing to this file version legal hold.
*/
public Iterable getAssignments() {
return this.assignments;
}
/**
* @return time that this file version legal hold was deleted.
*/
public Date getDeletedAt() {
return this.deletedAt;
}
/**
* {@inheritDoc}
*/
@Override
void parseJSONMember(JsonObject.Member member) {
super.parseJSONMember(member);
String memberName = member.getName();
JsonValue value = member.getValue();
try {
if (memberName.equals("file")) {
JsonObject fileJSON = value.asObject();
if (this.file == null) {
String fileID = fileJSON.get("id").asString();
BoxFile file = new BoxFile(getAPI(), fileID);
this.file = file.new Info(fileJSON);
} else {
this.file.update(fileJSON);
}
if (this.fileVersion != null) {
this.fileVersion.setFileID(this.file.getID());
}
} else if (memberName.equals("file_version")) {
JsonObject versionJSON = value.asObject();
String fileID = this.file != null ? this.file.getID() : DEFAULT_FILE_ID;
this.fileVersion = new BoxFileVersion(getAPI(), versionJSON, fileID);
} else if (memberName.equals("legal_hold_policy_assignments")) {
JsonArray array = value.asArray();
this.assignments = new ArrayList<>();
for (JsonValue assignmentJSON : array) {
String assignmentID = ((JsonObject) assignmentJSON).get("id").asString();
BoxLegalHoldAssignment assignment = new BoxLegalHoldAssignment(getAPI(), assignmentID);
this.assignments.add(assignment.new Info((JsonObject) assignmentJSON));
}
} else if (memberName.equals("deleted_at")) {
this.deletedAt = BoxDateFormat.parse(value.asString());
}
} catch (Exception e) {
throw new BoxDeserializationException(memberName, value.toString(), e);
}
}
}
}