com.nokia.s60tools.imaker.internal.viewers.DebugTab.java Source code

Java tutorial

Introduction

Here is the source code for com.nokia.s60tools.imaker.internal.viewers.DebugTab.java

Source

/*
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:
*
*/

package com.nokia.s60tools.imaker.internal.viewers;

import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.eclipse.emf.common.util.EList;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Table;
import org.eclipse.ui.PlatformUI;

import com.nokia.s60tools.imaker.IMakerKeyConstants;
import com.nokia.s60tools.imaker.IMakerPlugin;
import com.nokia.s60tools.imaker.ImageFlasherHelpContextIDs;
import com.nokia.s60tools.imaker.Messages;
import com.nokia.s60tools.imaker.UIConfiguration;
import com.nokia.s60tools.imaker.UITarget;
import com.nokia.s60tools.imaker.internal.managers.ProjectManager;
import com.nokia.s60tools.imaker.internal.model.FileToImage;
import com.nokia.s60tools.imaker.internal.model.ImakerProperties;
import com.nokia.s60tools.imaker.internal.model.iContent.IContentFactory;
import com.nokia.s60tools.imaker.internal.model.iContent.IMAGESECTION;
import com.nokia.s60tools.imaker.internal.model.iContent.IbyEntry;
import com.nokia.s60tools.imaker.internal.model.iContent.ImageContent;
import com.nokia.s60tools.imaker.internal.providers.CheckBoxEditingSupport;
import com.nokia.s60tools.imaker.internal.providers.ComboEditingSupport;
import com.nokia.s60tools.imaker.internal.providers.TextEditingSupport;

public class DebugTab extends CTabItem implements IPropertyViewer {
    public static final String CHECKED_IMAGE = "checked";
    public static final String UNCHECKED_IMAGE = "unchecked";
    public static final String WARNING_IMAGE = "warning";
    public static final String ERROR_IMAGE = "error";
    public static final String REL_PATTERN = ".*epoc32.release.+?(urel).*";
    public static final String DEBUG_PATTERN = ".*epoc32.release.+?(udeb).*";

    // For the checkbox images
    private static ImageRegistry imageRegistry = IMakerPlugin.getDefault().getImageRegistry();

    private IMakerTabsViewer tabsViewer;
    private ProjectManager projectManager;
    private TableViewer tableViewer;
    private PreferencesTab mainTab;
    private IContentFactory factory;

    static {
        String iconPath = "icons/";
        imageRegistry.put(CHECKED_IMAGE, IMakerPlugin.getImageDescriptor(iconPath + CHECKED_IMAGE + ".gif"));
        imageRegistry.put(UNCHECKED_IMAGE, IMakerPlugin.getImageDescriptor(iconPath + UNCHECKED_IMAGE + ".gif"));
        imageRegistry.put(WARNING_IMAGE, IMakerPlugin.getImageDescriptor(iconPath + WARNING_IMAGE + ".gif"));
        imageRegistry.put(ERROR_IMAGE, IMakerPlugin.getImageDescriptor(iconPath + ERROR_IMAGE + ".gif"));
    }

    public DebugTab(CTabFolder parent, int style, IMakerTabsViewer viewer, PreferencesTab main) {
        super(parent, style);
        this.tabsViewer = viewer;
        this.projectManager = tabsViewer.getProjectManager();
        setControl(createControl(parent));
        this.mainTab = main;
        this.factory = IContentFactory.eINSTANCE;
    }

    private void duplicateSelection() {
        ISelection selection = tableViewer.getSelection();
        if (selection != null) {
            IStructuredSelection ss = (IStructuredSelection) selection;
            IbyEntry item = (IbyEntry) ss.getFirstElement();
            IbyEntry copy = factory.createIbyEntry();
            copy.setAction(item.getAction());
            copy.setEnabled(item.isEnabled());
            copy.setFile(item.getFile());
            copy.setTarget(item.getTarget());
            copy.setLocation(item.getLocation());
            ImageContent ic = getInput();
            int index = ic.getEntries().indexOf(item);
            ic.getEntries().add(index + 1, copy);
            tableViewer.refresh();
        }
    }

    private void deleteSelection() {
        ISelection selection = tableViewer.getSelection();
        if (selection != null) {
            IStructuredSelection ss = (IStructuredSelection) selection;
            Object[] objects = ss.toArray();
            for (int i = 0; i < objects.length; i++) {
                IbyEntry fe = (IbyEntry) objects[i];
                ImageContent ic = getInput();
                ic.getEntries().remove(fe);
            }
            tableViewer.refresh();
        }
    }

    private Control createControl(CTabFolder parent) {
        Composite top = new Composite(parent, SWT.NONE);
        top.setLayout(new GridLayout(2, false));
        top.setLayoutData(new GridData(GridData.FILL_BOTH));
        setHelpForControl(top, ImageFlasherHelpContextIDs.IMAKERDIALOG_CONTENTTAB);

        // create table
        Composite tableComp = getNewComposite(top);
        Table table = new Table(tableComp, SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI);
        GridData gridData = new GridData(GridData.FILL, GridData.FILL, true, true);
        gridData.heightHint = 180;
        table.setLayoutData(gridData);
        table.addKeyListener(new KeyListener() {

            public void keyReleased(KeyEvent e) {
                if ((e.character == ' ')) {
                    StructuredSelection ss = (StructuredSelection) tableViewer.getSelection();
                    Iterator it = ss.iterator();
                    while (it.hasNext()) {
                        IbyEntry entry = (IbyEntry) it.next();
                        entry.setEnabled(!entry.isEnabled());
                        tableViewer.refresh(entry);
                    }
                }
            }

            public void keyPressed(KeyEvent e) {
            }
        });

        // create controls
        Composite controls = getNewComposite(top);
        Button button = new Button(controls, SWT.PUSH | SWT.LEFT);
        button.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        button.setText(Messages.getString("DebugTab.2"));
        button.setToolTipText(Messages.getString("DebugTab.3"));
        button.addSelectionListener(new SelectionListener() {

            public void widgetSelected(SelectionEvent e) {
                IbyEntry entry = factory.createIbyEntry();
                ImageContent input = getInput();
                FileToImage file = new FileToImage();
                AddEditFileToTransferDialog dialog = new AddEditFileToTransferDialog(getControl().getShell(), file);
                dialog.setTitle(Messages.getString("FileTransferTab.8"));
                if (dialog.open() != Window.OK) {
                    return;
                }
                entry.setEnabled(file.getEnabled());
                entry.setFile(file.getHostPath().substring(2));
                entry.setTarget(file.getTargetPath());
                input.getEntries().add(entry);
                tableViewer.refresh();
            }

            public void widgetDefaultSelected(SelectionEvent e) {
                widgetSelected(e);
            }
        });

        button = new Button(controls, SWT.PUSH | SWT.LEFT);
        button.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        button.setText(Messages.getString("DebugTab.4"));
        button.setToolTipText(Messages.getString("DebugTab.5"));
        button.addSelectionListener(new SelectionListener() {

            public void widgetSelected(SelectionEvent e) {
                deleteSelection();
            }

            public void widgetDefaultSelected(SelectionEvent e) {
                widgetSelected(e);
            }
        });

        button = new Button(controls, SWT.PUSH | SWT.LEFT);
        button.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        button.setText(Messages.getString("DebugTab.24"));
        button.setToolTipText(Messages.getString("DebugTab.25"));
        button.addSelectionListener(new SelectionListener() {

            public void widgetSelected(SelectionEvent e) {
                duplicateSelection();
            }

            public void widgetDefaultSelected(SelectionEvent e) {
                widgetSelected(e);
            }
        });

        button = new Button(controls, SWT.PUSH | SWT.LEFT);
        button.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        button.setText(Messages.getString("DebugTab.6"));
        button.setToolTipText(Messages.getString("DebugTab.7"));
        button.addSelectionListener(new SelectionListener() {

            public void widgetSelected(SelectionEvent e) {
                ImageContent input = getInput();
                if (input != null) {

                    if (!input.getEntries().isEmpty()) {
                        boolean confirm = MessageDialog.openQuestion(getControl().getShell(), "Remove Entries",
                                "Clear the list before adding new entries, if any?");
                        if (confirm) {
                            input.getEntries().clear();
                        }
                    }
                    projectManager.populate(input);
                    tableViewer.refresh();
                }
            }

            public void widgetDefaultSelected(SelectionEvent e) {
                widgetSelected(e);
            }
        });

        Composite enableButtons = new Composite(top, SWT.NONE);
        GridLayout layout = new GridLayout(2, false);
        layout.marginWidth = 0;
        layout.marginHeight = 0;
        enableButtons.setLayout(layout);
        enableButtons.setLayoutData(new GridData());

        button = new Button(enableButtons, SWT.PUSH | SWT.LEFT);
        button.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        button.setText(Messages.getString("DebugTab.8"));
        button.setToolTipText(Messages.getString("DebugTab.9"));
        button.addSelectionListener(new SelectionListener() {

            public void widgetSelected(SelectionEvent e) {
                ImageContent ic = getInput();
                if (ic != null) {
                    for (IbyEntry entry : ic.getEntries()) {
                        entry.setEnabled(true);
                    }
                    tableViewer.refresh();
                }
            }

            public void widgetDefaultSelected(SelectionEvent e) {
                widgetSelected(e);
            }
        });

        button = new Button(enableButtons, SWT.PUSH | SWT.LEFT);
        button.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        button.setText(Messages.getString("DebugTab.10"));
        button.setToolTipText(Messages.getString("DebugTab.11"));
        button.addSelectionListener(new SelectionListener() {

            public void widgetSelected(SelectionEvent e) {
                ImageContent ic = getInput();
                if (ic != null) {
                    for (IbyEntry entry : ic.getEntries()) {
                        entry.setEnabled(false);
                    }
                    tableViewer.refresh();
                }
            }

            public void widgetDefaultSelected(SelectionEvent e) {
                widgetSelected(e);
            }
        });

        tableViewer = new TableViewer(table);

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

        tableViewer.setContentProvider(new DebugContentProvider());

        createColumns(tableViewer);

        tableViewer.getTable().addKeyListener(new KeyListener() {

            public void keyReleased(KeyEvent e) {
                if (e.character == SWT.DEL) {
                    deleteSelection();
                }
            }

            public void keyPressed(KeyEvent e) {
            }
        });
        tableViewer.setInput(getDefaultInput());
        return top;
    }

    private void setHelpForControl(Control container, String id) {
        PlatformUI.getWorkbench().getHelpSystem().setHelp(container, id);
    }

    private Object getDefaultInput() {
        IContentFactory factory = IContentFactory.eINSTANCE;
        ImageContent ic = factory.createImageContent();
        return ic;
    }

    private Composite getNewComposite(Composite top) {
        Composite comp = new Composite(top, SWT.NONE);
        GridLayout layout = new GridLayout(1, true);
        layout.marginWidth = 0;
        layout.marginHeight = 0;
        comp.setLayout(layout);
        GridData layoutData = new GridData(GridData.FILL_BOTH);
        layoutData.grabExcessHorizontalSpace = true;
        comp.setLayoutData(layoutData);
        return comp;
    }

    private void createColumns(TableViewer viewer) {
        int columnSizes[] = { 20, 50, 130, 130, 60, 60 };

        TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
        column.getColumn().setText(Messages.getString("DebugTab.12"));
        column.getColumn().setToolTipText(Messages.getString("DebugTab.13"));
        column.getColumn().setWidth(columnSizes[0]);
        column.setLabelProvider(new ColumnLabelProvider() {

            @Override
            public Image getImage(Object element) {
                if (isWarning(element)) {
                    return imageRegistry.get(WARNING_IMAGE);
                } else if (isError(element)) {
                    return imageRegistry.get(ERROR_IMAGE);
                } else {
                    return null;
                }
            }

            private IbyEntry getEntry(Object element) {
                return (IbyEntry) element;
            }

            private boolean isWarning(Object element) {
                IbyEntry entry = getEntry(element);
                String location = " " + entry.getLocation().toString().toUpperCase() + " ";
                String targets[] = mainTab.getSelectedTargets();
                UIConfiguration pr = mainTab.getSelectedProduct();
                for (int i = 0; i < targets.length; i++) {
                    String t = targets[i];
                    UITarget target = pr.getTarget(t);
                    if (target != null && target.getSteps() != null) {
                        int index = target.getSteps().indexOf(location);
                        if (index != -1) {
                            return false;
                        }
                    }
                }
                if (entry.getLocation() != IMAGESECTION.ANY) {
                    mainTab.addTarget(entry.getLocation().getName());
                }
                return false;
            }

            private boolean isError(Object element) {
                IbyEntry entry = getEntry(element);
                String path = projectManager.getRoot() + entry.getFile();
                File f = new File(path);
                if (!f.exists()) {
                    String message = Messages.getString("DebugTab.1");
                    entry.setStatusMessage(message.replace("xxx", f.getAbsolutePath()));
                    return true;
                }
                return false;
            }

            @Override
            public String getText(Object element) {
                if (isWarning(element) || isError(element)) {
                    return getEntry(element).getStatusMessage();
                }
                return "";
            }

        });
        //      column.setEditingSupport(new CheckBoxEditingSupport(viewer, 0));

        column = new TableViewerColumn(viewer, SWT.CENTER);
        column.getColumn().setText(Messages.getString("DebugTab.14"));
        column.getColumn().setToolTipText(Messages.getString("DebugTab.15"));
        column.getColumn().setWidth(columnSizes[1]);
        column.setLabelProvider(new ColumnLabelProvider() {

            @Override
            public Image getImage(Object element) {
                IbyEntry ie = (IbyEntry) element;
                String key = ie.isEnabled() ? CHECKED_IMAGE : UNCHECKED_IMAGE;
                return imageRegistry.get(key);
            }

            @Override
            public String getText(Object element) {
                return "";
            }
        });
        column.setEditingSupport(new CheckBoxEditingSupport(viewer, 1));

        column = new TableViewerColumn(viewer, SWT.NONE);
        column.getColumn().setText(Messages.getString("DebugTab.16"));
        column.getColumn().setToolTipText(Messages.getString("DebugTab.17"));
        column.getColumn().setWidth(columnSizes[2]);
        column.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                IbyEntry e = (IbyEntry) element;
                return e.getFile();
            }
        });
        column.setEditingSupport(new TextEditingSupport(viewer, 2));

        column = new TableViewerColumn(viewer, SWT.NONE);
        column.getColumn().setText(Messages.getString("DebugTab.18"));
        column.getColumn().setToolTipText(Messages.getString("DebugTab.19"));
        column.getColumn().setWidth(columnSizes[3]);
        column.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                IbyEntry e = (IbyEntry) element;
                return e.getTarget();
            }
        });
        column.setEditingSupport(new TextEditingSupport(viewer, 3));

        column = new TableViewerColumn(viewer, SWT.NONE);
        column.getColumn().setText(Messages.getString("DebugTab.20"));
        column.getColumn().setToolTipText(Messages.getString("DebugTab.21"));
        column.getColumn().setWidth(columnSizes[4]);
        column.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                IbyEntry e = (IbyEntry) element;
                return e.getLocation().getLiteral();
            }
        });
        column.setEditingSupport(new ComboEditingSupport(viewer, 4));

        column = new TableViewerColumn(viewer, SWT.LEFT);
        column.getColumn().setText(Messages.getString("DebugTab.22"));
        column.getColumn().setToolTipText(Messages.getString("DebugTab.23"));
        column.getColumn().setWidth(columnSizes[5]);
        column.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                IbyEntry e = (IbyEntry) element;
                return e.getAction().getLiteral();
            }
        });
        column.setEditingSupport(new ComboEditingSupport(viewer, 5));
    }

    private class DebugContentProvider implements IStructuredContentProvider {

        public Object[] getElements(Object inputElement) {
            ImageContent ic = (ImageContent) inputElement;
            return ic.getEntries().toArray();
        }

        public void dispose() {
        }

        public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
        }
    }

    /* (non-Javadoc)
     * @see com.nokia.s60tools.imaker.internal.viewers.IPropertyViewer#addToProperties(com.nokia.s60tools.imaker.internal.model.ImakerProperties)
     */
    public void addToProperties(ImakerProperties prop) {
        ImageContent input = getInput();
        List<IbyEntry> ls = new ArrayList<IbyEntry>();
        ls.addAll(input.getEntries());
        prop.put(IMakerKeyConstants.DEBUGFILES, ls);

    }

    /* (non-Javadoc)
     * @see com.nokia.s60tools.imaker.internal.viewers.IPropertyViewer#restoreFromProperties(com.nokia.s60tools.imaker.internal.model.ImakerProperties)
     */
    public void restoreFromProperties(ImakerProperties prop) {
        ImageContent input = getInput();
        EList<IbyEntry> entries = input.getEntries();
        entries.clear();
        Object ents = prop.get(IMakerKeyConstants.DEBUGFILES);
        if (ents != null) {
            List<IbyEntry> ls = (List<IbyEntry>) ents;
            entries.addAll(ls);
        }
        tableViewer.refresh();
    }

    private ImageContent getInput() {
        return (ImageContent) tableViewer.getInput();
    }

    public void refesh() {
        tableViewer.refresh();
    }

    //   @Override
    public void clear() {
        getInput().getEntries().clear();
        refesh();
    }
}