Skip to content

Commit

Permalink
rewrite jasper report from initial-objects to new object collection r…
Browse files Browse the repository at this point in the history
…eports
  • Loading branch information
skublik committed Apr 27, 2021
1 parent c69ec0d commit 3667d06
Show file tree
Hide file tree
Showing 32 changed files with 2,876 additions and 1,767 deletions.
@@ -0,0 +1,72 @@
/*
* Copyright (C) 2010-2020 Evolveum and contributors
*
* This work is dual-licensed under the Apache License 2.0
* and European Union Public License. See LICENSE file for details.
*/
package com.evolveum.midpoint.gui.impl.factory.panel;

import com.evolveum.midpoint.gui.api.component.autocomplete.AutoCompleteReferenceRenderer;
import com.evolveum.midpoint.gui.api.factory.GuiComponentFactory;
import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismReferenceWrapper;
import com.evolveum.midpoint.gui.api.registry.GuiComponentRegistry;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.impl.prism.wrapper.PrismReferenceValueWrapperImpl;
import com.evolveum.midpoint.report.api.ReportConstants;
import com.evolveum.midpoint.util.QNameUtil;
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.web.component.data.LinkedReferencePanel;
import com.evolveum.midpoint.web.component.search.ReferenceAutocomplete;
import com.evolveum.midpoint.web.component.search.ReferenceValueSearchPopupPanel;
import com.evolveum.midpoint.xml.ns._public.common.common_3.CaseType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType;

import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;

import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.model.Model;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

/**
* @author lskublik
*/
@Component
public class AutoCompleteReferencePanelFactory
implements GuiComponentFactory<PrismReferencePanelContext<ObjectReferenceType>> {

private static final Trace LOGGER = TraceManager.getTrace(AutoCompleteReferencePanelFactory.class);

@Autowired private GuiComponentRegistry registry;

@PostConstruct
public void register() {
registry.addToRegistry(this);
}

@Override
public Integer getOrder() {
return 100;
}

@Override
public <IW extends ItemWrapper<?, ?>> boolean match(IW wrapper) {
return QNameUtil.match(ObjectReferenceType.COMPLEX_TYPE, wrapper.getTypeName()) &&
ReportConstants.NS_EXTENSION.equals(wrapper.getNamespace());
}

@Override
public org.apache.wicket.Component createPanel(PrismReferencePanelContext<ObjectReferenceType> panelCtx) {
ReferenceAutocomplete panel = new ReferenceAutocomplete(panelCtx.getComponentId(), panelCtx.getRealValueModel(),
new AutoCompleteReferenceRenderer(),
panelCtx.getPageBase());
panel.setOutputMarkupId(true);
panel.add(AttributeAppender.append("style", "padding-top:5px")); //ugly hack to be aligned with prism-property-label
return panel;
}
}
Expand Up @@ -11,6 +11,7 @@
import java.util.Iterator;
import java.util.List;

import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType;

import org.apache.commons.lang3.StringUtils;
Expand All @@ -36,14 +37,16 @@
/**
* @author honchar
*/
public abstract class ReferenceAutocomplete extends AutoCompleteTextPanel<ObjectReferenceType> {
public class ReferenceAutocomplete extends AutoCompleteTextPanel<ObjectReferenceType> {
private static final long serialVersionUID = 1L;

private final PageBase pageBase;
private final IModel<ObjectReferenceType> model;

public ReferenceAutocomplete(String id, final IModel<ObjectReferenceType> model, IAutoCompleteRenderer<ObjectReferenceType> renderer, PageBase pageBase) {
super(id, model, ObjectReferenceType.class, renderer);
this.pageBase = pageBase;
this.model = model;
}

@Override
Expand Down Expand Up @@ -82,7 +85,10 @@ protected boolean isAllowedNotFoundObjectRef() {
}

protected <O extends ObjectType> Class<O> getReferenceTargetObjectType(){
return (Class<O>) AbstractRoleType.class;
if (model.getObject().getType() == null) {
return (Class<O>) ObjectType.class;
}
return (Class<O>) WebComponentUtil.qnameToClass(pageBase.getPrismContext(), model.getObject().getType());
}

protected int getMaxRowsCount() {
Expand Down
Expand Up @@ -86,14 +86,6 @@ public void setObject(String object) {

private static final long serialVersionUID = 1L;

@Override
protected Class<O> getReferenceTargetObjectType() {
if (getModelObject().getType() == null) {
return (Class<O>) ObjectType.class;
}
return (Class<O>) WebComponentUtil.qnameToClass(getPageBase().getPrismContext(), getModelObject().getType());
}

@Override
protected boolean isAllowedNotFoundObjectRef() {
return ReferenceValueSearchPopupPanel.this.isAllowedNotFoundObjectRef();
Expand Down
Expand Up @@ -290,7 +290,7 @@ private void runConfirmPerformed(AjaxRequestTarget target, ReportType reportType

protected void runReportPerformed(AjaxRequestTarget target, ReportType report) {

if(report.getObjectCollection() == null) {
if(report.getObjectCollection() == null || report.getObjectCollection().getParameter().isEmpty()) {
runConfirmPerformed(target, report, null);
return;
}
Expand Down
Expand Up @@ -10,25 +10,20 @@
<wicket:panel>
<form wicket:id="mainForm">

<div class="feedbackContainer">
<div wicket:id="popupFeedback" class="messagePanel"/>
</div>
<div class="feedbackContainer">
<div wicket:id="popupFeedback" class="messagePanel"/>
</div>
<h3 style="margin-left: 20px;">
<wicket:message key="RunReportPopupPanel.title"/>
</h3>

<div class="box boxed-table">
<div class="box-header">

</div>
<div class="box-body no-padding">
<div wicket:id="parameters">
<div wicket:id="parameter"/>
</div>
<div class="prism-properties">
<div wicket:id="parameters">
<div class="row prism-property" wicket:id="parameter"/>
</div>
</div>
<p align="center">
<a class="btn btn-success" wicket:id="runReport" />
<a class="btn btn-success" wicket:id="runReport"/>
</p>
</form>
</wicket:panel>
Expand Down
Expand Up @@ -96,53 +96,63 @@ protected void onInitialize() {
}

private void initParameters() {
PrismContainerDefinition<ReportParameterType> paramContainerDef = getPrismContext().getSchemaRegistry().findContainerDefinitionByElementName(ReportConstants.REPORT_PARAMS_PROPERTY_NAME);
PrismContainerValue<ReportParameterType> reportParamValue;
try {
PrismContainerDefinition<ReportParameterType> paramContainerDef = getPrismContext().getSchemaRegistry()
.findContainerDefinitionByElementName(ReportConstants.REPORT_PARAMS_PROPERTY_NAME);
paramContainer = paramContainerDef.instantiate();

ReportParameterType reportParam = new ReportParameterType();
reportParamValue = reportParam.asPrismContainerValue();
reportParamValue.revive(getPrismContext());
paramContainer.add(reportParamValue);
} catch (SchemaException e) {
LOGGER.error("Couldn't create container for report parameters");
return;
}
for (SearchFilterParameterType parameter : reportType.getObjectCollection().getParameter()) {
try {
paramContainer = paramContainerDef.instantiate();

ReportParameterType reportParam = new ReportParameterType();
PrismContainerValue<ReportParameterType> reportParamValue = reportParam.asPrismContainerValue();
reportParamValue.revive(getPrismContext());
paramContainer.add(reportParamValue);

Class<?> clazz = getPrismContext().getSchemaRegistry().determineClassForType(parameter.getType());
QName type = getPrismContext().getSchemaRegistry().determineTypeForClass(clazz);
if (Containerable.class.isAssignableFrom(clazz)) {
LOGGER.error("Couldn't create container item for parameter " + parameter);
continue;
}
MutableItemDefinition def;
if (Referencable.class.isAssignableFrom(clazz)) {
def = getPrismContext().definitionFactory().createReferenceDefinition(
new QName(ReportConstants.NS_EXTENSION, parameter.getName()), type);
((MutablePrismReferenceDefinition)def).setTargetTypeName(parameter.getTargetType());
Class<?> clazz = getPrismContext().getSchemaRegistry().determineClassForType(parameter.getType());
QName type = getPrismContext().getSchemaRegistry().determineTypeForClass(clazz);
if (Containerable.class.isAssignableFrom(clazz)) {
LOGGER.error("Couldn't create container item for parameter " + parameter);
continue;
}
MutableItemDefinition def;
if (Referencable.class.isAssignableFrom(clazz)) {
def = getPrismContext().definitionFactory().createReferenceDefinition(
new QName(ReportConstants.NS_EXTENSION, parameter.getName()), type);
((MutablePrismReferenceDefinition) def).setTargetTypeName(parameter.getTargetType());
} else {
List values = WebComponentUtil.getAllowedValues(parameter, getPageBase());
if (CollectionUtils.isNotEmpty(values)) {
def = (MutableItemDefinition) getPrismContext().definitionFactory().createPropertyDefinition(
new QName(ReportConstants.NS_EXTENSION, parameter.getName()), type, values, null);
} else {
List values = WebComponentUtil.getAllowedValues(parameter, getPageBase());
if (CollectionUtils.isNotEmpty(values)) {
def = (MutableItemDefinition) getPrismContext().definitionFactory().createPropertyDefinition(
new QName(ReportConstants.NS_EXTENSION, parameter.getName()), type, values, null);
} else {
def = getPrismContext().definitionFactory().createPropertyDefinition(
new QName(ReportConstants.NS_EXTENSION, parameter.getName()), type);
}
}
def.setDynamic(true);
def.setRuntimeSchema(true);
def.setMaxOccurs(1);
def.setMinOccurs(0);
if (parameter.getDisplay() != null) {
String displayName = WebComponentUtil.getTranslatedPolyString(parameter.getDisplay().getLabel());
def.setDisplayName(displayName);
String help = WebComponentUtil.getTranslatedPolyString(parameter.getDisplay().getHelp());
def.setHelp(help);
def = getPrismContext().definitionFactory().createPropertyDefinition(
new QName(ReportConstants.NS_EXTENSION, parameter.getName()), type);
}
if (parameter.getAllowedValuesLookupTable() != null) {
def.setValueEnumerationRef(parameter.getAllowedValuesLookupTable().asReferenceValue());
}
def.setDynamic(true);
def.setRuntimeSchema(true);
def.setMaxOccurs(1);
def.setMinOccurs(0);
if (parameter.getDisplay() != null) {
String displayName = WebComponentUtil.getTranslatedPolyString(parameter.getDisplay().getLabel());
def.setDisplayName(displayName);
String help = WebComponentUtil.getTranslatedPolyString(parameter.getDisplay().getHelp());
def.setHelp(help);
}
if (parameter.getAllowedValuesLookupTable() != null) {
def.setValueEnumerationRef(parameter.getAllowedValuesLookupTable().asReferenceValue());
}
try {
Item item = def.instantiate();
if (item instanceof PrismReference){
ObjectReferenceType ref = new ObjectReferenceType();
ref.setType(parameter.getTargetType());
item.add(ref.asReferenceValue());
}

Item prop = def.instantiate();
reportParamValue.add(prop);
reportParamValue.add(item);

} catch (SchemaException e) {
LOGGER.error("Couldn't create item for parameter " + parameter);
Expand Down Expand Up @@ -349,7 +359,8 @@ private void runConfirmPerformed(AjaxRequestTarget target) {
PrismContainer<ReportParameterType> parameterContainer = paramContainer.clone();
List<Item> itemForRemoving = new ArrayList<>();
parameterContainer.getValue().getItems().forEach((item) -> {
if (item.isEmpty() || item.getRealValue() == null){
if (item.isEmpty() || item.getRealValue() == null
|| (item instanceof PrismReference && ((PrismReference) item).getRealValue() != null && ((PrismReference) item).getRealValue().getOid() == null)) {
itemForRemoving.add(item);
}
});
Expand Down

This file was deleted.

This file was deleted.

0 comments on commit 3667d06

Please sign in to comment.