| /******************************************************************************* |
| * Copyright (c) 2001, 2006 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 |
| * Jens Lukowski/Innoopract - initial renaming/restructuring |
| * |
| *******************************************************************************/ |
| package org.eclipse.wst.sse.core.internal.util; |
| |
| |
| |
| import java.io.BufferedInputStream; |
| import java.io.InputStream; |
| |
| import org.eclipse.wst.sse.core.internal.encoding.CodedIO; |
| import org.eclipse.wst.sse.core.internal.encoding.util.BufferedLimitedStream; |
| |
| |
| |
| public class Utilities { |
| |
| /** |
| * a common calculation in some of the parsing methods (e.g. in |
| * ContextRegion and IStructuredDocumentRegion) |
| */ |
| public static int calculateLengthDifference(String changes, int lengthToReplace) { |
| // determine the length by the text itself, or, if there is no text to |
| // insert (i.e. we are doing a delete) then calculate the length as |
| // a negative number to denote the amount to delete. |
| // For a straight insert, the selection Length will be zero. |
| int lengthDifference = 0; |
| if (changes == null) { |
| // the delete case |
| lengthDifference = 0 - lengthToReplace; |
| } |
| else { |
| lengthDifference = changes.length() - lengthToReplace; |
| } |
| if (Debug.debugStructuredDocument) { |
| System.out.println("lengthDifference: " + lengthDifference);//$NON-NLS-1$ |
| } |
| return lengthDifference; |
| } |
| |
| /** |
| * Returns true iff both parameters are not null and the object is within |
| * the array. Careful, this uses identity. Not good for basic strings. |
| */ |
| public static boolean contains(Object[] objectArray, Object object) { |
| boolean result = false; |
| // if object or objectArray is null, return false |
| if ((objectArray != null) && (object != null)) { |
| for (int i = 0; i < objectArray.length; i++) { |
| if (objectArray[i] == object) { |
| result = true; |
| break; |
| } |
| } |
| } |
| return result; |
| } |
| |
| public static boolean containsString(String[] objectArray, String object) { |
| boolean result = false; |
| // if object or objectArray is null, return false |
| if ((objectArray != null) && (object != null)) { |
| for (int i = 0; i < objectArray.length; i++) { |
| if (objectArray[i].equals(object)) { |
| result = true; |
| break; |
| } |
| } |
| } |
| return result; |
| } |
| |
| /** |
| * Ensures that an InputStream has mark/reset support, is readlimit is |
| * set, and that the stream is "limitable" (that is, reports "end of |
| * input" rather than allow going past mark). This is very specialized |
| * stream introduced to overcome |
| * https://bugs.eclipse.org/bugs/show_bug.cgi?id=67211. See also |
| * https://bugs.eclipse.org/bugs/show_bug.cgi?id=68565 |
| */ |
| public static InputStream getLimitedStream(InputStream original) { |
| if (original == null) |
| return null; |
| if (original instanceof BufferedLimitedStream) |
| return original; |
| return new BufferedLimitedStream(original, CodedIO.MAX_BUF_SIZE); |
| } |
| |
| /** |
| * <p> |
| * Ensures that an InputStream has mark/reset support. |
| * </p> |
| * <p> |
| * It's vital that a BufferedInputStream <b>not</b> be wrapped in another |
| * BufferedInputStream as each can preemptively consume <i>n</i> bytes |
| * (e.g. 2048) from the parent stream before any requests are made. The |
| * cascading effect is that the second/inner BufferedInputStream can never |
| * rewind itself to the first <i>n</i> bytes since they were already |
| * consumed by its parent. |
| * </p> |
| */ |
| public static InputStream getMarkSupportedStream(InputStream original) { |
| if (original == null) |
| return null; |
| if (original.markSupported()) |
| return original; |
| InputStream buffered = new BufferedInputStream(original, CodedIO.MAX_BUF_SIZE); |
| buffered.mark(CodedIO.MAX_MARK_SIZE); |
| return buffered; |
| } |
| |
| /** |
| * Used for log/trace messages. Id is assumed to be some form of a |
| * filename. See IModelManager. |
| */ |
| public static String makeShortId(Object id) { |
| if (id == null) |
| id = "NOID";//$NON-NLS-1$ |
| String whole = id.toString(); |
| String part = whole.substring(whole.lastIndexOf("/") + 1); //$NON-NLS-1$ |
| return "..." + part; //$NON-NLS-1$ |
| } |
| |
| |
| /** |
| * Utilities constructor comment. |
| */ |
| public Utilities() { |
| super(); |
| } |
| } |