package com.dubture.composer.core.model;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import com.dubture.composer.core.log.Logger;
import com.dubture.getcomposer.core.ComposerPackage;
import com.dubture.getcomposer.core.objects.Autoload;
public class EclipsePHPPackage implements
NamespaceResolverInterface, InstallableItem
{
private final ComposerPackage phpPackage;
private IPath path;
public EclipsePHPPackage(ComposerPackage phpPackage) {
Assert.isNotNull(phpPackage);
this.phpPackage = phpPackage;
}
@Override
public IPath resolve(IResource resource)
{
Autoload autoload = phpPackage.getAutoload();
if (autoload == null || autoload.getPsr0() == null || autoload.getPsr0().getFirst() == null) {
Logger.debug("Unable to resolve namespace without autoload information " + phpPackage.getName());
return null;
}
String targetDir = phpPackage.getTargetDir();
IPath ns = null;
IPath path = resource.getFullPath();
IPath composerPath = getPath();
IPath psr0Path = composerPath.append(autoload.getPsr0().getFirst().getNamespace());
int segments = psr0Path.segmentCount();
if (path.matchingFirstSegments(psr0Path) == segments) {
if (targetDir != null && targetDir.length() > 0) {
Path target = new Path(targetDir);
ns = target.append(path.removeFirstSegments(psr0Path.segmentCount()));
} else {
ns = path.removeFirstSegments(psr0Path.segmentCount());
}
}
return ns;
}
@Override
public String getName()
{
return phpPackage.getName();
}
@Override
public String getDescription()
{
return phpPackage.getDescription();
}
@Override
public String getUrl()
{
return phpPackage.getHomepage();
}
public void setFullPath(String fullPath)
{
path = new Path(fullPath);
}
public IPath getPath()
{
return path;
}
public ComposerPackage getPhpPackage()
{
return phpPackage;
}
@Override
public IPath reverseResolve(IProject project, String namespace) {
// TODO Auto-generated method stub
return null;
}
}