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;
}
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;
}
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();
}
}
}
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();
}
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);
}
}
Aggregations