Skip to content

Commit

Permalink
cert campaigns table + actions
Browse files Browse the repository at this point in the history
  • Loading branch information
KaterynaHonchar committed Apr 24, 2024
1 parent 3eb6c06 commit c66a382
Show file tree
Hide file tree
Showing 3 changed files with 703 additions and 207 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,27 +13,19 @@
import com.evolveum.midpoint.gui.api.component.form.CheckBoxPanel;
import com.evolveum.midpoint.gui.api.component.progressbar.ProgressBar;
import com.evolveum.midpoint.gui.api.component.progressbar.ProgressBarPanel;
import com.evolveum.midpoint.gui.api.page.PageAdminLTE;
import com.evolveum.midpoint.gui.api.util.LocalizationUtil;
import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.impl.page.admin.resource.component.TemplateTile;
import com.evolveum.midpoint.model.api.AccessCertificationService;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.result.OperationResultStatus;
import com.evolveum.midpoint.schema.util.CertCampaignTypeUtil;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.logging.LoggingUtils;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.component.AjaxButton;
import com.evolveum.midpoint.web.component.util.SelectableBean;
import com.evolveum.midpoint.web.page.admin.certification.dto.CertCampaignListItemDto;
import com.evolveum.midpoint.web.page.admin.certification.helpers.CampaignProcessingHelper;
import com.evolveum.midpoint.web.page.admin.certification.helpers.CampaignStateHelper;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationCampaignStateType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationCampaignType;

import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.behavior.AttributeAppender;
Expand Down Expand Up @@ -134,7 +126,7 @@ public void onClick(AjaxRequestTarget target) {

@Override
public void onClick(AjaxRequestTarget target) {
campaignActionPerformed(target);
CampaignProcessingHelper.campaignActionPerformed(getCampaign(), getPageBase(), target);
}
};
actionButton.add(AttributeModifier.append("class", campaignStateHelper.getNextAction().getActionCssClass()));
Expand All @@ -150,8 +142,6 @@ public void onClick(AjaxRequestTarget target) {
actionButtonIcon.add(AttributeModifier.append("class", campaignStateHelper.getNextAction().getActionIcon().getCssClass()));
actionButtonIcon.setOutputMarkupId(true);
actionButton.add(actionButtonIcon);


}

private IModel<Boolean> getSelectedModel() {
Expand All @@ -168,92 +158,76 @@ public void setObject(Boolean object) {
}
};
}
private IModel<Badge> getStatusModel() {
return Model.of(campaignStateHelper.createBadge());

private LoadableModel<Badge> getStatusModel() {
return new LoadableModel<>() {
@Serial private static final long serialVersionUID = 1L;

@Override
protected Badge load() {
return campaignStateHelper.createBadge();
}
};
}

private IModel<String> getTitleModel() {
return Model.of(WebComponentUtil.getName(getCampaign()));
private LoadableModel<String> getTitleModel() {
return new LoadableModel<>() {
@Serial private static final long serialVersionUID = 1L;

@Override
protected String load() {
return WebComponentUtil.getName(getCampaign());
}
};
}

private AccessCertificationCampaignType getCampaign() {
return getModelObject().getValue().getValue();
}

protected @NotNull IModel<List<ProgressBar>> createProgressBarModel() {
return () -> {
AccessCertificationCampaignType campaign = getCampaign();
float completed = CertCampaignTypeUtil.getCasesCompletedPercentageAllStagesAllIterations(campaign);
protected @NotNull LoadableModel<List<ProgressBar>> createProgressBarModel() {
return new LoadableModel<>() {
@Serial private static final long serialVersionUID = 1L;

ProgressBar progressBar = new ProgressBar(completed, ProgressBar.State.INFO);
return Collections.singletonList(progressBar);
@Override
protected List<ProgressBar> load() {
AccessCertificationCampaignType campaign = getCampaign();
float completed = CertCampaignTypeUtil.getCasesCompletedPercentageAllStagesAllIterations(campaign);

ProgressBar progressBar = new ProgressBar(completed, ProgressBar.State.INFO);
return Collections.singletonList(progressBar);
}
};
}

private IModel<String> getDeadlineModel() {
return Model.of(WebComponentUtil.formatDate(getCampaign().getEndTimestamp()));
}

private IModel<String> getStageModel() {
int stageNumber = getCampaign().getStageNumber();
int numberOfStages = CertCampaignTypeUtil.getNumberOfStages(getCampaign());
return Model.of(stageNumber + "/" + numberOfStages);
}
private LoadableModel<String> getStageModel() {
return new LoadableModel<>() {
@Serial private static final long serialVersionUID = 1L;

private IModel<String> getIterationModel() {
return Model.of("" + CertCampaignTypeUtil.norm(getCampaign().getIteration()));
@Override
protected String load() {
int stageNumber = getCampaign().getStageNumber();
int numberOfStages = CertCampaignTypeUtil.getNumberOfStages(getCampaign());
return stageNumber + "/" + numberOfStages;
}
};
}

//todo unify with PageCertCampaigns menu actions
private void campaignActionPerformed(AjaxRequestTarget target) {
int processed = 0;
AccessCertificationService acs = getPageBase().getCertificationService();

CampaignStateHelper.CampaignAction action = campaignStateHelper.getNextAction();
String operationName = LocalizationUtil.translate(action.getActionLabelKey());

OperationResult result = new OperationResult(operationName);
try {
Task task = getPageBase().createSimpleTask(operationName);
if (CampaignStateHelper.CampaignAction.START_CAMPAIGN.equals(action)) {
// if (campaign.getState() == AccessCertificationCampaignStateType.CREATED) {
acs.openNextStage(getCampaign().getOid(), task, result);
processed++;
// }
} else if (CampaignStateHelper.CampaignAction.CLOSE_CAMPAIGN.equals(operationName)) {
// if (campaign.getState() != AccessCertificationCampaignStateType.CLOSED) {
acs.closeCampaign(getCampaign().getOid(), task, result);
processed++;
// }
} else if (CampaignStateHelper.CampaignAction.REITERATE_CAMPAIGN.equals(operationName)) {
//todo
// if (item.isReiterable()) {
acs.reiterateCampaign(getCampaign().getOid(), task, result);
processed++;
// }
} else {
throw new IllegalStateException("Unknown action: " + operationName);
private LoadableModel<String> getIterationModel() {
return new LoadableModel<>() {
@Serial private static final long serialVersionUID = 1L;

@Override
protected String load() {
return "" + CertCampaignTypeUtil.norm(getCampaign().getIteration());
}
} catch (Exception ex) {
result.recordPartialError(createStringResource(
"PageCertCampaigns.message.actOnCampaignsPerformed.partialError").getString(), ex);
LoggingUtils.logUnexpectedException(LOGGER, "Couldn't process campaign", ex);
}

if (processed == 0) {
warn(getString("PageCertCampaigns.message.noCampaignsSelected"));
target.add(getFeedbackPanel());
return;
}

result.recomputeStatus();
if (result.isSuccess()) {
result.recordStatus(OperationResultStatus.SUCCESS, createStringResource(
"PageCertCampaigns.message.actOnCampaignsPerformed.success", processed).getString());
}
WebComponentUtil.safeResultCleanup(result, LOGGER);
showResult(result);
target.add(this);
};
}

//todo unify with PageCertCampaigns menu actions

}

0 comments on commit c66a382

Please sign in to comment.