@Override
protected void onUpdate(ReportgenQuery entity,
EntityDetails details, AuditDoc auditDoc, List<AuditDoc> auditDocList) throws ClipsServerException {
QueryDetails d = (QueryDetails) details;
if(d.query == null || d.query.length() == 0) {
throw new ClipsServerException("Попытка сохранения пустого отчета");
}
if(d.title == null || d.title.length() > 255 || d.title.length() < 10) {
throw new ClipsServerException("Название должно быть от 10 до 255 символов в длину");
}
if(d.description != null && d.description.length() > 1024) {
throw new ClipsServerException("Описание должно быть не более 1024 символов в длину");
}
if (d.reportType == 0) {
throw new ClipsServerException("Отчет не привязан ни к какой группе");
}
// check report
Report report = null;
try {
report = ReportFactory.fromString(entity.getId(), d.query, this);
} catch (ReportException ex) {
throw new ClipsServerException("Попытка сохранения некорректного отчета", ex);
}
HashSet<String> newCols = new HashSet<String>();
ResultColumnList newColsSelector = report.getColumns();
for(int i=0; i<newColsSelector.size(); i++) {
newCols.add(newColsSelector.get(i).getTitle());
}
//check super reports
Field[] f = new Field[]{new Field("id", entity.getId(), Field.OPERATOR_NOT_EQUAL)};
Iterator iterator = findEntityList(ReportgenQuery.class, f).iterator();
while (iterator.hasNext()) {
ReportgenQuery superReportQuery = (ReportgenQuery) iterator.next();
ReportQuery superReport = null;
try {
superReport = ReportFactory.fromString(superReportQuery.getId(),
superReportQuery.getQuery(), this);
} catch (ReportException ex) {
//do nothing
}
if(superReport == null) {
continue;
}
Iterator<String> usedSubreportColumns = superReport.getUsedSubreportColumns(entity.getId()).iterator();
while(usedSubreportColumns.hasNext()) {
String col = usedSubreportColumns.next();
if(!newCols.contains(col)) {
throw new ClipsServerException("Отчет '" + superReportQuery.getTitle()
+ "' использует столбец данного отчета с именем '" + col
+ "', который в новой редакции отсутствует.");
}
}
}