return(rc);
}
public void loadAndCheckRules(SchemaManager sm, SchemaDefinition sd) throws DmcRuleExceptionSet {
DmcRuleExceptionSet rc = null;
DmoObjectFactory dmofactory = new DmoObjectFactory(sm);
ArrayList<RuleDataDMO> allRuleData = new ArrayList<RuleDataDMO>();
ArrayList<RuleIF> allRules = new ArrayList<RuleIF>();
Iterator<SchemaDefinition> schemas = sm.getSchemas();
if (schemas != null){
while(schemas.hasNext()){
SchemaDefinition curr = schemas.next();
Iterator<DmcUncheckedObject> ucoIT = curr.getParsedRules();
if (ucoIT != null){
while(ucoIT.hasNext()){
DmcUncheckedObject uco = ucoIT.next();
ClassDefinition ruleDataCD = sm.cdef(uco.getConstructionClass());
RuleDefinition ruleDEF = ruleDataCD.getRuleDefinition();
RuleDataDMO ruledata = null;
SourceInfo source = getSource(uco);
try{
ruledata = (RuleDataDMO) dmofactory.createObject(uco);
// DebugInfo.debug("Parsed and instantiated:\n\n" + ruledata.toOIF());
}
catch(ClassNotFoundException cnf){
// This may be thrown from TypeDefinition when trying to instantiate a
// holder for an attribute. This would likely result from not having
// the compiled output of a previous code generation run specified on
// the class path for the dmogen call that's checking the rules
StringBuffer sb = new StringBuffer();
sb.append(cnf.getMessage() + "\n\n");
sb.append("You probably need to augment the following classpath:\n");
ClassLoader cl = ClassLoader.getSystemClassLoader();
URL[] urls = ((URLClassLoader)cl).getURLs();
for(URL url: urls){
sb.append(url.getFile() + "\n");
}
sb.append("\nwith the classpath info for the missing class.");
DmcRuleException ex = new DmcRuleException(sb.toString(), null);
ex.source(source);
if (rc == null)
rc = new DmcRuleExceptionSet();
rc.add(ex);
// This is a show stopper, so just fire it now.
throw(rc);
}
catch(DmcValueException dve){
// If a value for an attribute doesn't pass the basic tests, we'll
// get one of these, just repackage it as a rule exception
DmcRuleException ex = new DmcRuleException(dve.getMessage(), null);
ex.source(source);
if (rc == null)
rc = new DmcRuleExceptionSet();
rc.add(ex);
}
catch(ResultException rex){
// If we can't find a class or attribute, we'll get one of these
DmcRuleException ex = new DmcRuleException(rex.getMessage(), null);
ex.source(source);
if (rc == null)
rc = new DmcRuleExceptionSet();
rc.add(ex);
// System.err.println(ex.toString());
}
if (ruledata == null)
continue;
try{
ruledata.resolveReferences(sm);
}
catch(DmcValueExceptionSet ex){
System.err.println(ex.toString() + "\nFile: " + ruledata.getFile() + " Line: " + ruledata.getLineNumber());
}
try{
DynamicInitIF rule = (DynamicInitIF) ruleDEF.newRuleInstance();
rule.setRuleData(ruledata);
allRuleData.add(ruledata);
// addThisRule((RuleIF) rule);
allRules.add((RuleIF) rule);
}
catch(Exception ex){
System.err.println(ex.toString());
}
}
}
}
DmcOmni.instance().reset();
schemas = sm.getSchemas();
while(schemas.hasNext()){
SchemaDefinition curr = schemas.next();
DmcOmni.instance().addCompactSchema(curr.getCompactSchema());
}
// We add the rules after we've reinitialized the DmcOmni so that we can resolve
// applyToClass information.
for(RuleIF rule: allRules)
addThisRule(rule);
DebugInfo.debug("*** ALL RULE COLLECTIONS ***\n\n" + this.toString());
// DebugInfo.debug("\n\n*** RULE TRACING DISABLED ***\n\n");
DmcOmni.instance().ruleTracer(new ConsoleRuleTracer());
DmcOmni.instance().ruleTracing(true);
for(RuleDataDMO rule: allRuleData){
SourceInfo source = new SourceInfo(rule.getFile(), rule.getLineNumber()+"", rule);
// if (rule.getRuleName().equals("dmtSvNumericRange")){
// DebugInfo.debug("HERE");
// }
try {
this.executeAttributeValidation(rule);
this.executeObjectValidation(rule);
} catch (DmcRuleExceptionSet e) {
e.source(source);
if (rc == null)
rc = e;
else
rc.add(e);
// System.err.println(e.toString());
}
}
// DebugInfo.debug(this.toString());