Package org.vaadin.spring.samples.mvp.ui.component.nav

Source Code of org.vaadin.spring.samples.mvp.ui.component.nav.NavContainerFactory

package org.vaadin.spring.samples.mvp.ui.component.nav;

import java.util.ArrayList;
import java.util.List;

import javax.validation.constraints.NotNull;

import com.vaadin.data.util.HierarchicalContainer;

/**
* Responsible for construction of a navigation hierarchy
* @author Chris Phillipson (fastnsilver@gmail.com)
*
*/
public class NavContainerFactory {

    private final List<NavElement> elements;

    public NavContainerFactory(@NotNull List<NavElement> elements) {
        this.elements = elements;
    }

    public NavElement getNodeById(@NotNull Double id) {
        NavElement result = null;
        for (NavElement e: elements) {
            if (e.getId().equals(id)) {
                result = e;
                break;
            }
        }
        return result;
    }

    public NavElement getNodeByAlias(@NotNull String alias) {
        NavElement result = null;
        for (NavElement e: elements) {
            if (e.getAlias().equals(alias)) {
                result = e;
                break;
            }
        }
        return result;
    }

    protected NavElement getParent(@NotNull NavElement element) {
        NavElement result = null;
        Double parent = element.getParent();
        if (parent != null) {
            for (NavElement e: elements) {
                if (parent.equals(e.getId())) {
                    result = e;
                    break;
                }
            }
        }
        return result;
    }

    protected List<NavElement> getRoots() {
        List<NavElement> result = new ArrayList<>();
        for (NavElement e: elements) {
            if (e.getParent() == null) {
                result.add(e);
            }
        }
        return result;
    }

    protected List<NavElement> getChildren(@NotNull NavElement element) {
        List<NavElement> result = new ArrayList<>();
        Double parent = null;
        for (NavElement e: elements) {
            parent = e.getParent();
            if (parent != null && element.getId().equals(parent)) {
                result.add(e);
            }
        }
        return result;
    }

    protected boolean hasChildren(@NotNull NavElement element) {
        boolean result = false;
        if (!getChildren(element).isEmpty()) {
            result = true;
        }
        return result;
    }


    public HierarchicalContainer constructNavigationHierarchy() {
        HierarchicalContainer navData = new HierarchicalContainer();
        navData.addContainerProperty("name", String.class, null);
        navData.addContainerProperty("id", Double.class, null);
        navData.addContainerProperty("parent", Double.class, null);
        navData.addContainerProperty("alias", String.class, null);
        List<NavElement> children = null;
        // FIXME only capable of rendering two levels
        for (NavElement e: getRoots()) {
            navData.addItem(e);
            if (hasChildren(e)) {
                children = getChildren(e);
                for (NavElement child: children) {
                    navData.addItem(child);
                    navData.setParent(child, e);
                    navData.setChildrenAllowed(child, false);
                }
            } else {
                navData.setChildrenAllowed(e, false);
            }
        }
        return navData;
    }
}
TOP

Related Classes of org.vaadin.spring.samples.mvp.ui.component.nav.NavContainerFactory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.