blob: 07c466a9539fdd7ea918719091d812fe848e0c93 [file] [log] [blame]
/**
*
* Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
*
* All rights reserved. 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:
* Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
*/
package org.eclipse.osbp.xtext.reportdsl.common;
import org.eclipse.osbp.xtext.reportdsl.Color;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Utilities to convert different Color types.
*/
public class ColorUtilities {
private final static Logger log = LoggerFactory.getLogger(ColorUtilities.class);
/**
* @param source a color attribute of the Report DSL Grammar
* @return a AWT color is the source is parseable or <code>java.awt.Color.BLACK</code> otherwise
*/
public static java.awt.Color convertToAwtColor(Color source) {
return convertToAwtColor(source.getColor());
}
/**
* @param source a color string value
* @return a AWT color is the source is parseable or <code>java.awt.Color.BLACK</code> otherwise
*/
public static java.awt.Color convertToAwtColor(String source) {
java.awt.Color result = java.awt.Color.BLACK;
if (source != null) {
if (source.charAt(0) == '#') {
int r = 0;
int g = 0;
int b = 0;
switch (source.length()) {
case 3:
r = parseHex(source.substring(1, 3));
g = r;
b = r;
break;
case 4:
r = parseHex(""+source.charAt(1)+source.charAt(1));
g = parseHex(""+source.charAt(2)+source.charAt(2));
b = parseHex(""+source.charAt(3)+source.charAt(3));
break;
case 7:
r = parseHex(source.substring(1, 3));
g = parseHex(source.substring(3, 5));
b = parseHex(source.substring(5, 7));
break;
default:
log.error("convertToAwtColor(): hex '"+source+"' is not parseable due to wrong value length!");
break;
}
result = new java.awt.Color(r, g, b);
}
else {
log.error("convertToAwtColor(): string '"+source+"' is not parseable due to wrong value format! Please use #rrggbb format!");
}
}
else {
log.error("convertToAwtColor(): string '<null>' is not parseable!");
}
return result;
}
private static int parseHex(String hex) {
try {
return Integer.decode("0x"+hex);
}
catch (NumberFormatException nfe) {
log.error("convertToAwtColor(): hex '"+hex+"' is not parseable!");
return 0;
}
}
}