Java tutorial
/******************************************************************************* * 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(); } }