@Override
    protected Object toMap(final LiquibaseSerializable object) {
        if (object instanceof DatabaseObject) {
            if (alreadySerializingObject) {
                String snapshotId = ((DatabaseObject) object).getSnapshotId();
                if (snapshotId == null) {
                    String name = ((DatabaseObject) object).getName();
                    Object table = ((DatabaseObject) object).getAttribute("table", Object.class);
                    if (table == null) {
                        table = ((DatabaseObject) object).getAttribute("relation", Object.class);
                    }
                    if (table != null) {
                        name = table.toString() + "." + name;
                    }

                    if (((DatabaseObject) object).getSchema() != null) {
                        name = ((DatabaseObject) object).getSchema().toString() + "." + name;
                    }

                    throw new UnexpectedLiquibaseException("Found a null snapshotId for " + StringUtil.lowerCaseFirst(object.getClass().getSimpleName()) + " " + name);
                }
                return ((DatabaseObject) object).getClass().getName() + "#" + snapshotId;
            } else {
                alreadySerializingObject = true;
                Object map = super.toMap(object);
                alreadySerializingObject = false;
                return map;
            }
        }
        if (object instanceof DatabaseObjectCollection) {
            SortedMap<String, Object> returnMap = new TreeMap<>();
            for (Map.Entry<Class<? extends DatabaseObject>, Set<? extends DatabaseObject>> entry : ((DatabaseObjectCollection) object).toMap().entrySet()) {
                ArrayList value = new ArrayList(entry.getValue());
                Collections.sort(value, new DatabaseObjectComparator());
                returnMap.put(entry.getKey().getName(), value);
            }
            return returnMap;
        }
        return super.toMap(object);
    }
@Override
    protected Object toMap(final LiquibaseSerializable object) {
        if (object instanceof DatabaseObject) {
            if (alreadySerializingObject) {
                String snapshotId = ((DatabaseObject) object).getSnapshotId();
                if (snapshotId == null) {
                    String name = ((DatabaseObject) object).getName();
                    Object table = ((DatabaseObject) object).getAttribute("table", Object.class);
                    if (table == null) {
                        table = ((DatabaseObject) object).getAttribute("relation", Object.class);
                    }
                    if (table != null) {
                        name = table.toString() + "." + name;
                    }

                    if (((DatabaseObject) object).getSchema() != null) {
                        name = ((DatabaseObject) object).getSchema().toString() + "." + name;
                    }

                    throw new UnexpectedLiquibaseException("Found a null snapshotId for " + StringUtil.lowerCaseFirst(object.getClass().getSimpleName()) + " " + name);
                }
                return ((DatabaseObject) object).getClass().getName() + "#" + snapshotId;
            } else {
                alreadySerializingObject = true;
                Object map = super.toMap(object);
                alreadySerializingObject = false;
                return map;
            }
        }
        if (object instanceof DatabaseObjectCollection) {
            SortedMap<String, Object> returnMap = new TreeMap<>();
            for (Map.Entry<Class<? extends DatabaseObject>, Set<? extends DatabaseObject>> entry : ((DatabaseObjectCollection) object).toMap().entrySet()) {
                ArrayList value = new ArrayList(entry.getValue());
                Collections.sort(value, new DatabaseObjectComparator());
                returnMap.put(entry.getKey().getName(), value);
            }
            return returnMap;
        }
        return super.toMap(object);
    }
@ Override protected Object toMap ( final LiquibaseSerializable object ) { if ( object instanceof DatabaseObject ) { if ( alreadySerializingObject ) { String snapshotId = ( ( DatabaseObject ) object ) . getSnapshotId ( ) ; if ( snapshotId == null ) { String name = ( ( DatabaseObject ) object ) . getName ( ) ; Object table = ( ( DatabaseObject ) object ) . getAttribute ( "table" , Object . class ) ; if ( table == null ) { table = ( ( DatabaseObject ) object ) . getAttribute ( "relation" , Object . class ) ; } if ( table != null ) { name = table . toString ( ) + "." + name ; } if ( ( ( DatabaseObject ) object ) . getSchema ( ) != null ) { name = ( ( DatabaseObject ) object ) . getSchema ( ) . toString ( ) + "." + name ; } throw new UnexpectedLiquibaseException ( "Found a null snapshotId for " + StringUtil . lowerCaseFirst ( object . getClass ( ) . getSimpleName ( ) ) + " " + name ) ; } return ( ( DatabaseObject ) object ) . getClass ( ) . getName ( ) + "#" + snapshotId ; } else { alreadySerializingObject = true ; Object map = super . toMap ( object ) ; alreadySerializingObject = false ; return map ; } } if ( object instanceof DatabaseObjectCollection ) { SortedMap < String , Object > returnMap = new TreeMap <> ( ) ; for ( Map . Entry < Class < ? extends DatabaseObject > , Set < ? extends DatabaseObject > > entry : ( ( DatabaseObjectCollection ) object ) . toMap ( ) . entrySet ( ) ) { ArrayList value = new ArrayList ( entry . getValue ( ) ) ; Collections . sort ( value , new DatabaseObjectComparator ( ) ) ; returnMap . put ( entry . getKey ( ) . getName ( ) , value ) ; } return returnMap ; } return super . toMap ( object ) ; }
}
}