/** * 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.facade; import java.util.Collection; import java.util.Iterator; import java.util.List; import org.cloudml.core.Deployment; import org.cloudml.facade.commands.CloudMlCommand; import org.cloudml.facade.commands.CommandFactory; import org.cloudml.mrt.ModelRepo; /** * * @author huis */ public class FacadeBridge implements ModelRepo { CloudML facade = null; CommandFactory factory = null; String longContent = null; public FacadeBridge(){ facade = Factory.getInstance().getCloudML(); factory = new CommandFactory(); } @Override public Deployment getRoot() { return facade.getDeploymentModel(); } public Object handle(String name, Collection<String> params){ CloudMlCommand command = null; if("LoadDeployment".equals(name)){ if(params == null || params.isEmpty()){ return "###Waiting for Deployment Content"; } String param = params.iterator().next(); command = factory.loadDeployment(param); } else if("Deploy".equals(name)){ command = factory.deploy(); } else if("Reset".equals(name)){ command = factory.reset(); } else if("StartArtefact".equals(name)){ command = factory.startComponent((List)params); } else if("ScaleOut".equals(name)){ if(params.size()==1) command = factory.scaleOut(params.iterator().next()); else if(params.size()==2){ Iterator<String> it = params.iterator(); String nm = it.next(); String nb = it.next(); command = factory.scaleOut( nm, Integer.parseInt(nb) ); } } else if("Image".equals(name)){ command = factory.image(params.iterator().next()); } else if("Snapshot".equals(name)){ command = factory.snapshot(params.iterator().next()); } else if("Burst".equals(name)){ Iterator<String> itor = params.iterator(); command = factory.burst(itor.next(), itor.next()); } else if("StartComponent".equals(name)){ command = factory.startComponent((List)params); } else if("StopComponent".equals(name)){ command = factory.stopComponent((List)params); } else if("OfflineDataMigration".equals(name)){ if(params.size() >= 3){ Iterator<String> it = params.iterator(); String source=it.next(); String destination=it.next(); int nbThread=Integer.parseInt(it.next()); command=factory.offlineMigration(source,destination,nbThread); } } else if("OnlineDataMigration".equals(name)){ if(params.size() >= 4){ Iterator<String> it = params.iterator(); String source=it.next(); String destination=it.next(); int nbThread=Integer.parseInt(it.next()); int vdpSize=Integer.parseInt(it.next()); command=factory.onlineMigration(source,destination,nbThread, vdpSize); } } else{ throw new RuntimeException("Command not defined in facade"); } facade.fireAndForget(command); return null; } }