All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.box.sdk.BoxFileVersionLegalHold Maven / Gradle / Ivy

There is a newer version: 4.12.0
Show newest version
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);
            }
        }

    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy