KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > lib > cvsclient > response > MessageBinaryResponse


1 /*
2  * The contents of this file are subject to the terms of the Common Development
3  * and Distribution License (the License). You may not use this file except in
4  * compliance with the License.
5  *
6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
7  * or http://www.netbeans.org/cddl.txt.
8  *
9  * When distributing Covered Code, include this CDDL Header Notice in each file
10  * and include the License file at http://www.netbeans.org/cddl.txt.
11  * If applicable, add the following below the CDDL Header, with the fields
12  * enclosed by brackets [] replaced by your own identifying information:
13  * "Portions Copyrighted [year] [name of copyright owner]"
14  *
15  * The Original Software is NetBeans. The Initial Developer of the Original
16  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19
20 package org.netbeans.lib.cvsclient.response;
21
22 import java.io.*;
23
24 import org.netbeans.lib.cvsclient.event.*;
25 import org.netbeans.lib.cvsclient.util.*;
26
27 /**
28  * Handles binary message responses. Translate dthe reponse into
29  * BinaryMessageEvents.
30  *
31  * @author Martin Entlicher
32  */

33 class MessageBinaryResponse implements Response {
34
35     private static final int CHUNK_SIZE = 1024 * 256; // 256Kb
36

37     public MessageBinaryResponse() {
38         // do nothing
39
}
40
41     /**
42      * Process the data for the response.
43      * @param dis the data inputstream allowing the client to read the server's
44      * response. Note that the actual response name has already been read
45      * and the inputstream is positioned just before the first argument, if any.
46      */

47     public void process(LoggedDataInputStream dis, ResponseServices services)
48             throws ResponseException {
49         try {
50             String JavaDoc numBytesStr = dis.readLine();
51             int numBytes;
52             try {
53                 numBytes = Integer.parseInt(numBytesStr);
54             } catch (NumberFormatException JavaDoc nfex) {
55                 throw new ResponseException(nfex);
56             }
57             int chunk = Math.min(numBytes, CHUNK_SIZE);
58             byte[] bytes = new byte[chunk];
59             while (numBytes > 0) {
60                 int len = dis.read(bytes, 0, chunk);
61                 if (len == -1) {
62                     throw new ResponseException("EOF", ResponseException.getLocalMessage("CommandException.EndOfFile", null)); // NOI18N
63
}
64                 numBytes -= len;
65                 chunk = Math.min(numBytes, CHUNK_SIZE);
66                 BinaryMessageEvent event = new BinaryMessageEvent(this, bytes, len);
67                 services.getEventManager().fireCVSEvent(event);
68             }
69         }
70         catch (EOFException ex) {
71             throw new ResponseException(ex, ResponseException.getLocalMessage("CommandException.EndOfFile", null)); //NOI18N
72
}
73         catch (IOException ex) {
74             throw new ResponseException(ex);
75         }
76     }
77
78     /**
79      * Is this a terminal response, i.e. should reading of responses stop
80      * after this response. This is true for responses such as OK or
81      * an error response
82      */

83     public boolean isTerminalResponse() {
84         return false;
85     }
86 }
Popular Tags