/*******************************************************************************
 * Copyright (c) 2005, 2006 IBM Corporation and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * 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 (IStatus child : children) {
				log(child, newPrefix);
			}
		}
	}
}
