/*******************************************************************************
* Copyright (c) 2000, 2009 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.wst.jsdt.internal.ui.wizards.buildpaths;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.wst.jsdt.core.IIncludePathEntry;
import org.eclipse.wst.jsdt.core.IJavaScriptProject;
import org.eclipse.wst.jsdt.core.IJsGlobalScopeContainer;
import org.eclipse.wst.jsdt.core.JavaScriptCore;
public class CPUserLibraryElement {
private class UpdatedJsGlobalScopeContainer implements IJsGlobalScopeContainer {
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.core.IJsGlobalScopeContainer#getClasspathEntries()
*/
/**
* @deprecated Use {@link #getIncludepathEntries()} instead
*/
public IIncludePathEntry[] getClasspathEntries() {
return getIncludepathEntries();
}
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.core.IJsGlobalScopeContainer#getClasspathEntries()
*/
public IIncludePathEntry[] getIncludepathEntries() {
CPListElement[] children= getChildren();
IIncludePathEntry[] entries= new IIncludePathEntry[children.length];
for (int i= 0; i < entries.length; i++) {
entries[i]= children[i].getClasspathEntry();
}
return entries;
}
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.core.IJsGlobalScopeContainer#getDescription()
*/
public String getDescription() {
return getName();
}
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.core.IJsGlobalScopeContainer#getKind()
*/
public int getKind() {
return K_APPLICATION;
}
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.core.IJsGlobalScopeContainer#getPath()
*/
public IPath getPath() {
return CPUserLibraryElement.this.getPath();
}
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.core.IJsGlobalScopeContainer#resolvedLibraryImport(java.lang.String)
*/
public String[] resolvedLibraryImport(String a) {
// TODO Auto-generated method stub
return null;
}
}
private String fName;
private List fChildren;
public CPUserLibraryElement(String name, IJsGlobalScopeContainer container, IJavaScriptProject project) {
fName= name;
fChildren= new ArrayList();
if (container != null) {
IIncludePathEntry[] entries= container.getIncludepathEntries();
CPListElement[] res= new CPListElement[entries.length];
for (int i= 0; i < res.length; i++) {
IIncludePathEntry curr= entries[i];
CPListElement elem= CPListElement.createFromExisting(this, curr, project);
fChildren.add(elem);
}
}
}
public CPUserLibraryElement(String name, CPListElement[] children) {
fName= name;
fChildren= new ArrayList();
if (children != null) {
for (int i= 0; i < children.length; i++) {
fChildren.add(children[i]);
}
}
}
public CPListElement[] getChildren() {
return (CPListElement[]) fChildren.toArray(new CPListElement[fChildren.size()]);
}
public String getName() {
return fName;
}
public IPath getPath() {
return new Path(JavaScriptCore.USER_LIBRARY_CONTAINER_ID).append(fName);
}
public void add(CPListElement element) {
if (!fChildren.contains(element)) {
fChildren.add(element);
}
}
public void remove(CPListElement element) {
fChildren.remove(element);
}
public void replace(CPListElement existingElement, CPListElement element) {
if (fChildren.contains(element)) {
fChildren.remove(existingElement);
} else {
int index= fChildren.indexOf(existingElement);
if (index != -1) {
fChildren.set(index, element);
} else {
fChildren.add(element);
}
element.setAttributesFromExisting(existingElement);
}
}
public IJsGlobalScopeContainer getUpdatedContainer() {
return new UpdatedJsGlobalScopeContainer();
}
public boolean hasChanges(IJsGlobalScopeContainer oldContainer) {
if (oldContainer == null) {
return true;
}
IIncludePathEntry[] oldEntries= oldContainer.getIncludepathEntries();
if (fChildren.size() != oldEntries.length) {
return true;
}
for (int i= 0; i < oldEntries.length; i++) {
CPListElement child= (CPListElement) fChildren.get(i);
if (!child.getClasspathEntry().equals(oldEntries[i])) {
return true;
}
}
return false;
}
}