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; 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); } } }