OSDN Git Service

Initial commit
[ultramonkey-l7/l7gui.git] / src / src / org / ultramonkey / l7 / view / VSModServlet.java
1 package org.ultramonkey.l7.view;
2
3 import java.io.IOException;
4 import java.util.*;
5 import java.util.regex.Matcher;
6 import java.util.regex.Pattern;
7
8 import javax.servlet.*;
9 import javax.servlet.http.*;
10
11 import org.apache.log4j.Logger;
12 import org.ultramonkey.l7.model.*;
13 import org.ultramonkey.l7.controller.*;
14
15 /**
16  * <p>class VSModServlet</p>
17  * <p>Copyright(c) NTT COMWARE 2008</p>
18  * @author kubota
19  */
20 public class VSModServlet extends L7guiServletBase {
21         static final long serialVersionUID = 1L;        
22
23         private Logger logger = Logger.getLogger(LogCategorySet.GUI_IO);
24
25         /* (non-Java-doc)
26          * @see javax.servlet.http.HttpServlet#HttpServlet()
27          */
28         public VSModServlet() {
29                 super();
30         // --- debug log (constructor) ---
31                 if (logger.isDebugEnabled()) {
32                         logger.debug("11349 class VSModServlet created.");
33                 }
34                 // --- debug log (constructor) ---
35         }
36
37         /* (non-Java-doc)
38          * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
39          */
40         protected void doGet(HttpServletRequest request, HttpServletResponse response)
41                 throws ServletException, IOException {
42                 // --- debug log (in method) ---
43                 if (logger.isDebugEnabled()) {
44                         StringBuffer buf = new StringBuffer();
45             buf.append("VSModServlet::doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException in ");
46             buf.append("request=(" + request + "), ");
47             buf.append("response=(" + response + ")");
48             logger.debug("11350 " + buf.toString());
49             request.setCharacterEncoding("UTF-8");
50                         logger.debug("11351 QueryString=\"" + request.getQueryString() + "\"");
51                 }
52                 // --- debug log (in method) ---
53
54                 response.sendRedirect(RedirectPages.LOGIN);
55
56                 // --- debug log (out method) ---
57                 if (logger.isDebugEnabled()) {
58             logger.debug("11352 VSModServlet::doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException out");
59                 }
60                 // --- debug log (out method) ---
61                 return;
62     }
63         
64
65         /* (non-Java-doc)
66          * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
67          */
68         protected void doPost(HttpServletRequest request, HttpServletResponse response)
69                 throws ServletException, IOException {
70                 // --- debug log (in method) ---
71                 if (logger.isDebugEnabled()) {
72                         StringBuffer buf = new StringBuffer();
73             buf.append("VSModServlet::doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException in ");
74             buf.append("request=(" + request + "), ");
75             buf.append("response=(" + response + ")");
76             logger.debug("11353 " + buf.toString());
77             request.setCharacterEncoding("UTF-8");
78                         Enumeration keys = request.getParameterNames();
79                         String post = "";
80                         while (keys.hasMoreElements()) {
81                                 if (post.length() != 0)
82                                         post += "&";
83                                 String key = (String) keys.nextElement();
84                                 post += key + "=" + request.getParameter(key);
85                         }
86                         logger.debug("11354 PostData=\"" + post + "\"");
87                 }
88                 // --- debug log (in method) ---
89
90                 // check login session
91                 super.doPost(request, response);
92                 
93                 HttpSession session = request.getSession(false);
94                 if (login == false || session == null) {
95                         if (session != null) {
96                                 MessageView error = new MessageView(41087, LogCategorySet.GUI_USER_AUTHENTICATION,
97                                                 Message.INVALID_SESSSION);
98                                 session.setAttribute(SessionKeys.RESULT_MESSAGE, error);
99                         }
100                         response.sendRedirect(RedirectPages.LOGIN);
101                         // --- debug log (out method) ---
102                         if (logger.isDebugEnabled()) {
103                     logger.debug("11355 VSModServlet::doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException out");
104                         }
105                         // --- debug log (out method) ---
106                         return;
107                 }
108
109         request.setCharacterEncoding("UTF-8");
110                 HashMap<String, String[]> tmpMap = (HashMap<String, String[]>) request.getParameterMap();
111                 if (tmpMap == null){
112                         MessageView error = new MessageView(41088, LogCategorySet.GUI_VIRTUALSERVICE,
113                                         Message.UNEXPECTED_ERROR);
114                         session.setAttribute(SessionKeys.RESULT_MESSAGE, error);
115                         response.sendRedirect(RedirectPages.LOGIN);
116                         // --- debug log (out method) ---
117                         if (logger.isDebugEnabled()) {
118                     logger.debug("11356 VSModServlet::doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException out");
119                         }
120                         // --- debug log (out method) ---
121                         return;
122                 }
123                 
124                 HashMap<String, String> inputVsMap = new HashMap<String, String>();
125                 ArrayList<Integer> realRemoveKey = new ArrayList<Integer>();
126                 
127                 Iterator i = tmpMap.keySet().iterator();
128                 while (i.hasNext()) {
129                         String key = (String) i.next();
130                         
131                         Pattern p = Pattern.compile("rs(\\d+)_remove");
132                         Matcher m = p.matcher(key);
133                         if (m.matches())
134                                 realRemoveKey.add(Integer.parseInt(m.group(1)));
135                         
136                         inputVsMap.put(key, tmpMap.get(key)[0]);
137                 }
138
139                 if (inputVsMap.containsKey(ButtonMode.REMOVE) && realRemoveKey.size() > 0) {
140                         for (int key : realRemoveKey) {
141                                 try {
142                                         inputVsMap.remove("rs" + key + "_ip");
143                                         inputVsMap.remove("rs" + key + "_port");
144                                         inputVsMap.remove("rs" + key + "_weight");
145                                 } catch (Exception e) { }
146                         }
147                 }
148                 
149                 HashMap<String, String> invalidMap = new HashMap<String, String>();
150
151                 boolean validationFlag = true;
152                 VirtualSetting vs = new VirtualSetting();
153                 
154                 // validation check
155                 ValidationCheck val = new ValidationCheck();
156                 validationFlag = val.vsCheck(inputVsMap, invalidMap, vs);
157                 
158                 if (inputVsMap.containsKey(ButtonMode.ADD)) {
159                         String new_ip = inputVsMap.get("new_ip");
160                         String new_port = inputVsMap.get("new_port");
161                         String new_weight = inputVsMap.get("new_weight");
162                         
163                         if (new_ip != null && new_port != null && new_weight != null &&
164                                 new_ip.length() != 0 && new_ip.length() != 0 && new_weight.length() != 0) {
165                                 try {
166                                         EndPoint new_real = new EndPoint(new_ip, new_port, Integer.parseInt(new_weight), 0, 0);
167                                         for  (EndPoint real : vs.real) {
168                                                 if (real.equals(new_real)) {
169                                                         new_real = null;
170                                                         MessageView error = new MessageView(41089, LogCategorySet.GUI_VIRTUALSERVICE,
171                                                                         Message.REAL_SERVER_EXIST);
172                                                         session.setAttribute(SessionKeys.RESULT_MESSAGE, error);
173                                                         break;
174                                                 }
175                                         }
176                                         if (new_real != null)
177                                                 vs.real.add(new_real);
178                                 } catch (Exception e) { }
179                         }
180                 }
181                 
182                 if (inputVsMap.containsKey(ButtonMode.REMOVE) || inputVsMap.containsKey(ButtonMode.ADD)) {
183                         session.setAttribute(SessionKeys.INPUT_VS, vs);
184                         response.sendRedirect(RedirectPages.VS_MODIFY);
185                         // --- debug log (out method) ---
186                         if (logger.isDebugEnabled()) {
187                     logger.debug("11357 VSModServlet::doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException out");
188                         }
189                         // --- debug log (out method) ---
190                         return;
191                 }
192
193                 if (validationFlag == false) {
194                         MessageView error = new MessageView(21048, LogCategorySet.GUI_VIRTUALSERVICE,
195                                         Message.VALIDATION_ERROR);
196                         session.setAttribute(SessionKeys.RESULT_MESSAGE, error);
197                         session.setAttribute(SessionKeys.INPUT_VS, vs);
198                         session.setAttribute(SessionKeys.INVALID_MESSAGE, invalidMap);
199
200                         response.sendRedirect(RedirectPages.VS_MODIFY);
201                         // --- debug log (out method) ---
202                         if (logger.isDebugEnabled()) {
203                     logger.debug("11358 VSModServlet::doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException out");
204                         }
205                         // --- debug log (out method) ---
206                         return;
207                 }
208                 
209                 VirtualSetting oldVs = (VirtualSetting) session.getAttribute(SessionKeys.OLD_VS);
210                 if (oldVs == null) {
211                         MessageView error = new MessageView(41090, LogCategorySet.GUI_VIRTUALSERVICE,
212                                         Message.UNEXPECTED_ERROR);
213                         session.setAttribute(SessionKeys.RESULT_MESSAGE, error);
214                         response.sendRedirect(RedirectPages.LOGIN);
215                         // --- debug log (out method) ---
216                         if (logger.isDebugEnabled()) {
217                     logger.debug("11359 VSModServlet::doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException out");
218                         }
219                         // --- debug log (out method) ---
220                         return;
221                 }
222                 
223                 String vsName = oldVs.virtual.host + ":" + oldVs.virtual.port + " " +
224                         oldVs.protomod + " " + oldVs.option;
225                 session.setAttribute(SessionKeys.VS_NAME, vsName);
226                 
227                 CommandExecuter thread = new CommandExecuter(session);
228                 
229                 ExecuteMode mode;
230                 String redirectPage;
231                 
232                 String button_mode = inputVsMap.get("button");
233                 // button mode : apply
234                 if (button_mode != null && button_mode.equals(ButtonMode.APPLY)) {
235                         mode = ExecuteMode.VS_MODIFY_APPLY;
236                         redirectPage = RedirectPages.VS_MODIFY_EXECUTIVE;
237                 }
238                 // button mode : save
239                 else if (button_mode != null && button_mode.equals(ButtonMode.SAVE)) {
240                         mode = ExecuteMode.VS_MODIFY_SAVE;
241                         redirectPage = RedirectPages.VS_MODIFY_EXECUTIVE;
242                 }
243                 // button mode : save and sync
244                 else if (button_mode != null && button_mode.equals(ButtonMode.SAVESYNC)) {
245                         mode = ExecuteMode.VS_MODIFY_SAVESYNC;
246                         redirectPage = RedirectPages.SAVE_SYNC_EXECUTIVE;
247
248                         SessionTransData trans = new SessionTransData();
249                         trans.sourceURI = RedirectPages.VS_MODIFY;
250                         trans.destURI   = RedirectPages.STATE_INFO;
251                         trans.errorURI  = RedirectPages.VS_MODIFY_NG;
252                         session.setAttribute(SessionKeys.PAGE_TRANSDATA, trans);
253                 }
254                 else {
255                         MessageView error = new MessageView(41091, LogCategorySet.GUI_VIRTUALSERVICE,
256                                         Message.UNEXPECTED_ERROR);
257                         session.setAttribute(SessionKeys.RESULT_MESSAGE, error);
258                         response.sendRedirect(RedirectPages.LOGIN);
259                         // --- debug log (out method) ---
260                         if (logger.isDebugEnabled()) {
261                     logger.debug("11360 VSModServlet::doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException out");
262                         }
263                         // --- debug log (out method) ---
264                         return;
265                 }
266                 
267                 try {
268                         thread.setExecute(mode, oldVs, vs);
269                         thread.start();
270                 }
271                 catch(Exception e)
272                 {
273                         MessageView error = new MessageView(41092, LogCategorySet.GUI_VIRTUALSERVICE,
274                                         Message.UNEXPECTED_ERROR);
275                         session.setAttribute(SessionKeys.RESULT_MESSAGE, error);
276                         response.sendRedirect(RedirectPages.LOGIN);
277                         // --- debug log (out method) ---
278                         if (logger.isDebugEnabled()) {
279                     logger.debug("11361 VSModServlet::doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException out");
280                         }
281                         // --- debug log (out method) ---
282                         return;
283                 }
284                 response.sendRedirect(redirectPage);
285                 // --- debug log (out method) ---
286                 if (logger.isDebugEnabled()) {
287             logger.debug("11362 VSModServlet::doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException out");
288                 }
289                 // --- debug log (out method) ---
290                 return;
291         }
292 }