com.liferay.ide.project.ui.pref.MigrationProblemPreferencePage.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.ide.project.ui.pref.MigrationProblemPreferencePage.java

Source

/*******************************************************************************
 * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation; either version 2.1 of the License, or (at your option)
 * any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details.
 *
 *******************************************************************************/
package com.liferay.ide.project.ui.pref;

import com.liferay.blade.api.Problem;
import com.liferay.ide.core.util.CoreUtil;
import com.liferay.ide.project.core.upgrade.IgnoredProblemsContainer;
import com.liferay.ide.project.core.upgrade.UpgradeAssistantSettingsUtil;
import com.liferay.ide.project.ui.ProjectUI;
import com.liferay.ide.project.ui.migration.MigrationUtil;
import com.liferay.ide.ui.util.UIUtil;

import java.io.IOException;

import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
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.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;

/**
 * @author Lovett Li
 */
public class MigrationProblemPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {

    public final static String ID = "com.liferay.ide.project.ui.migrationProblemPreferencePage";
    private TableViewer _ignoredProblemTable;

    private Button _removeButton;

    private Label _detailInfoLabel;

    private Browser _browser;

    private IgnoredProblemsContainer mpContainer;

    @Override
    public Control createContents(Composite parent) {
        Composite pageComponent = new Composite(parent, SWT.NULL);
        GridLayout layout = new GridLayout();
        layout.numColumns = 2;
        layout.marginWidth = 0;
        layout.marginHeight = 0;
        pageComponent.setLayout(layout);
        GridData data = new GridData();
        data.verticalAlignment = GridData.FILL;
        data.horizontalAlignment = GridData.FILL;
        pageComponent.setLayoutData(data);

        data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL);

        Label label = new Label(pageComponent, SWT.LEFT);
        label.setText("These are ignored breaking change problems.\n "
                + "You can remove them if you want to show this type of problem next time.");
        data = new GridData();
        data.horizontalAlignment = GridData.FILL;
        data.horizontalSpan = 2;
        label.setLayoutData(data);

        _ignoredProblemTable = new TableViewer(pageComponent, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION);
        data = new GridData(GridData.FILL_HORIZONTAL);

        createColumns(_ignoredProblemTable);

        final Table table = _ignoredProblemTable.getTable();
        table.setHeaderVisible(true);

        data.heightHint = 200;
        _ignoredProblemTable.getTable().setLayoutData(data);
        _ignoredProblemTable.setContentProvider(ArrayContentProvider.getInstance());

        Composite groupComponent = new Composite(pageComponent, SWT.NULL);
        GridLayout groupLayout = new GridLayout();
        groupLayout.marginWidth = 0;
        groupLayout.marginHeight = 0;
        groupComponent.setLayout(groupLayout);
        data = new GridData();
        data.verticalAlignment = GridData.FILL;
        data.horizontalAlignment = GridData.FILL;
        groupComponent.setLayoutData(data);

        _removeButton = new Button(groupComponent, SWT.PUSH);
        _removeButton.setText("Remove");
        _removeButton.addSelectionListener(new SelectionListener() {

            @Override
            public void widgetSelected(SelectionEvent arg0) {
                StructuredSelection selection = (StructuredSelection) _ignoredProblemTable.getSelection();

                if (selection != null && selection.getFirstElement() instanceof Problem) {
                    try {
                        Problem problem = (Problem) selection.getFirstElement();
                        mpContainer.remove(problem);
                        _ignoredProblemTable.setInput(mpContainer.getProblemMap().values().toArray(new Problem[0]));
                    } catch (Exception e) {
                        ProjectUI.logError(e);
                    }
                }

            }

            @Override
            public void widgetDefaultSelected(SelectionEvent arg0) {
            }
        });

        setButtonLayoutData(_removeButton);

        label = new Label(pageComponent, SWT.LEFT);
        data = new GridData();
        data.horizontalAlignment = GridData.FILL;
        data.horizontalSpan = 2;
        label.setLayoutData(data);

        _detailInfoLabel = new Label(pageComponent, SWT.LEFT);
        _detailInfoLabel.setText("Detail Information");
        data = new GridData();
        data.horizontalAlignment = GridData.FILL;
        data.horizontalSpan = 2;
        _detailInfoLabel.setLayoutData(data);

        _browser = new Browser(pageComponent, SWT.BORDER);
        data = new GridData(GridData.FILL_BOTH);
        _browser.setLayoutData(data);

        groupComponent = new Composite(pageComponent, SWT.NULL);
        groupLayout = new GridLayout();
        groupLayout.marginWidth = 0;
        groupLayout.marginHeight = 0;
        groupComponent.setLayout(groupLayout);
        data = new GridData();
        data.verticalAlignment = GridData.FILL;
        data.horizontalAlignment = GridData.FILL;
        groupComponent.setLayoutData(data);

        fillIgnoredProblemTable();

        _ignoredProblemTable.addSelectionChangedListener(new ISelectionChangedListener() {

            public void selectionChanged(final SelectionChangedEvent event) {
                UIUtil.async(new Runnable() {

                    public void run() {
                        updateForm(event);
                    }
                }, 50);
            }
        });

        return pageComponent;
    }

    @Override
    public void init(IWorkbench arg0) {
        mpContainer = MigrationUtil.getIgnoredProblemsContainer();
    }

    @Override
    public boolean performOk() {
        try {
            UpgradeAssistantSettingsUtil.setObjectToStore(IgnoredProblemsContainer.class, mpContainer);
        } catch (IOException e) {
            ProjectUI.logError(e);
        }

        return super.performOk();
    }

    private void fillIgnoredProblemTable() {
        try {
            IgnoredProblemsContainer mpContainer = UpgradeAssistantSettingsUtil
                    .getObjectFromStore(IgnoredProblemsContainer.class);

            if (mpContainer != null) {
                Problem[] problems = mpContainer.getProblemMap().values().toArray(new Problem[0]);
                _ignoredProblemTable.setInput(problems);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void createColumns(final TableViewer _problemsViewer) {
        final String[] titles = { "Tickets", "Problem" };
        final int[] bounds = { 65, 55 };

        TableViewerColumn col = createTableViewerColumn(titles[0], bounds[0], _problemsViewer);

        col.setLabelProvider(new ColumnLabelProvider() {

            @Override
            public String getText(Object element) {
                Problem p = (Problem) element;

                return p.getTicket();
            }
        });

        col = createTableViewerColumn(titles[1], bounds[1], _problemsViewer);
        col.setLabelProvider(new ColumnLabelProvider() {

            @Override
            public String getText(Object element) {
                Problem p = (Problem) element;

                return p.getTitle();
            }

            @Override
            public void update(ViewerCell cell) {
                super.update(cell);

                Table table = _problemsViewer.getTable();

                table.getColumn(1).pack();
            }
        });
    }

    private TableViewerColumn createTableViewerColumn(String title, int bound, TableViewer viewer) {
        final TableViewerColumn viewerColumn = new TableViewerColumn(viewer, SWT.NONE);
        final TableColumn column = viewerColumn.getColumn();
        column.setText(title);
        column.setWidth(bound);
        column.setResizable(true);
        column.setMoveable(true);

        return viewerColumn;
    }

    private void updateForm(SelectionChangedEvent event) {
        final ISelection selection = event.getSelection();

        final Problem problem = MigrationUtil.getProblemFromSelection(selection);

        if (problem != null) {
            if (CoreUtil.isNullOrEmpty(problem.html)) {
                _browser.setText(generateFormText(problem));
            } else {
                _browser.setText(problem.html);
            }
        } else {
            _browser.setUrl("about:blank");
        }
    };

    private String generateFormText(Problem problem) {
        StringBuilder sb = new StringBuilder();

        sb.append("<form><p>");

        sb.append("<b>Problem:</b> " + problem.title + "<br/><br/>");

        sb.append("<b>Description:</b><br/>");
        sb.append("\t" + problem.summary + "<br/><br/>");

        if (problem.getAutoCorrectContext() != null && problem.autoCorrectContext.length() > 0) {
            sb.append("<a href='autoCorrect'>Correct this problem automatically</a><br/><br/>");
        }

        if (problem.html != null && problem.html.length() > 0) {
            sb.append("<a href='html'>See documentation for how to correct this problem.</a><br/><br/>");
        }

        if (problem.ticket != null && problem.ticket.length() > 0) {
            sb.append("<b>Tickets:</b> " + getLinkTags(problem.ticket) + "<br/><br/>");
        }

        sb.append("</p></form>");

        return sb.toString();
    }

    private String getLinkTags(String ticketNumbers) {
        String[] ticketNumberArray = ticketNumbers.split(",");

        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < ticketNumberArray.length; i++) {
            String ticketNumber = ticketNumberArray[i];
            sb.append("<a href='https://issues.liferay.com/browse/");
            sb.append(ticketNumber);
            sb.append("'>");
            sb.append(ticketNumber);
            sb.append("</a>");

            if (ticketNumberArray.length > 1 && i != ticketNumberArray.length - 1) {
                sb.append(",");
            }
        }

        return sb.toString();
    }

}