@Override public void validateField(String name, Object field) { if (field == null) { return; } //check if iterable SimpleTypeValidator.validateField(name, Iterable.class, field); HashSet<Object> objectSet = new HashSet<Object>(); for (Object o : (Iterable<?>) field) { if (objectSet.contains(o)) { throw new IllegalArgumentException(name + " should contain no duplicate elements. Duplicated element: " + o); } objectSet.add(o); } } }
@Override public void validateField(String name, Object o) { SimpleTypeValidator.validateField(name, String.class, o); if (this.acceptedValues != null) { if (!this.acceptedValues.contains((String) o)) { throw new IllegalArgumentException( "Field " + name + " is not an accepted value. Value: " + o + " Accepted values: " + this.acceptedValues); } } } }
@Override public void validateField(String name, Object o) { if (o == null) { return; } SimpleTypeValidator.validateField(name, Map.class, o); if (!((Map<?, ?>) o).containsKey("class")) { throw new IllegalArgumentException("Field " + name + " must have map entry with key: class"); } SimpleTypeValidator.validateField(name, String.class, ((Map<?, ?>) o).get("class")); } }
@Override public void validateField(String name, Object o) { validateField(name, this.type, o); }
@Override public void validateField(String name, Object o) { if(o == null) { return; } SimpleTypeValidator.validateField(name, Map.class, o); if(!((Map) o).containsKey("class") ) { throw new IllegalArgumentException( "Field " + name + " must have map entry with key: class"); } SimpleTypeValidator.validateField(name, String.class, ((Map) o).get("class")); } }
@Override public void validateField(String name, Object o) { SimpleTypeValidator.validateField(name, Double.class, o); } }
@Override public void validateField(String name, Object o) { SimpleTypeValidator.validateField(name, Number.class, o); } }
@Override public void validateField(String name, Object o) { SimpleTypeValidator.validateField(name, String.class, o); if(this.acceptedValues != null) { if (!this.acceptedValues.contains((String) o)) { throw new IllegalArgumentException("Field " + name + " is not an accepted value. Value: " + o + " Accepted values: " + this.acceptedValues); } } } }
@Override public void validateField(String name, Object o) { SimpleTypeValidator.validateField(name, Boolean.class, o); } }
SimpleTypeValidator.validateField(name, Map.class, o); for (Map.Entry<Object, Object> entry : ((Map<Object, Object>) o).entrySet()) { for (Class<?> kv : keyValidators) {
return; SimpleTypeValidator.validateField(name, Map.class, o); if (!((Map) o).containsKey(CLASS)) { throw new IllegalArgumentException("Field " + name + " must have map entry with key: class"); SimpleTypeValidator.validateField(CLASS, String.class, filterMap.get(CLASS)); SimpleTypeValidator.validateField(name, String.class, ((Map) o).get(CLASS));
@Override public void validateField(String name, Object o) { if (o == null) { return; } SimpleTypeValidator.validateField(name, String.class, o); String className = (String) o; try { Class<?> objectClass = Class.forName(className); if (!this.classImplements.isAssignableFrom(objectClass)) { throw new IllegalArgumentException("Field " + name + " with value " + o + " does not implement " + this.classImplements.getName()); } } catch (ClassNotFoundException e) { //To support topologies of older version to run, we might have to loose the constraints so that //the configs of older version can pass the validation. if (className.startsWith("backtype.storm")) { LOG.error("ClassNotFoundException: {}", className); LOG.warn("Replace backtype.storm with org.apache.storm and try to validate again"); LOG.warn("We loosen some constraints here to support topologies of older version running on the current version"); validateField(name, className.replace("backtype.storm", "org.apache.storm")); } else { throw new RuntimeException(e); } } } }
public static void validateField(String name, Class<?>[] validators, Object o) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException { if (o == null) { return; } //check if iterable SimpleTypeValidator.validateField(name, Iterable.class, o); for (Object entry : (Iterable<?>) o) { for (Class<?> validator : validators) { Object v = validator.getConstructor().newInstance(); if (v instanceof Validator) { ((Validator) v).validateField(name + " list entry", entry); } else { LOG.warn( "validator: {} cannot be used in ListEntryCustomValidator. Individual entry validators must a instance of " + "Validator class", validator.getName()); } } } }
@Override public void validateField(String name, Object o) { if (o == null) { return; } SimpleTypeValidator.validateField(name, Map.class, o); Map<?, ?> m = (Map<?, ?>) o; if (!m.containsKey("cpu")) { throw new IllegalArgumentException("Field " + name + " must have map entry with key: cpu"); } if (!m.containsKey("memory")) { throw new IllegalArgumentException("Field " + name + " must have map entry with key: memory"); } SimpleTypeValidator.validateField(name, Number.class, m.get("cpu")); SimpleTypeValidator.validateField(name, Number.class, m.get("memory")); } }
@Override public void validateField(String name, Object o) { if (o == null) { return; } SimpleTypeValidator.validateField(name, Map.class, o); if (!((Map<?, ?>) o).containsKey("class")) { throw new IllegalArgumentException("Field " + name + " must have map entry with key: class"); } if (!((Map<?, ?>) o).containsKey("parallelism.hint")) { throw new IllegalArgumentException("Field " + name + " must have map entry with key: parallelism.hint"); } SimpleTypeValidator.validateField(name, String.class, ((Map<?, ?>) o).get("class")); new IntegerValidator().validateField(name, ((Map<?, ?>) o).get("parallelism.hint")); } }
@Override public void validateField(String name, Object o) { if (o == null) { return; } SimpleTypeValidator.validateField(name, Map.class, o); if (!((Map<?, ?>) o).containsKey("class")) { throw new IllegalArgumentException("Field " + name + " must have map entry with key: class"); } SimpleTypeValidator.validateField(name, String.class, ((Map<?, ?>) o).get("class")); if (((Map<?, ?>) o).containsKey("arguments")) { SimpleTypeValidator.validateField(name, Map.class, ((Map<?, ?>) o).get("arguments")); } } }
@Override public void validateField(String name, Object o) { SimpleTypeValidator.validateField(name, Number.class, o); } }
@Override public void validateField(String name, Object o) { SimpleTypeValidator.validateField(name, Double.class, o); } }
@Override public void validateField(String name, Object o) { SimpleTypeValidator.validateField(name, Boolean.class, o); } }
@Override public void validateField(String name, Object o) { validateField(name, this.type, o); } }