/** * Copyright 2013-2014 Recruit Technologies Co., Ltd. and contributors * (see CONTRIBUTORS.md) * * Licensed under the Apache License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. A copy of the * License is distributed with this work in the LICENSE.md file. You may * also obtain a copy of the License from * * 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. */ package org.gennai.gungnir.console; import java.io.IOException; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import jline.console.history.FileHistory; import org.gennai.gungnir.console.Console.CommandHandler; import org.jboss.netty.handler.codec.http.Cookie; import com.fasterxml.jackson.databind.ObjectMapper; public final class CookieCommandHandler implements CommandHandler { private static final Pattern COOKIE_COMMAND_PATTERN = Pattern .compile("^COOKIE(?:\\s+(CLEAR)|)$", Pattern.CASE_INSENSITIVE); private Map<String, Cookie> cookiesMap; private ConsoleContext context; private ObjectMapper mapper; public CookieCommandHandler(Map<String, Cookie> cookiesMap) { this.cookiesMap = cookiesMap; } @Override public void prepare(ConsoleContext context) { this.context = context; this.mapper = new ObjectMapper(); } @Override public boolean isMatch(String command) { return command.toUpperCase().startsWith("COOKIE"); } @Override public void execute(String command) { try { Matcher matcher = COOKIE_COMMAND_PATTERN.matcher(command); if (matcher.find()) { String cookieCommand = matcher.group(1); if (cookieCommand == null) { context.getReader().println(mapper.writeValueAsString(cookiesMap.values())); } else if ("CLEAR".equalsIgnoreCase(cookieCommand)) { cookiesMap.clear(); context.getReader().println("OK"); } } else { context.getReader().println("COOKIE commnad usage: COOKIE [CLEAR]"); } context.getReader().getHistory().add(command.replace('\n', ' ') + ';'); ((FileHistory) context.getReader().getHistory()).flush(); } catch (IOException e) { throw new RuntimeException(e); } } }