package act.cli; /*- * #%L * ACT Framework * %% * Copyright (C) 2014 - 2017 ActFramework * %% * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * #L% */ import act.app.ActionContext; import jline.console.ConsoleReader; import org.osgl.util.E; import org.osgl.util.S; import java.io.IOException; import java.io.OutputStream; /** * The Cli over http context */ public class CliOverHttpContext extends CliContext { public CliOverHttpContext(ActionContext actionContext, OutputStream os) { super(line(actionContext), actionContext.app(), console(actionContext, os), session(actionContext), false); } private static String line(ActionContext actionContext) { String cmd = null; S.Buffer sb = S.buffer(); for (String s : actionContext.paramKeys()) { if ("cmd".equals(s)) { cmd = actionContext.paramVal(s); } else if (s.startsWith("-")) { String val = actionContext.paramVal(s); if (S.notBlank(val)) { val = val.replaceAll("[\n\r]+", "<br/>").trim(); if (val.contains(" ")) { char quote = val.contains("\"") ? '\'' : '\\'; val = S.quote(val, quote); } if (s.contains(",")) { s = S.before(s, ","); } sb.append(s).append(" ").append(val).append(" "); } } } E.illegalArgumentIf(null == cmd, "cmd param required"); return S.builder(cmd).append(" ").append(sb.toString()).toString(); } private static ConsoleReader console(ActionContext actionContext, OutputStream os) { try { return new CliOverHttpConsole(actionContext, os); } catch (IOException e) { throw E.ioException(e); } } private static CliSession session(ActionContext actionContext) { return new CliOverHttpSession(actionContext); } }