com.github.cutstock.ui.views.dataset.CategoryTreeViewer.java Source code

Java tutorial

Introduction

Here is the source code for com.github.cutstock.ui.views.dataset.CategoryTreeViewer.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 com.github.cutstock.ui.views.dataset;

import java.util.ArrayList;
import java.util.Set;

import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.viewers.CellLabelProvider;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.swt.widgets.Composite;

import com.github.cutstock.db.beans.CodeNameTransRule;
import com.github.cutstock.ui.adapter.AbstractAdapter;

/**
 * @author <a href="crazyfarmer.cn@gmail.com">crazyfarmer.cn@gmail.com</a>
 * @date Jan 22, 2013
 */
public class CategoryTreeViewer extends TreeViewer {
    private ViewDataTable viewDataTable;
    private CategoryFilter filter;
    protected TreeParent root;
    protected TreeParent all;

    public CategoryTreeViewer(Composite parent) {
        super(parent);
        root = new TreeParent(""); //$NON-NLS-1$
        all = new TreeParent("all"); //$NON-NLS-1$
        root.addChild(all);

        this.addSelectionChangedListener(new ISelectionChangedListener() {
            @Override
            public void selectionChanged(SelectionChangedEvent event) {
                ISelection selection = event.getSelection();

                // Get the selection
                if (selection != null && selection instanceof IStructuredSelection) {
                    Object obj = ((IStructuredSelection) selection).getFirstElement();
                    if (obj != null) {
                        filter.setFilterString((TreeObject) obj);
                        viewDataTable.refresh();
                    }
                }
            }
        });

    }

    class CategoryFilter extends ViewerFilter {

        private TreeObject categoryItem;

        public CategoryFilter() {

        }

        public void setFilterString(TreeObject string) {
            categoryItem = string;
        }

        @Override
        public boolean select(Viewer viewer, Object parentElement, Object element) {
            if (categoryItem == null || categoryItem.getName().equals(Messages.CategoryTreeViewer_2)) {
                return true;
            }
            if (categoryItem.getName().equals(((CodeNameTransRule) element).getCategory())) {
                return true;
            }
            return false;
        }
    }

    private CategoryTreeViewer me = this;
    private Set<String> inputElement;

    class TreeObject {
        private String name;
        private TreeParent parent;

        public TreeObject(String name) {
            this.name = name;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public void setParent(TreeParent parent) {
            this.parent = parent;
        }

        public TreeParent getParent() {
            return parent;
        }

    }

    class TreeParent extends TreeObject {

        private ArrayList<TreeObject> children;

        public TreeParent(String name) {
            super(name);
            children = new ArrayList<TreeObject>();
        }

        public void addChild(TreeObject child) {
            children.add(child);
            child.setParent(this);
        }

        public void removeChild(TreeObject child) {
            children.remove(child);
            child.setParent(null);
        }

        public TreeObject[] getChildren() {
            return children.toArray(new TreeObject[children.size()]);
        }

        public boolean hasChildren() {
            return children.size() > 0;
        }

        public void clear() {
            children.clear();
        }

    }

    public ViewDataTable getViewDataTable() {
        return viewDataTable;
    }

    public void setViewDataTable(ViewDataTable viewDataTable) {
        this.viewDataTable = viewDataTable;
        filter = new CategoryFilter();
        viewDataTable.setTableFilter(filter);
    }

    public void setCategoriesInput(Set<String> input) {
        this.inputElement = input;
        this.setContentProvider(new ViewContentProvider());
        this.setLabelProvider(new ViewLabelProvider());
        this.setInput(root);
        this.expandToLevel(2);

    }

    class ViewLabelProvider extends CellLabelProvider {

        String getText(Object obj) {
            if (obj instanceof TreeObject) {
                return ((TreeObject) obj).getName();
            }
            return obj.toString();
        }

        @Override
        public void update(ViewerCell cell) {
            cell.setText(getText(cell.getElement()));
        }

    }

    class ViewContentProvider implements IStructuredContentProvider, ITreeContentProvider {

        @Override
        public void dispose() {

        }

        @Override
        public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {

        }

        @Override
        public Object[] getChildren(Object parentElement) {
            if (parentElement instanceof TreeParent) {
                return ((TreeParent) parentElement).getChildren();
            }
            return new Object[0];
        }

        @Override
        public Object getParent(Object element) {
            return null;
        }

        @Override
        public boolean hasChildren(Object element) {
            if (element instanceof TreeParent) {
                return ((TreeParent) element).hasChildren();
            }
            return false;
        }

        @Override
        public Object[] getElements(Object parent) {
            int count = 0;
            if (parent == root) {
                clear();
                for (String treeItem : (Set<String>) inputElement) {
                    all.addChild(new TreeObject(treeItem));
                }
            }
            count = ((Set) inputElement).size();
            if (count != 0) {
                me.getTree().setVisible(true);
                GridDataFactory.fillDefaults().hint(150, -1).grab(false, true).applyTo(me.getTree());
                me.getTree().getParent().layout(true);
            } else {
                me.getTree().setVisible(false);
                GridDataFactory.fillDefaults().hint(1, -1).grab(false, true).applyTo(me.getTree());
                me.getTree().getParent().layout(true);
            }
            return getChildren(parent);
        }
    }

    private void clear() {
        if (all != null)
            all.clear();

        root.clear();

        if (all != null)
            root.addChild(all);

    }
}