Skip to content

Commit

Permalink
forgotten class
Browse files Browse the repository at this point in the history
  • Loading branch information
katkav committed Sep 14, 2021
1 parent 7340873 commit 643e8eb
Showing 1 changed file with 75 additions and 162 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,16 @@
import com.evolveum.midpoint.gui.impl.component.menu.DetailsNavigationPanel;
import com.evolveum.midpoint.gui.impl.page.admin.component.OperationalButtonsPanel;

import com.evolveum.midpoint.model.api.authentication.CompiledObjectCollectionView;
import com.evolveum.midpoint.schema.constants.ObjectTypes;
import com.evolveum.midpoint.schema.ObjectDeltaOperation;
import com.evolveum.midpoint.util.exception.*;

import com.evolveum.midpoint.web.component.util.VisibleBehaviour;

import com.evolveum.midpoint.web.page.admin.PageCreateFromTemplate;

import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.Component;
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.AjaxSelfUpdatingTimerBehavior;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.markup.repeater.RepeatingView;
import org.apache.wicket.model.IModel;
Expand All @@ -50,7 +45,6 @@
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.component.form.MidpointForm;
import com.evolveum.midpoint.web.component.progress.ProgressPanel;
import com.evolveum.midpoint.web.page.admin.users.component.ExecuteChangeOptionsDto;
import com.evolveum.midpoint.web.util.OnePageParameterEncoder;
import com.evolveum.midpoint.web.util.validation.SimpleValidationError;
Expand All @@ -74,13 +68,13 @@ public abstract class AbstractPageObjectDetails<O extends ObjectType, ODM extend
private static final String ID_NAVIGATION = "navigation";
private static final String ID_SUMMARY = "summary";
private static final String ID_BUTTONS = "buttons";
private static final String ID_PROGRESS_PANEL = "progressPanel";

private static final String ID_DETAILS = "details";
protected static final String ID_DETAILS_VIEW = "detailsView";

private ODM objectDetailsModels;

private ProgressPanel progressPanel;
protected boolean previewRequested;
private ODM objectDetailsModels;
private boolean isAdd;

public AbstractPageObjectDetails() {
this(null, null);
Expand All @@ -96,20 +90,19 @@ public AbstractPageObjectDetails(PrismObject<O> object) {

private AbstractPageObjectDetails(PageParameters params, PrismObject<O> object) {
super(params);

if (params == null && object == null) {
ObjectTypes objectType = ObjectTypes.getObjectTypeIfKnown(getType());
Collection<CompiledObjectCollectionView> applicableArchetypes = getCompiledGuiProfile().findAllApplicableArchetypeViews(objectType.getTypeQName());
if (!applicableArchetypes.isEmpty()) {
PageParameters templateParams = new PageParameters();
templateParams.add("type", objectType.getRestType());
throw new RestartResponseException(PageCreateFromTemplate.class, templateParams);
}
}
isAdd = params == null && object == null;
objectDetailsModels = createObjectDetailsModels(object);
initLayout();
}

protected boolean isAdd() {
return isAdd;
}

protected void reloadObjectDetailsModel(PrismObject<O> prismObject) {
objectDetailsModels = createObjectDetailsModels(prismObject);
}

public ObjectDetailsModels<O> getObjectDetailsModels() {
return objectDetailsModels;
}
Expand All @@ -132,28 +125,31 @@ protected PrismObject<O> load() {
};
}

private void initLayout() {
initDetailsPanel();
protected void initLayout() {

DetailsFragment detailsFragment = createDetailsFragment();
add(detailsFragment);

progressPanel = new ProgressPanel(ID_PROGRESS_PANEL);
add(progressPanel);
}

private void initDetailsPanel() {
WebMarkupContainer detialsPanel = new WebMarkupContainer(ID_DETAILS);
detialsPanel.setOutputMarkupId(true);
add(detialsPanel);
protected DetailsFragment createDetailsFragment() {
DetailsFragment detailsFragment = new DetailsFragment(ID_DETAILS_VIEW, ID_DETAILS, AbstractPageObjectDetails.this) {

detialsPanel.add(initSummaryPanel());
MidpointForm form = new MidpointForm(ID_MAIN_FORM);
detialsPanel.add(form);
@Override
protected void initFragmentLayout() {
add(initSummaryPanel());
MidpointForm form = new MidpointForm(ID_MAIN_FORM);
add(form);

initButtons(form);
initButtons(form);

ContainerPanelConfigurationType defaultConfiguration = findDefaultConfiguration();
initMainPanel(defaultConfiguration, form);
ContainerPanelConfigurationType defaultConfiguration = findDefaultConfiguration();
initMainPanel(defaultConfiguration, form);

detialsPanel.add(initNavigation());
add(initNavigation());
}
};
return detailsFragment;
}

private Panel initSummaryPanel() {
Expand All @@ -166,7 +162,6 @@ private Panel initSummaryPanel() {
private void initButtons(MidpointForm form) {
OperationalButtonsPanel opButtonPanel = createButtonsPanel(ID_BUTTONS, objectDetailsModels.getObjectWrapperModel());
opButtonPanel.setOutputMarkupId(true);
// opButtonPanel.add(new VisibleBehaviour(() -> isOperationalButtonsVisible() && opButtonPanel.buttonsExist()));

AjaxSelfUpdatingTimerBehavior behavior = new AjaxSelfUpdatingTimerBehavior(Duration.ofMillis(getRefreshInterval())) {
private static final long serialVersionUID = 1L;
Expand Down Expand Up @@ -206,26 +201,17 @@ protected void savePerformed(AjaxRequestTarget target) {


public void savePerformed(AjaxRequestTarget target) {
progressPanel.onBeforeSave();
previewRequested = false;
OperationResult result = new OperationResult(OPERATION_SAVE);
saveOrPreviewPerformed(target, result, false);
}

public void previewPerformed(AjaxRequestTarget target) {
progressPanel.onBeforeSave();
OperationResult result = new OperationResult(OPERATION_PREVIEW_CHANGES);
previewRequested = true;
saveOrPreviewPerformed(target, result, true);
}

public void saveOrPreviewPerformed(AjaxRequestTarget target, OperationResult result, boolean previewOnly) {
saveOrPreviewPerformed(target, result, previewOnly, null);
public Collection<ObjectDeltaOperation<? extends ObjectType>> saveOrPreviewPerformed(AjaxRequestTarget target, OperationResult result, boolean previewOnly) {
return saveOrPreviewPerformed(target, result, previewOnly, null);
}

// private ObjectDelta<O> delta;

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


PrismObjectWrapper<O> objectWrapper = getModelWrapperObject();
Expand All @@ -250,40 +236,32 @@ public void saveOrPreviewPerformed(AjaxRequestTarget target, OperationResult res
LoggingUtils.logUnexpectedException(LOGGER, "Create Object failed", ex);
showResult(result);
target.add(getFeedbackPanel());
return;
return null;
}

// ModelExecuteOptions options = getOptions(previewOnly);

// LOGGER.debug("Using execute options {}.", options);

// delta = prepareDelta(objectWrapper, result, target);
ExecuteChangeOptionsDto options = getExecuteChangesOptionsDto();
saveOrPreviewPostProcess(target, task, options);

switch (objectWrapper.getStatus()) {
case ADDED:
executeAddDelta(deltas, previewOnly, getExecuteChangesOptionsDto(), task, result, target);
postProcessAddDelta(deltas, previewOnly, task, result, target);
break;

case NOT_CHANGED:
executeModifyDelta(deltas, previewOnly, getExecuteChangesOptionsDto(), task, result, target);
postProcessModifyDelta(deltas, previewOnly, options, task, result, target);
break;
// support for add/delete containers (e.g. delete credentials)
default:
error(getString("pageAdminFocus.message.unsupportedState", objectWrapper.getStatus()));
}


LOGGER.trace("returning from saveOrPreviewPerformed");
return getChangeExecutor().executeChanges(deltas, previewOnly, task, result, target);
}

// @NotNull
// protected ModelExecuteOptions getOptions(boolean previewOnly) {
// ModelExecuteOptions options = mainPanel.getExecuteChangeOptionsDto().createOptions(getPrismContext());
// if (previewOnly) {
// options.getOrCreatePartialProcessing().setApprovals(PartialProcessingTypeType.PROCESS);
// }
// return options;
// }
protected void saveOrPreviewPostProcess(AjaxRequestTarget target, Task task, ExecuteChangeOptionsDto options) {

}

protected ExecuteChangeOptionsDto getExecuteChangesOptionsDto() {
return getOperationalButtonsPanel().getExecuteChangeOptions();
Expand All @@ -296,29 +274,40 @@ protected void reviveModels() throws SchemaException {



private void executeAddDelta(Collection<ObjectDelta<? extends ObjectType>> deltas, boolean previewOnly, ExecuteChangeOptionsDto executeChangeOptionsDto, Task task, OperationResult result, AjaxRequestTarget target) {
try {
if (!deltas.isEmpty()) {
if (checkValidationErrors(target, objectDetailsModels.getValidationErrors())) {
return;
}
progressPanel.executeChanges(deltas, previewOnly, executeChangeOptionsDto, task, result, target);
} else {
result.recordSuccess();
}
} catch (Exception ex) {
result.recordFatalError(getString("pageFocus.message.cantCreateFocus"), ex);
LoggingUtils.logUnexpectedException(LOGGER, "Create user failed", ex);
showResult(result);
private void postProcessAddDelta(Collection<ObjectDelta<? extends ObjectType>> deltas, boolean previewOnly, Task task, OperationResult result, AjaxRequestTarget target) {
if (deltas.isEmpty()) {
return; //nothing to do
}

checkValidationErrors(target, objectDetailsModels.getValidationErrors());
result.recordSuccess();

// try {
// if (!deltas.isEmpty()) {
// if (checkValidationErrors(target, objectDetailsModels.getValidationErrors())) {
// return;
// }
//// getChangeExecutor().executeChanges(deltas, previewOnly, task, result, target);
// } else {
// result.recordSuccess();
// }
// } catch (Exception ex) {
// result.recordFatalError(getString("pageFocus.message.cantCreateFocus"), ex);
// LoggingUtils.logUnexpectedException(LOGGER, "Create user failed", ex);
// showResult(result);
// }
}

private void executeModifyDelta(Collection<ObjectDelta<? extends ObjectType>> deltas, boolean previewOnly, ExecuteChangeOptionsDto executeChangeOptionsDto, Task task, OperationResult result, AjaxRequestTarget target) {
protected ObjectChangeExecutor getChangeExecutor() {
return new ObjectChangesExecutorImpl();
}

private void postProcessModifyDelta(Collection<ObjectDelta<? extends ObjectType>> deltas, boolean previewOnly, ExecuteChangeOptionsDto executeChangeOptionsDto, Task task, OperationResult result, AjaxRequestTarget target) {
//TODO only in UserDetialsPanel
//boolean delegationChangesExist = processDeputyAssignments(previewOnly);
try {
if (deltas.isEmpty() && !executeChangeOptionsDto.isReconcile()) {
progressPanel.clearProgressPanel(); // from previous attempts (useful only if we would call finishProcessing at the end, but that's not the case now)
// progressPanel.clearProgressPanel(); // from previous attempts (useful only if we would call finishProcessing at the end, but that's not the case now)
if (!previewOnly) {
// if (!delegationChangesExist) {
// result.recordWarning(getString("PageAdminObjectDetails.noChangesSave"));
Expand All @@ -337,10 +326,7 @@ private void executeModifyDelta(Collection<ObjectDelta<? extends ObjectType>> de
ObjectDelta emptyDelta = getPrismContext().deltaFor(getType()).asObjectDelta(getModelPrismObject().getOid());
deltas.add(emptyDelta);
}
if (checkValidationErrors(target, objectDetailsModels.getValidationErrors())) {
return;
}
progressPanel.executeChanges(deltas, previewOnly, executeChangeOptionsDto, task, result, target);
checkValidationErrors(target, objectDetailsModels.getValidationErrors());

} catch (Exception ex) {
//TODO force
Expand All @@ -354,7 +340,7 @@ private void executeModifyDelta(Collection<ObjectDelta<? extends ObjectType>> de
}
}

private boolean checkValidationErrors(AjaxRequestTarget target, Collection<SimpleValidationError> validationErrors) {
private void checkValidationErrors(AjaxRequestTarget target, Collection<SimpleValidationError> validationErrors) {
if (validationErrors != null && !validationErrors.isEmpty()) {
for (SimpleValidationError error : validationErrors) {
LOGGER.error("Validation error, attribute: '" + error.printAttribute()
Expand All @@ -364,9 +350,8 @@ private boolean checkValidationErrors(AjaxRequestTarget target, Collection<Simpl
}

target.add(getFeedbackPanel());
return true;
throw new IllegalStateException("Validation errors found");
}
return false;
}

protected void initStateButtons(RepeatingView stateButtonsView) {
Expand Down Expand Up @@ -516,9 +501,6 @@ public IModel<List<ContainerPanelConfigurationType>> getPanelConfigurations() {
protected abstract Class<O> getType();
protected abstract Panel createSummaryPanel(String id, LoadableModel<O> summaryModel);

protected Component getDetailsPanel() {
return get(ID_DETAILS);
}

private MidpointForm getMainForm() {
return (MidpointForm) get(createComponentPath(ID_DETAILS, ID_MAIN_FORM));
Expand All @@ -527,82 +509,13 @@ protected Component getSummaryPanel() {
return get(createComponentPath(ID_DETAILS, ID_SUMMARY));
}
protected OperationalButtonsPanel getOperationalButtonsPanel() {
return (OperationalButtonsPanel) get(createComponentPath(ID_DETAILS, ID_MAIN_FORM, ID_BUTTONS));
return (OperationalButtonsPanel) get(createComponentPath(ID_DETAILS_VIEW, ID_MAIN_FORM, ID_BUTTONS));
}

public PrismObject<O> getPrismObject() {
return getModelPrismObject();
}

// @Override
// public void finishProcessing(AjaxRequestTarget target, Collection<ObjectDeltaOperation<? extends ObjectType>> executedDeltas, boolean returningFromAsync, OperationResult result) {
//
// if (previewRequested) {
// finishPreviewProcessing(target, result);
// return;
// }
// if (result.isSuccess() && getDelta() != null && SecurityUtils.getPrincipalUser().getOid().equals(getDelta().getOid())) {
// Session.get().setLocale(WebComponentUtil.getLocale());
// LOGGER.debug("Using {} as locale", getLocale());
// WebSession.get().getClientInfo().getProperties().
// setTimeZone(WebModelServiceUtils.getTimezone());
// LOGGER.debug("Using {} as time zone", WebSession.get().getClientInfo().getProperties().getTimeZone());
// }
// boolean focusAddAttempted = getDelta() != null && getDelta().isAdd();
// boolean focusAddSucceeded = focusAddAttempted && StringUtils.isNotEmpty(getDelta().getOid());
//
// // we don't want to allow resuming editing if a new focal object was created (on second 'save' there would be a conflict with itself)
// // and also in case of partial errors, like those related to projections (many deltas would be already executed, and this could cause problems on second 'save').
// boolean canContinueEditing = !focusAddSucceeded && result.isFatalError();
//
// boolean canExitPage;
// if (returningFromAsync) {
// canExitPage = getProgressPanel().isAllSuccess() || result.isInProgress() || result.isHandledError(); // if there's at least a warning in the progress table, we would like to keep the table open
// } else {
// canExitPage = !canContinueEditing; // no point in staying on page if we cannot continue editing (in synchronous case i.e. no progress table present)
// }
//
// if (!isKeepDisplayingResults() && canExitPage) {
// showResult(result);
// redirectBack();
// } else {
// if (returningFromAsync) {
// getProgressPanel().showBackButton(target);
// getProgressPanel().hideAbortButton(target);
// }
// showResult(result);
// target.add(getFeedbackPanel());
//
// if (canContinueEditing) {
// getProgressPanel().hideBackButton(target);
// getProgressPanel().showContinueEditingButton(target);
// }
// }
// }

// private void finishPreviewProcessing(AjaxRequestTarget target, OperationResult result) {
// getMainPanel().setVisible(true);
// getProgressPanel().hide();
// getProgressPanel().hideAbortButton(target);
// getProgressPanel().hideBackButton(target);
// getProgressPanel().hideContinueEditingButton(target);
//
// showResult(result);
// target.add(getFeedbackPanel());
//
// Map<PrismObject<O>, ModelContext<? extends ObjectType>> modelContextMap = new LinkedHashMap<>();
// modelContextMap.put(getModelPrismObject(), getProgressPanel().getPreviewResult());
//
// //TODO
//// processAdditionalFocalObjectsForPreview(modelContextMap);
//
// navigateToNext(new PagePreviewChanges(modelContextMap, getModelInteractionService()));
// }

protected ProgressPanel getProgressPanel() {
return (ProgressPanel) get(ID_PROGRESS_PANEL);
}

@Override
protected void createBreadcrumb() {
createInstanceBreadcrumb();
Expand Down

0 comments on commit 643e8eb

Please sign in to comment.