001 package org.crsh.shell.impl.remoting; 002 003 import org.crsh.shell.ShellProcess; 004 import org.crsh.shell.ShellProcessContext; 005 006 /** @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a> */ 007 public class ServerProcess implements ShellProcess { 008 009 /** . */ 010 final ServerAutomaton server; 011 012 /** . */ 013 final String line; 014 015 /** . */ 016 private int status; 017 018 ServerProcess(ServerAutomaton server, String line) { 019 this.server = server; 020 this.line = line; 021 this.status = 0; 022 } 023 024 public void execute(ShellProcessContext processContext) throws IllegalStateException { 025 if (status != 0) { 026 throw new IllegalStateException(); 027 } 028 status = 1; 029 try { 030 server.execute(this, processContext); 031 } 032 finally { 033 status = 2; 034 } 035 } 036 037 public void cancel() { 038 switch (status) { 039 case 0: 040 throw new IllegalStateException(); 041 case 1: 042 server.cancel(this); 043 break; 044 } 045 } 046 }