001 /* 002 * Copyright (C) 2012 eXo Platform SAS. 003 * 004 * This is free software; you can redistribute it and/or modify it 005 * under the terms of the GNU Lesser General Public License as 006 * published by the Free Software Foundation; either version 2.1 of 007 * the License, or (at your option) any later version. 008 * 009 * This software is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 012 * Lesser General Public License for more details. 013 * 014 * You should have received a copy of the GNU Lesser General Public 015 * License along with this software; if not, write to the Free 016 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 017 * 02110-1301 USA, or see the FSF site: http://www.fsf.org. 018 */ 019 020 package org.crsh.shell; 021 022 import java.io.Serializable; 023 import java.util.Collections; 024 025 public abstract class ShellResponse implements Serializable { 026 027 public static UnknownCommand unknownCommand(String name) { 028 return new UnknownCommand(name); 029 } 030 031 public static NoCommand noCommand() { 032 return NoCommand.INSTANCE; 033 } 034 035 public static Ok ok(Iterable<?> produced) { 036 return new Ok(produced); 037 } 038 039 public static Ok ok() { 040 return new Ok(); 041 } 042 043 public static Error evalError(String msg, Throwable throwable) { 044 return new Error(ErrorKind.EVALUATION, msg, throwable); 045 } 046 047 public static Error evalError(String msg) { 048 return new Error(ErrorKind.EVALUATION, msg); 049 } 050 051 public static Error internalError(String msg, Throwable throwable) { 052 return new Error(ErrorKind.INTERNAL, msg, throwable); 053 } 054 055 public static Error internalError(String msg) { 056 return new Error(ErrorKind.INTERNAL, msg); 057 } 058 059 public static Error error(ErrorKind type, String msg, Throwable throwable) { 060 return new Error(type, msg, throwable); 061 } 062 063 public static Error error(ErrorKind type, String msg) { 064 return new Error(type, msg); 065 } 066 067 public static Cancelled cancelled() { 068 return Cancelled.INSTANCE; 069 } 070 071 public static Close close() { 072 return Close.INSTANCE; 073 } 074 075 public abstract String getMessage(); 076 077 public static class UnknownCommand extends ShellResponse { 078 079 /** . */ 080 private final String name; 081 082 private UnknownCommand(String name) { 083 this.name = name; 084 } 085 086 public String getName() { 087 return name; 088 } 089 090 @Override 091 public String getMessage() { 092 return name + ": command not found"; 093 } 094 095 @Override 096 public String toString() { 097 return "UnknownCommand[" + name + "]"; 098 } 099 } 100 101 public static class NoCommand extends ShellResponse { 102 103 /** . */ 104 private static final NoCommand INSTANCE = new NoCommand(); 105 106 private NoCommand() { 107 } 108 109 @Override 110 public String getMessage() { 111 return ""; 112 } 113 } 114 115 public static class Close extends ShellResponse { 116 117 /** . */ 118 private static final Close INSTANCE = new Close(); 119 120 private Close() { 121 } 122 123 @Override 124 public String getMessage() { 125 return "Have a good day!\r\n"; 126 } 127 } 128 129 /** 130 * Command execution is terminated. 131 */ 132 public static class Ok extends ShellResponse { 133 134 /** . */ 135 private final transient Iterable<?> produced; 136 137 private Ok() { 138 this(Collections.<Object>emptyList()); 139 } 140 141 private Ok(Iterable<?> produced) { 142 this.produced = produced; 143 } 144 145 public Iterable<?> getProduced() { 146 return produced; 147 } 148 149 @Override 150 public String getMessage() { 151 return ""; 152 } 153 } 154 155 public static class Cancelled extends ShellResponse { 156 157 /** . */ 158 private static final Cancelled INSTANCE = new Cancelled(); 159 160 private Cancelled() { 161 } 162 163 @Override 164 public String getMessage() { 165 return ""; 166 } 167 } 168 169 public static class Error extends ShellResponse { 170 171 /** . */ 172 private final ErrorKind kind; 173 174 /** The throwable. */ 175 private final Throwable throwable; 176 177 /** . */ 178 private final String msg; 179 180 private Error(ErrorKind kind, String msg) { 181 this.kind = kind; 182 this.msg = msg; 183 this.throwable = null; 184 } 185 186 private Error(ErrorKind kind, String msg, Throwable throwable) { 187 this.kind = kind; 188 this.msg = msg; 189 this.throwable = throwable; 190 } 191 192 public ErrorKind getKind() { 193 return kind; 194 } 195 196 public Throwable getThrowable() { 197 return throwable; 198 } 199 200 @Override 201 public String getMessage() { 202 return msg; 203 } 204 205 public String toString() { 206 return "ShellResponse.Error[kind=" + kind + ",msg=" + msg + "]"; 207 } 208 } 209 }