org.d3s.alricg.generator.views.held.TalentView.java Source code

Java tutorial

Introduction

Here is the source code for org.d3s.alricg.generator.views.held.TalentView.java

Source

/*
 * Created 28.10.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.generator.views.held;

import java.util.List;

import org.d3s.alricg.common.CommonUtils;
import org.d3s.alricg.common.logic.BaseProzessorObserver;
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.Regulator;
import org.d3s.alricg.editor.common.ViewUtils.ObjectCreator;
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.TreeViewContentProvider;
import org.d3s.alricg.editor.common.ViewUtils.ViewerSelectionListener;
import org.d3s.alricg.generator.Activator;
import org.d3s.alricg.generator.common.CustomLabelProvider;
import org.d3s.alricg.generator.common.CustomViewerSorter;
import org.d3s.alricg.generator.common.CustomEditingSupport.LinkWertProzessorEditingSupport;
import org.d3s.alricg.generator.common.CustomEditingSupport.TalentSpezialisierungsEditor;
import org.d3s.alricg.generator.prozessor.extended.ExtendedProzessorTalent;
import org.d3s.alricg.generator.views.HeldRefreshableViewPart;
import org.d3s.alricg.store.charElemente.Eigenschaft;
import org.d3s.alricg.store.charElemente.Talent;
import org.d3s.alricg.store.charElemente.links.Link;
import org.d3s.alricg.store.rules.RegelConfig;
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.widgets.Composite;

/**
 * @author Vincent
 */
public class TalentView extends HeldRefreshableViewPart {
    public static final String ID = "org.d3s.alricg.generator.views.held.TalentView"; //$NON-NLS-1$
    public static final String GESAMT_KOSTEN = "Gesamt Kosten: ";
    public static final String AKTIVIERT = "Aktiviert: ";
    public static final String TAL_GP = " TalGP";

    public TalentView() {
        ((BaseProzessorObserver) Activator.getCurrentCharakter().getProzessor(Talent.class)).registerObserver(this);
    }

    private final ObjectCreator objCreator = new ObjectCreator() {
        @Override
        public TableObject createTableObject(Object element) {
            return new TableObject(element);
        }

        @Override
        public TreeObject createTreeObject(Object element, TreeObject parentNode) {
            return new TreeObject(element, parentNode);
        }
    };

    /* (non-Javadoc)
     * @see org.d3s.alricg.generator.views.HeldRefreshableViewPart#getStatusAnzeigeElemente()
     */
    @Override
    protected String[] getStatusAnzeigeElemente() {
        String[] str = new String[2];
        str[0] = GESAMT_KOSTEN + "0" + TAL_GP;
        str[1] = AKTIVIERT + " 0 / " + RegelConfig.getInstance().getMaxTalentAktivierung();

        return str;
    }

    /**
     * Erstellt eine TreeTable + ContextMenu und setzt sie in den View
     */
    protected TreeViewer createTree(Composite parent) {
        // Init Viewer
        int idx = 0;
        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);

        // Columns
        TreeViewerColumn tc = new TreeViewerColumn(treeViewer, SWT.LEFT, idx++);
        tc.getColumn().setText("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, idx++);
        tc.getColumn().setText("Stufe");
        tc.setLabelProvider(new CustomColumnLabelProvider.LinkWertProvider());
        tc.getColumn().setWidth(75);
        tc.getColumn().setMoveable(true);
        tc.getColumn().addSelectionListener(
                new ViewerSelectionListener(new CustomViewerSorter.LinkWertSorter(), treeViewer));
        tc.setEditingSupport(new LinkWertProzessorEditingSupport(treeViewer, treeViewer.getTree(), false,
                Activator.getCurrentCharakter().getProzessor(Talent.class)));

        tc = new TreeViewerColumn(treeViewer, SWT.LEFT, idx++);
        tc.getColumn().setText("Modi");
        tc.setLabelProvider(new CustomLabelProvider.LinkWertModiProvider());
        tc.getColumn().setWidth(75);
        tc.getColumn().setMoveable(true);
        tc.getColumn().addSelectionListener(
                new ViewerSelectionListener(new CustomViewerSorter.LinkWertModiSorter(), treeViewer));

        tc = new TreeViewerColumn(treeViewer, SWT.LEFT, idx++);
        tc.getColumn().setText("Probe");
        tc.setLabelProvider(new CustomColumnLabelProvider.Faehigkeit3EigenschaftProvider());
        tc.getColumn().setWidth(75);
        tc.getColumn().setMoveable(true);

        tc = new TreeViewerColumn(treeViewer, SWT.LEFT, idx++);
        tc.getColumn().setText("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, idx++);
        tc.getColumn().setText("Kosten");
        tc.setLabelProvider(new CustomLabelProvider.LinkKostenProvider());
        tc.getColumn().setWidth(75);
        tc.getColumn().setMoveable(true);

        tc = new TreeViewerColumn(treeViewer, SWT.LEFT, idx++);
        tc.getColumn().setText("Spezi");
        tc.getColumn().setToolTipText("Spezialisierung");
        tc.setLabelProvider(new CustomColumnLabelProvider.LinkTextProvider());
        tc.getColumn().setWidth(75);
        tc.getColumn().setMoveable(true);
        tc.setEditingSupport(new TalentSpezialisierungsEditor(treeViewer,
                Activator.getCurrentCharakter().getProzessor(Talent.class)));

        tc = new TreeViewerColumn(treeViewer, SWT.LEFT, idx++);
        tc.getColumn().setText("Art");
        tc.setLabelProvider(new CustomLabelProvider.TalentArtProvider());
        tc.getColumn().setWidth(75);
        tc.getColumn().setMoveable(true);
        tc.getColumn().addSelectionListener(new ViewerSelectionListener(new ArtSorter(), treeViewer));

        // Inhalt und Sortierung setzen
        TreeObject root = ViewUtils.buildTreeViewAlt(prozessor.getElementBox().getUnmodifiableList(),
                getRegulator(), this.getObjectCreator());
        treeViewer.setContentProvider(new TreeViewContentProvider(root));
        treeViewer.getTree().setSortDirection(SWT.DOWN);
        treeViewer.setSorter(new CustomColumnViewerSorter.NameSorter());
        treeViewer.setInput(root);

        return treeViewer;
    }

    /**
     * Erstellt eine Table + ContextMenu und setzt sie in den View.
     * @param parent
     */
    protected TableViewer createTable(Composite parent) {
        // init Table
        int idx = 0;
        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);

        // Columns setzen
        TableViewerColumn tc = new TableViewerColumn(tableViewer, SWT.LEFT, idx++);
        tableViewer.getTable().setSortColumn(tc.getColumn());
        tc.getColumn().setText("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, idx++);
        tc.getColumn().setText("Sorte");
        tc.getColumn().setWidth(75);
        tc.getColumn().setMoveable(true);
        tc.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                if (((Link) ((TableObject) element).getValue()).getZiel() instanceof Talent) {
                    return ((Talent) ((Link) ((TableObject) element).getValue()).getZiel()).getSorte().toString();
                }
                return ""; //$NON-NLS-1$
            }
        });

        tc = new TableViewerColumn(tableViewer, SWT.LEFT, idx++);
        tc.getColumn().setText("Stufe");
        tc.setLabelProvider(new CustomColumnLabelProvider.LinkWertProvider());
        tc.getColumn().setWidth(75);
        tc.getColumn().setMoveable(true);
        tc.getColumn().addSelectionListener(
                new ViewerSelectionListener(new CustomViewerSorter.LinkWertSorter(), tableViewer));
        tc.setEditingSupport(new LinkWertProzessorEditingSupport(tableViewer, tableViewer.getTable(), false,
                Activator.getCurrentCharakter().getProzessor(Talent.class)));

        tc = new TableViewerColumn(tableViewer, SWT.LEFT, idx++);
        tc.getColumn().setText("Modi");
        tc.setLabelProvider(new CustomLabelProvider.LinkWertModiProvider());
        tc.getColumn().setWidth(75);
        tc.getColumn().setMoveable(true);
        tc.getColumn().addSelectionListener(
                new ViewerSelectionListener(new CustomViewerSorter.LinkWertModiSorter(), tableViewer));

        tc = new TableViewerColumn(tableViewer, SWT.LEFT, idx++);
        tc.getColumn().setText("Probe");
        tc.setLabelProvider(new CustomColumnLabelProvider.Faehigkeit3EigenschaftProvider());
        tc.getColumn().setWidth(75);
        tc.getColumn().setMoveable(true);

        tc = new TableViewerColumn(tableViewer, SWT.LEFT, idx++);
        tc.getColumn().setText("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, idx++);
        tc.getColumn().setText("Kosten");
        tc.setLabelProvider(new CustomLabelProvider.LinkKostenProvider());
        tc.getColumn().setWidth(75);
        tc.getColumn().setMoveable(true);

        tc = new TableViewerColumn(tableViewer, SWT.LEFT, idx++);
        tc.getColumn().setText("Spezi");
        tc.getColumn().setToolTipText("Spezialisierung");
        tc.setLabelProvider(new CustomColumnLabelProvider.LinkTextProvider());
        tc.getColumn().setWidth(75);
        tc.getColumn().setMoveable(true);
        tc.setEditingSupport(new TalentSpezialisierungsEditor(tableViewer,
                Activator.getCurrentCharakter().getProzessor(Talent.class)));

        tc = new TableViewerColumn(tableViewer, SWT.LEFT, idx++);
        tc.getColumn().setText("Art");
        tc.setLabelProvider(new CustomLabelProvider.TalentArtProvider());
        tc.getColumn().setWidth(75);
        tc.getColumn().setMoveable(true);
        tc.getColumn().addSelectionListener(new ViewerSelectionListener(new ArtSorter(), tableViewer));

        // Inhalt und Sortierung setzen
        tableViewer.setContentProvider(new TableViewContentProvider());
        tableViewer.getTable().setSortDirection(SWT.UP);
        tableViewer.setSorter(new CustomColumnViewerSorter.NameSorter());
        tableViewer.setInput(ViewUtils.buildTableViewAlt(prozessor.getElementBox().getUnmodifiableList(),
                getRegulator(), this.getObjectCreator()));

        return tableViewer;
    }

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

    @Override
    public Class getViewedClass() {
        return Talent.class;
    }

    /* (non-Javadoc)
     * @see org.d3s.alricg.generator.prozessor.ProzessorObserver#addElement(java.lang.Object)
     */
    @Override
    public void addElement(Object obj) {

        ViewUtils.addElementToView(this, ((Link) obj), objCreator);

        // Ansicht aktualisieren
        this.refresh();
        updateStatusAnzeigeElemente();
    }

    /* (non-Javadoc)
     * @see org.d3s.alricg.generator.prozessor.ProzessorObserver#removeElement(java.lang.Object)
     */
    @Override
    public void removeElement(Object obj) {
        ViewUtils.removeElementFromView(this, obj);
        this.refresh();
        updateStatusAnzeigeElemente();
    }

    /* (non-Javadoc)
     * @see org.d3s.alricg.generator.prozessor.ProzessorObserver#setData(java.util.List)
     */
    @Override
    public void setData(List list) {
        // TODO Auto-generated method stub
        this.refresh();
        updateStatusAnzeigeElemente();
    }

    /* (non-Javadoc)
     * @see org.d3s.alricg.generator.prozessor.ProzessorObserver#updateElement(java.lang.Object)
     */
    @Override
    public void updateElement(Object obj) {
        this.refresh();
        updateStatusAnzeigeElemente();
    }

    /**
     * Aktualisiert die Status-Anzeige des Views 
     */
    @Override
    protected void updateStatusAnzeigeElemente() {
        String[] str = new String[2];

        str[0] = GESAMT_KOSTEN + CommonUtils.doubleToString(prozessor.getGesamtKosten()) + TAL_GP;
        str[1] = AKTIVIERT
                + ((ExtendedProzessorTalent) prozessor.getExtendedInterface()).getAktivierteTalente().size() + " / "
                + ((ExtendedProzessorTalent) prozessor.getExtendedInterface()).getMaxTalentAktivierung();

        this.updateStatusAnzeigeElemente(str);
    }

    /* (non-Javadoc)
     * @see org.eclipse.ui.part.WorkbenchPart#dispose()
     */
    @Override
    public void dispose() {
        ((BaseProzessorObserver) Activator.getCurrentCharakter().getProzessor(Talent.class))
                .unregisterObserver(this);
        super.dispose();
    }

    public static class ArtSorter extends CreatableViewerSorter {
        @Override
        public Comparable getComparable(Object obj) {
            return ((Talent) getCharElement(obj)).getArt().toString();
        }
    }

    public static class SorteSorter extends CreatableViewerSorter {
        @Override
        public Comparable getComparable(Object obj) {
            return ((Talent) getCharElement(obj)).getSorte().toString();
        }
    }
}