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