use of org.dbflute.logic.doc.spolicy.result.DfSPolicyResult in project dbflute-core by dbflute.
the class DfSPolicyChecker method checkPolicyIfNeeds.
// ===================================================================================
// Check Policy
// ============
public DfSPolicyResult checkPolicyIfNeeds() {
// null allowed if no policy
if (_policyMap.isEmpty()) {
return null;
}
_log.info("");
_log.info("...Beginning schema policy check");
// map:{
// ; tableExceptList = list:{}
// ; tableTargetList = list:{}
// ; columnExceptMap = map:{}
// ; isMainSchemaOnly = false
// ; wholeMap = map:{
// ; themeList = list:{ uniqueTableAlias ; sameColumnAliasIfSameColumnName }
// }
// ; tableMap = map:{
// ; themeList = list:{ hasPK ; upperCaseBasis ; identityIfPureIDPK }
// }
// ; columnMap = map:{
// ; themeList = list:{ upperCaseBasis }
// ; statementList = list:{
// ; if columnName is suffix:_FLAG then bad
// ; if columnName is suffix:_FLG then notNull
// ; if columnName is suffix:_FLG then dbType is INTEGER
// }
// }
// }
final long before = System.currentTimeMillis();
final DfSPolicyParsedPolicy policy = parsePolicy();
final String dispPolicy = showParsedPolicy(policy);
final DfSPolicyResult result = createPolicyResult(policy);
result.acceptPolicyMessage(dispPolicy);
final List<Table> tableList = _database.getTableList();
doCheckWhole(policy, result, tableList);
for (Table table : tableList) {
if (!isTargetTable(table)) {
continue;
}
doCheckTableColumn(policy, result, table);
}
final String violationMessage = _logicalSecretary.buildSchemaPolicyCheckViolationMessage(result);
result.acceptViolationMessage(violationMessage);
result.acceptEndingHandler(() -> {
// lazy handling for display of SchemaHTML
_log.info("...Ending schema policy check: " + result);
if (result.hasViolation()) {
_logicalSecretary.throwSchemaPolicyCheckViolationException(violationMessage);
} else {
final long after = System.currentTimeMillis();
// for tuning
final String performanceView = DfTraceViewUtil.convertToPerformanceView(after - before);
_log.info(" -> No violation of schema policy. Good DB design! [" + performanceView + "]");
_log.info("");
}
});
// not ending yet
return result;
}
use of org.dbflute.logic.doc.spolicy.result.DfSPolicyResult in project dbflute-core by dbflute.
the class DfSPolicyInRepsChecker method checkSchemaPolicyInRepsIfNeeds.
// ===================================================================================
// Check
// =====
public boolean checkSchemaPolicyInRepsIfNeeds() {
// returns check executed or not
final DfReplaceSchemaProperties repsProp = getReplaceSchemaProperties();
if (!repsProp.isCheckSchemaPolicyInReps()) {
return false;
}
final DfSchemaPolicyProperties policyProp = getSchemaPolicyProperties();
if (!policyProp.hasPolicy()) {
return false;
}
_log.info("");
_log.info("* * * * * * * * * * * *");
_log.info("* *");
_log.info("* Schema Policy *");
_log.info("* *");
_log.info("* * * * * * * * * * * *");
final String schemaXml = repsProp.getSchemaPolicyInRepsSchemaXml();
deleteTemporarySchemaXmlIfExists(schemaXml);
final DfSchemaXmlSerializer serializer = createSchemaXmlSerializer(schemaXml);
serializer.serialize();
try {
final DfSchemaXmlReader reader = createSchemaXmlReader(schemaXml);
final AppData appData = reader.read();
final Database database = appData.getDatabase();
// for e.g. "then classification"
initializeSupplementaryMetaData(database);
final DfSPolicyChecker checker = createChecker(policyProp, database);
final DfSPolicyResult policyResult = checker.checkPolicyIfNeeds();
if (policyResult == null) {
// no way already checked, just in case
return false;
}
// immediately handles violation (may be throw)
policyResult.ending();
} finally {
deleteTemporarySchemaXmlIfExists(schemaXml);
}
return true;
}
Aggregations