org.dynami.views.TracesView.java Source code

Java tutorial

Introduction

Here is the source code for org.dynami.views.TracesView.java

Source

/*
 * Copyright 2013 Alessandro Atria
 *
 * Licensed 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.dynami.views;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.dynami.Activator;
import org.dynami.IContentViewManager;
import org.dynami.core.service.ITraceManager;
import org.dynami.core.util.DUtils;
import org.dynami.msg.Trace;
import org.dynami.services.EDispatcher;
import org.dynami.services.ETraceService;
import org.dynami.utils.RCPUtils;
import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.CellLabelProvider;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.TraverseEvent;
import org.eclipse.swt.events.TraverseListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.layout.RowData;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.part.ViewPart;
import org.eclipse.wb.swt.SWTResourceManager;

public class TracesView extends ViewPart implements IContentViewManager {
    public static final String ID = "org.dynami.views.TracesView";

    private final ETraceService traceService = RCPUtils.getService(ETraceService.class);

    private final IPreferenceStore preferenceStore = Activator.getDefault().getPreferenceStore();
    private TableViewer tableViewer;
    private Text textTraceFilter;
    private TextFilter traceFilter = new TextFilter();
    private final VerboseFilter infoFilter = new VerboseFilter(ITraceManager.INFO);
    private final VerboseFilter warnFilter = new VerboseFilter(ITraceManager.WARN);
    private final VerboseFilter errorFilter = new VerboseFilter(ITraceManager.ERROR);
    private final VerboseFilter debugFilter = new VerboseFilter(ITraceManager.DEBUG);
    private final VerboseFilter marketFilter = new VerboseFilter(ITraceManager.MARKET);

    private List<Trace> list = new ArrayList<Trace>();

    public TracesView() {

    }

    private final EDispatcher.EServiceListener<Trace> traceListener = new EDispatcher.EServiceListener<Trace>() {
        @Override
        public void update(final Trace msg) {
            //         System.out.println("TracesView.enclosing_method("+msg.line+")");
            Display.getDefault().asyncExec(new Runnable() {
                @Override
                public void run() {
                    tableViewer.add(msg);
                    tableViewer.getTable().setSelection(tableViewer.getTable().getItemCount() - 1);
                }
            });
        }
    };

    @Override
    public void createPartControl(Composite parent) {
        Composite container = new Composite(parent, SWT.NONE);
        container.setLayout(new FormLayout());

        Composite fltr_composite = new Composite(container, SWT.NONE);
        fltr_composite.setLayout(new RowLayout(SWT.HORIZONTAL));
        FormData fd_fltr_composite = new FormData();
        fd_fltr_composite.bottom = new FormAttachment(0, 29);
        fd_fltr_composite.top = new FormAttachment(0);
        fd_fltr_composite.left = new FormAttachment(0);

        fltr_composite.setLayoutData(fd_fltr_composite);

        Composite tbl_composite = new Composite(container, SWT.NONE);

        fd_fltr_composite.right = new FormAttachment(tbl_composite, 0, SWT.RIGHT);
        TableColumnLayout tcl_layout = new TableColumnLayout();
        tbl_composite.setLayout(tcl_layout);

        tableViewer = new TableViewer(tbl_composite, SWT.BORDER | SWT.FULL_SELECTION | SWT.V_SCROLL);
        tableViewer.setContentProvider(ArrayContentProvider.getInstance());
        traceFilter = new TextFilter();
        tableViewer.addFilter(traceFilter);

        FormData fd_table = new FormData();
        fd_table.top = new FormAttachment(fltr_composite, 6);
        fd_table.bottom = new FormAttachment(100);

        final Button btnFiltermarket = new Button(fltr_composite, SWT.TOGGLE);
        btnFiltermarket.setSelection(true);
        btnFiltermarket.setText("");
        btnFiltermarket.setToolTipText("Filter market");
        btnFiltermarket.setImage(Activator.getImageDescriptor("/icons/trace_market.gif").createImage());
        btnFiltermarket.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                if (((Button) e.getSource()).getSelection()) {
                    tableViewer.removeFilter(marketFilter);
                    tableViewer.refresh();
                } else {
                    tableViewer.addFilter(marketFilter);
                    tableViewer.refresh();
                }
            }
        });

        final Button btnFilterinfo = new Button(fltr_composite, SWT.TOGGLE);
        btnFilterinfo.setSelection(true);
        btnFilterinfo.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                if (((Button) e.getSource()).getSelection()) {
                    tableViewer.removeFilter(infoFilter);
                    tableViewer.refresh();
                } else {
                    tableViewer.addFilter(infoFilter);
                    tableViewer.refresh();
                }
            }
        });
        btnFilterinfo.setToolTipText("Info Filter");
        btnFilterinfo.setText("");
        btnFilterinfo.setImage(Activator.getImageDescriptor("/icons/trace_info.gif").createImage());

        Button btnFilterwarn = new Button(fltr_composite, SWT.TOGGLE);
        btnFilterwarn.setSelection(true);
        btnFilterwarn.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                if (((Button) e.getSource()).getSelection()) {
                    tableViewer.removeFilter(warnFilter);
                    tableViewer.refresh();
                } else {
                    tableViewer.addFilter(warnFilter);
                    tableViewer.refresh();
                }
            }
        });
        btnFilterwarn.setText("");
        btnFilterwarn.setToolTipText("Warning filter");
        btnFilterwarn.setImage(Activator.getImageDescriptor("/icons/trace_warn.gif").createImage());

        Button btnFiltererror = new Button(fltr_composite, SWT.TOGGLE);
        btnFiltererror.setSelection(true);
        btnFiltererror.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                if (((Button) e.getSource()).getSelection()) {
                    tableViewer.removeFilter(errorFilter);
                    tableViewer.refresh();
                } else {
                    tableViewer.addFilter(errorFilter);
                    tableViewer.refresh();
                }
            }
        });
        btnFiltererror.setToolTipText("Error filter");
        btnFiltererror.setImage(Activator.getImageDescriptor("/icons/trace_error.gif").createImage());
        btnFiltererror.setText("");

        Button btnFilterdebug = new Button(fltr_composite, SWT.TOGGLE);
        btnFilterdebug.setSelection(true);
        btnFilterdebug.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                if (((Button) e.getSource()).getSelection()) {
                    tableViewer.removeFilter(debugFilter);
                } else {
                    tableViewer.addFilter(debugFilter);
                }
            }
        });
        btnFilterdebug.setToolTipText("Debug filter");
        btnFilterdebug.setImage(Activator.getImageDescriptor("/icons/trace_debug.gif").createImage());
        btnFilterdebug.setText("");

        Label label = new Label(fltr_composite, SWT.SEPARATOR | SWT.VERTICAL);
        label.setLayoutData(new RowData(2, 25));

        textTraceFilter = new Text(fltr_composite, SWT.BORDER | SWT.WRAP);
        textTraceFilter.setLayoutData(new RowData(281, SWT.DEFAULT));
        textTraceFilter.setText("");
        textTraceFilter.addTraverseListener(new TraverseListener() {
            @Override
            public void keyTraversed(TraverseEvent event) {
                if (event.detail == SWT.TRAVERSE_RETURN) {
                    traceFilter.setSearchText(textTraceFilter.getText());
                    tableViewer.addFilter(traceFilter);
                }
            }
        });

        Button btnSearch = new Button(fltr_composite, SWT.NONE);
        btnSearch.setToolTipText("Search");
        btnSearch.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                traceFilter.setSearchText(textTraceFilter.getText());
                tableViewer.addFilter(traceFilter);
            }
        });
        btnSearch.setImage(Activator.getImageDescriptor("/icons/trace_search.gif").createImage());

        Label label_1 = new Label(fltr_composite, SWT.SEPARATOR | SWT.VERTICAL);
        label_1.setLayoutData(new RowData(2, 24));

        Button btnRemove = new Button(fltr_composite, SWT.NONE);
        btnRemove.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                textTraceFilter.setText("");
                traceFilter.setSearchText("");
                tableViewer.removeFilter(traceFilter);
            }
        });
        btnRemove.setToolTipText("Remove");
        btnRemove.setImage(Activator.getImageDescriptor("/icons/trace_remove.gif").createImage());
        btnRemove.setText("");
        fd_table.left = new FormAttachment(0);
        fd_table.right = new FormAttachment(100);
        tbl_composite.setLayoutData(fd_table);

        tableViewer.getTable().setHeaderVisible(true);
        tableViewer.getTable().setLinesVisible(true);

        final TableViewerColumn tblclmnDate = new TableViewerColumn(tableViewer, SWT.NONE);
        tblclmnDate.getColumn().setText("Date");
        tcl_layout.setColumnData(tblclmnDate.getColumn(), new ColumnWeightData(10, true));
        tblclmnDate.setLabelProvider(new CellLabelProvider() {
            @Override
            public void update(ViewerCell cell) {
                Trace t = (Trace) cell.getElement();
                cell.setText(DUtils.LONG_DATE_FORMAT.format(new Date(t.time)));
                cell.setForeground(getColor(t.type));
            }
        });

        final TableViewerColumn tblclmnType = new TableViewerColumn(tableViewer, SWT.NONE);
        tcl_layout.setColumnData(tblclmnType.getColumn(), new ColumnWeightData(10, true));
        tblclmnType.getColumn().setText("Type");
        tblclmnType.setLabelProvider(new CellLabelProvider() {
            @Override
            public void update(ViewerCell cell) {
                Trace t = (Trace) cell.getElement();
                cell.setText(ITraceManager.KEYS.type(t.type));
                cell.setForeground(getColor(t.type));
            }
        });

        final TableViewerColumn tblclmnPhase = new TableViewerColumn(tableViewer, SWT.NONE);
        tblclmnPhase.getColumn().setText("Phase");
        tcl_layout.setColumnData(tblclmnPhase.getColumn(), new ColumnWeightData(20, true));
        tblclmnPhase.setLabelProvider(new CellLabelProvider() {
            @Override
            public void update(ViewerCell cell) {
                Trace t = (Trace) cell.getElement();
                cell.setText(t.phase);
                cell.setForeground(getColor(t.type));
            }
        });

        final TableViewerColumn tblclmnTrace = new TableViewerColumn(tableViewer, SWT.NONE);
        tblclmnTrace.getColumn().setText("Trace");
        tcl_layout.setColumnData(tblclmnTrace.getColumn(), new ColumnWeightData(60, true));
        tblclmnTrace.setLabelProvider(new CellLabelProvider() {
            @Override
            public void update(ViewerCell cell) {
                Trace t = (Trace) cell.getElement();
                cell.setText(t.line);
                cell.setForeground(getColor(t.type));
            }
        });

        traceService.dispatch().subscribe(traceListener);
    }

    @Override
    public void setFocus() {
    }

    public Color getColor(int type) {
        switch (type) {
        case ITraceManager.INFO:
            return getTraceColor(preferenceStore.getString(ITraceManager.KEYS.INFO_COLOR));
        case ITraceManager.WARN:
            return getTraceColor(preferenceStore.getString(ITraceManager.KEYS.WARN_COLOR));
        case ITraceManager.ERROR:
            return getTraceColor(preferenceStore.getString(ITraceManager.KEYS.ERROR_COLOR));
        case ITraceManager.DEBUG:
            return getTraceColor(preferenceStore.getString(ITraceManager.KEYS.DEBUG_COLOR));
        case ITraceManager.MARKET:
            return getTraceColor(preferenceStore.getString(ITraceManager.KEYS.MARKET_COLOR));
        default:
            return null;
        }
    }

    private Color getTraceColor(String in) {
        String[] tmp = in.split(",");
        RGB rgb = new RGB(Integer.parseInt(tmp[0]), Integer.parseInt(tmp[1]), Integer.parseInt(tmp[2]));
        return SWTResourceManager.getColor(rgb);
    }

    @Override
    public void dispose() {
        traceService.dispatch().unsubscribe(traceListener);
        super.dispose();
    }

    @Override
    public void reset() throws Exception {
        getSite().getShell().getDisplay().asyncExec(new Runnable() {
            @Override
            public void run() {
                list.clear();
                tableViewer.getTable().removeAll();
                tableViewer.refresh();
            }
        });
    }
}

class TextFilter extends ViewerFilter {
    private String searchString;

    public void setSearchText(String s) {
        // Search must be a substring of the existing value
        this.searchString = ".*" + s + ".*";
    }

    @Override
    public boolean select(Viewer viewer, Object parentElement, Object element) {
        if (searchString == null || searchString.length() == 0) {
            return true;
        }
        Trace trace = (Trace) element;
        if (trace.line.matches(searchString)) {
            return true;
        }
        return false;
    }
}

class VerboseFilter extends ViewerFilter {
    final int verbose;

    public VerboseFilter(int verbose) {
        this.verbose = verbose;
    }

    @Override
    public boolean select(Viewer viewer, Object parentElement, Object element) {
        Trace trace = (Trace) element;
        if (verbose == trace.type) {
            return false;
        }
        return true;
    }
}