/******************************************************************************* * Copyright (c) 2012, 2016, 2017 PDT Extension Group and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * PDT Extension Group - initial API and implementation * Kaloyan Raev - [501269] externalize strings *******************************************************************************/ package org.eclipse.php.composer.core.facet; import java.io.ByteArrayInputStream; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.php.composer.api.ComposerConstants; import org.eclipse.php.composer.api.ComposerPackage; import org.eclipse.php.composer.core.log.Logger; import org.eclipse.php.core.PHPVersion; import org.eclipse.php.internal.core.facet.PHPFacets; import org.eclipse.php.internal.core.facet.PHPFacetsConstants; import org.eclipse.wst.common.project.facet.core.IFacetedProject; import org.eclipse.wst.common.project.facet.core.IProjectFacet; import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager; public class FacetManager { public static IFacetedProject installFacets(IProject project, PHPVersion version, IProgressMonitor monitor) { try { if (monitor == null) { monitor = new NullProgressMonitor(); } final IFacetedProject facetedProject = ProjectFacetsManager.create(project, true, monitor); if (facetedProject == null) { Logger.log(Logger.ERROR, "Unable to create faceted composer project."); //$NON-NLS-1$ return null; } IProjectFacet coreFacet = ProjectFacetsManager.getProjectFacet(PHPFacetsConstants.PHP_CORE_COMPONENT); IProjectFacet composerFacet = ProjectFacetsManager .getProjectFacet(ComposerFacetConstants.COMPOSER_COMPONENT); // install the fixed facets if (!facetedProject.hasProjectFacet(coreFacet)) { facetedProject.installProjectFacet(coreFacet.getDefaultVersion(), null, monitor); facetedProject.installProjectFacet(PHPFacets.convertToFacetVersion(version), null, monitor); } if (!facetedProject.hasProjectFacet(composerFacet)) { facetedProject.installProjectFacet( composerFacet.getVersion(ComposerFacetConstants.COMPOSER_COMPONENT_VERSION_1), composerFacet, monitor); } IFile composerJson = project.getFile(ComposerConstants.COMPOSER_JSON); if (!composerJson.exists()) { ComposerPackage composerPackage = new ComposerPackage(); composerPackage.setName(project.getName().toLowerCase() + "/" + project.getName().toLowerCase()); //$NON-NLS-1$ composerPackage.setDescription(""); //$NON-NLS-1$ composerJson.create(new ByteArrayInputStream(composerPackage.toJson().getBytes()), 0, monitor); } return facetedProject; } catch (CoreException ex) { Logger.logException(ex.getMessage(), ex); } return null; } public static void uninstallFacets(IProject project, IProgressMonitor monitor) { try { if (monitor == null) { monitor = new NullProgressMonitor(); } final IFacetedProject facetedProject = ProjectFacetsManager.create(project, true, monitor); IProjectFacet composerFacet = ProjectFacetsManager .getProjectFacet(ComposerFacetConstants.COMPOSER_COMPONENT); facetedProject.uninstallProjectFacet( composerFacet.getVersion(ComposerFacetConstants.COMPOSER_COMPONENT_VERSION_1), composerFacet, monitor); } catch (CoreException ex) { Logger.logException(ex.getMessage(), ex); } } public static boolean hasComposerFacet(IProject project) { try { IFacetedProject fProj = ProjectFacetsManager.create(project); if (fProj != null) { return fProj.hasProjectFacet( ProjectFacetsManager.getProjectFacet(ComposerFacetConstants.COMPOSER_COMPONENT)); } } catch (CoreException e) { Logger.logException(e); } return false; } }