package org.maziarz.yiiclipse.quickfix;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.dltk.core.IModelElement;
import org.eclipse.dltk.core.ISourceModule;
import org.eclipse.dltk.core.IType;
import org.eclipse.dltk.core.ModelException;
import org.eclipse.dltk.ui.text.completion.IScriptCompletionProposal;
import org.eclipse.php.internal.core.ast.nodes.Scalar;
import org.eclipse.php.internal.ui.editor.contentassist.PHPCompletionProposal;
import org.eclipse.php.internal.ui.text.correction.IInvocationContext;
import org.eclipse.php.internal.ui.text.correction.IProblemLocation;
import org.eclipse.php.internal.ui.text.correction.IQuickFixProcessor;
import org.maziarz.yiiclipse.utils.ASTUtils;
import org.maziarz.yiiclipse.utils.StringUtils;
import org.maziarz.yiiclipse.utils.YiiPathResolver;
import org.maziarz.yiiclipse.wizards.YiiProjectWorkspaceHelper;
public class ViewQuickFixProcessor implements IQuickFixProcessor {
@Override
public boolean hasCorrections(ISourceModule unit, int problemId) {
return problemId > 0;
}
@Override
public IScriptCompletionProposal[] getCorrections(final IInvocationContext context, IProblemLocation[] locations)
throws CoreException {
int start = context.getCoveringNode().getStart();
int end = context.getCoveringNode().getEnd();
String view = null;
if (context.getCoveringNode() instanceof Scalar) {
view = ((Scalar) context.getCoveringNode()).getStringValue();
}
if (view == null) {
return null;
}
final String viewName = StringUtils.stripQuotes(view);
final IPath path = context.getCompilationUnit().getPath();
final IType type = ASTUtils.getEnclosingType(context.getCoveringNode());
if (type == null) {
return null;
}
List<IScriptCompletionProposal> corrections = new ArrayList<IScriptCompletionProposal>();
IScriptCompletionProposal proposal = new WorkspaceModificationProposal(new Runnable() {
@Override
public void run() {
String resolvedPath = YiiPathResolver.resolveViewPath(//
context.getCompilationUnit(), //
type.getElementName(),//
viewName);
IPath targetContainerPath = new Path(resolvedPath).removeLastSegments(1);
IResource findElement = ResourcesPlugin.getWorkspace().getRoot().findMember(targetContainerPath);
if (findElement instanceof IContainer) {
IContainer container = (IContainer) findElement;
YiiProjectWorkspaceHelper.INSTANCE.createFile(container, viewName + ".php");
} else {
throw new RuntimeException("Resource not found: "+targetContainerPath);
}
}
});
corrections.add(proposal);
// proposal =new CreateViewProposal("", 0, 100, null, "Create view file", 100);
return corrections.toArray(new IScriptCompletionProposal[corrections.size()]);
}
}