import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Folder extends IMContainer{
ArrayList<Folder> subFolders = new ArrayList<>();
Gson gson = new Gson();
JsonParser parser = new JsonParser();
JsonArray foldersJsonArray;
//<editor-fold desc="Class Vars"
// main vars
private String defaultSecurity
; private String effectiveSecurity
; private String inheritedDefaultSecurity
;
//profile vars
private String authorDescription
;
//bools
private boolean hasDocuments;
private boolean hasSubfolders;
private boolean containerSavedSearch;
private boolean contentSavedSearch;
private boolean externalAsNormal;
private boolean hidden;
//</editor-fold>
//main constructor, parses response string to JSON and pulls all data to fill class variables.
public Folder(JsonObject folderProfile) {
if (folderProfile.has("database")) {
this.database = folderProfile.get("database").getAsString();
}
if (folderProfile.has("default_security")) {
this.defaultSecurity = folderProfile.get("default_security").getAsString();
}
if (folderProfile.has("edit_date")) {
this.editDate = folderProfile.get("edit_date").getAsString();
}
if (folderProfile.has("effective_security")) {
this.effectiveSecurity = folderProfile.get("effective_security").getAsString();
}
if (folderProfile.has("folder_type")) {
this.folderType = folderProfile.get("folder_type").getAsString();
}
if (folderProfile.has("has_documents")) {
this.hasDocuments = folderProfile.get("has_documents").getAsBoolean();
}
if (folderProfile.has("has_subfolders")) {
this.hasSubfolders = folderProfile.get("has_subfolders").getAsBoolean();
}
if (folderProfile.has("id")) {
this.id = folderProfile.get("id").getAsString();
}
if (folderProfile.has("inherited_default_security")) {
this.inheritedDefaultSecurity = folderProfile.get("inherited_default_security").getAsString();
}
if (folderProfile.has("is_container_saved_search")) {
this.containerSavedSearch = folderProfile.get("is_container_saved_search").getAsBoolean();
}
if (folderProfile.has("is_content_saved_search")) {
this.contentSavedSearch = folderProfile.get("is_content_saved_search").getAsBoolean();
}
if (folderProfile.has("is_external_as_normal")) {
this.externalAsNormal = folderProfile.get("is_external_as_normal").getAsBoolean();
}
if (folderProfile.has("is_hidden")) {
this.hidden = folderProfile.get("is_hidden").getAsBoolean();
}
if (folderProfile.has("name")) {
this.name = folderProfile.get("name").getAsString();
}
if (folderProfile.has("owner")) {
this.owner = folderProfile.get("owner").getAsString();
}
if (folderProfile.has("parent_id")) {
this.parentID = folderProfile.get("parent_id").getAsString();
}
if (folderProfile.has("profile")) {
JsonObject imProfile = folderProfile.get("profile").getAsJsonObject();
if (imProfile.has("author")) {
this.author = imProfile.get("author").getAsString();
}
if (imProfile.has("author_description")) {
this.authorDescription = imProfile.get("author_description").getAsString();
}
if (imProfile.has("class")) {
this.iMClass = imProfile.get("class").getAsString();
}
if (imProfile.has("subclass")) {
this.iMSubclass = imProfile.get("subclass").getAsString();
}
for (int x = 0; x <= 30; x++) {
if (imProfile.has("custom" + (x + 1))) { // add one to x var at member name to account for array starting at 0
this.customField[x] = imProfile.get("custom" + (x + 1)).getAsString();
}
}
}
if (folderProfile.has("view_type")) {
this.viewType = folderProfile.get("view_type").getAsString();
}
if (folderProfile.has("workspace_id")) {
this.workspaceID = folderProfile.get("workspace_id").getAsString();
}
if (folderProfile.has("workspace_name")) {
this.workspaceName = folderProfile.get("workspace_name").getAsString();
}
if (folderProfile.has("wstype")) {
this.wsType = folderProfile.get("wstype").getAsString();
}
}
public Folder addSubfolder(JsonObject folderProfile){
System.
out.
println("Adding " + folderProfile.
get("id") + " to subfolders of " + this.
getId()); Folder subfolder = new Folder(folderProfile);
this.subFolders.add(subfolder);
System.
out.
println("subfolder added at index " + this.
subFolders.
indexOf(subfolder
)); return subfolder;
}
public void saveFolders() {
for (int x = 0; x < this.foldersJsonArray.size(); x++) {
this.subFolders.add(new Folder(this.foldersJsonArray.get(x).getAsJsonObject()));
}
for(int x = 0; x < subFolders.size(); x++){
if(subFolders.get(x).hasSubfolders()){
subFolders.get(x).saveFolders();
}
}
}
@Override
return "Folder{" +
"database='" + database + '\'' + "\n" +
", defaultSecurity='" + defaultSecurity + '\'' + "\n" +
", editDate='" + editDate + '\'' + "\n" +
", effectiveSecurity='" + effectiveSecurity + '\'' + "\n" +
", folderType='" + folderType + '\'' + "\n" +
", id='" + id + '\'' + "\n" +
", inheritedDefaultSecurity='" + inheritedDefaultSecurity + '\'' + "\n" +
", name='" + name + '\'' + "\n" +
", owner='" + owner + '\'' + "\n" +
", parentID='" + parentID + '\'' + "\n" +
", viewType='" + viewType + '\'' + "\n" +
", workspaceID='" + workspaceID + '\'' + "\n" +
", workspaceName='" + workspaceName + '\'' + "\n" +
", wsType='" + wsType + '\'' + "\n" +
", author='" + author + '\'' + "\n" +
", authorDescription='" + authorDescription + '\'' + "\n" +
", iMClass='" + iMClass + '\'' + "\n" +
", iMSubclass='" + iMSubclass + '\'' + "\n" +
", customField=" + Arrays.
toString(customField
) + "\n" + ", hasDocuments=" + hasDocuments + "\n" +
", hasSubfolders=" + hasSubfolders + "\n" +
", containerSavedSearch=" + containerSavedSearch + "\n" +
", contentSavedSearch=" + contentSavedSearch + "\n" +
", externalAsNormal=" + externalAsNormal + "\n" +
", hidden=" + hidden + "\n" +
'}';
}
//<editor-fold desc="Getters"
public JsonArray getFoldersJsonArray() {
return foldersJsonArray;
}
return database;
}
public String getDefaultSecurity
() { return defaultSecurity;
}
return editDate;
}
public String getEffectiveSecurity
() { return effectiveSecurity;
}
public String getFolderType
() { return folderType;
}
return id;
}
public String getInheritedDefaultSecurity
() { return inheritedDefaultSecurity;
}
return name;
}
return owner;
}
return parentID;
}
return viewType;
}
public String getWorkspaceID
() { return workspaceID;
}
public String getWorkspaceName
() { return workspaceName;
}
return wsType;
}
return author;
}
public String getAuthorDescription
() { return authorDescription;
}
return iMClass;
}
public String getiMSubclass
() { return iMSubclass;
}
public String[] getCustomField
() { return customField;
}
public boolean HasDocuments() {
return hasDocuments;
}
public boolean hasSubfolders() {
return hasSubfolders;
}
public boolean isContainerSavedSearch() {
return containerSavedSearch;
}
public boolean isContentSavedSearch() {
return contentSavedSearch;
}
public boolean isExternalAsNormal() {
return externalAsNormal;
}
public boolean isHidden() {
return hidden;
}
public void setDatabase
(String database
) { this.database = database;
}
//</editor-fold>
//<editor-fold desc="Setters"
public void setFoldersJsonArray(JsonArray foldersJsonArray) {
this.foldersJsonArray = foldersJsonArray;
}
public void setDefaultSecurity
(String defaultSecurity
) { this.defaultSecurity = defaultSecurity;
}
public void setEditDate
(String editDate
) { this.editDate = editDate;
}
public void setEffectiveSecurity
(String effectiveSecurity
) { this.effectiveSecurity = effectiveSecurity;
}
public void setFolderType
(String folderType
) { this.folderType = folderType;
}
public void setId
(String id
) { this.id = id;
}
public void setInheritedDefaultSecurity
(String inheritedDefaultSecurity
) { this.inheritedDefaultSecurity = inheritedDefaultSecurity;
}
public void setName
(String name
) { this.name = name;
}
public void setOwner
(String owner
) { this.owner = owner;
}
public void setParentID
(String parentID
) { this.parentID = parentID;
}
public void setViewType
(String viewType
) { this.viewType = viewType;
}
public void setWorkspaceID
(String workspaceID
) { this.workspaceID = workspaceID;
}
public void setWorkspaceName
(String workspaceName
) { this.workspaceName = workspaceName;
}
public void setWsType
(String wsType
) { this.wsType = wsType;
}
public void setAuthor
(String author
) { this.author = author;
}
public void setAuthorDescription
(String authorDescription
) { this.authorDescription = authorDescription;
}
public void setiMClass
(String iMClass
) { this.iMClass = iMClass;
}
public void setiMSubclass
(String iMSubclass
) { this.iMSubclass = iMSubclass;
}
public void setCustomField
(String[] customField
) { this.customField = customField;
}
public void setHasDocuments(boolean hasDocuments) {
this.hasDocuments = hasDocuments;
}
public void setHasSubfolders(boolean hasSubfolders) {
this.hasSubfolders = hasSubfolders;
}
public void setContainerSavedSearch(boolean containerSavedSearch) {
this.containerSavedSearch = containerSavedSearch;
}
public void setContentSavedSearch(boolean contentSavedSearch) {
this.contentSavedSearch = contentSavedSearch;
}
public void setExternalAsNormal(boolean externalAsNormal) {
this.externalAsNormal = externalAsNormal;
}
public void setHidden(boolean hidden) {
this.hidden = hidden;
}
//</editor-fold>
}