blob: d8ac09f89d1a7ac32e447f16ac6aba475c300e76 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003, 2005 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.j2ee.internal.validation;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class ManifestLineValidator extends Object {
public static final int MAX_LINE_LENGTH = 72;
protected int lineNumber;
protected int currentByte;
protected int byteCount;
protected InputStream inputStream;
protected List lineNumbers;
protected boolean endsWithLineBreak = true;
/**
* Constructor for LineValidator.
*/
public ManifestLineValidator(InputStream in) {
super();
inputStream = new BufferedInputStream(in);
lineNumber = 0;
}
protected List getLineNumbers() {
if (lineNumbers == null)
lineNumbers = new ArrayList();
return lineNumbers;
}
public int[] getLineNumbersExceedingLimit() {
if (lineNumbers == null)
return new int[0];
int[] result = new int[lineNumbers.size()];
for (int i = 0; i < lineNumbers.size(); i++) {
Integer list_element = (Integer) lineNumbers.get(i);
result[i] = list_element.intValue();
}
return result;
}
public void validate() throws IOException {
readNext();
while (currentByte != -1) {
validateNextLine();
}
}
public int getLineCount() {
return lineNumber;
}
protected void readNext() throws IOException {
currentByte = inputStream.read();
}
protected void validateNextLine() throws IOException {
lineNumber++;
byteCount = 0;
boolean eolReached = false;
while (currentByte != -1) {
if (currentByte == '\r') {
eolReached = true;
readNext();
if (currentByte == '\n') {
readNext();
}
break;
} else if (currentByte == '\n') {
eolReached = true;
readNext();
break;
} else {
byteCount++;
readNext();
}
}
if (currentByte == -1 && !eolReached && byteCount > 0)
endsWithLineBreak = false;
if (byteCount > 72)
getLineNumbers().add(new Integer(lineNumber));
}
public boolean endsWithLineBreak() {
return endsWithLineBreak;
}
public boolean hasErrors() {
return !endsWithLineBreak || (lineNumbers != null && !lineNumbers.isEmpty());
}
}