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.upgrade.animated; import com.liferay.ide.core.IBundleProject; import com.liferay.ide.core.LiferayCore; import com.liferay.ide.project.core.util.ProjectUtil; import com.liferay.ide.project.ui.ProjectUI; import com.liferay.ide.project.ui.dialog.JavaProjectSelectionDialog; import com.liferay.ide.ui.util.SWTUtil; import com.liferay.ide.ui.util.UIUtil; import java.net.URL; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.WorkspaceJob; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.IStructuredSelection; 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.sapphire.modeling.Status; import org.eclipse.sapphire.platform.StatusBridge; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; 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.Display; import org.eclipse.swt.widgets.Link; import org.eclipse.swt.widgets.Table; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.ide.IDE.SharedImages; /** * @author Joye Luo */ public class BuildPage extends Page { public BuildPage(Composite parent, int style, LiferayUpgradeDataModel dataModel) { super(parent, style, dataModel, BUILD_PAGE_ID, true); Composite container = new Composite(this, SWT.NONE); container.setLayout(new GridLayout(2, false)); container.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); tableViewer = new TableViewer(container); tableViewer.setContentProvider(new TableViewContentProvider()); tableViewer.addDoubleClickListener(new IDoubleClickListener() { @Override public void doubleClick(DoubleClickEvent event) { final IStructuredSelection selection = (IStructuredSelection) event.getSelection(); final TableViewElement tableViewElement = (TableViewElement) selection.getFirstElement(); final String projectName = tableViewElement.projectName; final IProject project = ProjectUtil.getProject(projectName); Boolean openNewLiferayProjectWizard = MessageDialog.openQuestion(UIUtil.getActiveShell(), "Build Project", "Do you want to build this project again?"); if (openNewLiferayProjectWizard) { final WorkspaceJob workspaceJob = new WorkspaceJob("Build Project......") { @Override public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException { monitor.beginTask("Start to build project......", 100); monitor.setTaskName("Build " + projectName + " Project..."); monitor.worked(100); if (monitor.isCanceled()) { return StatusBridge.create(Status.createOkStatus()); } boolean buildFlag = getBuildStatus(monitor, project); for (int i = 0; i < tableViewElements.length; i++) { if (tableViewElements[i].projectName == projectName) { if (buildFlag) { tableViewElements[i].buildStatus = "Build Successful"; } else { tableViewElements[i].buildStatus = "Build Failed"; } } } UIUtil.async(new Runnable() { @Override public void run() { tableViewer.setInput(tableViewElements); tableViewer.refresh(); } }); return StatusBridge.create(Status.createOkStatus()); } }; workspaceJob.setUser(true); workspaceJob.schedule(); } } }); TableViewerColumn colFirstName = new TableViewerColumn(tableViewer, SWT.NONE); colFirstName.getColumn().setWidth(400); colFirstName.getColumn().setText("projectName"); colFirstName.setLabelProvider(new ColumnLabelProvider() { @Override public Image getImage(Object element) { return imageProject; } @Override public String getText(Object element) { TableViewElement tableViewElement = (TableViewElement) element; return tableViewElement.projectName; } }); TableViewerColumn colSecondName = new TableViewerColumn(tableViewer, SWT.NONE); colSecondName.getColumn().setWidth(200); colSecondName.getColumn().setText("Build Status"); colSecondName.setLabelProvider(new ColumnLabelProvider() { @Override public Image getImage(Object element) { TableViewElement tableViewElement = (TableViewElement) element; if (tableViewElement.buildStatus.equals("Build Successful")) { return imageSuccess; } else if (tableViewElement.buildStatus.equals("Build Failed")) { return imageFail; } return null; } @Override public String getText(Object element) { TableViewElement tableViewElement = (TableViewElement) element; return tableViewElement.buildStatus; } }); final Table table = tableViewer.getTable(); final GridData tableData = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1); table.setLayoutData(tableData); table.setLinesVisible(false); Button buildButton = new Button(container, SWT.PUSH); buildButton.setText("Build..."); buildButton.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1)); buildButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { buildProjects(); } }); } private TableViewer tableViewer; private Image imageProject; private Image imageSuccess; private Image imageFail; private TableViewElement[] tableViewElements; class TableViewElement { public String projectName; public String buildStatus; public TableViewElement(String projectName, String buildStatus) { this.projectName = projectName; this.buildStatus = buildStatus; } } class TableViewContentProvider implements IStructuredContentProvider { @Override public void dispose() { } @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } @Override public Object[] getElements(Object inputElement) { if (inputElement instanceof TableViewElement[]) { return (TableViewElement[]) inputElement; } return new Object[] { inputElement }; } } private void buildProjects() { final List<IProject> selectProjectList = getSelectedProjects(); final IProject[] selectProjects = selectProjectList.toArray(new IProject[selectProjectList.size()]); createImages(); try { final WorkspaceJob workspaceJob = new WorkspaceJob("Build Project......") { @Override public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException { final List<TableViewElement> tableViewElementList = new ArrayList<TableViewElement>(); int count = selectProjects.length; if (count <= 0) { return StatusBridge.create(Status.createOkStatus()); } int unit = 100 / count; monitor.beginTask("Start to build project......", 100); for (int i = 0; i < count; i++) { final IProject project = selectProjects[i]; final String projectName = project.getName(); TableViewElement tableViewElement = new TableViewElement(projectName, "Not Build"); tableViewElementList.add(tableViewElement); } UIUtil.async(new Runnable() { @Override public void run() { tableViewElements = tableViewElementList .toArray(new TableViewElement[tableViewElementList.size()]); tableViewer.setInput(tableViewElements); tableViewer.refresh(); } }); for (int i = 0; i < count; i++) { monitor.worked(i + 1 * unit); if (monitor.isCanceled()) { break; } if (i == count - 1) { monitor.worked(100); } TableViewElement viewElement = tableViewElementList.get(i); final String projectName = viewElement.projectName; final IProject project = ProjectUtil.getProject(projectName); monitor.setTaskName("Build " + projectName + " Project..."); boolean buildFlag = getBuildStatus(monitor, project); if (buildFlag) { viewElement.buildStatus = "Build Successful"; } else { viewElement.buildStatus = "Build Failed"; } UIUtil.async(new Runnable() { @Override public void run() { tableViewElements = tableViewElementList .toArray(new TableViewElement[tableViewElementList.size()]); tableViewer.setInput(tableViewElements); tableViewer.refresh(); } }); } return StatusBridge.create(Status.createOkStatus()); } }; workspaceJob.setUser(true); workspaceJob.schedule(); } catch (Exception e) { ProjectUI.logError(e); } } private void createImages() { imageProject = PlatformUI.getWorkbench().getSharedImages().getImage(SharedImages.IMG_OBJ_PROJECT); if (imageProject.isDisposed()) { imageProject = PlatformUI.getWorkbench().getSharedImages() .getImageDescriptor(SharedImages.IMG_OBJ_PROJECT).createImage(); } URL greenTickUrl = ProjectUI.getDefault().getBundle().getEntry("/images/greentick.png"); imageSuccess = ImageDescriptor.createFromURL(greenTickUrl).createImage(); imageSuccess.getImageData().scaledTo(16, 16); imageFail = JFaceResources.getImage(Dialog.DLG_IMG_MESSAGE_ERROR); } private boolean getBuildStatus(IProgressMonitor monitor, IProject project) throws CoreException { IBundleProject bundleProject = LiferayCore.create(IBundleProject.class, project); IPath outputBundlepath = null; try { outputBundlepath = bundleProject.getOutputBundle(true, monitor); } catch (Exception e) { } if (outputBundlepath != null && !outputBundlepath.isEmpty()) { project.refreshLocal(IResource.DEPTH_INFINITE, monitor); return true; } return false; } private List<IProject> getSelectedProjects() { List<IProject> projects = new ArrayList<>(); final JavaProjectSelectionDialog dialog = new JavaProjectSelectionDialog( Display.getCurrent().getActiveShell()); if (dialog.open() == Window.OK) { Object[] selectedProjects = dialog.getResult(); if (selectedProjects != null) { for (Object project : selectedProjects) { if (project instanceof IJavaProject) { IJavaProject p = (IJavaProject) project; projects.add(p.getProject()); } } } } return projects; } public void createSpecialDescriptor(Composite parent, int style) { final String descriptor = "This step will help you to build all your projects.\n" + "You can rebuild the project by double-clicking it."; String url = ""; Link link = SWTUtil.createHyperLink(this, style, descriptor, 1, url); link.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false, 2, 1)); } @Override public String getPageTitle() { return "Build"; } }