/* * (c) Copyright 2010-2011 AgileBirds * * This file is part of OpenFlexo. * * OpenFlexo is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * OpenFlexo is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with OpenFlexo. If not, see <http://www.gnu.org/licenses/>. * */ package org.netbeans.lib.cvsclient.command.annotate; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import org.netbeans.lib.cvsclient.command.FileInfoContainer; /** * Describes annotate information for a file. This is the result of doing a cvs annotate command. The fields in instances of this object are * populated by response handlers. * * @author Milos Kleint */ public class AnnotateInformation extends FileInfoContainer { /** * The file, associated with thiz. */ private File file; /** * List of lines stored here. */ private List linesList; private Iterator iterator; private File tempFile; private File tempDir; private BufferedOutputStream tempOutStream; public AnnotateInformation() { this.tempDir = null; } public AnnotateInformation(File tempDir) { this.tempDir = tempDir; } /** * Getter for property file. * * @return Value of property file. */ @Override public File getFile() { return file; } /** * Setter for property file. * * @param file * New value of property file. */ public void setFile(File file) { this.file = file; } /** * Return a string representation of this object. Useful for debugging. */ @Override public String toString() { StringBuffer buf = new StringBuffer(30); buf.append("\nFile: " + (file != null ? file.getAbsolutePath() : "null")); // NOI18N return buf.toString(); } public AnnotateLine createAnnotateLine() { return new AnnotateLine(); } public void addLine(AnnotateLine line) { linesList.add(line); } public AnnotateLine getFirstLine() { if (linesList == null) { linesList = createLinesList(); } iterator = linesList.iterator(); return getNextLine(); } public AnnotateLine getNextLine() { if (iterator == null) { return null; } if (!iterator.hasNext()) { return null; } return (AnnotateLine) iterator.next(); } /** * Adds the specified line to the temporary file. */ protected void addToTempFile(String line) throws IOException { if (tempOutStream == null) { try { tempFile = File.createTempFile("ann", ".cvs", tempDir); // NOI18N tempFile.deleteOnExit(); tempOutStream = new BufferedOutputStream(new FileOutputStream(tempFile)); } catch (IOException ex) { // TODO } } tempOutStream.write(line.getBytes()); tempOutStream.write('\n'); } protected void closeTempFile() throws IOException { if (tempOutStream == null) { return; } try { tempOutStream.flush(); } finally { tempOutStream.close(); } } public File getTempFile() { return tempFile; } private List createLinesList() { List toReturn = new LinkedList(); BufferedReader reader = null; if (tempFile == null) { return toReturn; } try { reader = new BufferedReader(new FileReader(tempFile)); String line = reader.readLine(); int lineNum = 1; while (line != null) { AnnotateLine annLine = AnnotateBuilder.processLine(line); if (annLine != null) { annLine.setLineNum(lineNum); toReturn.add(annLine); lineNum++; } line = reader.readLine(); } } catch (IOException exc) { } finally { try { if (reader != null) { reader.close(); } } catch (IOException ex2) { } } return toReturn; } }