org.d3s.alricg.editor.views.charElemente.SpracheView.java Source code

Java tutorial

Introduction

Here is the source code for org.d3s.alricg.editor.views.charElemente.SpracheView.java

Source

/*
 * Created 21.08.2007
 *
 * This file is part of the project Alricg. The file is copyright
 * protected and under the GNU General Public License.
 * For more information see "http://www.alricg.de/".
 */
package org.d3s.alricg.editor.views.charElemente;

import org.d3s.alricg.editor.common.CustomColumnLabelProvider;
import org.d3s.alricg.editor.common.CustomColumnViewerSorter;
import org.d3s.alricg.editor.common.Regulatoren;
import org.d3s.alricg.editor.common.ViewUtils;
import org.d3s.alricg.editor.common.CustomColumnViewerSorter.CreatableViewerSorter;
import org.d3s.alricg.editor.common.Regulatoren.CharElementWapper;
import org.d3s.alricg.editor.common.Regulatoren.Regulator;
import org.d3s.alricg.editor.common.ViewUtils.CharElementDragSourceListener;
import org.d3s.alricg.editor.common.ViewUtils.TableObject;
import org.d3s.alricg.editor.common.ViewUtils.TableViewContentProvider;
import org.d3s.alricg.editor.common.ViewUtils.TreeObject;
import org.d3s.alricg.editor.common.ViewUtils.TreeOrTableObject;
import org.d3s.alricg.editor.common.ViewUtils.TreeViewContentProvider;
import org.d3s.alricg.editor.common.ViewUtils.ViewerSelectionListener;
import org.d3s.alricg.editor.utils.EditorViewUtils;
import org.d3s.alricg.editor.utils.CustomActions.BuildNewCharElementAction;
import org.d3s.alricg.editor.views.ViewMessages;
import org.d3s.alricg.store.access.StoreDataAccessor;
import org.d3s.alricg.store.charElemente.CharElement;
import org.d3s.alricg.store.charElemente.Schrift;
import org.d3s.alricg.store.charElemente.SchriftSprache;
import org.d3s.alricg.store.charElemente.Sprache;
import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.util.LocalSelectionTransfer;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.TreeViewerColumn;
import org.eclipse.jface.window.ToolTip;
import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;

/**
 * @author Vincent
 */
public class SpracheView extends RefreshableViewPartImpl {
    public static final String ID = "org.d3s.alricg.editor.views.SpracheSchriftView";

    /* (non-Javadoc)
     * @see org.d3s.alricg.editor.views.charElemente.RefreshableViewPart#createTable(org.eclipse.swt.widgets.Composite)
     */
    @Override
    protected TableViewer createTable(Composite parent) {
        // init Table
        final TableViewer tableViewer = new TableViewer(parent, SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL);
        tableViewer.getTable().setLinesVisible(true);
        tableViewer.getTable().setHeaderVisible(true);
        ColumnViewerToolTipSupport.enableFor(tableViewer, ToolTip.NO_RECREATE);

        // Drag and Drop
        tableViewer.addDragSupport(DND.DROP_COPY | DND.DROP_MOVE,
                new Transfer[] { LocalSelectionTransfer.getTransfer() },
                new CharElementDragSourceListener(tableViewer));

        // Columns setzen
        TableViewerColumn tc = new TableViewerColumn(tableViewer, SWT.LEFT, 0);
        tableViewer.getTable().setSortColumn(tc.getColumn());
        tc.getColumn().setText(ViewMessages.TalentView_Name);
        tc.setLabelProvider(new CustomColumnLabelProvider.NameLabelProvider());
        tc.getColumn().setWidth(DEFAULT_FIRSTCOLUMN_WIDTH);
        tc.getColumn().addSelectionListener(
                new ViewerSelectionListener(new CustomColumnViewerSorter.NameSorter(), tableViewer));

        tc = new TableViewerColumn(tableViewer, SWT.LEFT, 1);
        tc.getColumn().setText(ViewMessages.TalentView_Datei);
        tc.setLabelProvider(new CustomColumnLabelProvider.DateinameLabelProvider());
        tc.getColumn().setWidth(150);
        tc.getColumn().setMoveable(true);
        tc.getColumn().addSelectionListener(
                new ViewerSelectionListener(new CustomColumnViewerSorter.DateiSorter(), tableViewer));

        tc = new TableViewerColumn(tableViewer, SWT.LEFT, 2);
        tc.getColumn().setText("Art");
        tc.setLabelProvider(new SchriftSpracheArtProvider());
        tc.getColumn().setWidth(75);
        tc.getColumn().setMoveable(true);
        tc.getColumn()
                .addSelectionListener(new ViewerSelectionListener(new SchriftSpracheArtSorter(), tableViewer));

        tc = new TableViewerColumn(tableViewer, SWT.LEFT, 3);
        tc.getColumn().setText("Komplexitt");
        tc.setLabelProvider(new CustomColumnLabelProvider.SchriftSpracheKomplexitaetProvider());
        tc.getColumn().setWidth(75);
        tc.getColumn().setMoveable(true);
        tc.getColumn().addSelectionListener(new ViewerSelectionListener(
                new CustomColumnViewerSorter.SchriftSpracheKomplexitaetSorter(), tableViewer));

        tc = new TableViewerColumn(tableViewer, SWT.LEFT, 4);
        tc.getColumn().setText(ViewMessages.TalentView_SKT);
        tc.setLabelProvider(new CustomColumnLabelProvider.SKTLabelProvider());
        tc.getColumn().setWidth(75);
        tc.getColumn().setMoveable(true);
        tc.getColumn().addSelectionListener(
                new ViewerSelectionListener(new CustomColumnViewerSorter.SktSorter(), tableViewer));

        tc = new TableViewerColumn(tableViewer, SWT.LEFT, 5);
        tc.getColumn().setText("Schriften");
        tc.setLabelProvider(new SpracheSchriftenProvider());
        tc.getColumn().setWidth(75);
        tc.getColumn().setMoveable(true);
        tc.getColumn().addSelectionListener(new ViewerSelectionListener(new SpracheSchriftenSorter(), tableViewer));

        tc = new TableViewerColumn(tableViewer, SWT.LEFT, 6);
        tc.getColumn().setText(ViewMessages.TalentView_Voraussetzung);
        tc.setLabelProvider(new CustomColumnLabelProvider.CharElementVoraussetzungProvider());
        tc.getColumn().setWidth(150);
        tc.getColumn().setMoveable(true);
        tc.getColumn().addSelectionListener(new ViewerSelectionListener(
                new CustomColumnViewerSorter.CharElementVoraussetzungSorter(), tableViewer));

        // Inhalt und Sortierung setzen
        tableViewer.setContentProvider(new TableViewContentProvider());
        tableViewer.getTable().setSortDirection(SWT.UP);
        tableViewer.setSorter(new CustomColumnViewerSorter.NameSorter());
        tableViewer.setInput(EditorViewUtils.buildEditorTableView(StoreDataAccessor.getInstance().getXmlAccessors(),
                getRegulator()));

        return tableViewer;

    }

    /* (non-Javadoc)
     * @see org.d3s.alricg.editor.views.charElemente.RefreshableViewPart#createTree(org.eclipse.swt.widgets.Composite)
     */
    @Override
    protected TreeViewer createTree(Composite parent) {
        // Init Viewer
        final TreeViewer treeViewer = new TreeViewer(parent, SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL);
        treeViewer.getTree().setLinesVisible(true);
        treeViewer.getTree().setHeaderVisible(true);
        ColumnViewerToolTipSupport.enableFor(treeViewer, ToolTip.NO_RECREATE);

        // Drag and Drop
        treeViewer.addDragSupport(DND.DROP_COPY | DND.DROP_MOVE,
                new Transfer[] { LocalSelectionTransfer.getTransfer() },
                new CharElementDragSourceListener(treeViewer));

        // Columns
        TreeViewerColumn tc = new TreeViewerColumn(treeViewer, SWT.LEFT, 0);
        tc.getColumn().setText(ViewMessages.TalentView_Name);
        treeViewer.getTree().setSortColumn(tc.getColumn());
        tc.setLabelProvider(new CustomColumnLabelProvider.NameLabelProvider());
        tc.getColumn().setWidth(DEFAULT_FIRSTCOLUMN_WIDTH);
        tc.getColumn().addSelectionListener(
                new ViewerSelectionListener(new CustomColumnViewerSorter.NameSorter(), treeViewer));

        tc = new TreeViewerColumn(treeViewer, SWT.LEFT, 1);
        tc.getColumn().setText(ViewMessages.TalentView_Datei);
        tc.setLabelProvider(new CustomColumnLabelProvider.DateinameLabelProvider());
        tc.getColumn().setWidth(125);
        tc.getColumn().setMoveable(true);
        tc.getColumn().addSelectionListener(
                new ViewerSelectionListener(new CustomColumnViewerSorter.DateiSorter(), treeViewer));

        tc = new TreeViewerColumn(treeViewer, SWT.LEFT, 2);
        tc.getColumn().setText("Komplexitt");
        tc.setLabelProvider(new CustomColumnLabelProvider.SchriftSpracheKomplexitaetProvider());
        tc.getColumn().setWidth(75);
        tc.getColumn().setMoveable(true);
        tc.getColumn().addSelectionListener(new ViewerSelectionListener(
                new CustomColumnViewerSorter.SchriftSpracheKomplexitaetSorter(), treeViewer));

        tc = new TreeViewerColumn(treeViewer, SWT.LEFT, 3);
        tc.getColumn().setText(ViewMessages.TalentView_SKT);
        tc.setLabelProvider(new CustomColumnLabelProvider.SKTLabelProvider());
        tc.getColumn().setWidth(75);
        tc.getColumn().setMoveable(true);
        tc.getColumn().addSelectionListener(
                new ViewerSelectionListener(new CustomColumnViewerSorter.SktSorter(), treeViewer));

        tc = new TreeViewerColumn(treeViewer, SWT.LEFT, 4);
        tc.getColumn().setText("Schriften");
        tc.setLabelProvider(new SpracheSchriftenProvider());
        tc.getColumn().setWidth(75);
        tc.getColumn().setMoveable(true);
        tc.getColumn().addSelectionListener(new ViewerSelectionListener(new SpracheSchriftenSorter(), treeViewer));

        tc = new TreeViewerColumn(treeViewer, SWT.LEFT, 5);
        tc.getColumn().setText(ViewMessages.TalentView_Voraussetzung);
        tc.setLabelProvider(new CustomColumnLabelProvider.CharElementVoraussetzungProvider());
        tc.getColumn().setWidth(150);
        tc.getColumn().setMoveable(true);
        tc.getColumn().addSelectionListener(new ViewerSelectionListener(
                new CustomColumnViewerSorter.CharElementVoraussetzungSorter(), treeViewer));

        // Inhalt und Sortierung setzen
        TreeObject root = EditorViewUtils.buildEditorTreeView(StoreDataAccessor.getInstance().getXmlAccessors(),
                getRegulator());
        treeViewer.setContentProvider(new TreeViewContentProvider(root));
        treeViewer.getTree().setSortDirection(SWT.DOWN);
        treeViewer.setSorter(new CustomColumnViewerSorter.NameSorter());
        treeViewer.setInput(root);

        return treeViewer;
    }

    /* (non-Javadoc)
     * @see org.d3s.alricg.editor.views.charElemente.RefreshableViewPart#getRegulator()
     */
    @Override
    public Regulator getRegulator() {
        return Regulatoren.SpracheRegulator;
    }

    /* (non-Javadoc)
     * @see org.d3s.alricg.editor.views.charElemente.RefreshableViewPart#getViewedClass()
     */
    @Override
    public Class getViewedClass() {
        return SchriftSprache.class;
    }

    /**
     * Setzt das Context-menu
     * berschrieben, da "BuildNew" nur angezeigt werden darf, wenn ein Element selektiert ist
     */
    @Override
    protected void hookContextMenu() {
        MenuManager menuMgr = new MenuManager("#PopupMenu");
        menuMgr.setRemoveAllWhenShown(true);
        menuMgr.addMenuListener(new IMenuListener() {
            public void menuAboutToShow(IMenuManager manager) {
                SpracheView.this.fillContextMenu(manager);
            }
        });

        menuMgr.addMenuListener(new IMenuListener() {

            @Override
            public void menuAboutToShow(IMenuManager manager) {
                boolean isEnabled = true;
                final TreeOrTableObject treeTableObj = getSelectedElement();

                if (treeTableObj != null && treeTableObj.getValue() instanceof CharElement) {
                    isEnabled = true;
                } else {
                    isEnabled = false;
                }

                for (int i = 0; i < manager.getItems().length; i++) {
                    if (!(manager.getItems()[i] instanceof ActionContributionItem)) {
                        continue;
                    }
                    ActionContributionItem item = (ActionContributionItem) manager.getItems()[i];

                    if (!(item.getAction() instanceof BuildNewCharElementAction)) {
                        item.getAction().setEnabled(isEnabled);
                    }
                }

                if (treeTableObj == null) {
                    buildNew.setEnabled(false);
                }
            }
        });

        // For Tree
        Menu menu = menuMgr.createContextMenu(viewerTree.getControl());
        viewerTree.getControl().setMenu(menu);
        getSite().registerContextMenu(menuMgr, viewerTree);

        // For Table
        menu = menuMgr.createContextMenu(viewerTable.getControl());
        viewerTable.getControl().setMenu(menu);
        getSite().registerContextMenu(menuMgr, viewerTable);
    }

    /**
     * berschrieben, da "BuildNew" den Typ nun dynamisch errechnet
     */
    @Override
    protected void makeActions() {
        super.makeActions();

        buildNew = new BuildNewCharElementAction(this, getViewedClass(), getRegulator()) {

            /* (non-Javadoc)
             * @see org.d3s.alricg.editor.common.CustomActions.BuildNewCharElementAction#run()
             */
            @Override
            public void run() {
                TreeOrTableObject treeObj = getSelectedElement();
                if (treeObj == null) {
                    return;
                }

                // Bei einer Tabelle kann der Typ direkt gelesen werden
                if (treeObj instanceof TableObject) {
                    this.charElementClazz = treeObj.getValue().getClass();
                }

                while (treeObj != null
                        && !treeObj.getValue().getClass().equals(getRegulator().getFirstCategoryClass())) {
                    treeObj = ((TreeObject) treeObj).getParent();
                }
                charElementClazz = ((CharElementWapper) treeObj.getValue()).getWappedClass();

                super.run();
            }

        };

    }
    // Neues Element Action 

    /**
     * Erstellt aus der zu der Sprache zugehrigen Schriften einen Text
     * @author Vincent
     */
    public static class SpracheSchriftenProvider extends ColumnLabelProvider {
        @Override
        public String getText(Object element) {
            final CharElement charElem = ViewUtils.getCharElement(element);
            if (charElem == null)
                return ""; //$NON-NLS-1$

            if (charElem instanceof Schrift) {
                return "-";
            } else if (((Sprache) charElem).getZugehoerigeSchrift() == null) {
                return "keine";
            }

            final StringBuilder strB = new StringBuilder();
            for (int i = 0; i < ((Sprache) charElem).getZugehoerigeSchrift().length; i++) {
                strB.append(((Sprache) charElem).getZugehoerigeSchrift()[i].getName());
                if (i + 1 < ((Sprache) charElem).getZugehoerigeSchrift().length) {
                    strB.append(", ");
                }
            }
            return strB.toString();
        }
    }

    public static class SchriftSpracheArtProvider extends ColumnLabelProvider {
        @Override
        public String getText(Object element) {
            final CharElement charElem = ViewUtils.getCharElement(element);
            if (charElem == null)
                return ""; //$NON-NLS-1$

            if (charElem instanceof Schrift) {
                return "Schrift";
            } else {
                return "Sprache";
            }
        }
    }

    public static class SpracheSchriftenSorter extends CreatableViewerSorter {
        @Override
        public Comparable getComparable(Object obj) {
            final CharElement elem = ViewUtils.getCharElement(obj);

            if (elem instanceof Schrift) {
                return "-";
            } else if (((Sprache) elem).getZugehoerigeSchrift() == null) {
                return "keine";
            }

            final StringBuilder strB = new StringBuilder();
            for (int i = 0; i < ((Sprache) elem).getZugehoerigeSchrift().length; i++) {
                strB.append(((Sprache) elem).getZugehoerigeSchrift()[i].getName());
                if (i + 1 < ((Sprache) elem).getZugehoerigeSchrift().length) {
                    strB.append(", ");
                }
            }
            return strB.toString();
        }
    }

    public static class SchriftSpracheArtSorter extends CreatableViewerSorter {
        @Override
        public Comparable getComparable(Object obj) {
            final CharElement charElem = ViewUtils.getCharElement(obj);
            if (charElem == null)
                return ""; //$NON-NLS-1$

            if (charElem instanceof Schrift) {
                return "Schrift";
            } else {
                return "Sprache";
            }
        }
    }
}