default Table findTableByName(String fullName) {

        final String[] parts = SPLIT_PATTERN.split(fullName);

        if (parts.length != 3) {
            throw new IllegalArgumentException(
                "fullName should consist of three parts separated by dots. "
                + "These are dbms-name, schema-name and table-name."
            );
        }

        final String dbmsId = parts[0];
        final String schemaId = parts[1];
        final String tableId = parts[2];
       
        return dbmses()
            .filter(d -> dbmsId.equals(d.getId()))
            .findAny()
            .orElseThrow(() -> new IllegalArgumentException(
                "Could not find dbms: '" + dbmsId + "'."))
            .schemas().filter(s -> schemaId.equals(s.getId())).findAny()
            .orElseThrow(() -> new IllegalArgumentException(
                "Could not find schema: '" + schemaId + "'."))
            .tables().filter(t -> tableId.equals(t.getId())).findAny()
            .orElseThrow(() -> new IllegalArgumentException(
                "Could not find table: '" + tableId + "'."));
    }
Locates the table with the specified full name in this project. The name
should be separated by dots (.) and have exactly three parts; the name of
the {@link Dbms}, the name of the {@link Schema} and the name of the
{@link Table}. If the inputed name is malformed, an
{@code IllegalArgumentException} will be thrown.
<p>
Example of a valid name: {@code db0.socialnetwork.image}
<p>
If no table matching the specified name was found, an exception is also
thrown.

@param fullName the full name of the table
@return the table found
runtime-parent/runtime-config/src/main/java/com/speedment/runtime/config/Project.java