Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.jst.common.frameworks/src/org/eclipse/jst/common/jdt/internal/classpath/FlexibleProjectContainer.java')
-rw-r--r--plugins/org.eclipse.jst.common.frameworks/src/org/eclipse/jst/common/jdt/internal/classpath/FlexibleProjectContainer.java512
1 files changed, 0 insertions, 512 deletions
diff --git a/plugins/org.eclipse.jst.common.frameworks/src/org/eclipse/jst/common/jdt/internal/classpath/FlexibleProjectContainer.java b/plugins/org.eclipse.jst.common.frameworks/src/org/eclipse/jst/common/jdt/internal/classpath/FlexibleProjectContainer.java
deleted file mode 100644
index ad9a82d79..000000000
--- a/plugins/org.eclipse.jst.common.frameworks/src/org/eclipse/jst/common/jdt/internal/classpath/FlexibleProjectContainer.java
+++ /dev/null
@@ -1,512 +0,0 @@
-/******************************************************************************
- * Copyright (c) 2005, 2006 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.common.jdt.internal.classpath;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceChangeEvent;
-import org.eclipse.core.resources.IResourceChangeListener;
-import org.eclipse.core.resources.IResourceDelta;
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.jdt.core.IAccessRule;
-import org.eclipse.jdt.core.IClasspathAttribute;
-import org.eclipse.jdt.core.IClasspathContainer;
-import org.eclipse.jdt.core.IClasspathEntry;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.internal.core.ClasspathEntry;
-import org.eclipse.jdt.internal.core.JavaProject;
-import org.eclipse.jdt.internal.core.util.Util;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.jst.common.frameworks.CommonFrameworksPlugin;
-import org.eclipse.wst.common.componentcore.ComponentCore;
-import org.eclipse.wst.common.componentcore.internal.resources.VirtualArchiveComponent;
-import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants;
-import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
-import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
-import org.eclipse.wst.common.componentcore.resources.IVirtualReference;
-import org.eclipse.wst.common.componentcore.resources.IVirtualResource;
-
-/**
- * @author <a href="mailto:kosta@bea.com">Konstantin Komissarchik</a>
- */
-
-public abstract class FlexibleProjectContainer
-
- implements IClasspathContainer
-
-{
- protected static final class PathType
- {
- public static final PathType
- LIB_DIRECTORY = new PathType(),
- CLASSES_DIRECTORY = new PathType();
- }
-
- private static ClasspathDecorationsManager decorations;
-
- static
- {
- // Register the resource listener that will listen for changes to
- // resources relevant to flexible project containers across the
- // workspace and refresh them as necessary.
-
- final IWorkspace ws = ResourcesPlugin.getWorkspace();
-
- ws.addResourceChangeListener( new Listener(),
- IResourceChangeEvent.POST_CHANGE );
-
- // Read the decorations from the workspace metadata.
-
- final String plugin = CommonFrameworksPlugin.PLUGIN_ID;
- decorations = new ClasspathDecorationsManager( plugin );
- }
-
- private static final String SEPARATOR = "!"; //$NON-NLS-1$
-
- public static String getDecorationManagerKey(IProject project, String container){
- return project.getName() + SEPARATOR + container;
- }
-
- protected final IPath path;
- protected final IJavaProject owner;
- protected final IProject project;
- private final IPath[] paths;
- private final PathType[] pathTypes;
- private final List entries;
- private final IClasspathEntry[] cpentries;
-
- public FlexibleProjectContainer( final IPath path,
- final IJavaProject owner,
- final IProject project,
- final IPath[] paths,
- final PathType[] types )
- {
- this.path = path;
- this.owner = owner;
- this.project = project;
- this.paths = paths;
- this.pathTypes = types;
-
- if( ! isFlexibleProject( this.project ) )
- {
- // Silently noop if the referenced project is not a flexible
- // project. Should I be doing something else here?
-
- this.entries = Collections.EMPTY_LIST;
- this.cpentries = new IClasspathEntry[ 0 ];
-
- return;
- }
-
- this.entries = computeClasspathEntries();
- this.cpentries = new IClasspathEntry[ this.entries.size() ];
-
- for( int i = 0, n = this.entries.size(); i < n; i++ )
- {
- IPath entryPath = (IPath) this.entries.get( i );
- IResource resource =ResourcesPlugin.getWorkspace().getRoot().findMember(entryPath);
- if(null != resource && resource.getType() == IResource.PROJECT)
- this.cpentries[ i ] = JavaCore.newProjectEntry(entryPath, false);
- else
- this.cpentries[ i ] = newLibraryEntry( entryPath );
- }
- }
-
- public int getKind()
- {
- return K_APPLICATION;
- }
-
- public IPath getPath()
- {
- return this.path;
- }
-
- public IClasspathEntry[] getClasspathEntries()
- {
- return this.cpentries;
- }
-
- public boolean isOutOfDate( final IResourceDelta delta )
- {
- if( delta == null )
- {
- return false;
- }
-
- final List currentEntries = computeClasspathEntries();
- return ! this.entries.equals( currentEntries );
- }
-
- public abstract void refresh();
-
- static ClasspathDecorationsManager getDecorationsManager()
- {
- return decorations;
- }
-
- private List computeClasspathEntries()
- {
- final List entries = new ArrayList();
-
- final IVirtualComponent vc
- = ComponentCore.createComponent( this.project );
-
- if( vc == null )
- {
- return entries;
- }
-
- final Set existingEntries = computeExistingClasspathEntries();
-
- IVirtualReference[] refs = vc.getReferences();
- IVirtualComponent comp = null;
- Set jarsHandled = new HashSet();
- String jarName = null;
- for (int i = 0; i < refs.length; i++) {
- comp = refs[i].getReferencedComponent();
- if (!refs[i].getRuntimePath().equals(paths[0].makeAbsolute()))
- continue;
- jarName = refs[i].getArchiveName();
- if(null != jarName){
- jarsHandled.add(jarName);
- }
- IPath newPath = null;
- if (comp.isBinary()) {
- VirtualArchiveComponent archiveComp = (VirtualArchiveComponent) comp;
- java.io.File diskFile = archiveComp.getUnderlyingDiskFile();
- if (diskFile.exists()) {
- newPath =new Path(diskFile.getAbsolutePath());
- } else {
- IFile iFile = archiveComp.getUnderlyingWorkbenchFile();
- if (!entries.contains(iFile.getFullPath())){
- newPath = iFile.getFullPath();
- }
- }
- } else {
- IProject project = comp.getProject();
- newPath = project.getFullPath();
- }
-
- if(null != newPath && !isAlreadyOnClasspath(existingEntries, newPath)){
- entries.add(newPath);
- }
-
- }
-
- for( int i = 0; i < this.paths.length; i++ )
- {
- final IVirtualFolder rootFolder = vc.getRootFolder();
- final IVirtualFolder vf = rootFolder.getFolder( paths[ i ] );
-
- if( this.pathTypes[ i ] == PathType.LIB_DIRECTORY )
- {
- final IVirtualResource[] contents;
-
- try
- {
- contents = vf.members();
- }
- catch( CoreException e )
- {
- CommonFrameworksPlugin.log( e );
- continue;
- }
-
- for( int j = 0; j < contents.length; j++ )
- {
- final IResource r = contents[ j ].getUnderlyingResource();
- final IPath p = r.getFullPath();
-
- if(!jarsHandled.contains(p.lastSegment()) && isJarFile( r.getLocation().toFile() ) )
- {
- jarsHandled.add(p.lastSegment());
- if(!isAlreadyOnClasspath(existingEntries, p)){
- entries.add( p );
- }
- }
- }
- }
- else
- {
- final IContainer[] uf = vf.getUnderlyingFolders();
-
- for( int j = 0; j < uf.length; j++ )
- {
- final IPath p = uf[ j ].getFullPath();
-
- if( ! jarsHandled.contains( p.lastSegment() ) &&
- ! isSourceOrOutputDirectory( p ) )
- {
- jarsHandled.add(p.lastSegment());
- if(!isAlreadyOnClasspath(existingEntries, p)){
- entries.add( p );
- }
- }
- }
- }
- }
-
- return entries;
- }
-
- private Set computeExistingClasspathEntries()
- {
- final IJavaProject jproj = JavaCore.create( this.project );
- final Set existing = new HashSet();
-
- try
- {
- // Get all resolved entries first.
-
- final IClasspathEntry[] entries = jproj.getResolvedClasspath( true );
- existing.addAll( Arrays.asList( entries ) );
-
- // Then remove any entries provided by this container's prior self.
-
- final IClasspathEntry[] cp = jproj.getRawClasspath();
-
- for( int i = 0; i < cp.length; i++ )
- {
- final IPath path = cp[ i ].getPath();
-
- if( path.equals( this.path ) )
- {
- final IClasspathContainer container
- = JavaCore.getClasspathContainer( path, jproj );
- if(null != container){
- final IClasspathEntry[] containerEntries
- = container.getClasspathEntries();
-
- existing.removeAll( Arrays.asList( containerEntries ) );
-
- break;
- }
- }
- }
- }
- catch( JavaModelException e )
- {
- Logger.getLogger().logError( e );
- }
-
- return existing;
- }
-
- private IClasspathEntry newLibraryEntry( final IPath p )
- {
- IPath srcpath = null;
- IPath srcrootpath = null;
- IClasspathAttribute[] attrs = {};
- IAccessRule[] access = {};
-
- final ClasspathDecorations dec
- = decorations.getDecorations( getDecorationManagerKey(project, getPath().toString()), p.toString() );
-
- if( dec != null )
- {
- srcpath = dec.getSourceAttachmentPath();
- srcrootpath = dec.getSourceAttachmentRootPath();
- attrs = dec.getExtraAttributes();
- }
-
- return JavaCore.newLibraryEntry( p, srcpath, srcrootpath, access, attrs,
- false );
-
- }
-
- private boolean isSourceOrOutputDirectory( final IPath aPath )
- {
- if( isJavaProject( this.project ) )
- {
- try
- {
- final IJavaProject jproject = JavaCore.create( this.project );
- final IClasspathEntry[] cp = jproject.getRawClasspath();
-
- for( int i = 0; i < cp.length; i++ )
- {
- final IClasspathEntry cpe = cp[ i ];
-
- if( cpe.getEntryKind() == IClasspathEntry.CPE_SOURCE )
- {
- final IPath src = cpe.getPath();
- final IPath output = cpe.getOutputLocation();
-
- if( src.equals( aPath ) ||
- output != null && output.equals( aPath ) )
- {
- return true;
- }
- }
- }
-
- if( jproject.getOutputLocation().equals( aPath ) )
- {
- return true;
- }
- }
- catch( JavaModelException e )
- {
- CommonFrameworksPlugin.log( e );
- }
- }
-
- return false;
- }
-
- private static boolean isJavaProject( final IProject pj )
- {
- try
- {
- return pj.getNature( JavaCore.NATURE_ID ) != null;
- }
- catch( CoreException e )
- {
- return false;
- }
- }
-
- private static boolean isFlexibleProject( final IProject pj )
- {
- try
- {
- return pj.getNature( IModuleConstants.MODULE_NATURE_ID ) != null;
- }
- catch( CoreException e )
- {
- return false;
- }
- }
-
- private static boolean isJarFile( final File f )
- {
- if( f.isFile() )
- {
- final String fname = f.getName();
-
- if( fname.endsWith( ".jar" ) || fname.endsWith( ".zip" ) ) //$NON-NLS-1$ //$NON-NLS-2$
- {
- return true;
- }
- }
-
- return false;
- }
-
- /**
- * Taken from {@link JavaProject#isOnClasspath(org.eclipse.core.resources.IResource)}
- *
- * @param classpath
- * @param newPath
- * @return
- */
- private static boolean isAlreadyOnClasspath(Set classpath, IPath newPath)
- {
- for( Iterator itr = classpath.iterator(); itr.hasNext(); )
- {
- IClasspathEntry entry = (IClasspathEntry) itr.next();
- IPath entryPath = entry.getPath();
- if (entryPath.equals(newPath)) { // package fragment roots must match exactly entry
- // pathes (no exclusion there)
- return true;
- }
- if (entryPath.isPrefixOf(newPath) && !Util.isExcluded(newPath, ((ClasspathEntry) entry).fullInclusionPatternChars(), ((ClasspathEntry) entry).fullExclusionPatternChars(), false)) {
- return true;
- }
- }
- return false;
- }
-
- private static class Listener
-
- implements IResourceChangeListener
-
- {
- public void resourceChanged( final IResourceChangeEvent event )
- {
- // Locate all of the flexible project containers.
-
- final ArrayList containers = new ArrayList();
-
- final IProject[] projects
- = ResourcesPlugin.getWorkspace().getRoot().getProjects();
-
- for( int i = 0; i < projects.length; i++ )
- {
- final IProject project = projects[ i ];
-
- try
- {
- if( isJavaProject( project ) )
- {
- final IJavaProject jproj = JavaCore.create( project );
- final IClasspathEntry[] cpes = jproj.getRawClasspath();
-
- for( int j = 0; j < cpes.length; j++ )
- {
- final IClasspathEntry cpe = cpes[ j ];
-
- if( cpe.getEntryKind() == IClasspathEntry.CPE_CONTAINER )
- {
- final IClasspathContainer cont
- = JavaCore.getClasspathContainer( cpe.getPath(), jproj );
-
- if( cont instanceof FlexibleProjectContainer )
- {
- containers.add( cont );
- }
- }
- }
- }
- }
- catch( JavaModelException e )
- {
- CommonFrameworksPlugin.log( e );
- }
- }
-
- // Refresh the containers that are out of date.
-
- final IResourceDelta delta = event.getDelta();
-
- for( int i = 0, n = containers.size(); i < n; i++ )
- {
- final FlexibleProjectContainer c
- = (FlexibleProjectContainer) containers.get( i );
-
- if( c.isOutOfDate( delta ) )
- {
- c.refresh();
- }
- }
- }
- }
-
-} \ No newline at end of file

Back to the top