/* * Copyright 2011 Alibaba.com All right reserved. This software is the * confidential and proprietary information of Alibaba.com ("Confidential * Information"). You shall not disclose such Confidential Information and shall * use it only in accordance with the terms of the license agreement you entered * into with Alibaba.com. */ package com.alibaba.dubbo.governance.web.home.module.screen; import java.io.PrintWriter; import java.util.Map; import java.util.regex.Pattern; import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import com.alibaba.dubbo.governance.web.util.WebConstants; import com.alibaba.dubbo.registry.common.domain.User; public abstract class Shell { @Autowired private HttpServletResponse response; protected String role = null; protected String operator = null; protected User currentUser = null; protected String operatorAddress = null; public void execute(Map<String,Object> context) throws Exception { if(context.get(WebConstants.CURRENT_USER_KEY)!=null){ User user = (User) context.get(WebConstants.CURRENT_USER_KEY); currentUser = user; operator = user.getUsername(); role = user.getRole(); context.put(WebConstants.CURRENT_USER_KEY, user); } operatorAddress = (String)context.get("request.remoteHost"); context.put("operator", operator); context.put("operatorAddress", operatorAddress); try { String message = doExecute(context); context.put("message", "OK: " + filterERROR(message)); } catch (Throwable t) { context.put("message", "ERROR: " + filterOK(t.getMessage())); } PrintWriter writer = response.getWriter(); writer.print(context.get("message")); writer.flush(); } protected abstract String doExecute(Map<String,Object> context) throws Exception; private static final Pattern OK_PATTERN = Pattern.compile("ok", Pattern.CASE_INSENSITIVE); private static final Pattern ERROR_PATTERN = Pattern.compile("error", Pattern.CASE_INSENSITIVE); private static String filterOK(String value) { if (value == null || value.length() == 0) { return value; } return OK_PATTERN.matcher(value).replaceAll("0k"); } private static String filterERROR(String value) { if (value == null || value.length() == 0) { return value; } return ERROR_PATTERN.matcher(value).replaceAll("err0r"); } }