package mobi.monaca.framework.nativeui; import static mobi.monaca.framework.nativeui.UIUtil.buildColor; import java.util.Iterator; import mobi.monaca.framework.nativeui.exception.ConversionException; import mobi.monaca.framework.nativeui.exception.KeyNotValidException; import mobi.monaca.framework.nativeui.exception.NativeUIException; import mobi.monaca.framework.nativeui.exception.ValueNotInRangeException; import mobi.monaca.framework.util.MyLog; import mobi.monaca.utils.TimeStamp; import mobi.monaca.utils.log.LogItem; import mobi.monaca.utils.log.LogItem.LogLevel; import mobi.monaca.utils.log.LogItem.Source; import org.json.JSONObject; import android.content.Context; public class UIValidator { public static void validateKey(Context context, String componentName, JSONObject componentJSON, String[] validKeys) throws KeyNotValidException { Iterator<String> keys = componentJSON.keys(); while (keys.hasNext()) { boolean valid = false; String userSpecifiedKey = (String) keys.next(); for (int i = 0; i < validKeys.length; i++) { String validKey = validKeys[i]; if (userSpecifiedKey.equalsIgnoreCase(validKey)) { valid = true; } } if (valid == false) { KeyNotValidException exception = new KeyNotValidException(componentName, userSpecifiedKey, validKeys); throw exception; } } } public static void reportException(Context context, NativeUIException e){ e.printStackTrace(); LogItem logItem = new LogItem(TimeStamp.getCurrentTimeStamp(), Source.SYSTEM, LogLevel.ERROR, "NativeComponent:" + e.getMessage(), "", 0); MyLog.sendBroadcastDebugLog(context, logItem); } public static int parseAndValidateColor(Context context, String componentName, String keyName, String defaultValue, JSONObject componentJSON) throws ConversionException{ String backgroundColorString = componentJSON.optString(keyName, defaultValue); try{ int backgroundColor = buildColor(backgroundColorString); return backgroundColor; }catch (IllegalArgumentException e) { throw new ConversionException( componentName, keyName, backgroundColorString, "Color"); } } public static float parseAndValidateFloat(Context context, String componentName, String keyName, String defaultValue, JSONObject componentJSON, float min, float max) throws ValueNotInRangeException, ConversionException{ String floatString = defaultValue; if(componentJSON.has(keyName)){ floatString = componentJSON.optString(keyName); } float floatValue; try { floatValue = Float.parseFloat(floatString); if(floatValue < min || floatValue > max){ throw new ValueNotInRangeException(componentName, keyName, floatString, "[" + min + "-" + max + "]"); } return floatValue; }catch (IllegalArgumentException e) { throw new ConversionException(componentName, keyName, floatString, "Float"); } } public static int parseAndValidateInt(Context context, String componentName, String keyName, String defaultValue, JSONObject componentJSON, int min, int max) throws ValueNotInRangeException, ConversionException{ String integerString = defaultValue; if(componentJSON.has(keyName)){ integerString = componentJSON.optString(keyName); } int intValue; try { intValue = Integer.parseInt(integerString); if(intValue < min || intValue > max){ throw new ValueNotInRangeException(componentName, keyName, integerString, "[" + min + "-" + max + "]"); } return intValue; }catch (IllegalArgumentException e) { throw new ConversionException(componentName, keyName, integerString, "Integer"); } } }