com.liferay.ide.project.ui.PrimaryRuntimeNotSetResolution.java Source code

Java tutorial

Introduction

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

import com.liferay.ide.project.core.util.ProjectUtil;
import com.liferay.ide.server.util.ServerUtil;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jst.server.core.FacetUtil;
import org.eclipse.osgi.util.NLS;
import org.eclipse.ui.IMarkerResolution;
import org.eclipse.ui.internal.dialogs.PropertyDialog;
import org.eclipse.wst.common.project.facet.core.IFacetedProject;
import org.eclipse.wst.common.project.facet.core.runtime.IRuntime;
import org.eclipse.wst.server.ui.ServerUIUtil;

/**
 * @author Kuo Zhang
 */
@SuppressWarnings("restriction")
public class PrimaryRuntimeNotSetResolution implements IMarkerResolution {

    public static final String TARGETED_RUNTIMES_PROPERTY_PAGE_ID = "org.eclipse.wst.common.project.facet.ui.RuntimesPropertyPage"; //$NON-NLS-1$

    public String getLabel() {
        return Msgs.setPrimaryRuntimeForProject;
    }

    /*
     * IDE-1179, Quick fix for the project of which primary runtime is not set.
     */
    public void run(IMarker marker) {
        if (marker.getResource() instanceof IProject) {
            final IProject proj = (IProject) marker.getResource();

            final IFacetedProject fproj = ProjectUtil.getFacetedProject(proj);

            /*
             * Let users set a Liferay server runtime when there is no available one.
             */
            if (ServerUtil.getAvailableLiferayRuntimes().size() == 0) {
                boolean openNewRuntimeWizard = MessageDialog.openQuestion(null, null,
                        Msgs.noLiferayRuntimeAvailable);

                if (openNewRuntimeWizard) {
                    ServerUIUtil.showNewRuntimeWizard(null, null, null, "com.liferay."); //$NON-NLS-1$
                }
            }

            /*
             * Let users confirm when there is only one available Liferay runtime.
             *
             * If the previous judgment block is executed, the size of available targeted runtimes will increase to 1.
             */
            if (ServerUtil.getAvailableLiferayRuntimes().size() == 1) {
                final Set<IRuntime> availableFacetRuntimes = convertToFacetRuntimes(
                        ServerUtil.getAvailableLiferayRuntimes());

                String runtimeName = ((IRuntime) availableFacetRuntimes.toArray()[0]).getName();

                boolean setAsPrimary = MessageDialog.openQuestion(null, null,
                        NLS.bind(Msgs.setOnlyRuntimeAsPrimary, runtimeName));

                if (setAsPrimary) {
                    try {
                        fproj.setTargetedRuntimes(availableFacetRuntimes, null);
                        fproj.setPrimaryRuntime((IRuntime) availableFacetRuntimes.toArray()[0], null);
                    } catch (CoreException e) {
                        ProjectUI.logError(e);
                    }
                }
            }

            /*
             * Open the "Targeted Runtimes" property page and let users set a runtime as the primary one when there are
             * multiple Liferay runtimes available.
             */
            if (ServerUtil.getAvailableLiferayRuntimes().size() > 1) {
                boolean openRuntimesProperty = MessageDialog.openQuestion(null, null,
                        Msgs.multipleAvailableRuntimes);

                if (openRuntimesProperty) {
                    PropertyDialog.createDialogOn(null, TARGETED_RUNTIMES_PROPERTY_PAGE_ID, proj).open();
                }
            }
        }
    }

    private Set<IRuntime> convertToFacetRuntimes(Set<org.eclipse.wst.server.core.IRuntime> serverRuntimes) {
        Set<IRuntime> facetRuntimes = new HashSet<IRuntime>();

        Iterator<org.eclipse.wst.server.core.IRuntime> it = serverRuntimes.iterator();

        while (it.hasNext()) {
            facetRuntimes.add(FacetUtil.getRuntime(it.next()));
        }

        return facetRuntimes;
    }

    private static class Msgs extends NLS {

        public static String noLiferayRuntimeAvailable;
        public static String setOnlyRuntimeAsPrimary;
        public static String multipleAvailableRuntimes;
        public static String setPrimaryRuntimeForProject;

        static {
            initializeMessages(PrimaryRuntimeNotSetResolution.class.getName(), Msgs.class);
        }
    }
}