/*******************************************************************************
* This file is part of the Symfony eclipse plugin.
*
* (c) Robert Gruendler <r.gruendler@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
******************************************************************************/
package com.dubture.symfony.core.model;
import org.apache.commons.lang.StringUtils;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.dltk.ast.Modifiers;
import org.eclipse.dltk.core.IModelElement;
import org.eclipse.dltk.core.INamespace;
import org.eclipse.dltk.core.IScriptProject;
import org.eclipse.dltk.core.ISourceModule;
import org.eclipse.dltk.core.ModelException;
import org.eclipse.dltk.internal.core.ModelElement;
import org.eclipse.dltk.internal.core.SourceNamespace;
import org.eclipse.dltk.internal.core.SourceType;
import org.eclipse.dltk.internal.core.hierarchy.FakeType;
@SuppressWarnings("restriction")
public class Bundle extends SourceType {
public static final String NAME = "name";
public static final String NAMESPACE = "namespace";
public static final String PATH = "path";
private SourceNamespace _namespace = null;
private String _path = null;
private IScriptProject _project;
public Bundle(ModelElement parent, String name) {
super(parent, name);
}
public void setPath(String path) {
_path = path;
}
@Override
public IPath getPath() {
IPath path = null;
try {
path = super.getPath();
} catch (Exception e) {
path = new Path(_path);
}
return path;
}
@Override
public int getFlags() throws ModelException {
return Modifiers.AccPublic;
}
@Override
public Object getElementInfo() throws ModelException {
return new FakeTypeElementInfo();
}
@Override
protected Object openWhenClosed(Object info, IProgressMonitor monitor)
throws ModelException {
return new FakeTypeElementInfo();
}
@Override
public ISourceModule getSourceModule() {
return super.getSourceModule();
}
@Override
public IModelElement getParent() {
// avoid showing the same name twice in each codeassist
// popup row, ie:
// AcmeDemoBundle - AcmeDemoBundle
return new FakeType(parent, "");
}
/**
* Returns the bundle namespace or null
*/
public INamespace getNamespace() throws ModelException {
if (_namespace != null)
return _namespace;
String path = getPath().toString();
if (path == null)
return super.getNamespace();
String[] parts = StringUtils.splitByCharacterTypeCamelCase(getElementName());
if (parts.length == 0) {
return super.getNamespace();
}
String first = parts[0];
int index = path.indexOf(first);
if (index == -1)
return super.getNamespace();
String ns = path.substring(index);
String[] namespace = ns.split("/");
_namespace = new SourceNamespace(namespace);
return _namespace;
}
public String getTranslationPath() {
return _path + "/Resources/translations";
}
@Override
public IScriptProject getScriptProject() {
if (_project != null)
return _project;
return super.getScriptProject();
}
public void setProject(IScriptProject project) {
_project = project;
}
/* (non-Javadoc)
* @see org.eclipse.dltk.internal.core.SourceType#getElementType()
*/
@Override
public int getElementType()
{
return ISymfonyModelElement.BUNDLE;
}
}