001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041:
042: package org.netbeans.test.gui.web.util;
043:
044: import java.io.InputStream;
045: import java.io.InputStreamReader;
046: import java.io.BufferedReader;
047: import java.io.OutputStream;
048: import java.io.OutputStreamWriter;
049: import java.io.BufferedWriter;
050: import java.net.Socket;
051: import java.net.ServerSocket;
052:
053: import org.netbeans.jemmy.Waitable;
054: import org.netbeans.core.NbTopManager;
055:
056: public class JSPServletResponseWaitable implements Waitable {
057: private String id = null;
058: private String real = null;
059: private String userAgent = null;
060: private String answer = null;
061: private int port = -1;
062: private boolean started = false;
063:
064: public JSPServletResponseWaitable(String id, String answer, int port) {
065: this .id = id;
066: this .answer = answer;
067: this .port = port;
068:
069: (new Thread() {
070: public void run() {
071: try {
072: String answer = getDefaultAnswer();
073: int port = getDefaultPort();
074: ServerSocket ss = new ServerSocket(port);
075: System.out.println("Listen on " + port);
076: started = true;
077: Socket s = ss.accept();
078: InputStream is = s.getInputStream();
079: BufferedReader br = new BufferedReader(
080: new InputStreamReader(is));
081: String line = br.readLine();
082: while (!(line == null)) {
083: System.out.println("READ: \"" + line + "\"");
084: if (line.startsWith("ID")) {
085: setId(line);
086: }
087: if (line.startsWith("UserAgent")) {
088: setUserAgent(line);
089: }
090: line = br.readLine();
091: if (line.equals("")) {
092: line = null;
093: }
094: }
095: OutputStream os = s.getOutputStream();
096: BufferedWriter bw = new BufferedWriter(
097: new OutputStreamWriter(os));
098: bw.write(answer, 0, answer.length());
099: System.out.println("CL is " + answer.length());
100: bw.flush();
101: s.close();
102: ss.close();
103: } catch (Exception e) {
104: real = "Exception at READ/WRITE http opeartions";
105: System.out.println("ERROR!");
106: e.printStackTrace();
107: }
108: }
109: }).start();
110: while (!started)
111: ;
112: }
113:
114: public Object actionProduced(Object o) {
115: if ((real != null) && (real.indexOf(id) != -1)) {
116: return Boolean.TRUE;
117: }
118: if ((real != null) && (real.indexOf(id) == -1)) {
119: System.out.println("ID is " + real + " instead of " + id);
120: }
121: return null;
122: }
123:
124: public String getDescription() {
125: return "Waiter for ID: " + id;
126: }
127:
128: private int getDefaultPort() {
129: return port;
130: }
131:
132: private String getDefaultAnswer() {
133: return answer;
134: }
135:
136: private void setId(String id) {
137: real = id;
138: }
139:
140: private void setUserAgent(String agent) {
141: userAgent = agent;
142: }
143:
144: private String getUserAgent() {
145: return userAgent;
146: }
147:
148: public String getId() {
149: return real;
150: }
151: }
|