use of io.vertx.up.annotations.Wall in project vertx-zero by silentbalanceyh.
the class WallInquirer method scan.
@Override
public Set<Cliff> scan(final Set<Class<?>> walls) {
/**
* 1. Build result *
*/
final Set<Cliff> wallSet = new TreeSet<>();
final Set<Class<?>> wallClses = walls.stream().filter((item) -> item.isAnnotationPresent(Wall.class)).collect(Collectors.toSet());
if (!wallClses.isEmpty()) {
/**
* It means that you have set Wall and enable security configuration
* wallClses verification
*/
final ConcurrentMap<String, Class<?>> keys = new ConcurrentHashMap<>();
final JsonObject config = this.verify(wallClses, keys);
for (final String field : config.fieldNames()) {
// Difference key setting
final Class<?> cls = keys.get(field);
final Cliff cliff = this.transformer.transform(config.getJsonObject(field));
// Set Information from class
this.mountData(cliff, cls);
wallSet.add(cliff);
}
}
/**
* 3. Transfer *
*/
return wallSet;
}
use of io.vertx.up.annotations.Wall in project vertx-zero by silentbalanceyh.
the class WallInquirer method verify.
/**
* @param wallClses
* @param keysRef
* @return
*/
private JsonObject verify(final Set<Class<?>> wallClses, final ConcurrentMap<String, Class<?>> keysRef) {
/**
* Wall duplicated *
*/
final Set<String> hashs = new HashSet<>();
Observable.fromIterable(wallClses).filter(Objects::nonNull).map(item -> {
final Annotation annotation = item.getAnnotation(Wall.class);
// Add configuration key into keys;
keysRef.put(Instance.invoke(annotation, "value"), item);
return this.hashPath(annotation);
}).subscribe(hashs::add);
// Duplicated adding.
Fn.flingUp(hashs.size() != wallClses.size(), LOGGER, WallDuplicatedException.class, this.getClass(), wallClses.stream().map(Class::getName).collect(Collectors.toSet()));
/**
* Shared key does not existing *
*/
final JsonObject config = NODE.read();
Fn.flingUp(!config.containsKey(KEY), LOGGER, DynamicKeyMissingException.class, this.getClass(), KEY, config);
/**
* Wall key missing *
*/
final JsonObject hitted = config.getJsonObject(KEY);
for (final String key : keysRef.keySet()) {
Fn.flingUp(null == hitted || !hitted.containsKey(key), LOGGER, WallKeyMissingException.class, this.getClass(), key, keysRef.get(key));
}
return hitted;
}
Aggregations