001package com.box.sdk;
002
003import com.eclipsesource.json.JsonObject;
004import com.eclipsesource.json.JsonValue;
005import java.net.MalformedURLException;
006import java.net.URL;
007
008/**
009 * Represents a search item when searching shared links.
010 *
011 * <p>Unless otherwise noted, the methods in this class can throw an unchecked {@link
012 * BoxAPIException} (unchecked meaning that the compiler won't force you to handle it) if an error
013 * occurs. If you wish to implement custom error handling for errors related to the Box REST API,
014 * you should capture this exception explicitly.*
015 */
016public class BoxSearchSharedLink extends BoxJSONObject {
017  private String type;
018  private BoxItem.Info item;
019  private URL accessibleViaSharedLink;
020  private BoxAPIConnection api;
021
022  /**
023   * Construct a BoxRecentItem.
024   *
025   * @param jsonObject the parsed JSON object.
026   * @param api the API connection to be used to fetch interacted item
027   */
028  public BoxSearchSharedLink(JsonObject jsonObject, BoxAPIConnection api) {
029    super(jsonObject);
030    this.api = api;
031  }
032
033  @Override
034  protected void parseJSONMember(JsonObject.Member member) {
035    super.parseJSONMember(member);
036
037    String memberName = member.getName();
038    JsonValue value = member.getValue();
039    try {
040      if (memberName.equals("type")) {
041        this.type = value.asString();
042      } else if (memberName.equals("item")) {
043        JsonObject jsonObject = value.asObject();
044        String type = jsonObject.get("type").asString();
045        String id = jsonObject.get("id").asString();
046
047        if (type.equals("folder")) {
048          BoxFolder folder = new BoxFolder(this.api, id);
049          this.item = folder.new Info(jsonObject);
050        } else if (type.equals("file")) {
051          BoxFile file = new BoxFile(this.api, id);
052          this.item = file.new Info(jsonObject);
053        } else if (type.equals("web_link")) {
054          BoxWebLink link = new BoxWebLink(this.api, id);
055          this.item = link.new Info(jsonObject);
056        } else {
057          assert false : "Unsupported item type: " + type;
058          throw new BoxAPIException("Unsupported item type: " + type);
059        }
060      } else if (memberName.equals("accessible_via_shared_link")) {
061        this.accessibleViaSharedLink = new URL(value.asString());
062      }
063    } catch (MalformedURLException e) {
064      assert false : "A ParseException indicates a bug in the SDK.";
065    }
066  }
067
068  /**
069   * Get item type.
070   *
071   * @return type of item
072   */
073  public String getType() {
074    return this.type;
075  }
076
077  /**
078   * Get the item which was interacted with.
079   *
080   * @return box item
081   */
082  public BoxItem.Info getItem() {
083    return this.item;
084  }
085
086  /**
087   * Get the optional shared link through which the user has access to this item.
088   *
089   * @return shared link
090   */
091  public URL getAccessibleViaSharedLink() {
092    return this.accessibleViaSharedLink;
093  }
094}