/**
* This file is part of CloudML [ http://cloudml.org ]
*
* Copyright (C) 2012 - SINTEF ICT
* Contact: Franck Chauvel <franck.chauvel@sintef.no>
*
* Module: root
*
* CloudML is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of
* the License, or (at your option) any later version.
*
* CloudML is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General
* Public License along with CloudML. If not, see
* <http://www.gnu.org/licenses/>.
*/
package org.cloudml.ui.shell.commands;
import org.antlr.v4.runtime.tree.TerminalNode;
import org.cloudml.facade.commands.CloudMlCommand;
import org.cloudml.facade.commands.*;
import org.cloudml.ui.shell.commands.builder.ShellCommandsBaseVisitor;
import org.cloudml.ui.shell.commands.builder.ShellCommandsParser;
import org.cloudml.ui.shell.terminal.Terminal;
import java.util.ArrayList;
import java.util.Arrays;
import static org.cloudml.facade.commands.ValidateCommand.REPORT_ONLY_ERRORS;
import static org.cloudml.facade.commands.ValidateCommand.REPORT_WARNINGS_AND_ERRORS;
/**
* Traverse subparts of the ANTLR parse tree and output the related
* CloudMLCommand objects.
*/
public class CloudMLCommandBuilder extends ShellCommandsBaseVisitor<CloudMlCommand> {
@Override
public CloudMlCommand visitAnalyseRobustness(ShellCommandsParser.AnalyseRobustnessContext ctx) {
if (ctx.filter() != null) {
return new AnalyseRobustness(ctx.filter().observe.getText(), ctx.filter().control.getText());
}
return new AnalyseRobustness();
}
@Override
public CloudMlCommand visitDeploy(ShellCommandsParser.DeployContext ctx) {
return new Deploy();
}
@Override
public CloudMlCommand visitUpload(ShellCommandsParser.UploadContext ctx) {
return new Upload(ctx.local.getText(), ctx.ID().getText(), ctx.remote.getText());
}
@Override
public CloudMlCommand visitConnect(ShellCommandsParser.ConnectContext ctx) {
return new Attach(ctx.customer.getText(), ctx.provider.getText());
}
@Override
public CloudMlCommand visitDisconnect(ShellCommandsParser.DisconnectContext ctx) {
return new Detach(ctx.customer.getText(), ctx.provider.getText());
}
@Override
public CloudMlCommand visitDestroy(ShellCommandsParser.DestroyContext ctx) {
return new Destroy(ctx.ID().getText());
}
@Override
public CloudMlCommand visitInstall(ShellCommandsParser.InstallContext ctx) {
return new Install(ctx.component.getText(), ctx.platform.getText());
}
@Override
public CloudMlCommand visitInstantiate(ShellCommandsParser.InstantiateContext ctx) {
return new Instantiate(ctx.type.getText(), ctx.instance.getText());
}
@Override
public CloudMlCommand visitList(ShellCommandsParser.ListContext ctx) {
final String level = ctx.level().getText();
if (level.startsWith("instance")) {
return new ListComponentInstances();
} else {
return new ListComponents();
}
}
@Override
public CloudMlCommand visitLoad(ShellCommandsParser.LoadContext ctx) {
final String kind = ctx.kind().getText();
if (kind.equalsIgnoreCase("deployment")) {
return new LoadDeployment(ctx.PATH().getText());
} else {
return new LoadCredentials(ctx.PATH().getText());
}
}
@Override
public CloudMlCommand visitStore(ShellCommandsParser.StoreContext ctx) {
final String kind = ctx.kind().getText();
if (kind.equalsIgnoreCase("deployment")) {
return new StoreDeployment(ctx.PATH().getText());
} else {
return new StoreCredentials(ctx.PATH().getText());
}
}
@Override
public CloudMlCommand visitView(ShellCommandsParser.ViewContext ctx) {
final String level = ctx.level().getText();
if (level.startsWith("instance")) {
return new ViewComponentInstance(ctx.ID().getText());
} else {
return new ViewComponent(ctx.ID().getText());
}
}
@Override
public CloudMlCommand visitShotImage(ShellCommandsParser.ShotImageContext ctx) {
return new ShotImage(ctx.PATH().getText());
}
@Override
public CloudMlCommand visitSnapshot(ShellCommandsParser.SnapshotContext ctx) {
return new Snapshot(ctx.ID().getText());
}
@Override
public CloudMlCommand visitScaleOut(ShellCommandsParser.ScaleOutContext ctx) {
return new ScaleOut(ctx.ID().getText());
}
@Override
public CloudMlCommand visitMultipleScaleOut(ShellCommandsParser.MultipleScaleOutContext ctx){
return new ScaleOut(ctx.ID().getText(), Integer.parseInt(ctx.times.getText()));
}
@Override
public CloudMlCommand visitImage(ShellCommandsParser.ImageContext ctx) {
return new Image(ctx.ID().getText());
}
@Override
public CloudMlCommand visitReset(ShellCommandsParser.ResetContext ctx) {
return new Reset();
}
@Override
public CloudMlCommand visitStop(ShellCommandsParser.StopContext ctx) {
ArrayList<String> al=new ArrayList<String>();
for(TerminalNode t: ctx.ID()){
al.add(t.getText());
}
return new StopComponent(al);
}
@Override
public CloudMlCommand visitUninstall(ShellCommandsParser.UninstallContext ctx) {
return new Uninstall(ctx.platform.getText(), ctx.component.getText());
}
@Override
public CloudMlCommand visitStart(ShellCommandsParser.StartContext ctx) {
ArrayList<String> al=new ArrayList<String>();
for(TerminalNode t:ctx.ID()){
al.add(t.getText());
}
return new StartComponent(al);
}
@Override
public CloudMlCommand visitValidate(ShellCommandsParser.ValidateContext ctx) {
if (ctx.noWarnings != null) {
return new ValidateCommand(REPORT_ONLY_ERRORS);
}
return new ValidateCommand(REPORT_WARNINGS_AND_ERRORS);
}
@Override
public CloudMlCommand visitDebugMode(ShellCommandsParser.DebugModeContext ctx) {
return new DebugMode(ctx.state.getText().equals("true"));
}
@Override
public CloudMlCommand visitBurst(ShellCommandsParser.BurstContext ctx) {
return new Burst(ctx.ID(0).getText(),ctx.ID(1).getText());
}
}