org.raccoon.filemanager.client.ui.FileSystemTreeWidget.java Source code

Java tutorial

Introduction

Here is the source code for org.raccoon.filemanager.client.ui.FileSystemTreeWidget.java

Source

/*
 * Copyright 2011 Yegor Fadeev, firas  
 * 
 * Licensed 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.raccoon.filemanager.client.ui;

import org.raccoon.filemanager.shared.FileType;
import org.raccoon.filemanager.shared.FileWrapper;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.logical.shared.OpenEvent;
import com.google.gwt.event.logical.shared.OpenHandler;
import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.uibinder.client.UiConstructor;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Tree;
import com.google.gwt.user.client.ui.TreeItem;

/**
 *
 * @author Yegor Fadeev
 * @author firas
 */
public class FileSystemTreeWidget extends Composite {

    private Tree tree;
    private String treeTitle;

    public @UiConstructor FileSystemTreeWidget(String treeTitle) {
        this.treeTitle = treeTitle;
        tree = createFileSystemTree();

        initWidget(tree);
    }

    private Tree createFileSystemTree() {
        tree = new Tree();
        tree.setAnimationEnabled(true);
        TreeItem tItem = new TreeItem(treeTitle);
        tItem.addItem("Loading...");
        tree.addOpenHandler(getOpenHandler());
        tree.addSelectionHandler(getSelectionHandler());
        tree.addItem(tItem);
        tree.setSelectedItem(tItem, true);
        return tree;
    }

    private OpenHandler<TreeItem> getOpenHandler() {
        return new OpenHandler<TreeItem>() {
            @Override
            public void onOpen(OpenEvent<TreeItem> oe) {
                GWT.log("Tree Item openned");
                TreeItem targetItem = oe.getTarget();
                // stupid but would be usefull.
                if (targetItem.getChildCount() > 1) {
                    return;
                }
                String path = findPath(targetItem);
                //fetchTreeItems(targetItem, path);
            }
        };
    }

    private SelectionHandler<TreeItem> getSelectionHandler() {
        return new SelectionHandler<TreeItem>() {
            @Override
            public void onSelection(SelectionEvent<TreeItem> se) {
                TreeItem selectedItem = se.getSelectedItem();
                String path = findPath(selectedItem);
                //fetchTableItems(path);
                //footer.setHTML("Current path : "+path);
            }
        };
    }

    private String findPath(TreeItem item) {
        TreeItem parent = item.getParentItem();

        if (parent == null) {
            return "/";
        } else {
            return findPath(parent) + "/" + item.getText();
        }
    }

    private void expandTreeItem(TreeItem father, FileWrapper[] files) {
        if (files != null) {
            father.removeItems();
            for (FileWrapper file : files) {
                if (file.getKind() == FileType.DIR) {
                    TreeItem newItem = new TreeItem(file.getName());
                    father.addItem(newItem);
                    newItem.addItem("Loading...");
                }
            }
        }
    }
}