/******************************************************************************* * Copyright (c) 2014 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.cdi.internal.core.project.facet; import java.util.HashMap; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants; import org.eclipse.wst.common.project.facet.core.IProjectFacet; import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion; import org.eclipse.wst.common.project.facet.core.events.IFacetedProjectEvent; import org.eclipse.wst.common.project.facet.core.events.IFacetedProjectEvent.Type; import org.eclipse.wst.common.project.facet.core.events.IFacetedProjectListener; import org.eclipse.wst.common.project.facet.core.events.IProjectFacetActionEvent; import org.jboss.tools.cdi.core.CDIUtil; /** * Adds CDI capabilities to a faceted project that has one of facets * jst.web of version 3.1 or higher * jst.ejb of version 3.2 or higher * jst.utility * * File beans.xml is not created as it is not required in CDI 1.1. * That makes this implementation work ok when user enables CDI facet * in New Faceted Project wizard - beans.xml will be created with * the version selected by user. * * A modification to this implementation may be needed only if * some new version of CDI require beans.xml as it was in CDI 1.0. * * @author Viacheslav Kabanovich * */ public class CDIFacetedProjectListener implements IFacetedProjectListener { static HashMap<String, String> minimalVersions = new HashMap<String, String>(); static { minimalVersions.put(IModuleConstants.JST_WEB_MODULE, "3.1"); minimalVersions.put(IModuleConstants.JST_EJB_MODULE, "3.2"); minimalVersions.put(IModuleConstants.JST_UTILITY_MODULE, null); } public CDIFacetedProjectListener() { } @Override public void handleEvent(IFacetedProjectEvent event) { if((event.getType() == Type.PRE_INSTALL || event.getType() == Type.PRE_VERSION_CHANGE) && event instanceof IProjectFacetActionEvent) { IProject project = event.getProject().getProject(); IProjectFacet facet = ((IProjectFacetActionEvent)event).getProjectFacet(); IProjectFacetVersion version = ((IProjectFacetActionEvent)event).getProjectFacetVersion(); if(isCDIRequired(facet, version)) { CDIUtil.enableCDI(project, new NullProgressMonitor()); } } } boolean isCDIRequired(IProjectFacet facet, IProjectFacetVersion version) { if(!minimalVersions.containsKey(facet.getId())) { return false; } String minimalVersionId = minimalVersions.get(facet.getId()); if(version != null && minimalVersionId != null) { IProjectFacetVersion minimalVersion = facet.getVersion(minimalVersionId); return minimalVersion != null && minimalVersion.compareTo(version) <= 0; } return true; } }