package org.radrails.rails.internal.ui.console.commands;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.radrails.rails.internal.generators.Generator;
import org.radrails.rails.internal.generators.GeneratorLocatorsManager;
import org.radrails.rails.internal.ui.console.IRailsShellConstants;
import org.radrails.rails.ui.console.RailsShellCommandProvider;
import org.rubypeople.rdt.launching.IRubyLaunchConfigurationConstants;
import org.rubypeople.rdt.launching.ITerminal;
public class ScriptGenerateAndDestroyCommandProvider extends RailsShellCommandProvider
{
@Override
public Set<String> commandsHandled()
{
Set<String> commands = new HashSet<String>();
commands.add(IRailsShellConstants.SCRIPT_DESTROY);
commands.add(IRailsShellConstants.SCRIPT_GENERATE);
return commands;
}
@Override
public List<ICompletionProposal> getCompletionProposals(String prefix, List<String> tokens, int offset)
{
List<ICompletionProposal> proposals = new ArrayList<ICompletionProposal>();
String token = getLastToken(prefix, tokens);
if (tokens.size() <= 1)
{
if (!tokens.contains(IRailsShellConstants.SCRIPT_DESTROY)
&& !tokens.contains(IRailsShellConstants.SCRIPT_GENERATE))
{
proposals.add(createProposal(IRailsShellConstants.SCRIPT_DESTROY,
"Destroy files which were created by a generator", offset, token));
proposals.add(createProposal(IRailsShellConstants.SCRIPT_GENERATE,
"Create files using the specified generator", offset, token));
}
}
if (tokens.size() > 1)
{
if (!tokens.contains("-h"))
{
proposals.add(createProposal("-h", "Show the help message", offset, token));
}
if (tokens.size() <= 2 && !token.startsWith("-")) // already selected a generator
{
List<Generator> generators = GeneratorLocatorsManager.getInstance().getAllGenerators(getProject());
Collections.sort(generators);
for (Generator generator : generators)
{ // TODO Grab the descriptions for these generators
ICompletionProposal proposal = createProposal(generator.getName(), offset, token);
if (proposal != null)
proposals.add(proposal);
}
}
}
return proposals;
}
@Override
public void run(ITerminal shell, String command)
{
Map<String, Object> attrs = new HashMap<String, Object>();
attrs.put(IRubyLaunchConfigurationConstants.ATTR_REQUIRES_REFRESH, true);
launchInsideShell(shell, command, null, attrs);
}
}