org.ned.server.nedadminconsole.client.widgets.NedLibraryTree.java Source code

Java tutorial

Introduction

Here is the source code for org.ned.server.nedadminconsole.client.widgets.NedLibraryTree.java

Source

/*******************************************************************************
* Copyright (c) 2011-2012 Nokia Corporation
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Comarch team - initial API and implementation
*******************************************************************************/
package org.ned.server.nedadminconsole.client.widgets;

import org.ned.server.nedadminconsole.client.NedCatalogService;
import org.ned.server.nedadminconsole.client.NedCatalogServiceAsync;
import org.ned.server.nedadminconsole.client.NedConstant;
import org.ned.server.nedadminconsole.client.NedDataModel;
import org.ned.server.nedadminconsole.client.NedRes;
import org.ned.server.nedadminconsole.client.NedTree;
import org.ned.server.nedadminconsole.client.NedTreeItem;
import org.ned.server.nedadminconsole.client.callbacks.NedFullListCallback;
import org.ned.server.nedadminconsole.client.dialogs.NedNewElementDialog;
import org.ned.server.nedadminconsole.client.interfaces.NedModelListener;
import org.ned.server.nedadminconsole.shared.NedObject;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.user.client.rpc.ServiceDefTarget;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.TreeItem;
import com.google.gwt.user.client.ui.VerticalPanel;

public class NedLibraryTree extends Composite implements NedModelListener {

    NedTree libTree = null;
    NedDataModel model = null;
    private Button btnNewButton;
    private Label labelLibraryName;

    public NedLibraryTree(final NedDataModel model) {

        this.model = model;
        model.addListener(this);

        VerticalPanel verticalPanelTreeContent = new VerticalPanel();
        verticalPanelTreeContent.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
        verticalPanelTreeContent.setSpacing(8);
        verticalPanelTreeContent.setSize("350px", "100%");
        initWidget(verticalPanelTreeContent);

        labelLibraryName = new Label();
        verticalPanelTreeContent.add(labelLibraryName);
        verticalPanelTreeContent.setCellVerticalAlignment(labelLibraryName, HasVerticalAlignment.ALIGN_MIDDLE);
        labelLibraryName.setDirectionEstimator(false);
        labelLibraryName.setStyleName("gwt-Label-element");
        labelLibraryName.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
        labelLibraryName.setSize("100%", "");
        libTree = new NedTree();
        libTree.setSize("100%", "100%");
        libTree.addSelectionHandler(new SelectionHandler<TreeItem>() {
            @Override
            public void onSelection(SelectionEvent<TreeItem> event) {
                NedObject obj = ((NedTreeItem) event.getSelectedItem()).getNedObject();
                model.treeObjectSelection(obj, event.getSelectedItem());
                updateAddButton(obj);
            }
        });

        HorizontalPanel horizontalPanel = new HorizontalPanel();
        horizontalPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
        verticalPanelTreeContent.add(horizontalPanel);
        verticalPanelTreeContent.setCellVerticalAlignment(horizontalPanel, HasVerticalAlignment.ALIGN_MIDDLE);
        horizontalPanel.setSize("100%", "100%");

        ScrollPanel scrollPanel = new ScrollPanel();
        horizontalPanel.add(scrollPanel);
        verticalPanelTreeContent.setCellHeight(scrollPanel, "440px");
        verticalPanelTreeContent.setCellVerticalAlignment(scrollPanel, HasVerticalAlignment.ALIGN_MIDDLE);
        scrollPanel.setStyleName("treeScrollPanel");
        scrollPanel.setSize("350px", "470px");
        scrollPanel.setWidget(libTree);

        VerticalPanel verticalPanel = new VerticalPanel();
        verticalPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
        verticalPanelTreeContent.add(verticalPanel);
        verticalPanelTreeContent.setCellVerticalAlignment(verticalPanel, HasVerticalAlignment.ALIGN_MIDDLE);
        verticalPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
        verticalPanel.setSize("100%", "");

        btnNewButton = new Button(NedRes.instance().add());
        verticalPanel.add(btnNewButton);
        verticalPanel.setCellVerticalAlignment(btnNewButton, HasVerticalAlignment.ALIGN_BOTTOM);
        verticalPanel.setCellHorizontalAlignment(btnNewButton, HasHorizontalAlignment.ALIGN_CENTER);
        btnNewButton.setSize("100%", "");
        btnNewButton.addClickHandler(new AddButtonClickHandler());

        btnNewButton.setEnabled(false);

        setVisible(false);

    }

    private String getAvailableType(NedObject selectedObject) {

        if (selectedObject == null) {
            return "";
        } else if (selectedObject.type.equals(NedConstant.TYPE_LIBRARY)) {
            return NedConstant.TYPE_CATALOG;
        } else if (selectedObject.type.equals(NedConstant.TYPE_CATALOG)) {
            return NedConstant.TYPE_CATEGORY;
        } else if (selectedObject.type.equals(NedConstant.TYPE_CATEGORY)) {
            return NedConstant.TYPE_MEDIA_ITEM;
        } else {
            return "";
        }
    }

    private void updateAddButton(NedObject selectedObject) {

        String addTypeStr = getAvailableType(selectedObject);
        btnNewButton.setText("Add " + addTypeStr);
        if (addTypeStr.isEmpty()) {
            btnNewButton.setEnabled(false);
        } else {
            btnNewButton.setEnabled(true);
        }
    }

    private class AddButtonClickHandler implements ClickHandler {

        @Override
        public void onClick(ClickEvent event) {

            NedObject currentObj = model.getCurrentObject();
            String parentId = currentObj == null ? null : currentObj.id;

            new NedNewElementDialog(getAvailableType(currentObj), currentObj, model.getCurrentTreeItem()).show();

        }
    }

    public void fillTree(NedObject currentObj, TreeItem parent) {
        NedTreeItem newItem = new NedTreeItem(currentObj);

        for (NedObject child : currentObj.childes) {
            fillTree(child, newItem);
        }

        if (parent == null) {
            libTree.addItem(newItem);
        } else {
            parent.addItem(newItem);
        }
    }

    @Override
    public void libraryChanged(NedDataModel source) {
        if (source.getCurrentLibrary() != null) {
            NedCatalogServiceAsync service = (NedCatalogServiceAsync) GWT.create(NedCatalogService.class);
            ServiceDefTarget serviceDef = (ServiceDefTarget) service;
            serviceDef.setServiceEntryPoint("NedCatalogServlet");

            NedFullListCallback serviceCallback = new NedFullListCallback(source);
            service.getFullNode(source.getCurrentLibrary().id, serviceCallback);
        }

    }

    @Override
    public void libraryContentLoaded(NedDataModel source) {
        libTree.clear();
        if (model.getNedLibrary() != null) {
            fillTree(model.getNedLibrary(), null);
            labelLibraryName.setText(NedRes.instance().containerLibrary() + ": " + model.getCurrentLibrary().name);
            btnNewButton.setEnabled(false);
        }
        setVisible(true);

    }

    @Override
    public void objectSelection(NedDataModel source) {
        // no implementation required

    }

    @Override
    public void objectChanged(NedDataModel source) {
        NedTreeItem old = (NedTreeItem) source.getCurrentTreeItem();
        old.refresh(source.getCurrentObject());
    }

    @Override
    protected void onUnload() {
        model.removeListener(this);
    }

    @Override
    public void fileUploaded(NedDataModel source) {
        NedTreeItem old = (NedTreeItem) source.getCurrentTreeItem();
        old.refresh(source.getCurrentObject());
    }

    @Override
    public void objectDeleted(NedDataModel source, String objectType) {
        if (objectType.equals(NedConstant.TYPE_LIBRARY)) {
            setVisible(false);
            libTree.clear();
        } else {
            model.getCurrentTreeItem().remove();
        }

    }

    @Override
    public void objectMoved(NedDataModel source, boolean moveUp) {
        TreeItem moveObj = source.getCurrentTreeItem();
        TreeItem parentItem = moveObj.getParentItem();
        int moveObjIndex = parentItem.getChildIndex(moveObj);

        parentItem.removeItem(moveObj);
        int newIndex;
        if (moveUp) {
            newIndex = moveObjIndex - 1;
        } else {
            newIndex = moveObjIndex + 1;
        }

        parentItem.insertItem(newIndex, moveObj);
        moveObj.getTree().setSelectedItem(moveObj, true);
    }
}