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
KaterynaHonchar committed Sep 29, 2021
2 parents 0c11e6d + 5ec7d7b commit a43da64
Show file tree
Hide file tree
Showing 132 changed files with 1,717 additions and 675 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,18 @@
import java.util.*;

import com.evolveum.midpoint.gui.api.util.GuiDisplayTypeUtil;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.gui.impl.util.ObjectCollectionViewUtil;
import com.evolveum.midpoint.model.api.ModelExecuteOptions;
import com.evolveum.midpoint.model.common.util.DefaultColumnUtils;

import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.delta.ChangeType;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.MiscUtil;
import com.evolveum.midpoint.util.QNameUtil;
import com.evolveum.midpoint.util.logging.LoggingUtils;
import com.evolveum.midpoint.web.component.*;

Expand Down Expand Up @@ -69,6 +72,8 @@
import org.apache.wicket.model.PropertyModel;
import org.jetbrains.annotations.NotNull;

import javax.xml.namespace.QName;

/**
* @author katkav
*/
Expand Down Expand Up @@ -191,8 +196,12 @@ private Component createNewObjectButton(String buttonId) {
@Override
public void onClick(AjaxRequestTarget target) {
if (isCollectionViewPanelForCompiledView()) {
newObjectPerformed(target, null, getObjectCollectionView());
return;
CompiledObjectCollectionView collectionView = getObjectCollectionView();
//HACK TODO clenup and think about generic mechanism for this
if (!isViewForObjectCollectionType(collectionView, "00000000-0000-0000-0002-000000000007", ObjectCollectionType.COMPLEX_TYPE)) {
newObjectPerformed(target, null, collectionView);
return;
}
}

if (getNewObjectInfluencesList().size() <= 1) {
Expand All @@ -219,6 +228,28 @@ protected void buttonClickPerformed(AjaxRequestTarget target, AssignmentObjectRe
return createNewObjectButton;
}

protected boolean isViewForObjectCollectionType(CompiledObjectCollectionView collectionView, String oid, QName type) {
if (collectionView == null) {
return false;
}

CollectionRefSpecificationType collectionRefSpecificationType = collectionView.getCollection();
if (collectionRefSpecificationType == null) {
return false;
}

ObjectReferenceType collectionRef = collectionRefSpecificationType.getCollectionRef();
if (collectionRef == null) {
return false;
}

if (!QNameUtil.match(collectionRef.getType(), type)) {
return false;
}

return collectionRef.getOid().equals(oid);
}

protected LoadableModel<MultiFunctinalButtonDto> loadButtonDescriptions() {
return new LoadableModel<>(false) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,6 @@ private void initLayout() {
tabbedPanel.setOutputMarkupId(true);
add(tabbedPanel);



DisplayNamePanel<C> displayNamePanel = createDisplayNamePanel(ID_DISPLAY_NAME);

displayNamePanel.setOutputMarkupId(true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -570,6 +570,15 @@ private void addCollectionsMenuItems(MainMenuItem mainMenuItem, QName type, Clas
List<CompiledObjectCollectionView> objectViews = getPageBase().getCompiledGuiProfile().findAllApplicableObjectCollectionViews(type);

objectViews.forEach(objectView -> {
if (!WebComponentUtil.getElementVisibility(objectView.getVisibility())) {
return;
}

OperationTypeType operationTypeType = objectView.getApplicableForOperation();
if (operationTypeType != null && operationTypeType != OperationTypeType.MODIFY) {
return;
}

if (objectView.getCollection() == null) {
return;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
*/
package com.evolveum.midpoint.gui.impl.page.admin;

import java.time.Duration;
import java.util.*;

import com.evolveum.midpoint.gui.api.prism.ItemStatus;
Expand All @@ -24,7 +23,6 @@
import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.AjaxSelfUpdatingTimerBehavior;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.markup.repeater.RepeatingView;
import org.apache.wicket.model.IModel;
Expand Down Expand Up @@ -183,7 +181,6 @@ protected void savePerformed(AjaxRequestTarget target) {
};
}


public void savePerformed(AjaxRequestTarget target) {
OperationResult result = new OperationResult(OPERATION_SAVE);
saveOrPreviewPerformed(target, result, false);
Expand All @@ -197,7 +194,6 @@ public Collection<ObjectDeltaOperation<? extends ObjectType>> saveOrPreviewPerfo

public Collection<ObjectDeltaOperation<? extends ObjectType>> saveOrPreviewPerformed(AjaxRequestTarget target, OperationResult result, boolean previewOnly, Task task) {


PrismObjectWrapper<O> objectWrapper = getModelWrapperObject();
LOGGER.debug("Saving object {}", objectWrapper);

Expand Down Expand Up @@ -228,18 +224,27 @@ public Collection<ObjectDeltaOperation<? extends ObjectType>> saveOrPreviewPerfo
LOGGER.trace("returning from saveOrPreviewPerformed");
Collection<ObjectDeltaOperation<? extends ObjectType>> executedDeltas = executeChanges(deltas, previewOnly, options, task, result, target);

postProcessResult(result, executedDeltas);
postProcessResult(result, executedDeltas, target);

return executedDeltas;
}

protected void postProcessResult(OperationResult result, Collection<ObjectDeltaOperation<? extends ObjectType>> executedDeltas) {
protected void postProcessResult(OperationResult result, Collection<ObjectDeltaOperation<? extends ObjectType>> executedDeltas, AjaxRequestTarget target) {
result.computeStatusIfUnknown();

if (allowRedirectBack() && !result.isError()) { // && allowRedirectBack()) {
redirectBack();
} else {
target.add(getFeedbackPanel());
}
}

protected Collection<ObjectDeltaOperation<? extends ObjectType>> executeChanges(Collection<ObjectDelta<? extends ObjectType>> deltas, boolean previewOnly, ExecuteChangeOptionsDto options, Task task, OperationResult result, AjaxRequestTarget target) {
if (deltas.isEmpty()) {
//nothing to do;
if (noChangesToExecute(deltas, options)) {
recordNoChangesWarning(result);


showResult(result);
return null;
}
//TODO force
Expand All @@ -253,21 +258,26 @@ protected Collection<ObjectDeltaOperation<? extends ObjectType>> executeChanges(
//TODO this is just a quick hack.. for focus objects, feedback panel and results are processed by ProgressAware.finishProcessing()

ObjectChangeExecutor changeExecutor = getChangeExecutor();
Collection<ObjectDeltaOperation<? extends ObjectType>> executedDeltas = changeExecutor.executeChanges(deltas, previewOnly, task, result, target);
Collection<ObjectDeltaOperation<? extends ObjectType>> executedDeltas = changeExecutor.executeChanges(deltas, previewOnly, task, result, target);

result.computeStatusIfUnknown();
if (changeExecutor instanceof ObjectChangesExecutorImpl) {
showResult(result);
if (!previewOnly && result.isSuccess()) {
redirectBack();
} else {
target.add(getFeedbackPanel());
}
}

return executedDeltas;
}

protected boolean noChangesToExecute(Collection<ObjectDelta<? extends ObjectType>> deltas, ExecuteChangeOptionsDto options) {
return deltas.isEmpty();
}

protected void recordNoChangesWarning(OperationResult result) {
result.recordWarning(getString("PageAdminObjectDetails.noChangesSave"));
}

protected boolean allowRedirectBack() {
return true;
}

protected ExecuteChangeOptionsDto getExecuteChangesOptionsDto() {
return getOperationalButtonsPanel().getExecuteChangeOptions();
Expand All @@ -282,8 +292,6 @@ protected ObjectChangeExecutor getChangeExecutor() {
return new ObjectChangesExecutorImpl();
}



private void checkValidationErrors(AjaxRequestTarget target, Collection<SimpleValidationError> validationErrors) {
if (validationErrors != null && !validationErrors.isEmpty()) {
for (SimpleValidationError error : validationErrors) {
Expand Down Expand Up @@ -397,7 +405,6 @@ protected void onClickPerformed(ContainerPanelConfigurationType config, AjaxRequ
};
}


private PrismObject<O> loadPrismObject() {
Task task = createSimpleTask(OPERATION_LOAD_OBJECT);
OperationResult result = task.getResult();
Expand Down Expand Up @@ -467,13 +474,14 @@ public IModel<List<ContainerPanelConfigurationType>> getPanelConfigurations() {
protected abstract Class<O> getType();
protected abstract Panel createSummaryPanel(String id, LoadableModel<O> summaryModel);


private MidpointForm getMainForm() {
return (MidpointForm) get(createComponentPath(ID_DETAILS_VIEW, ID_MAIN_FORM));
}

protected Component getSummaryPanel() {
return get(createComponentPath(ID_DETAILS_VIEW, ID_SUMMARY));
}

protected OperationalButtonsPanel getOperationalButtonsPanel() {
return (OperationalButtonsPanel) get(createComponentPath(ID_DETAILS_VIEW, ID_MAIN_FORM, ID_BUTTONS));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,22 +155,19 @@ protected Collection<ObjectDeltaOperation<? extends ObjectType>> executeChanges(
return super.executeChanges(deltas, previewOnly, options, task, result, target);
}

// @Override
// protected final void saveOrPreviewPostProcess(AjaxRequestTarget target, Task task, ExecuteChangeOptionsDto options) {
// Fragment progressPanelFragment = new ProgressFragment(ID_DETAILS_VIEW, ID_PROGRESS_PANEL_FRAGMENT, PageFocusDetails.this, options);
// replace(progressPanelFragment);
// target.add(progressPanelFragment);
// }

// @Override
// protected void postProcessDeltas(AjaxRequestTarget target, Collection<ObjectDelta<? extends ObjectType>> deltas, ItemStatus status, ExecuteChangeOptionsDto executeChangeOptionsDto) throws SchemaException {
// super.postProcessDeltas(target, deltas, status, executeChangeOptionsDto);
//
// if (executeChangeOptionsDto.isReconcile() && deltas.isEmpty()) {
// ObjectDelta emptyDelta = getPrismContext().deltaFor(getType()).asObjectDelta(getModelPrismObject().getOid());
// deltas.add(emptyDelta);
// }
// }
@Override
protected void recordNoChangesWarning(OperationResult result) {
if (previewRequested) {
result.recordWarning(getString("PageAdminObjectDetails.noChangesPreview"));
} else {
super.recordNoChangesWarning(result);
}
}

@Override
protected boolean allowRedirectBack() {
return !previewRequested;
}

protected ProgressPanel getProgressPanel() {
return (ProgressPanel) get(createComponentPath(ID_DETAILS_VIEW, ID_PROGRESS_PANEL));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismObjectWrapper;
import com.evolveum.midpoint.gui.impl.page.admin.AbstractPageObjectDetails;
import com.evolveum.midpoint.gui.impl.page.admin.assignmentholder.AssignmentHolderDetailsModel;

import com.evolveum.midpoint.gui.impl.page.admin.assignmentholder.PageAssignmentHolderDetails;
Expand Down Expand Up @@ -60,6 +61,11 @@ public class PageReport extends PageAssignmentHolderDetails<ReportType, Assignme
private static final String ID_TABLE_BOX = "tableBox";
private static final String ID_REPORT_TABLE = "reportTable";

private static final String DOT_CLASS = PageReport.class.getName() + ".";
protected static final String OPERATION_SAVE_AND_RUN_REPORT = DOT_CLASS + "saveAndRunReport";
protected static final String OPERATION_RUN_REPORT = DOT_CLASS + "saveAndRunReport";
private boolean processingOfSaveAndRun =false;

public PageReport() {
super();
}
Expand Down Expand Up @@ -136,54 +142,61 @@ protected void initLayout() {
}

public void saveAndRunPerformed(AjaxRequestTarget target) {
OperationResult result = new OperationResult("saveAndRunReport");
Collection<ObjectDeltaOperation<? extends ObjectType>> executedDeltas = saveOrPreviewPerformed(target, result, false);

if (!result.isError()) {
showResult(result);
Task task = createSimpleTask("run_task");

PrismObject<ReportType> report;
if (getModelObjectType().getOid() != null) {
report = getModelPrismObject();
} else {
report = (PrismObject<ReportType>) executedDeltas.iterator().next().getObjectDelta().getObjectToAdd();
}
if (ReportOperationalButtonsPanel.hasParameters(report.asObjectable())) {
try {
getReportManager().runReport(report, null, task, result);
} catch (Exception ex) {
result.recordFatalError(ex);
} finally {
result.computeStatusIfUnknown();
}
try {
processingOfSaveAndRun = true;
OperationResult saveResult = new OperationResult(OPERATION_SAVE);
Collection<ObjectDeltaOperation<? extends ObjectType>> executedDeltas = saveOrPreviewPerformed(target, saveResult, false);

} else {
if (!saveResult.isError()) {
PrismObject<ReportType> report = getReport(executedDeltas);
if (!ReportOperationalButtonsPanel.hasParameters(report.asObjectable())) {
runReport(report, null);
} else {

RunReportPopupPanel runReportPopupPanel = new RunReportPopupPanel(getMainPopupBodyId(), report.asObjectable()) {
RunReportPopupPanel runReportPopupPanel = new RunReportPopupPanel(getMainPopupBodyId(), report.asObjectable()) {

private static final long serialVersionUID = 1L;
private static final long serialVersionUID = 1L;

protected void runConfirmPerformed(AjaxRequestTarget target, ReportType reportType, PrismContainer<ReportParameterType> reportParam) {
try {
getReportManager().runReport(reportType.asPrismObject(), reportParam, task, result);
} catch (Exception ex) {
result.recordFatalError(ex);
} finally {
result.computeStatusIfUnknown();
protected void runConfirmPerformed(AjaxRequestTarget target, PrismObject<ReportType> report, PrismContainer<ReportParameterType> reportParam) {
runReport(report, reportParam);
hideMainPopup(target);
}
hideMainPopup(target);
}
};
showResult(result);
redirectBack();
showMainPopup(runReportPopupPanel, target);
};
showMainPopup(runReportPopupPanel, target);
}
}
showResult(result);
} finally {
processingOfSaveAndRun = false;
}
}

private PrismObject<ReportType> getReport(Collection<ObjectDeltaOperation<? extends ObjectType>> executedDeltas) {
if (getModelObjectType().getOid() != null) {
return getModelPrismObject();
}
return (PrismObject<ReportType>) executedDeltas.iterator().next().getObjectDelta().getObjectToAdd();

}

private void runReport(PrismObject<ReportType> report, PrismContainer<ReportParameterType> reportParam) {
Task task = createSimpleTask(OPERATION_RUN_REPORT);
OperationResult saveAndRunResult = task.getResult();
try {
getReportManager().runReport(report, reportParam, task, saveAndRunResult);
} catch (Exception ex) {
saveAndRunResult.recordFatalError(ex);
} finally {
saveAndRunResult.computeStatusIfUnknown();
saveAndRunResult.setBackgroundTaskOid(task.getOid());
redirectBack();
}
}

@Override
protected boolean allowRedirectBack() {
return !processingOfSaveAndRun;
}

private ReportObjectsListPanel<?> getReportTable() {
return (ReportObjectsListPanel<?>) get(createComponentPath(ID_TABLE_CONTAINER, ID_TABLE_BOX, ID_REPORT_TABLE));
}
Expand Down

0 comments on commit a43da64

Please sign in to comment.