/*! * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software * Foundation. * * You should have received a copy of the GNU Lesser General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html * or from the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Lesser General Public License for more details. * * Copyright (c) 2002-2013 Pentaho Corporation.. All rights reserved. */ package org.pentaho.gwt.widgets.client.filechooser; import com.google.gwt.json.client.JSONArray; import com.google.gwt.json.client.JSONObject; import com.google.gwt.json.client.JSONParser; import com.google.gwt.json.client.JSONValue; import java.util.ArrayList; import java.util.List; /** * @author tkafalas * */ public class JsonToRepositoryFileTreeConverter { String jsonText; public RepositoryFileTree getRepositoryFileTree( JSONObject serviceCallObject ) { RepositoryFileTree fileTree = new RepositoryFileTree(); RepositoryFile rf = new RepositoryFile( serviceCallObject.get( "file" ).isObject() ); fileTree.setFile( rf ); // load up the model for the tree processChildren( fileTree, serviceCallObject ); return fileTree; } public static final List<RepositoryFile> getTrashFiles( String jsonData ) { return getFileListFromJson( jsonData ); } public static final List<RepositoryFile> getFileListFromJson( String jsonData ) { JSONObject jsonObject = JSONParser.parseLenient( jsonData ).isObject(); List<RepositoryFile> files = new ArrayList<RepositoryFile>(); JSONArray jsa = jsonObject.get( "repositoryFileDto" ).isArray(); for ( int i = 0; i < jsa.size(); i++ ) { RepositoryFile trashItem = new RepositoryFile( jsa.get( i ).isObject() ); files.add( trashItem ); } return files; } /** * @param String */ public JsonToRepositoryFileTreeConverter( String jsonText ) { super(); // System.out.println(jsonText); this.jsonText = jsonText; } /** * @return */ public RepositoryFileTree getTree() { JSONObject serviceCallObj = JSONParser.parseLenient( jsonText ).isObject(); RepositoryFileTree value = getRepositoryFileTree( serviceCallObj ); return value; } private static final RepositoryFileTree processChildren( RepositoryFileTree parent, JSONObject jsoFolderContents ) { JSONValue jsvChildren = jsoFolderContents.get( "children" ); List<RepositoryFileTree> children = new ArrayList<RepositoryFileTree>(); if ( jsvChildren != null ) { JSONArray jsaChildren = jsvChildren.isArray(); for ( int i = 0; i < jsaChildren.size(); i++ ) { RepositoryFileTree repositoryFileTree = new RepositoryFileTree(); JSONObject child = jsaChildren.get( i ).isObject(); // process the folder name for the children, or the individual file as a single child JSONValue childValue = child.get( "file" ); RepositoryFile repositoryFile = new RepositoryFile( childValue.isObject() ); repositoryFileTree.setFile( repositoryFile ); if ( !repositoryFile.isFolder() ) { // Adding single file to the tree children.add( repositoryFileTree ); } else { // process the children, if any childValue = child.get( "children" ); if ( childValue != null ) { RepositoryFileTree childChildren = processChildren( repositoryFileTree, child ); // System.out.println("Adding folder " + childChildren.getFile().getPath() // + " to " + parent.getFile().getPath()); children.add( childChildren ); } else { // we have to add empty folders too repositoryFileTree.setChildren( new ArrayList<RepositoryFileTree>() ); children.add( repositoryFileTree ); } } } } parent.setChildren( children ); return parent; } }