blob: ff3e732fbe214a90a387d6d5da7b80c867165218 [file] [log] [blame]
/*
* 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 org.apache.uima.ruta.statistics;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.uima.cas.CAS;
import org.apache.uima.cas.FSIterator;
import org.apache.uima.cas.FeatureStructure;
import org.apache.uima.cas.Type;
import org.apache.uima.caseditor.editor.AnnotationEditor;
import org.apache.uima.caseditor.editor.ICasDocument;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.part.Page;
public class StatisticsViewPage extends Page implements IDoubleClickListener,
ISelectionChangedListener, ISelectionListener {
private static final String TYPE = "org.apache.uima.ruta.type.Statistics";
private int current;
private Map<String, Image> images;
private TableViewer viewer;
private AnnotationEditor editor;
private ICasDocument document;
public StatisticsViewPage(AnnotationEditor editor) {
super();
this.editor = editor;
this.document = editor.getDocument();
}
@Override
public void dispose() {
super.dispose();
if (images != null) {
for (Image each : images.values()) {
each.dispose();
}
}
}
private void initImages() {
images = new HashMap<String, Image>();
ImageDescriptor desc;
Image image;
String name;
// desc = RutaCEVPlugin.getImageDescriptor("/icons/accept.png");
// image = desc.createImage();
// name = "matched";
// images.put(name, image);
}
public Image getImage(String name) {
if (images == null) {
initImages();
}
return images.get(name);
}
@Override
public void createControl(Composite parent) {
createViewer(parent);
CAS cas = document.getCAS();
Type type = cas.getTypeSystem().getType(TYPE);
getSite().setSelectionProvider(viewer);
getSite().getPage().addSelectionListener(this);
if (type != null) {
FSIterator<FeatureStructure> allIndexedFS = cas.getIndexRepository().getAllIndexedFS(type);
if (allIndexedFS.isValid()) {
inputChange(allIndexedFS.get());
}
}
viewer.refresh();
}
private void createViewer(Composite parent) {
viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION);
createColumns(viewer);
viewer.setContentProvider(new StatisticsContentProvider());
viewer.setLabelProvider(new StatisticsLabelProvider(this));
}
// This will create the columns for the table
private void createColumns(final TableViewer viewer) {
Listener sortListener = new Listener() {
public void handleEvent(Event e) {
// determine new sort column and direction
TableColumn sortColumn = viewer.getTable().getSortColumn();
TableColumn currentColumn = (TableColumn) e.widget;
int dir = viewer.getTable().getSortDirection();
if (sortColumn == currentColumn) {
dir = dir == SWT.UP ? SWT.DOWN : SWT.UP;
} else {
viewer.getTable().setSortColumn(currentColumn);
dir = SWT.UP;
}
// sort the data based on column and direction
final int index = Arrays.asList(viewer.getTable().getColumns()).indexOf(currentColumn);
@SuppressWarnings("unchecked")
List<StatisticsEntry> input = (List<StatisticsEntry>) viewer.getInput();
Collections.sort(input, new EntryComparator(index, dir == SWT.UP));
viewer.getTable().setSortDirection(dir);
viewer.getTable().clearAll();
viewer.setInput(input);
}
};
String[] titles = { "Name", "Total", "Amount", "Each" };
int[] bounds = { 100, 100, 75, 100 };
TableViewerColumn column = null;
for (int i = 0; i < titles.length; i++) {
column = new TableViewerColumn(viewer, SWT.NONE);
TableColumn tc = column.getColumn();
tc.setText(titles[i]);
tc.setWidth(bounds[i]);
tc.setResizable(true);
tc.setMoveable(true);
tc.addListener(SWT.Selection, sortListener);
}
Table table = viewer.getTable();
table.setHeaderVisible(true);
table.setLinesVisible(true);
table.setSortColumn(column.getColumn());
table.setSortDirection(SWT.UP);
}
/**
* Passing the focus request to the viewer's control.
*/
@Override
public void setFocus() {
viewer.getControl().setFocus();
}
@Override
public Control getControl() {
return viewer.getControl();
}
public void doubleClick(DoubleClickEvent event) {
}
public void inputChange(Object newInput) {
if (newInput instanceof FeatureStructure) {
viewer.setInput(StatisticsEntry.createEntries((FeatureStructure) newInput));
}
}
public void selectionChanged(SelectionChangedEvent event) {
}
public void selectionChanged(IWorkbenchPart arg0, ISelection arg1) {
// TODO Auto-generated method stub
}
}