/******************************************************************************* * 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()); } }