PrimaryKeyUtil.java

package ru.volnenko.maven.plugin.databasedoc.util;

import lombok.NonNull;
import ru.volnenko.maven.plugin.databasedoc.model.impl.*;

import java.util.*;

public final class PrimaryKeyUtil {

    @NonNull
    public static Set<PK> pks(final Collection<Root> roots) {
        if (roots == null || roots.isEmpty()) return Collections.emptySet();
        @NonNull final Set<PK> result = new LinkedHashSet<>();
        for (Root root: roots) result.addAll(pks(root));
        return result;
    }

    @NonNull
    public static Set<PK> pks(final Root root) {
        if (root == null) return Collections.emptySet();
        if (root.getDatabaseChangeLog() == null) return Collections.emptySet();
        if (root.getDatabaseChangeLog().isEmpty()) return Collections.emptySet();
        @NonNull final Set<PK> result = new LinkedHashSet<>();
        for (DatabaseChangeLog changeLog: root.getDatabaseChangeLog()) {
            if (changeLog == null) continue;
            final ChangeSet changeSet = changeLog.getChangeSet();
            if (changeLog == null) continue;
            final List<Change> changes = changeSet.getChanges();
            if (changes == null || changes.isEmpty()) continue;
            for (Change change: changes) {
                if (change == null) continue;
                final CreateTable createTable = change.getCreateTable();
                if (createTable == null) continue;
                if (createTable.getColumns() == null) continue;
                for (final ColumnWrapper columnWrapper: createTable.getColumns()) {
                    final Column column = columnWrapper.getColumn();
                    if (column == null) continue;
                    final String name = ColumnUtil.getName(column);
                    if (name == null || name.isEmpty()) continue;
                    if (column.getConstraints() == null) continue;
                    if (column.getConstraints().getPrimaryKey() == null) continue;
                    if (!column.getConstraints().getPrimaryKey()) continue;
                    result.add(new PK(createTable.getTableName(), name));
                }
            }
        }
        return result;
    }

}