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 General
007: * Public License Version 2 only ("GPL") or the Common Development and Distribution
008: * License("CDDL") (collectively, the "License"). You may not use this file except in
009: * compliance with the License. You can obtain a copy of the License at
010: * http://www.netbeans.org/cddl-gplv2.html or nbbuild/licenses/CDDL-GPL-2-CP. See the
011: * License for the specific language governing permissions and limitations under the
012: * License. When distributing the software, include this License Header Notice in
013: * each file and include the License file at nbbuild/licenses/CDDL-GPL-2-CP. Sun
014: * designates this particular file as subject to the "Classpath" exception as
015: * provided by Sun in the GPL Version 2 section of the License file that
016: * accompanied this code. If applicable, add the following below the License Header,
017: * with the fields enclosed by brackets [] replaced by your own identifying
018: * information: "Portions Copyrighted [year] [name of copyright owner]"
019: *
020: * Contributor(s):
021: *
022: * The Original Software is NetBeans. The Initial Developer of the Original Software
023: * is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun Microsystems, Inc. All
024: * Rights Reserved.
025: *
026: * If you wish your version of this file to be governed by only the CDDL or only the
027: * GPL Version 2, indicate your decision by adding "[Contributor] elects to include
028: * this software in this distribution under the [CDDL or GPL Version 2] license." If
029: * you do not indicate a single choice of license, a recipient has the option to
030: * distribute your version of this file under either the CDDL, the GPL Version 2 or
031: * to extend the choice of license to its licensees as provided above. However, if
032: * you add GPL Version 2 code and therefore, elected the GPL Version 2 license, then
033: * the option applies only if the new code is made subject to such option by the
034: * copyright holder.
035: */
036:
037: package org.netbeans.installer.sandbox.reformatter;
038:
039: import java.io.BufferedReader;
040: import java.io.File;
041: import java.io.FileReader;
042: import java.io.FileWriter;
043: import java.io.IOException;
044: import java.io.PrintWriter;
045: import java.util.LinkedList;
046: import java.util.List;
047:
048: /**
049: *
050: * @author Kirill Sorokin
051: */
052: public class Reformatter {
053: private File file;
054: private int length;
055:
056: public Reformatter(File file, int length) {
057: this .file = file;
058: this .length = length;
059: }
060:
061: public void reformat() throws IOException {
062: List<String> lines = new LinkedList<String>();
063:
064: BufferedReader reader = new BufferedReader(new FileReader(file));
065:
066: String string = null;
067: while ((string = reader.readLine()) != null) {
068: lines.add(string);
069: }
070:
071: reader.close();
072:
073: for (int i = 0; i < lines.size(); i++) {
074: String line = lines.get(i);
075:
076: if (line.length() > length) {
077: int index = findPrevious(line, ' ', length);
078:
079: if (index != -1) {
080: lines.add(i, line.substring(0, index));
081: lines.set(i + 1, line.substring(index + 1));
082: }
083: } else if (!line.trim().equals("")) {
084: String next = lines.get(i + 1);
085:
086: if (!next.trim().equals("")) {
087: if (!line.endsWith(" ")) {
088: line = line + " " + next;
089: } else {
090: line = line + next;
091: }
092:
093: if (line.length() > length) {
094: int index = findPrevious(line, ' ', length);
095:
096: if (index != -1) {
097: lines.set(i, line.substring(0, index));
098: lines.set(i + 1, line.substring(index + 1));
099: }
100: } else {
101: lines.set(i, line);
102: lines.remove(i + 1);
103: }
104: }
105: }
106: }
107:
108: PrintWriter writer = new PrintWriter(new FileWriter(file));
109:
110: for (String line : lines) {
111: writer.println(line);
112: }
113:
114: writer.close();
115: }
116:
117: private int findPrevious(String string, char ch, int start) {
118: for (int i = length; i > 0; i--) {
119: if (string.charAt(i) == ch) {
120: return i;
121: }
122: }
123:
124: return -1;
125: }
126:
127: public static void main(String[] args) {
128: try {
129: new Reformatter(new File("D:\\temp\\license.txt"), 55)
130: .reformat();
131: } catch (IOException ex) {
132: ex.printStackTrace();
133: }
134: }
135:
136: }
|