com.liferay.ide.project.ui.upgrade.animated.BuildServicePage.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.ide.project.ui.upgrade.animated.BuildServicePage.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.upgrade.animated;

import com.liferay.ide.core.ILiferayProject;
import com.liferay.ide.core.LiferayCore;
import com.liferay.ide.core.util.CoreUtil;
import com.liferay.ide.project.core.IProjectBuilder;
import com.liferay.ide.project.ui.ProjectUI;
import com.liferay.ide.project.ui.dialog.CustomProjectSelectionDialog;
import com.liferay.ide.project.ui.upgrade.action.CompileAction;
import com.liferay.ide.ui.util.SWTUtil;
import com.liferay.ide.ui.util.UIUtil;

import java.lang.reflect.InvocationTargetException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.debug.internal.ui.views.console.ProcessConsole;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.window.Window;
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.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Link;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.console.IConsole;

/**
 * @author Andy Wu
 * @author Simon Jiang
 * @author Joye Luo
 * @author Terry Jia
 */
@SuppressWarnings("restriction")
public class BuildServicePage extends Page {

    public BuildServicePage(Composite parent, int style, LiferayUpgradeDataModel dataModel) {
        super(parent, style, dataModel, BUILDSERVICE_PAGE_ID, true);

        Button buildServiceButton = new Button(this, SWT.PUSH);

        buildServiceButton.setText("Build Services");

        buildServiceButton.addSelectionListener(new SelectionAdapter() {

            private void deleteLegacyFiles(IProject project, IProgressMonitor monitor) {
                try {
                    String relativePath = "/docroot/WEB-INF/src/META-INF";
                    IFile portletSpringXML = project.getFile(relativePath + "/portlet-spring.xml");
                    IFile shardDataSourceSpringXML = project
                            .getFile(relativePath + "/shard-data-source-spring.xml");

                    if (portletSpringXML.exists()) {
                        portletSpringXML.delete(true, monitor);
                    }

                    if (shardDataSourceSpringXML.exists()) {
                        shardDataSourceSpringXML.delete(true, monitor);
                    }

                    // for 6.2 maven project
                    IFolder metaInfFolder = project.getFolder("/src/main/resources/META-INF/");

                    if (metaInfFolder.exists()) {
                        metaInfFolder.delete(true, monitor);
                    }
                } catch (CoreException e) {
                    ProjectUI.logError(e);
                }
            }

            private List<IProject> getServiceBuilderProjects() {
                List<IProject> results = new ArrayList<IProject>();

                IProject[] projects = CoreUtil.getAllProjects();

                for (IProject project : projects) {
                    IFile serviceFile = project.getFile("/docroot/WEB-INF/service.xml");

                    if (!serviceFile.exists()) {
                        serviceFile = project.getFile("src/main/webapp/WEB-INF/service.xml");
                    }

                    if (serviceFile.exists()) {
                        results.add(project);
                    }
                }

                return results;
            }

            @Override
            public void widgetSelected(SelectionEvent e) {
                List<IProject> projects = getServiceBuilderProjects();

                CustomProjectSelectionDialog dialog = new CustomProjectSelectionDialog(UIUtil.getActiveShell());

                dialog.setProjects(projects);

                URL imageUrl = ProjectUI.getDefault().getBundle().getEntry("/icons/e16/service.png");
                Image serviceXmlImage = ImageDescriptor.createFromURL(imageUrl).createImage();

                dialog.setImage(serviceXmlImage);
                dialog.setTitle("Liferay Service Project");
                dialog.setMessage("Select Liferay Service Project");

                List<IProject> liferayServiceProjects = new ArrayList<>();

                if (dialog.open() == Window.OK) {
                    final Object[] selectedProjects = dialog.getResult();

                    if (selectedProjects != null) {
                        for (Object project : selectedProjects) {
                            if (project instanceof IJavaProject) {
                                IJavaProject p = (IJavaProject) project;
                                liferayServiceProjects.add(p.getProject());
                            }
                        }
                    }
                }

                try {
                    PlatformUI.getWorkbench().getProgressService().busyCursorWhile(new IRunnableWithProgress() {

                        public void run(IProgressMonitor monitor)
                                throws InvocationTargetException, InterruptedException {
                            try {
                                for (IProject project : liferayServiceProjects) {
                                    deleteLegacyFiles(project, monitor);

                                    final ILiferayProject liferayProject = LiferayCore.create(project);

                                    if (liferayProject != null) {
                                        IProjectBuilder builder = liferayProject.adapt(IProjectBuilder.class);

                                        builder.buildService(monitor);
                                    }

                                    IConsole console = CompileAction.getConsole("build-service");

                                    if (console != null) {
                                        ProcessConsole pc = (ProcessConsole) console;

                                        if (pc.getDocument().get().contains("BUILD FAILED")) {
                                            return;
                                        }
                                    }
                                }
                            } catch (CoreException e) {
                            }
                        }
                    });
                } catch (Exception e1) {
                }
            }
        });
    }

    public void createSpecialDescriptor(Composite parent, int style) {
        final String descriptor = "In this step, we will delete some legacy servicebuilder related files"
                + " and re-run build-service on servicebuilder projects.\n"
                + "Note: Please make sure the default installed jre is JDK 8 (Preferences-Java-Installed JREs).";
        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 Services";
    }

}