org.apache.sling.explorer.client.widgets.grid.resource.ResourceGrids.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.sling.explorer.client.widgets.grid.resource.ResourceGrids.java

Source

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package org.apache.sling.explorer.client.widgets.grid.resource;

import org.apache.sling.explorer.client.ExplorerConstants;
import org.apache.sling.explorer.client.widgets.grid.ExplorerGrid;

import com.google.gwt.core.client.GWT;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONException;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONParser;
import com.google.gwt.json.client.JSONValue;
import com.google.gwt.user.client.ui.FlexTable;

/**
 *
 * A ResourcesGrids display information on a resources
 * It is composed of 2 different Grids.
 * One for the resource properties & another one for the resource children.
 *
 */
public class ResourceGrids {

    private ExplorerGrid propertyGrid = new ExplorerGrid();
    private ExplorerGrid resourceGrid = new ExplorerGrid();

    public ResourceGrids() {
        super();
        // Add the Header to the property grid
        Object[] cols = new Object[4];

        // TODO : Change the hardcoded labels
        cols[0] = "Name";
        cols[1] = "Type";
        cols[2] = "Value";
        cols[3] = "Multi";

        propertyGrid.AddHeader(cols);

        //  Add the Header to the Subnode grid
        // TODO : Change the hardcoded labels
        cols = new Object[2];
        cols[0] = "Name";
        cols[1] = "Type";
        resourceGrid.AddHeader(cols);
    }

    private void removeAllRowsInGrids() {

        int rowCount = propertyGrid.getRowCount();
        // Loop from i=1 because we don't remove the grid label
        for (int i = rowCount - 1; i > 0; i--) {
            propertyGrid.removeRow(i);
        }

        rowCount = resourceGrid.getRowCount();
        // Loop from i=1 because we don't remove the grid label
        for (int i = rowCount - 1; i > 0; i--) {
            resourceGrid.removeRow(i);
        }

    }

    public void populate(String url) {
        RequestBuilder builder = new RequestBuilder(RequestBuilder.GET,
                url + ExplorerConstants.JSON_CHILDREN_REQUEST_EXTENSION);

        try {
            builder.sendRequest(null, new JsonGridCallback(this));
        } catch (RequestException e) {
            // TODO : add message box for the end-user
            GWT.log("ResourceGrids - Couldn't retrieve JSON for url : " + url
                    + ExplorerConstants.JSON_CHILDREN_REQUEST_EXTENSION, e);
        }
    }

    public FlexTable getPropertyGrid() {
        return propertyGrid;
    }

    public FlexTable getResourceChildrenGrid() {
        return resourceGrid;
    }

    private class JsonGridCallback implements RequestCallback {
        private ResourceGrids grid;

        public JsonGridCallback(ResourceGrids grid) {
            this.grid = grid;
        }

        public void onError(Request request, Throwable exception) {
            GWT.log("ResourceGrids  - on error for request : " + request.toString(), null);
        }

        public void onResponseReceived(Request request, Response response) {
            if (200 == response.getStatusCode()) {
                grid.removeAllRowsInGrids();
                addProperties(response);

            } else {
                GWT.log("ResourceGrids - Couldn't retrieve JSON for request - status code  :"
                        + response.getStatusCode() + " -  " + response.getText(), null);
            }
        }

        private void addProperties(Response response) {
            GWT.log(response.getText(), null);
            try {
                // parse the response text into JSON
                JSONValue jsonValue = JSONParser.parse(response.getText());
                JSONArray jsonArray = jsonValue.isArray();

                if (jsonArray != null) {
                    for (int index = 0; index < jsonArray.size(); index++) {
                        addProperty(((JSONObject) jsonArray.get(index)), index);
                    }
                } else {
                    throw new JSONException("Invalid Json structure when retrieve the Sling nodes");
                }
            } catch (JSONException e) {
                e.printStackTrace();
                GWT.log("ResourceGrids - Could not parse JSON", e);
            }
        }

        private void addProperty(JSONObject jsonObject, int index) {

            Item item = new Item(jsonObject.get("itemType").isString().stringValue(),
                    jsonObject.get("multi").isBoolean().booleanValue(),
                    jsonObject.get("name").isString().stringValue(),
                    jsonObject.get("type").isString().stringValue(),
                    jsonObject.get("value").isString().stringValue());

            if (item.getItemType().equals(ExplorerConstants.PROPERTY))
                addToPropertyGrid(propertyGrid, item);
            else
                addToChildrenResourceGrid(resourceGrid, item);

        }

        private void addToPropertyGrid(ExplorerGrid grid, Item item) {
            Object[] cols = new Object[4];
            cols[0] = item.getName();
            cols[1] = item.getType();
            cols[2] = item.getValue();
            cols[3] = item.isMutli().toString();

            grid.addRow(grid.getRowCount(), cols);
        }

        private void addToChildrenResourceGrid(ExplorerGrid grid, Item item) {

            Object[] cols = new Object[2];
            cols[0] = item.getName();
            cols[1] = item.getType();

            grid.addRow(grid.getRowCount(), cols);
        }

    };

    /**
     * User object used for the treeview items (resource children or resource properties).
     *
     */
    private class Item {

        private String name;
        private String type;
        private String value;
        private Boolean mutli;
        private String itemType;

        public Item(String itemType, Boolean mutli, String name, String type, String value) {
            super();
            this.itemType = itemType;
            this.mutli = mutli;
            this.name = name;
            this.type = type;
            this.value = value;
        }

        public String getName() {
            return name;
        }

        public String getType() {
            return type;
        }

        public String getValue() {
            return value;
        }

        public Boolean isMutli() {
            return mutli;
        }

        public String getItemType() {
            return itemType;
        }
    }
}