/*
* Copyright 2005-2010 Ignis Software Tools Ltd. All rights reserved.
*/
package com.aqua.sysobj.conn;
import java.util.ArrayList;
import systemobject.terminal.Cli;
import systemobject.terminal.Prompt;
import systemobject.terminal.VT100FilterInputStream;
import com.aqua.sysobj.conn.CliApplication;
import com.aqua.sysobj.conn.CliConnectionImpl;
import com.aqua.sysobj.conn.Position;
/**
* Factory class for creation of {@link Cli}/{@link CliApplication} instances.
* @author Golan Derazon
*/
public class CliFactory {
public static final String OPERATING_SYSTEM_NA = EnumOperatinSystem.DEFAULT.toString().toLowerCase();
public static final String OPERATING_SYSTEM_WINDOWS = EnumOperatinSystem.WINDOWS.toString().toLowerCase();
public static final String OPERATING_SYSTEM_LINUX = EnumOperatinSystem.LINUX.toString().toLowerCase();
public static enum EnumOperatinSystem {
DEFAULT(1),
WINDOWS(2),
LINUX(3);
EnumOperatinSystem(int value) {
this.value=value;
}
private int value;
public int value(){return value;}
}
public static CliConnectionImpl createCliConnection(EnumOperatinSystem os) throws Exception {
CliConnectionImpl cliConn = null;
if (os == EnumOperatinSystem.WINDOWS) {
cliConn = new WindowsDefaultCliConnection();
} else if (os == EnumOperatinSystem.LINUX) {
cliConn = new LinuxDefaultCliConnection();
} else {
throw new Exception("Unsupported Operting System - " + os.toString());
}
return cliConn;
}
/**
* Creates {@link Cli}.
* The creation process also includes login.
* If login fails the creation operation will fail.
*
* @param host - the host to connect to.
* @param operatingSystem - currently one of {@link #OPERATING_SYSTEM_LINUX} or {@link #OPERATING_SYSTEM_WINDOWS}
* @param protocol - one of telnet/ssh/rs232
* @param user - user name to login with
* @param password- user password to login with
* @param additionalPrompts - additional applicative prompts.
*/
public static Cli createCli(String host,String operatingSystem,String protocol,String user,String password,Prompt[] additionalPrompts) throws Exception {
BaseCli impl = null;
if (operatingSystem.equals(OPERATING_SYSTEM_WINDOWS)){
impl = new WindowsCli(user,password,additionalPrompts);
impl.setDump(true);
impl.setUseTelnetInputStream(true);
}else
if (operatingSystem.equals(OPERATING_SYSTEM_LINUX)){
impl = new LinuxCli(user,password,additionalPrompts);
}else
if (operatingSystem.equals(OPERATING_SYSTEM_NA)){
impl = new DefaultCli(user,password,additionalPrompts);
}
impl.setUser(user);
impl.setPassword(password);
impl.setProtocol(protocol);
impl.setHost(host);
impl.connect();
return impl.getCli();
}
/**
* Creates {@link Cli}.
* The creation process also includes login.
* If login fails the creation operation will fail.
*
* @param host - the host to connect to.
* @param operatingSystem - currently one of {@link #OPERATING_SYSTEM_LINUX} or {@link #OPERATING_SYSTEM_WINDOWS}
* @param protocol - one of telnet/ssh/rs232
* @param user - user name to login with
* @param password- user password to login with
* @param additionalPrompts - additional applicative prompts.
*/
public static CliApplication createCliApplication(String host,String operatingSystem,String protocol,String user,String password,Prompt[] additionalPrompts) throws Exception {
BaseCli impl = null;
if (operatingSystem.equals(OPERATING_SYSTEM_WINDOWS)){
impl = new WindowsCli(user,password,additionalPrompts);
impl.setDump(true);
impl.setUseTelnetInputStream(true);
}else
if (operatingSystem.equals(OPERATING_SYSTEM_LINUX)){
impl = new LinuxCli(user,password,additionalPrompts);
}
impl.setUser(user);
impl.setPassword(password);
impl.setProtocol(protocol);
impl.setHost(host);
impl.connect();
impl.terminal.addFilter(new VT100FilterInputStream());
String name = host+"("+operatingSystem+")";
CliApplication cliApp = new CliApplication(impl,name);
cliApp.setXPath(name);
return cliApp;
}
/**
*/
static abstract class BaseCli extends CliConnectionImpl {
protected Prompt[] prompts;
private BaseCli(String userName,String password,Prompt[] additionalPrompts){
this.prompts = additionalPrompts;
this.password = password;
}
public Cli getCli(){
return cli;
}
public Position[] getPositions() {
return null;
}
protected void addAdditionalPrompts(ArrayList<Prompt> promptsColl){
if (prompts != null){
for (Prompt p:prompts){
promptsColl.add(p);
}
}
}
}
/**
*/
static class WindowsCli extends BaseCli {
private WindowsCli(String user,String password,Prompt[] additionalPrompts){
super(user,password,additionalPrompts);
}
public Prompt[] getPrompts() {
ArrayList<Prompt> prompts = new ArrayList<Prompt>();
Prompt p = new Prompt();
p.setPrompt("login:");
p.setStringToSend(getUser());
prompts.add(p);
p = new Prompt();
p.setPrompt("password:");
p.setStringToSend(getPassword());
prompts.add(p);
p = new Prompt();
p.setPrompt(">");
p.setCommandEnd(true);
prompts.add(p);
addAdditionalPrompts(prompts);
return prompts.toArray(new Prompt[prompts.size()]);
}
}
/**
*
*/
static class LinuxCli extends BaseCli {
private LinuxCli(String user,String password,Prompt[] prompts){
super(user,password,prompts);
}
public Prompt[] getPrompts() {
ArrayList<Prompt> prompts = new ArrayList<Prompt>();
Prompt p = new Prompt();
p.setCommandEnd(true);
p.setPrompt("# ");
prompts.add(p);
p = new Prompt();
p.setPrompt("login: ");
p.setStringToSend(getUser());
prompts.add(p);
p = new Prompt();
p.setPrompt("Password: ");
p.setStringToSend(getPassword());
prompts.add(p);
addAdditionalPrompts(prompts);
return prompts.toArray(new Prompt[prompts.size()]);
}
}
/**
*
*/
static class DefaultCli extends BaseCli {
private DefaultCli(String user,String password,Prompt[] prompts){
super(user,password,prompts);
}
public Prompt[] getPrompts() {
ArrayList<Prompt> prompts = new ArrayList<Prompt>();
addAdditionalPrompts(prompts);
return prompts.toArray(new Prompt[prompts.size()]);
}
}
}