net.yatomiya.nicherry.ui.views.board.BoardViewer.java Source code

Java tutorial

Introduction

Here is the source code for net.yatomiya.nicherry.ui.views.board.BoardViewer.java

Source

/*******************************************************************************
 * Copyright (c) 2014,2015 Hideki Yatomi
 * 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
 ******************************************************************************/
package net.yatomiya.nicherry.ui.views.board;

import java.util.*;
import java.util.List;
import org.eclipse.e4.core.contexts.*;
import org.eclipse.e4.ui.model.application.ui.basic.*;
import org.eclipse.e4.ui.workbench.modeling.*;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
import net.yatomiya.e4.ui.viewer.*;
import net.yatomiya.e4.util.*;
import net.yatomiya.nicherry.model.bbs.*;
import net.yatomiya.nicherry.services.bbs.*;
import net.yatomiya.nicherry.services.part.*;

public class BoardViewer extends TableViewer {
    public static final String COLUMN_TITLE = "title";
    public static final String COLUMN_NO = "no";
    public static final String COLUMN_MESSAGE_COUNT = "message_count";
    public static final String COLUMN_MESSAGE_COUNT_IN_DAT = "message_count_in_dat";
    public static final String COLUMN_MESSAGE_NEW_ARRIVAL_COUNT = "message_new_arrival_count";
    public static final String COLUMN_CREATE_TIME = "create_time";

    private IEclipseContext context;
    private BBSService bbsSrv;

    private Composite parentComposite;
    private ColumnViewerComparator comparator;

    private TableViewerColumnManager columnManager;

    private boolean isShowThreadItem;
    private boolean isShowKakoThreadItem;

    public BoardViewer(IEclipseContext context, Composite parentComposite) {
        super(parentComposite, SWT.MULTI | SWT.FULL_SELECTION);

        this.context = context;
        this.bbsSrv = context.get(BBSService.class);
        this.parentComposite = parentComposite;

        getTable().setHeaderVisible(true);

        comparator = new ColumnViewerComparator(this);
        setComparator(comparator);

        isShowThreadItem = true;
        isShowKakoThreadItem = true;

        setContentProvider(new ArrayContentProvider() {
            @Override
            public Object[] getElements(Object inputElement) {
                MBoard board = (MBoard) inputElement;
                List<MThreadItem> list = new ArrayList<>();
                list.addAll(board.getThreadItems());
                list.addAll(board.getKakoThreadItems());
                return list.toArray();
            }
        });

        addPostSelectionChangedListener(new ISelectionChangedListener() {
            @Override
            public void selectionChanged(SelectionChangedEvent event) {
                context.get(ESelectionService.class).setSelection(event.getSelection());
            }
        });

        addOpenListener(new IOpenListener() {
            @Override
            public void open(OpenEvent event) {
                MPart mPart = context.get(MPart.class);
                for (Object it : SelectionUtils.toList(event.getSelection())) {
                    if (it instanceof MThreadItem) {
                        MThreadItem item = (MThreadItem) it;
                        NPartUtils.openThread(item, true);
                    }
                }
            }
        });

        addFilter(new ViewerFilter() {
            @Override
            public boolean select(Viewer viewer, Object parentElement, Object element) {
                MThreadItem item = (MThreadItem) element;
                if (!isShowThreadItem && !item.isKako())
                    return false;
                if (!isShowKakoThreadItem && item.isKako())
                    return false;
                return true;
            }
        });

        columnManager = new TableViewerColumnManager(this);
        TableViewerColumn vc;

        columnManager.createColumn(COLUMN_NO, SWT.RIGHT, "No.", null, 32, new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                MThreadItem item = (MThreadItem) element;
                if (item.isKako())
                    return "";
                return String.valueOf(item.getNo());
            }
        }, new Comparator<MThreadItem>() {
            @Override
            public int compare(MThreadItem o1, MThreadItem o2) {
                return o1.getNo() - o2.getNo();
            }
        });

        columnManager.createTextColumn(COLUMN_TITLE, SWT.LEFT, "", null, 320,
                new ColumnLabelProvider() {
                    @Override
                    public String getText(Object element) {
                        MThreadItem item = (MThreadItem) element;
                        if (item.isKako())
                            return "?" + item.getName();
                        return item.getName();
                    }
                });

        columnManager.createColumn(COLUMN_MESSAGE_COUNT, SWT.RIGHT, "", null, 64,
                new ColumnLabelProvider() {
                    @Override
                    public String getText(Object element) {
                        MThreadItem item = (MThreadItem) element;
                        return String.valueOf(item.getMessageCount());
                    }
                }, new Comparator<MThreadItem>() {
                    @Override
                    public int compare(MThreadItem o1, MThreadItem o2) {
                        return o1.getMessageCount() - o2.getMessageCount();
                    }
                });

        columnManager.createColumn(COLUMN_MESSAGE_COUNT_IN_DAT, SWT.RIGHT, "", null, 48,
                new ColumnLabelProvider() {
                    @Override
                    public String getText(Object element) {
                        MThreadItem item = (MThreadItem) element;
                        int v = item.getMessageCountInDat();
                        if (v > 0)
                            return String.valueOf(v);
                        return "";
                    }
                }, new Comparator<MThreadItem>() {
                    @Override
                    public int compare(MThreadItem o1, MThreadItem o2) {
                        return o1.getMessageCountInDat() - o2.getMessageCountInDat();
                    }
                });

        columnManager.createColumn(COLUMN_MESSAGE_NEW_ARRIVAL_COUNT, SWT.RIGHT, "?", null, 48,
                new ColumnLabelProvider() {
                    @Override
                    public String getText(Object element) {
                        MThreadItem item = (MThreadItem) element;
                        int v = item.getMessageCountInDat() - item.getLastMessageCountInDat();
                        if (v > 0)
                            return String.valueOf(v);
                        return "";
                    }
                }, new Comparator<MThreadItem>() {
                    @Override
                    public int compare(MThreadItem o1, MThreadItem o2) {
                        return (o1.getMessageCountInDat() - o1.getLastMessageCountInDat())
                                - (o2.getMessageCountInDat() - o2.getLastMessageCountInDat());
                    }
                });

        columnManager.createColumn(COLUMN_CREATE_TIME, SWT.LEFT, "?", null, 128,
                new ColumnLabelProvider() {
                    @Override
                    public String getText(Object element) {
                        MThreadItem item = (MThreadItem) element;
                        String key = item.getThreadId().getIdValue();
                        if (key.startsWith("924")) {
                            return "924";
                        }
                        return StringUtils.formatDate(new Date(Long.valueOf(key) * 1000));
                    }
                }, new Comparator<MThreadItem>() {
                    @Override
                    public int compare(MThreadItem o1, MThreadItem o2) {
                        return (int) (Long.valueOf(o1.getThreadId().getIdValue())
                                - Long.valueOf(o2.getThreadId().getIdValue()));
                    }
                });
    }

    public TableViewerColumnManager getColumnManager() {
        return columnManager;
    }

    public boolean isShowThreadItem() {
        return isShowThreadItem;
    }

    public void setShowThreadItem(boolean value) {
        isShowThreadItem = value;
        refresh();
    }

    public boolean isShowKakoThreadItem() {
        return isShowKakoThreadItem;
    }

    public void setShowKakoThreadItem(boolean value) {
        isShowKakoThreadItem = value;
        refresh();
    }
}