Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/Evolveum/midpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
mederly committed Apr 21, 2015
2 parents 4e34ffd + 60e3942 commit a224899
Show file tree
Hide file tree
Showing 15 changed files with 354 additions and 54 deletions.
Expand Up @@ -37,7 +37,6 @@ public DatePanel(String id, IModel<XMLGregorianCalendar> model) {
DateInput date = new DateInput(ID_INPUT, new XmlGregorianCalendarModel(model));
add(date);
}

@Override
public FormComponent getBaseFormComponent() {
return (FormComponent) get(ID_INPUT);
Expand Down
Expand Up @@ -17,6 +17,7 @@
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.validation.IValidatable;
import org.apache.wicket.validation.validator.AbstractValidator;
Expand Down Expand Up @@ -240,7 +241,7 @@ public void onClick(AjaxRequestTarget target, IModel<JasperReportParameterDto> r
public void populateItem(Item<ICellPopulator<JasperReportParameterDto>> cellItem,
String componentId, IModel<JasperReportParameterDto> rowModel) {
// TODO Auto-generated method stub
CheckBoxPanel checkBox = new CheckBoxPanel(componentId, new PropertyModel<Boolean>(rowModel, getPropertyExpression()), new PropertyModel<Boolean>(rowModel, getPropertyExpression()));
CheckBoxPanel checkBox = new CheckBoxPanel(componentId, new PropertyModel<Boolean>(rowModel, getPropertyExpression()), new Model<Boolean>(true));
cellItem.add(checkBox);
}

Expand Down
@@ -1,6 +1,7 @@
package com.evolveum.midpoint.web.page.admin.reports.component;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.xml.datatype.XMLGregorianCalendar;
Expand All @@ -10,15 +11,19 @@
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.datetime.markup.html.form.DateTextField;
import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.ISortableDataProvider;
import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;

import com.evolveum.midpoint.audit.api.AuditEventStage;
import com.evolveum.midpoint.audit.api.AuditEventType;
import com.evolveum.midpoint.prism.PrismContainer;
import com.evolveum.midpoint.prism.PrismContainerDefinition;
import com.evolveum.midpoint.prism.PrismContainerValue;
Expand All @@ -30,20 +35,25 @@
import com.evolveum.midpoint.report.api.ReportConstants;
import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.util.MiscUtil;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.web.component.AjaxButton;
import com.evolveum.midpoint.web.component.DateInput;
import com.evolveum.midpoint.web.component.data.TablePanel;
import com.evolveum.midpoint.web.component.data.column.EditablePropertyColumn;
import com.evolveum.midpoint.web.component.input.DatePanel;
import com.evolveum.midpoint.web.component.input.DropDownChoicePanel;
import com.evolveum.midpoint.web.component.input.TextPanel;
import com.evolveum.midpoint.web.component.prism.InputPanel;
import com.evolveum.midpoint.web.component.util.ListDataProvider;
import com.evolveum.midpoint.web.component.util.LoadableModel;
import com.evolveum.midpoint.web.component.util.SimplePanel;
import com.evolveum.midpoint.web.component.util.XmlGregorianCalendarModel;
import com.evolveum.midpoint.web.page.admin.reports.dto.JasperReportParameterDto;
import com.evolveum.midpoint.web.page.admin.reports.dto.ReportDto;
import com.evolveum.midpoint.web.util.WebMiscUtil;
import com.evolveum.midpoint.xml.ns._public.common.audit_3.AuditEventStageType;
import com.evolveum.midpoint.xml.ns._public.common.audit_3.AuditEventTypeType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ReportParameterType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ReportType;

Expand Down Expand Up @@ -138,7 +148,7 @@ public void populateItem(Item<ICellPopulator<JasperReportParameterDto>> cellItem
final IModel<JasperReportParameterDto> rowModel) {
Component component = createTypedInputPanel(componentId, rowModel, getPropertyExpression());
cellItem.add(component);
cellItem.setOutputMarkupId(true);
// cellItem.setOutputMarkupId(true);
}

});
Expand All @@ -161,18 +171,37 @@ private Component createTypedInputPanel(String componentId, final IModel<JasperR
// TODO Auto-generated catch block
return null;
}
InputPanel panel = null;
if (type.isEnum()){
DropDownChoicePanel panel = WebMiscUtil.createEnumPanel(type, componentId, new PropertyModel(model, expression), this);
FormComponent component = panel.getBaseFormComponent();
component.add(new EmptyOnBlurAjaxFormUpdatingBehaviour());
return panel;
panel = WebMiscUtil.createEnumPanel(type, componentId, new PropertyModel(model, expression), this);
// FormComponent component = panel.getBaseFormComponent();
// component.add(new EmptyOnBlurAjaxFormUpdatingBehaviour());
// return panel;
} else if (XMLGregorianCalendar.class.isAssignableFrom(type)){
return new DateInput(componentId, new XmlGregorianCalendarModel(new PropertyModel<XMLGregorianCalendar>(model, expression)));
}
TextPanel panel = new TextPanel<String>(componentId, new PropertyModel<String>(model, expression));

FormComponent component = panel.getBaseFormComponent();
component.add(new EmptyOnBlurAjaxFormUpdatingBehaviour());
panel = new DatePanel(componentId, new PropertyModel<XMLGregorianCalendar>(model, expression));
// c.add(new EmptyOnBlurAjaxFormUpdatingBehaviour());
// FormComponent component = date.getBaseFormComponent();
// component.add(new EmptyOnBlurAjaxFormUpdatingBehaviour());
// return date;
// return new DateInput(componentId, new XmlGregorianCalendarModel(new PropertyModel<XMLGregorianCalendar>(model, expression)));
} else {
panel = new TextPanel<String>(componentId, new PropertyModel<String>(model, expression));
}
List<FormComponent> components = panel.getFormComponents();
for (FormComponent component : components){
Component c = component.get("date");
if (c != null){
c.add(new AjaxFormComponentUpdatingBehavior("change") {

@Override
protected void onUpdate(AjaxRequestTarget target) {
model.getObject().setValue(MiscUtil.asXMLGregorianCalendar((Date) getFormComponent().getConvertedInput()));
int i = 0;
}
});
}
component.add(new EmptyOnBlurAjaxFormUpdatingBehaviour());
}
return panel;

}
Expand All @@ -194,16 +223,26 @@ private void runConfirmPerformed(AjaxRequestTarget target, IModel<ReportDto> mod
continue;
}
QName typeName = null;
if (XmlTypeConverter.canConvert(paramDto.getType())){
typeName = XsdTypeMapper.toXsdType(paramDto.getType());
Object realValue = paramDto.getValue();
Class paramClass = paramDto.getType();
if (XmlTypeConverter.canConvert(paramClass)){
typeName = XsdTypeMapper.toXsdType(paramClass);
} else {
typeName = getPrismContext().getBeanConverter().determineTypeForClass(paramDto.getType());
}

if (AuditEventType.class.isAssignableFrom(paramClass)){
paramClass = AuditEventTypeType.class;
realValue = AuditEventType.fromAuditEventType((AuditEventType)realValue);
} else if (AuditEventStage.class.isAssignableFrom(paramClass)){
paramClass = AuditEventStageType.class;
realValue = AuditEventStage.fromAuditEventStage((AuditEventStage)realValue);
}
typeName = getPrismContext().getBeanConverter().determineTypeForClass(paramClass);
}
PrismPropertyDefinition def = new PrismPropertyDefinition<>(new QName(ReportConstants.NS_EXTENSION, paramDto.getName()), typeName, getPrismContext());
def.setDynamic(true);
def.setRuntimeSchema(true);
PrismProperty prop = def.instantiate();
prop.addRealValue(paramDto.getValue());
prop.addRealValue(realValue);
reportParamValue.add(prop);
//setPropertyRealValue(new QName(ReportConstants.NS_EXTENSION, paramDto.getName()), paramDto.getValue(), getPrismContext());
}
Expand All @@ -228,7 +267,7 @@ protected void runConfirmPerformed(AjaxRequestTarget target, ReportType reportTy
private static class EmptyOnBlurAjaxFormUpdatingBehaviour extends AjaxFormComponentUpdatingBehavior {

public EmptyOnBlurAjaxFormUpdatingBehaviour() {
super("onBlur");
super("change");
}

@Override
Expand Down
Expand Up @@ -108,6 +108,19 @@ AuditEventType.WORK_ITEM=Work item
AuditEventType.WORKFLOW_PROCESS_INSTANCE=Workflow process instance
AuditEventType.RECONCILIATION=Reconciliation

AuditEventTypeType.null=All
AuditEventTypeType.GET_OBJECT=Get object
AuditEventTypeType.ADD_OBJECT=Add object
AuditEventTypeType.MODIFY_OBJECT=Modify object
AuditEventTypeType.DELETE_OBJECT=Delete object
AuditEventTypeType.EXECUTE_CHANGES_RAW=Execute changes raw
AuditEventTypeType.SYNCHRONIZATION=Synchronization
AuditEventTypeType.CREATE_SESSION=Create session
AuditEventTypeType.TERMINATE_SESSION=Terminate session
AuditEventTypeType.WORK_ITEM=Work item
AuditEventTypeType.WORKFLOW_PROCESS_INSTANCE=Workflow process instance
AuditEventTypeType.RECONCILIATION=Reconciliation

ExportType.PDF=PDF
ExportType.CSV=CSV
ExportType.XML=XML
Expand Down

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Expand Up @@ -122,6 +122,9 @@ private void registerBuiltinSchemas(SchemaRegistry schemaRegistry) throws Schema
schemaRegistry.registerPrismDefaultSchemaResource("xml/ns/public/common/common-3.xsd", "c",
com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectFactory.class.getPackage()); // declared by default

schemaRegistry.registerPrismSchemaResource("xml/ns/public/common/audit-3.xsd", "aud",
com.evolveum.midpoint.xml.ns._public.common.audit_3.ObjectFactory.class.getPackage());

schemaRegistry.registerPrismSchemaResource("xml/ns/public/common/api-types-3.xsd", "apti",
com.evolveum.midpoint.xml.ns._public.common.api_types_3.ObjectFactory.class.getPackage());

Expand Down
Expand Up @@ -5,6 +5,7 @@

import javax.xml.namespace.QName;

import com.evolveum.midpoint.audit.api.AuditEventRecord;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.schema.GetOperationOptions;
Expand All @@ -27,6 +28,6 @@ public interface ReportService {

public Collection<PrismObject<? extends ObjectType>> evaluateScript(String script, Map<QName, Object> parameters) throws SchemaException, ExpressionEvaluationException, ObjectNotFoundException;


public Collection<AuditEventRecord> evaluateAuditScript(String script, Map<QName, Object> parameters) throws SchemaException, ExpressionEvaluationException, ObjectNotFoundException;

}
Expand Up @@ -14,11 +14,13 @@
import net.sf.jasperreports.engine.JRValueParameter;
import net.sf.jasperreports.engine.JasperReportsContext;
import net.sf.jasperreports.engine.base.JRBaseParameter;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.fill.JRFillParameter;
import net.sf.jasperreports.engine.query.JRAbstractQueryExecuter;

import org.apache.commons.lang.StringUtils;

import com.evolveum.midpoint.audit.api.AuditEventRecord;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.PrismPropertyValue;
import com.evolveum.midpoint.prism.query.ObjectQuery;
Expand Down Expand Up @@ -81,6 +83,29 @@ private Map<QName, Object> getParameters(){
return expressionParameters;
}

private Map<QName, Object> getPromptingParameters(){
JRParameter[] params = dataset.getParameters();
Map<QName, Object> expressionParameters = new HashMap<QName, Object>();
for (JRParameter param : params){
if (param.isSystemDefined()){
continue;
}
if (!param.isForPrompting()){
continue;
}
LOGGER.trace(((JRBaseParameter)param).getName());
Object v = getParameterValue(param.getName());
try{
expressionParameters.put(new QName(param.getName()), new PrismPropertyValue(v));
} catch (Exception e){
//just skip properties that are not important for midpoint
}

LOGGER.trace("p.val: {}", v);
}
return expressionParameters;
}

@Override
protected void parseQuery() {
// TODO Auto-generated method stub
Expand Down Expand Up @@ -153,7 +178,12 @@ public JRDataSource createDatasource() throws JRException {
if (query != null){
results = reportService.searchObjects(query, SelectorOptions.createCollection(GetOperationOptions.createRaw()));
} else {
results = reportService.evaluateScript(script, getParameters());
if (script.contains("AuditEventRecord")){
Collection<AuditEventRecord> audtiEventRecords = reportService.evaluateAuditScript(script, getPromptingParameters());
return new JRBeanCollectionDataSource(audtiEventRecords);
} else {
results = reportService.evaluateScript(script, getParameters());
}
}
} catch (SchemaException | ObjectNotFoundException | SecurityViolationException
| CommunicationException | ConfigurationException | ExpressionEvaluationException e) {
Expand Down
Expand Up @@ -18,8 +18,11 @@

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import javax.xml.namespace.QName;

Expand All @@ -29,6 +32,8 @@
import ch.qos.logback.classic.Logger;

import com.evolveum.midpoint.audit.api.AuditEventRecord;
import com.evolveum.midpoint.audit.api.AuditEventStage;
import com.evolveum.midpoint.audit.api.AuditEventType;
import com.evolveum.midpoint.audit.api.AuditService;
import com.evolveum.midpoint.model.api.ModelService;
import com.evolveum.midpoint.prism.PrismContainer;
Expand All @@ -50,6 +55,8 @@
import com.evolveum.midpoint.util.exception.SecurityViolationException;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.xml.ns._public.common.audit_3.AuditEventStageType;
import com.evolveum.midpoint.xml.ns._public.common.audit_3.AuditEventTypeType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.FocusType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType;
Expand Down Expand Up @@ -203,6 +210,17 @@ public List<AuditEventRecord> searchAuditRecords(String query, Map<String, Objec
return new ArrayList<>();
}

Map<String, Object> resultSet = new HashMap<String, Object>();
Set<Entry<String, Object>> paramSet = params.entrySet();
for (Entry<String, Object> p : paramSet){
if (p.getValue() instanceof AuditEventTypeType){
resultSet.put(p.getKey(), AuditEventType.toAuditEventType((AuditEventTypeType) p.getValue()));
} else if (p.getValue() instanceof AuditEventStageType){
resultSet.put(p.getKey(), AuditEventStage.toAuditEventStage((AuditEventStageType) p.getValue()));
} else {
resultSet.put(p.getKey(), p.getValue());
}
}
return auditService.listRecords(query, params);
}

Expand Down

0 comments on commit a224899

Please sign in to comment.