/*******************************************************************************
 * Copyright (c) 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.core.internal.registry;

import java.util.ResourceBundle;
import org.eclipse.core.runtime.IStatus;

/**
 * Simple implementation if the registry support functionality.
 * The logging output is done onto System.out (for both specific and generic logs) 
 * in the following format:
 * 
 * [Error|Warning|Log]: Main error message
 * [Error|Warning|Log]: Child error message 1
 * 	...
 * [Error|Warning|Log]: Child error message N
 * 
 * The translation routine assumes that keys are prefixed with '%'. If no resource
 * bundle is present, the key itself (without leading '%') is returned. There is
 * no decoding for the leading '%%'.
 */
public class RegistrySupport {

	static public String translate(String key, ResourceBundle resources) {
		if (key == null)
			return null;
		if (resources == null)
			return key;
		String trimmedKey = key.trim();
		if (trimmedKey.length() == 0)
			return key;
		if (trimmedKey.charAt(0) != '%')
			return key;
		return resources.getString(trimmedKey.substring(1));
	}

	static public void log(IStatus status, String prefix) {
		String message = status.getMessage();
		int severity = status.getSeverity();

		String statusMsg;
		switch (severity) {
			case IStatus.ERROR :
				statusMsg = RegistryMessages.log_error;
				break;
			case IStatus.WARNING :
				statusMsg = RegistryMessages.log_warning;
				break;
			default :
				statusMsg = RegistryMessages.log_log;
				break;
		}
		statusMsg += message;

		if (prefix != null)
			statusMsg = prefix + statusMsg;
		System.out.println(statusMsg);

		// print out children as well
		IStatus[] children = status.getChildren();
		if (children.length != 0) {
			String newPrefix;
			if (prefix == null)
				newPrefix = "\t"; //$NON-NLS-1$
			else
				newPrefix = prefix + "\t"; //$NON-NLS-1$
			for (int i = 0; i < children.length; i++) {
				log(children[i], newPrefix);
			}
		}
	}
}
