private Optional<@NotNull Boolean> isParagraphValid(Resource resource) {
    // use reflection to access the method "getModelFromResource" from ModelFactory, as it is not present in earlier version
    // but we want still to support earlier versions of AEM as well which do not contain this method
    // validation is disabled in this case
    Method getModelFromResourceMethod;
    try {
      getModelFromResourceMethod = ModelFactory.class.getDeclaredMethod("getModelFromResource", Resource.class);
    }
    catch (NoSuchMethodException | SecurityException ex) {
      // seems to be an earlier version of AEM/Sling models not supporting this method
      log.debug("ModelFactory does not support method 'getModelFromResource' - skip paragraph validation.");
      return Optional.empty();
    }
    try {
      // try to get model associated with the resource, and check if it implements the ParsysItem interface
      Object model = getModelFromResourceMethod.invoke(modelFactory, resource);
      if (model instanceof ParsysItem) {
        return Optional.of(((ParsysItem)model).isValid());
      }
    }
    catch (ModelClassException ex) {
      // ignore if no model was registered for this resource type
    }
    catch (InvocationTargetException ex) {
      if (ex.getCause() instanceof ModelClassException) {
        // ignore if no model was registered for this resource type
      }
      else {
        log.warn("Unable to invoke ModelFactory.getModelFromResource.", ex);
      }
    }
    catch (IllegalAccessException ex) {
      log.warn("Unable to access ModelFactory.getModelFromResource.", ex);
    }
    return Optional.empty();
  }
private Optional < @ NotNull Boolean > isParagraphValid ( Resource resource ) { Method getModelFromResourceMethod ; try { getModelFromResourceMethod = ModelFactory . class . getDeclaredMethod ( "getModelFromResource" , Resource . class ) ; } catch ( NoSuchMethodException | SecurityException ex ) { log . debug ( "ModelFactory does not support method 'getModelFromResource' - skip paragraph validation." ) ; return Optional . empty ( ) ; } try { Object model = getModelFromResourceMethod . invoke ( modelFactory , resource ) ; if ( model instanceof ParsysItem ) { return Optional . of ( ( ( ParsysItem ) model ) . isValid ( ) ) ; } } catch ( ModelClassException ex ) { } catch ( InvocationTargetException ex ) { if ( ex . getCause ( ) instanceof ModelClassException ) { } else { log . warn ( "Unable to invoke ModelFactory.getModelFromResource." , ex ) ; } } catch ( IllegalAccessException ex ) { log . warn ( "Unable to access ModelFactory.getModelFromResource." , ex ) ; } return Optional . empty ( ) ; }
Checks if the given paragraph is valid.
@param resource Resource
@return if the return value is empty there is no model associated with this resource, or
it does not support validation via {@link ParsysItem} interface. Otherwise it contains the valid status.