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.lib.cvsclient.command.annotate;
043:
044: import java.io.*;
045: import java.util.*;
046:
047: import org.netbeans.lib.cvsclient.command.*;
048:
049: /**
050: * Describes annotate information for a file. This is the result of doing a
051: * cvs annotate command. The fields in instances of this object are populated
052: * by response handlers.
053: * @author Milos Kleint
054: */
055: public class AnnotateInformation extends FileInfoContainer {
056: /**
057: * The file, associated with thiz.
058: */
059: private File file;
060:
061: /**
062: * List of lines stored here.
063: */
064: private List linesList;
065:
066: private Iterator iterator;
067:
068: private File tempFile;
069:
070: private File tempDir;
071:
072: private BufferedOutputStream tempOutStream;
073:
074: public AnnotateInformation() {
075: this .tempDir = null;
076: }
077:
078: public AnnotateInformation(File tempDir) {
079: this .tempDir = tempDir;
080: }
081:
082: /**
083: * Getter for property file.
084: * @return Value of property file.
085: */
086: public File getFile() {
087: return file;
088: }
089:
090: /**
091: * Setter for property file.
092: * @param file New value of property file.
093: */
094: public void setFile(File file) {
095: this .file = file;
096: }
097:
098: /**
099: * Return a string representation of this object. Useful for debugging.
100: */
101: public String toString() {
102: StringBuffer buf = new StringBuffer(30);
103: buf.append("\nFile: "
104: + ((file != null) ? file.getAbsolutePath() : "null")); //NOI18N
105: return buf.toString();
106: }
107:
108: public AnnotateLine createAnnotateLine() {
109: return new AnnotateLine();
110: }
111:
112: public void addLine(AnnotateLine line) {
113: linesList.add(line);
114: }
115:
116: public AnnotateLine getFirstLine() {
117: if (linesList == null) {
118: linesList = createLinesList();
119: }
120: iterator = linesList.iterator();
121: return getNextLine();
122: }
123:
124: public AnnotateLine getNextLine() {
125: if (iterator == null) {
126: return null;
127: }
128: if (!iterator.hasNext()) {
129: return null;
130: }
131: return (AnnotateLine) iterator.next();
132: }
133:
134: /**
135: * Adds the specified line to the temporary file.
136: */
137: protected void addToTempFile(String line) throws IOException {
138: if (tempOutStream == null) {
139: try {
140: tempFile = File.createTempFile("ann", ".cvs", tempDir); //NOI18N
141: tempFile.deleteOnExit();
142: tempOutStream = new BufferedOutputStream(
143: new FileOutputStream(tempFile));
144: } catch (IOException ex) {
145: // TODO
146: }
147: }
148: tempOutStream.write(line.getBytes());
149: tempOutStream.write('\n');
150: }
151:
152: protected void closeTempFile() throws IOException {
153: if (tempOutStream == null) {
154: return;
155: }
156: try {
157: tempOutStream.flush();
158: } finally {
159: tempOutStream.close();
160: }
161: }
162:
163: public File getTempFile() {
164: return tempFile;
165: }
166:
167: private List createLinesList() {
168: List toReturn = new LinkedList();
169: BufferedReader reader = null;
170: if (tempFile == null) {
171: return toReturn;
172: }
173: try {
174: reader = new BufferedReader(new FileReader(tempFile));
175: String line = reader.readLine();
176: int lineNum = 1;
177: while (line != null) {
178: AnnotateLine annLine = AnnotateBuilder
179: .processLine(line);
180: if (annLine != null) {
181: annLine.setLineNum(lineNum);
182: toReturn.add(annLine);
183: lineNum++;
184: }
185: line = reader.readLine();
186: }
187: } catch (IOException exc) {
188: } finally {
189: try {
190: if (reader != null) {
191: reader.close();
192: }
193: } catch (IOException ex2) {
194: }
195: }
196: return toReturn;
197: }
198:
199: }
|