Search in sources :

Example 36 with Module

use of com.developmentontheedge.be5.metadata.model.Module in project be5 by DevelopmentOnTheEdge.

the class ModuleUtilsTest method getProject.

private Project getProject() throws ProjectSaveException {
    Project app = new Project("app");
    Module appModule = new Module("module", app.getModules());
    DataElementUtils.save(appModule);
    Entity appEntity = new Entity("mentity", appModule, EntityType.DICTIONARY);
    DataElementUtils.save(appEntity);
    Query appQ1 = new Query("q1", appEntity);
    appQ1.setQuery("QUERY1 customized");
    DataElementUtils.save(appQ1);
    Query appQ3 = new Query("q3", appEntity);
    appQ3.setQuery("QUERY3");
    appQ3.setTitleName("Query3 title");
    DataElementUtils.save(appQ3);
    return app;
}
Also used : Project(com.developmentontheedge.be5.metadata.model.Project) Entity(com.developmentontheedge.be5.metadata.model.Entity) Query(com.developmentontheedge.be5.metadata.model.Query) Module(com.developmentontheedge.be5.metadata.model.Module)

Example 37 with Module

use of com.developmentontheedge.be5.metadata.model.Module in project be5 by DevelopmentOnTheEdge.

the class ModuleLoader2MergeModulesTest method createModuleWithQueryRoles.

private Project createModuleWithQueryRoles(Project project, Project entityOwner, String moduleName, String queryName, String roleName, Path path) throws Exception {
    Project moduleProject = new Project(moduleName, true);
    Entity entity;
    if (entityOwner == null) {
        entity = ProjectTestUtils.createEntity(moduleProject, "moduleEntity", "ID");
    } else {
        Module appModule = new Module(entityOwner.getName(), moduleProject.getModules());
        DataElementUtils.save(appModule);
        entity = new Entity("moduleEntity", appModule, EntityType.TABLE);
        DataElementUtils.save(entity);
    }
    ProjectTestUtils.createScheme(entity);
    ProjectTestUtils.createQuery(entity, queryName, Collections.singletonList('@' + roleName));
    moduleProject.setRoles(Collections.singletonList(roleName));
    setRoleGroups(moduleProject, roleName);
    Module appModule = new Module(moduleName, project.getModules());
    DataElementUtils.save(appModule);
    Serialization.save(moduleProject, path);
    return moduleProject;
}
Also used : Project(com.developmentontheedge.be5.metadata.model.Project) Entity(com.developmentontheedge.be5.metadata.model.Entity) Module(com.developmentontheedge.be5.metadata.model.Module)

Example 38 with Module

use of com.developmentontheedge.be5.metadata.model.Module in project be5 by DevelopmentOnTheEdge.

the class AppDb method execute.

@Override
public void execute() throws MojoFailureException {
    init();
    try {
        if (logPath != null) {
            logPath.mkdirs();
            ps = new PrintStream(new File(logPath, (moduleName == null ? be5Project.getName() : moduleName) + "_db.sql"), "UTF-8");
        }
        sql = new BeSqlExecutor(connector, ps);
        if (moduleName != null) {
            Module module = be5Project.getModule(moduleName);
            if (module == null) {
                throw new MojoFailureException("Module '" + moduleName + "' not found!");
            }
            createDb(module);
        } else {
            for (Module module : be5Project.getModules()) {
                if (ModuleLoader2.containsModule(module.getName()))
                    createDb(module);
            }
            createDb(be5Project.getApplication());
        }
        getLog().info("Created tables: " + createdTables + ", created views: " + createdViews);
    } catch (MojoFailureException e) {
        throw e;
    } catch (ProjectElementException | FreemarkerSqlException e) {
        if (debug) {
            e.printStackTrace();
            throw new MojoFailureException("Setup db error", e);
        }
        throw new MojoFailureException(e.getMessage());
    } catch (Exception e) {
        e.printStackTrace();
        throw new MojoFailureException("Setup db error", e);
    } finally {
        if (ps != null) {
            ps.close();
        }
    }
}
Also used : BeSqlExecutor(com.developmentontheedge.be5.metadata.sql.BeSqlExecutor) FreemarkerSqlException(com.developmentontheedge.be5.metadata.exception.FreemarkerSqlException) PrintStream(java.io.PrintStream) ProjectElementException(com.developmentontheedge.be5.metadata.exception.ProjectElementException) MojoFailureException(org.apache.maven.plugin.MojoFailureException) Module(com.developmentontheedge.be5.metadata.model.Module) File(java.io.File) FreemarkerSqlException(com.developmentontheedge.be5.metadata.exception.FreemarkerSqlException) ProjectElementException(com.developmentontheedge.be5.metadata.exception.ProjectElementException) MojoFailureException(org.apache.maven.plugin.MojoFailureException)

Example 39 with Module

use of com.developmentontheedge.be5.metadata.model.Module in project be5 by DevelopmentOnTheEdge.

the class AppSync method getDdlStatements.

// /////////////////////////////////////////////////////////////////////////
// Synchronization
// 
protected String getDdlStatements(boolean dangerousOnly) throws ExtendedSqlException {
    Map<String, DdlElement> oldSchemes = new HashMap<>();
    Map<String, DdlElement> newSchemes = new HashMap<>();
    for (Module module : be5Project.getModulesAndApplication()) {
        for (Entity entity : module.getEntities()) {
            DdlElement scheme = entity.isAvailable() ? entity.getScheme() : null;
            if (scheme != null) {
                String normalizedName = entity.getName().toLowerCase();
                newSchemes.put(normalizedName, scheme);
            }
        }
    }
    for (Entity entity : entities) {
        DdlElement scheme = entity.isAvailable() ? entity.getScheme() : null;
        if (scheme != null) {
            String normalizedName = entity.getName().toLowerCase();
            oldSchemes.put(normalizedName, scheme);
        }
    }
    StringBuilder sb = new StringBuilder();
    for (Map.Entry<String, DdlElement> entity : newSchemes.entrySet()) {
        DdlElement oldScheme = oldSchemes.get(entity.getKey());
        DdlElement newScheme = entity.getValue();
        if (newScheme.withoutDbScheme()) {
            if (!dangerousOnly) {
            // PENDING - list of other type
            // warnings.addAll(newScheme.getWarnings());
            }
            if (oldScheme == null) {
                if (!dangerousOnly) {
                    sb.append(newScheme.getCreateDdl());
                }
                continue;
            }
            if (newScheme.equals(oldScheme) || newScheme.getDiffDdl(oldScheme, null).isEmpty())
                continue;
            // PENDING
            if (oldScheme instanceof TableDef && newScheme instanceof TableDef)
                fixPrimaryKey((TableDef) oldScheme, (TableDef) newScheme);
            sb.append(dangerousOnly ? newScheme.getDangerousDiffStatements(oldScheme, sqlExecutor) : newScheme.getDiffDdl(oldScheme, sqlExecutor));
        } else {
            System.out.println("Skip table with schema: " + newScheme.getEntityName());
        }
    }
    return sb.toString();
}
Also used : Entity(com.developmentontheedge.be5.metadata.model.Entity) HashMap(java.util.HashMap) DdlElement(com.developmentontheedge.be5.metadata.model.DdlElement) Module(com.developmentontheedge.be5.metadata.model.Module) HashMap(java.util.HashMap) Map(java.util.Map) TableDef(com.developmentontheedge.be5.metadata.model.TableDef)

Example 40 with Module

use of com.developmentontheedge.be5.metadata.model.Module in project be5 by DevelopmentOnTheEdge.

the class AppSync method createEntities.

private void createEntities() throws ExtendedSqlException, SQLException {
    Rdbms databaseSystem = DatabaseUtils.getRdbms(connector);
    DbmsTypeManager typeManager = databaseSystem == null ? new DefaultTypeManager() : databaseSystem.getTypeManager();
    boolean casePreserved = typeManager.normalizeIdentifierCase("aA").equals("aA");
    entities = new ArrayList<>();
    Project project = new Project("internal-db");
    project.setDatabaseSystem(be5Project.getDatabaseSystem());
    Module module = new Module("temp", project);
    for (String table : tableTypes.keySet()) {
        if (!"TABLE".equals(tableTypes.get(table.toLowerCase())))
            continue;
        List<SqlColumnInfo> columnInfos = columns.get(table.toLowerCase());
        if (columnInfos == null)
            continue;
        Entity entity = new Entity(table, module, EntityType.TABLE);
        entities.add(entity);
        TableDef tableDef = new TableDef(entity);
        for (SqlColumnInfo info : columnInfos) {
            ColumnDef column = new ColumnDef(info.getName(), tableDef.getColumns());
            column.setType(createColumnType(info));
            typeManager.correctType(column.getType());
            // PENDING
            column.setPrimaryKey(info.getName().equalsIgnoreCase(entity.getPrimaryKey()));
            column.setCanBeNull(info.isCanBeNull());
            String defaultValue = info.getDefaultValue();
            column.setAutoIncrement(info.isAutoIncrement());
            if (!info.isAutoIncrement()) {
                column.setDefaultValue(defaultValue);
            }
            if (column.isPrimaryKey() && typeManager.getKeyType().equals(typeManager.getTypeClause(column.getType()))) {
                column.getType().setTypeName(SqlColumnType.TYPE_KEY);
            }
            // column.setOriginModuleName( module.getName() );
            DataElementUtils.saveQuiet(column);
        }
        List<IndexInfo> indexInfos = indices.get(table.toLowerCase(Locale.ENGLISH));
        if (indexInfos != null) {
            INDEX: for (IndexInfo info : indexInfos) {
                if (!casePreserved)
                    info.setName(info.getName().toUpperCase(Locale.ENGLISH));
                IndexDef index = new IndexDef(info.getName(), tableDef.getIndices());
                index.setUnique(info.isUnique());
                for (String indexCol : info.getColumns()) {
                    IndexColumnDef indexColumnDef = IndexColumnDef.createFromString(indexCol, index);
                    if (tableDef.getColumns().get(indexColumnDef.getName()) == null) {
                        if (debug) {
                            warnings.add("Unsupported functional index found: " + index.getName() + " (problem is here: " + indexCol + "); skipped");
                        }
                        continue INDEX;
                    }
                    DataElementUtils.saveQuiet(indexColumnDef);
                }
                if (index.isUnique() && index.getSize() == 1) {
                    IndexColumnDef indexColumnDef = index.iterator().next();
                    if (!indexColumnDef.isFunctional()) {
                        if (index.getName().equalsIgnoreCase(table + "_pkey")) {
                            entity.setPrimaryKey(indexColumnDef.getName());
                            continue;
                        }
                    }
                }
                DataElementUtils.saveQuiet(index);
            }
        }
        DataElementUtils.saveQuiet(tableDef);
    }
    if (sqlExecutor.getConnector().getType() != DbmsType.MYSQL)
        return;
    // For MySQL only now
    for (Entity entity : entities) {
        final String table = entity.getName();
        if (!"VIEW".equalsIgnoreCase(tableTypes.get(table)))
            continue;
        String createTable;
        ResultSet rs = sqlExecutor.executeNamedQuery("sql.getTableDefinition", table);
        try {
            if (!rs.next())
                continue;
            createTable = rs.getString(2);
        } finally {
            sqlExecutor.getConnector().close(rs);
        }
        int as = createTable.indexOf(" AS ");
        if (as < 0)
            continue;
        createTable = createTable.substring(as + " AS ".length());
        ViewDef def = new ViewDef(entity);
        def.setDefinition(createTable);
        DataElementUtils.saveQuiet(def);
    }
}
Also used : DefaultTypeManager(com.developmentontheedge.be5.metadata.sql.type.DefaultTypeManager) Entity(com.developmentontheedge.be5.metadata.model.Entity) IndexColumnDef(com.developmentontheedge.be5.metadata.model.IndexColumnDef) Rdbms(com.developmentontheedge.be5.metadata.sql.Rdbms) IndexColumnDef(com.developmentontheedge.be5.metadata.model.IndexColumnDef) ColumnDef(com.developmentontheedge.be5.metadata.model.ColumnDef) IndexInfo(com.developmentontheedge.be5.metadata.sql.pojo.IndexInfo) ViewDef(com.developmentontheedge.be5.metadata.model.ViewDef) TableDef(com.developmentontheedge.be5.metadata.model.TableDef) Project(com.developmentontheedge.be5.metadata.model.Project) ResultSet(java.sql.ResultSet) Module(com.developmentontheedge.be5.metadata.model.Module) SqlColumnInfo(com.developmentontheedge.be5.metadata.sql.pojo.SqlColumnInfo) IndexDef(com.developmentontheedge.be5.metadata.model.IndexDef) DbmsTypeManager(com.developmentontheedge.be5.metadata.sql.type.DbmsTypeManager)

Aggregations

Module (com.developmentontheedge.be5.metadata.model.Module)26 Project (com.developmentontheedge.be5.metadata.model.Project)21 Entity (com.developmentontheedge.be5.metadata.model.Entity)19 Query (com.developmentontheedge.be5.metadata.model.Query)12 Test (org.junit.Test)9 Path (java.nio.file.Path)8 ArrayList (java.util.ArrayList)6 Operation (com.developmentontheedge.be5.metadata.model.Operation)5 YamlDeserializer (com.developmentontheedge.be5.metadata.serialization.yaml.YamlDeserializer)5 HashMap (java.util.HashMap)5 ProjectElementException (com.developmentontheedge.be5.metadata.exception.ProjectElementException)4 TableDef (com.developmentontheedge.be5.metadata.model.TableDef)4 Map (java.util.Map)4 FreemarkerCatalog (com.developmentontheedge.be5.metadata.model.FreemarkerCatalog)3 FreemarkerScript (com.developmentontheedge.be5.metadata.model.FreemarkerScript)3 BeModelElement (com.developmentontheedge.be5.metadata.model.base.BeModelElement)3 List (java.util.List)3 FreemarkerSqlException (com.developmentontheedge.be5.metadata.exception.FreemarkerSqlException)2 ReadException (com.developmentontheedge.be5.metadata.exception.ReadException)2 ColumnDef (com.developmentontheedge.be5.metadata.model.ColumnDef)2