Skip to content

Commit

Permalink
Merge branch 'master' of git.evolveum.com:/srv/git/projects/midpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
mederly committed Mar 6, 2014
2 parents 6e506b7 + 0ee327c commit dbd1291
Show file tree
Hide file tree
Showing 8 changed files with 450 additions and 281 deletions.
Expand Up @@ -13,6 +13,7 @@
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.PrismProperty;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.prism.query.ObjectPaging;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.schema.GetOperationOptions;
import com.evolveum.midpoint.schema.QueryConvertor;
Expand Down Expand Up @@ -45,29 +46,35 @@ public class DataSourceReport implements JRDataSource
private List<PrismObject<ObjectType>> data;
private OperationResult result = null;
private OperationResult subResult = null;
private PagingType paging = null;
private ObjectPaging paging = null;
private ItemPath fieldPath = null;
private int rowCounter = -1;
private int pageOffset = 0;
private int rowCount = 0;
private ObjectQuery objectQuery = null;
private Class clazz = null;


public DataSourceReport(ReportType reportType, OperationResult result, PrismContext prismContext, ModelService modelService)
public DataSourceReport(ReportType reportType, ObjectQuery objectQuery, Class clazz, OperationResult result, PrismContext prismContext, ModelService modelService)
{
this.reportType = reportType;
this.result = result;
this.prismContext = prismContext;
this.modelService = modelService;
this.objectQuery = objectQuery;
this.clazz = clazz;
initialize();
}

public DataSourceReport() {
// TODO Auto-generated constructor stub
}

private void initialize()
{
subResult = result.createSubresult("Initialize");
paging = new PagingType();
paging.setOffset(0);
paging.setMaxSize(50);
//reportType.getQuery().setPaging(paging);
paging = ObjectPaging.createPaging(0, 50);
objectQuery.setPaging(paging);
rowCount = paging.getMaxSize();
rowCounter = rowCount - 1;
fieldsPair = getFieldsPair();
Expand All @@ -90,14 +97,10 @@ private <T extends ObjectType> List<PrismObject<T>> searchReportObjects() throws
{
List<PrismObject<T>> listReportObjects = new ArrayList<PrismObject<T>>();;
try
{


//Class<T> clazz = ReportUtils.getObjectTypeClass(reportType);
//ObjectQuery objectQuery = QueryConvertor.createObjectQuery(clazz, reportType.getQuery(), prismContext);
{
LOGGER.trace("Search report objects {}:", reportType);

//listReportObjects = modelService.searchObjects(clazz, objectQuery, SelectorOptions.createCollection(GetOperationOptions.createRaw()), null, result);
listReportObjects = modelService.searchObjects(clazz, objectQuery, SelectorOptions.createCollection(GetOperationOptions.createRaw()), null, result);
return listReportObjects;
}
catch (Exception ex)
Expand All @@ -119,14 +122,10 @@ public boolean next() throws JRException {
LOGGER.trace("Select next report objects {}:", data);
pageOffset += paging.getMaxSize();
paging.setOffset(pageOffset);
//reportType.getQuery().setPaging(paging);
objectQuery.setPaging(paging);
rowCounter = 0;
rowCount = Math.min(paging.getMaxSize(), data.size());
LOGGER.trace("Set next select paging {}:", paging);
if (pageOffset == 5950)
{
String blb = "blb";
}
}
else rowCounter++;

Expand All @@ -149,7 +148,11 @@ public Object getFieldValue(JRField jrField) throws JRException {
{
PrismObject<ObjectType> record = data.get(rowCounter);
PrismProperty<?> fieldValue = record.findProperty(fieldPath);
LOGGER.trace("Select next field value {}:", fieldValue);
if (fieldValue != null) {
LOGGER.trace("Select next field value : {}, real value : {}", fieldValue, fieldValue.getRealValue().toString());
} else {
LOGGER.trace("Select next field value : {}", fieldValue);
}
return fieldValue != null ? fieldValue.getRealValue().toString() : "";
}
else return "";
Expand Down
Expand Up @@ -52,6 +52,7 @@
import net.sf.jasperreports.engine.xml.JRXmlLoader;

import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang.BooleanUtils;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
Expand All @@ -65,6 +66,7 @@
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.PrismProperty;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.prism.schema.PrismSchema;
import com.evolveum.midpoint.report.api.ReportManager;
import com.evolveum.midpoint.schema.result.OperationConstants;
Expand All @@ -89,6 +91,7 @@
import com.evolveum.midpoint.xml.ns._public.common.common_2a.SubreportType;
import com.evolveum.prism.xml.ns._public.types_2.PolyStringType;


/**
* @author lazyman
*/
Expand Down Expand Up @@ -147,7 +150,7 @@ private Map<String, Object> getSubreportParameters(SubreportType subreportType,
PrismSchema reportSchema = ReportUtils.getParametersSchema(reportType, prismContext);
PrismContainer<Containerable> parameterConfiguration = ReportUtils.getParametersContainer(reportType, reportSchema);

Map<String, Object> parameters = ReportUtils.getReportParams(reportType, parameterConfiguration, reportSchema, subResult);
Map<String, Object> parameters = ReportUtils.getReportParameters(reportType, parameterConfiguration, reportSchema, subResult);
subreports.putAll(parameters);

JasperReport jasperReport = ReportUtils.getJasperReport(reportType, parameterConfiguration, reportSchema);
Expand Down Expand Up @@ -226,7 +229,7 @@ public TaskRunResult run(Task task) {
PrismSchema reportSchema = ReportUtils.getParametersSchema(reportType, prismContext);
PrismContainer<Containerable> parameterConfiguration = ReportUtils.getParametersContainer(reportType, reportSchema);

Map<String, Object> parameters = ReportUtils.getReportParams(reportType, parameterConfiguration, reportSchema, subResult);
Map<String, Object> parameters = ReportUtils.getReportParameters(reportType, parameterConfiguration, reportSchema, subResult);
params.putAll(parameters);
LOGGER.trace("create report params : {}", parameters);

Expand All @@ -247,14 +250,16 @@ public TaskRunResult run(Task task) {
Session session = sessionFactory.openSession();
session.beginTransaction();

if (reportType.isUseHibernateSession())
if (BooleanUtils.isTrue(reportType.isUseHibernateSession()))
{
params.put(JRHibernateQueryExecuterFactory.PARAMETER_HIBERNATE_SESSION, session);
}
else
{
LOGGER.trace("create report datasource : {}", reportType);
DataSourceReport reportDataSource = new DataSourceReport(reportType, subResult, prismContext, modelService);
ObjectQuery dataQuery = ReportUtils.getObjectQuery(parameterConfiguration, reportSchema.getNamespace());
Class<?> clazz = ReportUtils.getObjectTypeClass(parameterConfiguration, reportSchema.getNamespace());
DataSourceReport reportDataSource = new DataSourceReport(reportType, dataQuery, clazz, subResult, prismContext, modelService);

params.put(JRParameter.REPORT_DATA_SOURCE, reportDataSource);
}
Expand Down Expand Up @@ -324,7 +329,11 @@ private String generateReport(ReportType reportType, JasperPrint jasperPrint) th
{
case PDF : pdf(jasperPrint, output);
break;
case CSV : csv(jasperPrint, output);
case CSV : {
csv(jasperPrint, output);
//pdf(jasperPrint, output.substring(0, output.lastIndexOf(".")) + ".pdf");
}

break;
case XML : xml(jasperPrint, output);
break;
Expand Down
Expand Up @@ -57,11 +57,16 @@
import com.evolveum.midpoint.prism.PrismContainerDefinition;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.PrismObjectDefinition;
import com.evolveum.midpoint.prism.PrismProperty;
import com.evolveum.midpoint.prism.PrismPropertyDefinition;
import com.evolveum.midpoint.prism.query.ObjectFilter;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.prism.schema.PrismSchema;
import com.evolveum.midpoint.prism.util.PrismTestUtil;
import com.evolveum.midpoint.prism.xml.XmlTypeConverter;
import com.evolveum.midpoint.prism.xml.XsdTypeMapper;
import com.evolveum.midpoint.schema.QueryConvertor;
import com.evolveum.midpoint.schema.constants.ObjectTypes;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.ObjectTypeUtil;
Expand All @@ -71,12 +76,16 @@
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.xml.ns._public.common.common_2a.ConnectorType;
import com.evolveum.midpoint.xml.ns._public.common.common_2a.ObjectFactory;
import com.evolveum.midpoint.xml.ns._public.common.common_2a.ObjectType;
import com.evolveum.midpoint.xml.ns._public.common.common_2a.ReportConfigurationType;
import com.evolveum.midpoint.xml.ns._public.common.common_2a.ReportFieldConfigurationType;
import com.evolveum.midpoint.xml.ns._public.common.common_2a.ReportTemplateStyleType;
import com.evolveum.midpoint.xml.ns._public.common.common_2a.ReportType;
import com.evolveum.midpoint.xml.ns._public.common.common_2a.ShadowType;
import com.evolveum.midpoint.xml.ns._public.common.common_2a.XmlSchemaType;
import com.evolveum.prism.xml.ns._public.query_2.FilterType;
import com.evolveum.prism.xml.ns._public.types_2.ObjectDeltaType;


Expand Down Expand Up @@ -245,6 +254,7 @@ public static JasperReport getJasperReport(ReportType reportType, PrismContaine
JRDesignParameter parameter = new JRDesignParameter();
parameter.setName(PARAMETER_TEMPLATE_STYLES);
parameter.setValueClass(JRTemplate.class);
parameter.setForPrompting(false);
jasperDesign.addParameter(parameter);
}
jasperReport = JasperCompileManager.compileReport(jasperDesign);
Expand All @@ -259,15 +269,16 @@ public static JasperReport getJasperReport(ReportType reportType, PrismContaine
}


public static Map<String, Object> getReportParams(ReportType reportType, PrismContainer<Containerable> parameterConfiguration, PrismSchema reportSchema, OperationResult parentResult)
public static Map<String, Object> getReportParameters(ReportType reportType, PrismContainer<Containerable> parameterConfiguration, PrismSchema reportSchema, OperationResult parentResult)
{
Map<String, Object> params = new HashMap<String, Object>();
ReportTemplateStyleType styleType = reportType.getTemplateStyle();

if (reportType.getTemplateStyle() != null)
{
String reportTemplateStyle = DOMUtil.serializeDOMToString((Node)reportType.getTemplateStyle().getAny());
//FUJ FUJ FUJ must be changed
//TODO must be changed
//without replace strings, without xmlns namespace, with insert into schema special xml element DOCTYPE
int first = reportTemplateStyle.indexOf(">");
int last = reportTemplateStyle.lastIndexOf("<");
reportTemplateStyle = "<jasperTemplate>" + reportTemplateStyle.substring(first+1, last) + "</jasperTemplate>";
Expand Down Expand Up @@ -328,7 +339,7 @@ public static Map<String, Object> getReportParams(ReportType reportType, PrismCo
return params;
}

public static Class getObjectTypeClass(ReportType reportType, PrismContainer<Containerable> parameterConfiguration, String namespace)
public static Class getObjectTypeClass(PrismContainer<Containerable> parameterConfiguration, String namespace)
throws SchemaException, ObjectNotFoundException {

PrismProperty objectTypeProp = getParameter(PARAMETER_OBJECT_TYPE, parameterConfiguration, namespace);
Expand Down Expand Up @@ -386,6 +397,7 @@ private static JRDesignParameter createParameter(PrismProperty parameterConfig,
JRDesignParameter parameter = new JRDesignParameter();
parameter.setName(parameterConfig.getElementName().getLocalPart());
parameter.setValueClass(getClassType(parameterConfig.getDefinition().getTypeName(), reportSchema.getNamespace()));
parameter.setForPrompting(false);
return parameter;
}

Expand Down Expand Up @@ -850,4 +862,24 @@ public static String getDeltaAudit(String delta)
return deltaAudit;
}

public static ObjectQuery getObjectQuery(PrismContainer<Containerable> parameterConfiguration, String namespace)
throws SchemaException
{
PrismProperty<FilterType> filterProp = getParameter(PARAMETER_QUERY_FILTER, parameterConfiguration, namespace);

PrismContainerDefinition def = parameterConfiguration.getDefinition();
ObjectQuery dataQuery = new ObjectQuery();
if (filterProp != null)
{
try
{
ObjectFilter objectFilter = QueryConvertor.parseFilter(def,(Node)filterProp);
dataQuery = ObjectQuery.createObjectQuery(objectFilter);
} catch(SchemaException ex){
LOGGER.error("Couldn't create object query : {}", ex.getMessage());
throw ex;
}
}
return dataQuery;
}
}

0 comments on commit dbd1291

Please sign in to comment.