class NotificationLogging implements InvocationHandler {

    public static String logNotification(INotificationData iNotif) {
        if (iNotif == null) {
            return "NULL";
        }

        Class<? extends INotificationData> clazz = iNotif.getClass();

        Method[] declaredMethods = clazz.getDeclaredMethods();

        if (declaredMethods == null || declaredMethods.length == 0) {
            return "EMPTY"; // No declared methods in this class !!!
        }

        StringBuilder buffer = new StringBuilder("ASDC Notification:");
        buffer.append(System.lineSeparator());

        for (Method m : declaredMethods) {
            if ((m != null) && isGetter(m)) {
                for (String prefix : GETTER_PREFIXES) {
                    if (m.getName().startsWith(prefix)) {
                        buffer.append(m.getName().substring(prefix.length()));
                        break;
                    }
                }
                try {
                    buffer.append(testNull(m.invoke(iNotif, (Object[]) null)));
                } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
                    logger.debug("Exception", e);
                    buffer.append("UNREADABLE");
                }
                buffer.append(System.lineSeparator());
            }
        }

        return buffer.toString();
    }

    private  NotificationLogging();

}