| /****************************************************************************** |
| * Copyright (c) 2005 BEA Systems, Inc. |
| * 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: |
| * Konstantin Komissarchik - initial API and implementation |
| ******************************************************************************/ |
| |
| package org.eclipse.jst.j2ee.project.facet; |
| |
| import org.eclipse.core.resources.IMarker; |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.resources.IResource; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.jst.j2ee.internal.plugin.J2EEPlugin; |
| import org.eclipse.osgi.util.NLS; |
| import org.eclipse.wst.common.componentcore.ComponentCore; |
| import org.eclipse.wst.common.componentcore.resources.IVirtualComponent; |
| import org.eclipse.wst.common.componentcore.resources.IVirtualReference; |
| import org.eclipse.wst.common.project.facet.core.IFacetedProject; |
| import org.eclipse.wst.common.project.facet.core.IFacetedProjectValidator; |
| import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager; |
| import org.eclipse.wst.common.project.facet.core.runtime.IRuntime; |
| |
| /** |
| * @author <a href="mailto:kosta@bea.com">Konstantin Komissarchik</a> |
| */ |
| |
| public final class EarFacetValidator |
| |
| implements IFacetedProjectValidator |
| |
| { |
| private static final String MARKER_ID |
| = J2EEPlugin.PLUGIN_ID + ".differentRuntimesDetected"; |
| |
| public void validate( final IFacetedProject fproj ) |
| |
| throws CoreException |
| |
| { |
| final IVirtualComponent vc |
| = ComponentCore.createComponent( fproj.getProject() ); |
| |
| if( vc == null ) |
| { |
| return; |
| } |
| |
| if( fproj.hasProjectFacet( EARFacetUtils.EAR_FACET ) ) |
| { |
| fproj.getProject().deleteMarkers( MARKER_ID, false, |
| IResource.DEPTH_ZERO ); |
| |
| final IVirtualReference[] refs = vc.getReferences(); |
| |
| for( int i = 0; i < refs.length; i++ ) |
| { |
| final IVirtualReference ref = refs[ i ]; |
| final IVirtualComponent refvc = ref.getReferencedComponent(); |
| |
| if( refvc != null && !refvc.isBinary()) |
| { |
| final IProject refpj = refvc.getProject(); |
| validate( fproj, ProjectFacetsManager.create( refpj ) ); |
| } |
| } |
| } |
| else |
| { |
| final IVirtualComponent[] referencing |
| = vc.getReferencingComponents(); |
| |
| for( int i = 0; i < referencing.length; i++ ) |
| { |
| final IVirtualComponent refvc = referencing[ i ]; |
| |
| final IFacetedProject reffpj |
| = ProjectFacetsManager.create( refvc.getProject() ); |
| |
| if( reffpj.hasProjectFacet( EARFacetUtils.EAR_FACET ) ) |
| { |
| validate( reffpj ); |
| } |
| } |
| } |
| } |
| |
| private void validate( final IFacetedProject ear, |
| final IFacetedProject module ) |
| |
| throws CoreException |
| |
| { |
| final IRuntime earRuntime = ear.getRuntime(); |
| final IRuntime moduleRuntime = module.getRuntime(); |
| |
| if( earRuntime == null && moduleRuntime != null ) |
| { |
| // Should this also be a warning? |
| } |
| else if( earRuntime != null && moduleRuntime == null ) |
| { |
| // Should this also be a warning? |
| } |
| else if( earRuntime != null && moduleRuntime != null && |
| ! earRuntime.equals( moduleRuntime ) ) |
| { |
| final String msg |
| = NLS.bind( Resources.targetingDifferentRuntimes, |
| module.getProject().getName() ); |
| |
| final IMarker m = ear.createWarningMarker( MARKER_ID, msg ); |
| |
| m.setAttribute( "moduleProject", module.getProject().getName() ); |
| m.setAttribute( "runtime1", ear.getRuntime().getName() ); |
| m.setAttribute( "runtime2", module.getRuntime().getName() ); |
| } |
| } |
| |
| private static final class Resources |
| |
| extends NLS |
| |
| { |
| public static String targetingDifferentRuntimes; |
| |
| static |
| { |
| initializeMessages( EarFacetValidator.class.getName(), |
| Resources.class ); |
| } |
| } |
| |
| } |