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 the CVS Client Library.
027: * The Initial Developer of the Original Software is Robert Greig.
028: * Portions created by Robert Greig are Copyright (C) 2000.
029: * All Rights Reserved.
030: *
031: * If you wish your version of this file to be governed by only the CDDL
032: * or only the GPL Version 2, indicate your decision by adding
033: * "[Contributor] elects to include this software in this distribution
034: * under the [CDDL or GPL Version 2] license." If you do not indicate a
035: * single choice of license, a recipient has the option to distribute
036: * your version of this file under either the CDDL, the GPL Version 2 or
037: * to extend the choice of license to its licensees as provided above.
038: * However, if you add GPL Version 2 code and therefore, elected the GPL
039: * Version 2 license, then the option applies only if the new code is
040: * made subject to such option by the copyright holder.
041:
042: * Contributor(s): Robert Greig.
043: *****************************************************************************/package org.netbeans.lib.cvsclient.response;
044:
045: import java.io.*;
046:
047: import org.netbeans.lib.cvsclient.util.*;
048:
049: /**
050: * This Template response allows the server to send a template file that is
051: * used when committing changes. The client tools can read the Template file
052: * which is stored in CVS/Template and display it to the user to be used as a
053: * prompt for commit comments.
054: * @author Robert Greig
055: */
056: class TemplateResponse implements Response {
057: /**
058: * A reference to an uncompressed file handler
059: */
060: /*
061: // TODO: Should this be taken from ResponseServices???
062: protected static FileHandler uncompressedFileHandler;
063: */
064:
065: /**
066: * The local path of the new file
067: */
068: protected String localPath;
069:
070: /**
071: * The full repository path of the file
072: */
073: protected String repositoryPath;
074:
075: /**
076: * Creates new TemplateResponse
077: */
078: public TemplateResponse() {
079: }
080:
081: /*
082: // TODO: replace this with a call to ResponseSerivices::getUncompr....ler?
083: protected static FileHandler getUncompressedFileHandler()
084: {
085: if (uncompressedFileHandler == null) {
086: uncompressedFileHandler = new DefaultFileHandler();
087: }
088: return uncompressedFileHandler;
089: }
090: */
091:
092: /**
093: * Process the data for the response.
094: * @param dis the data inputstream allowing the client to read the server's
095: * response. Note that the actual response name has already been read
096: * and the input stream is positioned just before the first argument, if
097: * any.
098: */
099: public void process(LoggedDataInputStream dis,
100: ResponseServices services) throws ResponseException {
101: try {
102: localPath = dis.readLine();
103: repositoryPath = dis.readLine();
104:
105: int length = Integer.parseInt(dis.readLine());
106:
107: // now read in the file
108: final String filePath = services.convertPathname(localPath,
109: repositoryPath)
110: + "CVS/Template"; //NOI18N
111:
112: // #69639 write metadata directly
113: // XXX possibly add a method to AdminHandler
114: OutputStream out = null;
115: File file = new File(filePath);
116: file.getParentFile().mkdirs();
117: try {
118: out = new FileOutputStream(file);
119: out = new BufferedOutputStream(out);
120: byte[] lineSeparator = System.getProperty(
121: "line.separator").getBytes(); // NOI18N
122: byte[] data = dis.readBytes(length);
123: for (int i = 0; i < data.length; i++) {
124: byte ch = data[i];
125: if (ch == '\n') {
126: out.write(lineSeparator);
127: } else {
128: out.write(ch);
129: }
130: }
131: } catch (EOFException eof) {
132: } finally {
133: if (out != null) {
134: try {
135: out.close();
136: } catch (IOException alreadyClosed) {
137: }
138: }
139: }
140: } catch (EOFException ex) {
141: String localMessage = ResponseException
142: .getLocalMessage("CommandException.EndOfFile"); //NOI18N
143: throw new ResponseException(ex, localMessage);
144: } catch (IOException ex) {
145: throw new ResponseException(ex);
146: }
147: }
148:
149: /**
150: * Is this a terminal response, i.e. should reading of responses stop
151: * after this response. This is true for responses such as OK or
152: * an error response
153: */
154: public boolean isTerminalResponse() {
155: return false;
156: }
157: }
|