| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You 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. |
| */ |
| /** |
| * Title: PSI Java Framework: UserDialogRequestHandler<p> |
| * Copyright: PSI-BT AG<p> |
| * History: |
| * Date Author What's new |
| * 16.04.2001 VMentzner Created |
| */ |
| |
| package org.apache.log4j.net; |
| |
| import java.awt.Component; |
| import java.io.Writer; |
| import java.net.URL; |
| |
| /** |
| * This class implements a RequestHandler for the path "/userdialog/" in the PluggableHTTPServer. |
| * A simple input form is presented in the browser where you can enter a message. This message will be sent |
| * to the PluggableHTTPServer and shown in a JOptionPane MessageDialog. |
| * |
| * @author <a HREF="mailto:V.Mentzner@psi-bt.de">Volker Mentzner</a> |
| */ |
| public class UserDialogRequestHandler extends RootRequestHandler { |
| |
| private Component parentComponent; |
| |
| /** |
| * Creates a new UserDialogRequestHandler object |
| */ |
| public UserDialogRequestHandler() { |
| this(null); |
| } |
| |
| /** |
| * Creates a new UserDialogRequestHandler object with a parentComponent reference |
| */ |
| public UserDialogRequestHandler(Component parentComponent) { |
| this.setTitle("user dialog"); |
| this.setDescription("show user dialog"); |
| this.setHandledPath("/userdialog/"); |
| this.parentComponent = parentComponent; |
| } |
| |
| /** |
| * Handles the given request and writes the reply to the given out-stream. |
| * |
| * @param request - client browser request |
| * @param out - Out stream for sending data to client browser |
| * @return if the request was handled by this handler : true, else : false |
| */ |
| public boolean handleRequest(String request, Writer out) { |
| String path = ""; |
| String query = null; |
| try { |
| URL url = new URL("http://localhost"+request); |
| path = url.getPath(); |
| query = url.getQuery(); |
| if (path.startsWith(this.getHandledPath()) == false) { |
| return false; |
| } |
| |
| out.write("HTTP/1.0 200 OK\r\n"); |
| out.write("Content-type: text/html\r\n\r\n"); |
| out.write("<HTML><HEAD><TITLE>" + this.getTitle() + "</TITLE></HEAD>\r\n"); |
| out.write("<BODY><H1>" + this.getDescription() + "</H1>\r\n"); |
| if ((query != null) && (query.length() >= 0)) { |
| int idx = query.indexOf("="); |
| String message = query.substring(idx+1, query.length()); |
| // replace '+' by space |
| message = message.replace('+', ' '); |
| // replace hex strings starting with '%' by their values |
| idx = message.indexOf("%"); |
| while (idx >= 0) { |
| String sl = message.substring(0, idx); |
| String sm = message.substring(idx+1, idx+3); |
| String sr = message.substring(idx+3, message.length()); |
| try { |
| int i = Integer.parseInt(sm, 16); |
| sm = String.valueOf((char)i); |
| } |
| catch (Exception ex) { |
| sm = ""; |
| } |
| message = sl + sm + sr; |
| idx = message.indexOf("%"); |
| } |
| // show message in a new thread |
| if ((message != null) && (message.length() > 0)) { |
| Thread t = new Thread(new DialogThread(parentComponent, message)); |
| t.start(); |
| } |
| } |
| out.write("<form name=\"Formular\" ACTION=\""+this.getHandledPath()+"+\" METHOD=\"PUT\">"); |
| out.write("<table>\r\n"); |
| out.write(" <tr><td>Send message to user</td></tr>\r\n"); |
| out.write(" <tr><td><textarea name=\"message\" rows=10 cols=50></textarea></td></tr>\r\n"); |
| out.write("</table>\r\n"); |
| out.write("<input type=submit value=\"Submit\">"); |
| out.write("</form>"); |
| out.write("</BODY></HTML>\r\n"); |
| out.flush(); |
| return true; |
| } catch (Exception ex) { |
| return false; |
| } |
| } |
| |
| /** |
| * Internal class to start the user dialog in a new thread. This makes the RequestHandler return |
| * immediatly |
| */ |
| class DialogThread implements Runnable { |
| private Component parentComponent; |
| private String message; |
| |
| public DialogThread(Component parentComponent, String message) { |
| this.parentComponent = parentComponent; |
| this.message = message; |
| } |
| |
| public void run() { |
| JOptionPane.showMessageDialog(parentComponent, message); |
| } |
| } |
| } |