/*******************************************************************************
* Copyright (c) 2007 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.common.core.classpath;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jdt.core.ClasspathContainerInitializer;
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;
/**
*
* @author Rob Stryker <rob.stryker@redhat.com>
*
*/
public abstract class AbstractClasspathContainerInitializer extends
ClasspathContainerInitializer {
protected IJavaProject javaProject;
public AbstractClasspathContainerInitializer() {
}
/**
* Description of the Method
*
* @param containerPath
* Description of the Parameter
* @param project
* Description of the Parameter
* @exception CoreException
* Description of the Exception
*/
public void initialize(IPath containerPath, IJavaProject project)
throws CoreException {
this.javaProject = project;
int size = containerPath.segmentCount();
if (size > 0) {
AbstractClasspathContainer container = createClasspathContainer(containerPath);
JavaCore.setClasspathContainer(containerPath,
new IJavaProject[] { project },
new IClasspathContainer[] { container }, null);
}
}
/**
* Description of the Method
*
* @param path
* Description of the Parameter
* @return Description of the Return Value
*/
protected abstract AbstractClasspathContainer createClasspathContainer(
IPath path);
/**
* Gets the classpathContainerID attribute of the
* AbstractClasspathContainerInitializer object
*
* @return The classpathContainerID value
*/
protected abstract String getClasspathContainerID();
public boolean canUpdateClasspathContainer(IPath containerPath,
IJavaProject project) {
return true;
}
public void requestClasspathContainerUpdate(final IPath containerPath,
final IJavaProject project, final IClasspathContainer sg)
throws CoreException
{
String key = AbstractClasspathContainer
.getDecorationManagerKey(containerPath.toString());
IClasspathEntry[] entries = sg.getClasspathEntries();
ClasspathDecorationsManager decorations = AbstractClasspathContainer
.getDecorationsManager();
decorations.clearAllDecorations(key);
for (int i = 0; i < entries.length; i++) {
final IClasspathEntry entry = entries[i];
final IPath srcpath = entry.getSourceAttachmentPath();
final IPath srcrootpath = entry.getSourceAttachmentRootPath();
final IClasspathAttribute[] attrs = entry.getExtraAttributes();
final String eid = entry.getPath().toString();
final ClasspathDecorations dec = new ClasspathDecorations();
dec.setSourceAttachmentPath(srcpath);
dec.setSourceAttachmentRootPath(srcrootpath);
dec.setExtraAttributes(attrs);
decorations.setDecorations(key, eid, dec);
}
decorations.save();
final IClasspathContainer container = JavaCore.getClasspathContainer(
containerPath, project);
((AbstractClasspathContainer) container).refresh();
}
}