static public void checkReportCertificate(ReportLocal reportLocal) throws ClipsException {
Map<String, Object> defaultParameters = reportLocal.getDefaultParameters();
ArrayList<ReportParam> params = reportLocal.getParams();
for (int i = 0; i < params.size(); i++) {
ReportParam reportParam = params.get(i);
//обход дефолтных параметров
if (defaultParameters.containsKey(reportParam.getRealName())) {
continue;
}
//поиск и проверка на соответствие параметра тегу
Class<? extends CertTag> classTag = CertTagFactory.getClassByTag(reportParam.getRealName());
if (classTag == null) {
throw new ClipsException("В отчете найдено неверное имя параметра :\n" +
reportParam.getRealName());
}
//проверка на соответствие класса значения параметра классу возвращаемого тегом результата
String tagClassName = null;
try {
tagClassName = classTag.getMethod("getValue").getReturnType().getName();
} catch (NoSuchMethodException ex) {
MessageBox.showExceptionAndHalt(ex);
} catch (SecurityException ex) {
MessageBox.showExceptionAndHalt(ex);
}
String paramClassName = reportParam.getParamClass();
if (!paramClassName.equals(tagClassName)) {
throw new ClipsException("Несоответствие класса значения параметра :\n" +
reportParam.getRealName() + " имеет класс " + paramClassName + "\n" +
"должен быть " + tagClassName);
}
}
}