/*******************************************************************************
 * Copyright (c) 2000, 2003 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the Common Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/cpl-v10.html
 * 
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.ui.internal.ide.dialogs;


/**
 *	This utility class converts a passed byte array into a Base 64 encoded
 *	String according to the specification in RFC1521 section 5.2
 */
/*package*/ class InternalBase64Encoder {
	private static final String mappings = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";//$NON-NLS-1$
	private static final String filler = "=";//$NON-NLS-1$
/**
 *	Answer a string representing the Base 64 encoded form of the passed
 *	byte array
 *
 *	@return java.lang.String
 *	@param contents byte[]
 */
public static String encode(byte[] contents) {
	StringBuffer result = new StringBuffer();

	for (int i = 0; i < contents.length; i = i + 3) {
		if (result.length() == 76)
			result.append("\n\r");//$NON-NLS-1$
		
		// output character 1
		result.append(mappings.charAt((contents[i] & 0xFC) >> 2));

		// output character 2
		int c2 = (contents[i] & 0x03) << 4;
		if (i + 1 >= contents.length) {
			result.append(mappings.charAt(c2));
			result.append(filler);
			result.append(filler);
			return result.toString();
		}
		
		c2 |= ((contents[i + 1] & 0xF0) >> 4);
		result.append(mappings.charAt(c2));

		// output character 3
		int c3 = (contents[i + 1] & 0x0F) << 2;
		if (i + 2 >= contents.length) {
			result.append(mappings.charAt(c3));
			result.append(filler);
			return result.toString();
		}
		
		c3 |= ((contents[i + 2] & 0xC0) >> 6);
		result.append(mappings.charAt(c3));

		// output character 4
		result.append(mappings.charAt(contents[i + 2] & 0x3F));
	}
		
	return result.toString();
}
}
