/*******************************************************************************
* 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.cdi.internal.core.impl;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jdt.core.IMember;
import org.eclipse.jdt.core.JavaModelException;
import org.jboss.tools.cdi.core.CDICorePlugin;
import org.jboss.tools.cdi.core.ICDIElement;
import org.jboss.tools.cdi.core.ICDIProject;
import org.jboss.tools.cdi.core.extension.CDIExtensionManager;
import org.jboss.tools.common.java.ParametedType;
import org.jboss.tools.common.java.ParametedTypeFactory;
import org.jboss.tools.common.util.UniquePaths;
/**
*
* @author Viacheslav Kabanovich
*
*/
public abstract class CDIElement implements ICDIElement {
static int LAST_ID = 0;
protected int id;
protected ICDIElement parent;
protected IPath source;
public CDIElement() {
synchronized (this) {
id = LAST_ID++;
}
}
public int getId() {
return id;
}
@Override
public ICDIProject getCDIProject() {
return parent != null ? parent.getCDIProject() : null;
}
@Override
public ICDIProject getDeclaringProject() {
return parent != null ? parent.getDeclaringProject() : null;
}
public CDIExtensionManager getExtensionManager() {
ICDIProject project = getCDIProject();
return project == null ? null : project.getNature().getExtensionManager();
}
protected ParametedType getObjectType(IMember context) {
try {
return getCDIProject().getNature().getTypeFactory().getParametedType(context, ParametedTypeFactory.OBJECT);
} catch (JavaModelException e) {
CDICorePlugin.getDefault().logError(e);
return null;
}
}
public void setParent(ICDIElement parent) {
this.parent = parent;
}
public ICDIElement getParent() {
return parent;
}
@Override
public IResource getResource() {
IPath path = getSourcePath();
if(path == null) return null;
IResource r = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
if(r == null || !r.exists()) return null;
return r;
}
@Override
public IPath getSourcePath() {
return source != null ? source : parent != null ? parent.getSourcePath() : null;
}
public void setSourcePath(IPath source) {
if(source != null) {
source = UniquePaths.getInstance().intern(source);
}
this.source = source;
}
@Override
public boolean exists() {
return parent != null && parent.exists();
}
}