Skip to content

Commit

Permalink
MID-1770 implementation.
Browse files Browse the repository at this point in the history
  • Loading branch information
Erik Suta committed Mar 21, 2014
1 parent 4a22263 commit 0b6bf46
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 3 deletions.
Expand Up @@ -61,7 +61,7 @@
*/
public class OrgUnitBrowser extends ModalWindow {

public static enum Operation {MOVE, ADD, REMOVE}
public static enum Operation {MOVE, ADD, REMOVE, RECOMPUTE}

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

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

package com.evolveum.midpoint.web.page.admin.users.component;

import com.evolveum.midpoint.model.api.ModelExecuteOptions;
import com.evolveum.midpoint.model.api.ModelService;
import com.evolveum.midpoint.prism.*;
import com.evolveum.midpoint.prism.delta.ChangeType;
Expand All @@ -26,12 +27,12 @@
import com.evolveum.midpoint.prism.query.*;
import com.evolveum.midpoint.schema.constants.ObjectTypes;
import com.evolveum.midpoint.schema.result.OperationResult;
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.BasicSearchPanel;
import com.evolveum.midpoint.web.component.TabbedPanel;
import com.evolveum.midpoint.web.component.data.BaseSortableDataProvider;
import com.evolveum.midpoint.web.component.data.ObjectDataProvider;
import com.evolveum.midpoint.web.component.data.TablePanel;
import com.evolveum.midpoint.web.component.data.column.CheckBoxHeaderColumn;
Expand Down Expand Up @@ -102,6 +103,7 @@ public class TreeTablePanel extends SimplePanel<String> {
private static final String OPERATION_MOVE_OBJECT = DOT_CLASS + "moveObject";
private static final String OPERATION_UPDATE_OBJECTS = DOT_CLASS + "updateObjects";
private static final String OPERATION_UPDATE_OBJECT = DOT_CLASS + "updateObject";
private static final String OPERATION_RECONCILE = DOT_CLASS + "reconcile";

private static final String ID_TREE = "tree";
private static final String ID_TREE_CONTAINER = "treeContainer";
Expand Down Expand Up @@ -311,6 +313,15 @@ public void onClick(AjaxRequestTarget target) {
});
items.add(item);

item = new InlineMenuItem(createStringResource("TreeTablePanel.recomputeRoot"), new InlineMenuItemAction() {

@Override
public void onClick(AjaxRequestTarget target) {
recomputeRootPerformed(target, OrgUnitBrowser.Operation.RECOMPUTE);
}
});
items.add(item);

return items;
}

Expand Down Expand Up @@ -458,6 +469,15 @@ public void onSubmit(AjaxRequestTarget target, Form<?> form) {
}
}));

headerMenuItems.add(new InlineMenuItem(createStringResource("TreeTablePanel,menu.recompute"), true,
new HeaderMenuAction(this) {

@Override
public void onSubmit(AjaxRequestTarget target, Form<?> form){
recomputePerformed(target, OrgUnitBrowser.Operation.RECOMPUTE);
}
}));

return headerMenuItems;
}

Expand Down Expand Up @@ -776,6 +796,52 @@ private void refreshTable(AjaxRequestTarget target) {
target.add(getTable());
}

private void recomputeRootPerformed(AjaxRequestTarget target, OrgUnitBrowser.Operation operation){
OrgTreeDto root = getRootFromProvider();
OrgTableDto dto = new OrgTableDto(root.getOid(), root.getType());
recomputePerformed(target, operation, dto);
}

private void recomputePerformed(AjaxRequestTarget target, OrgUnitBrowser.Operation operation){
recomputePerformed(target, operation, null);
}

private void recomputePerformed(AjaxRequestTarget target, OrgUnitBrowser.Operation operation, OrgTableDto orgDto){
List<OrgTableDto> objects;
if (orgDto == null) {
objects = isAnythingSelected(target);
if (objects.isEmpty()) {
return;
}
} else {
objects = new ArrayList<>();
objects.add(orgDto);
}

Task task = getPageBase().createSimpleTask(OPERATION_RECONCILE);
OperationResult result = new OperationResult(OPERATION_RECONCILE);

try {

for(OrgTableDto org: objects){
ObjectDelta emptyDelta = ObjectDelta.createEmptyModifyDelta(OrgType.class,
org.getOid(), getPageBase().getPrismContext());
ModelExecuteOptions options = new ModelExecuteOptions();
options.setReconcile(true);
getPageBase().getModelService().executeChanges(WebMiscUtil.createDeltaCollection(emptyDelta), options, task, result);
}

result.recordSuccess();
} catch (Exception e){
result.recordFatalError(getString("TreeTablePanel.message.recomputeError"), e);
LoggingUtils.logException(LOGGER, getString("TreeTablePanel.message.recomputeError"), e);
}

getPageBase().showResult(result);
target.add(getPageBase().getFeedbackPanel());
refreshTabbedPanel(target);
}

private void deleteRootPerformed(AjaxRequestTarget target) {
if (selected.getObject() == null) {
warn(getString("TreeTablePanel.message.nothingSelected"));
Expand Down
Expand Up @@ -18,6 +18,7 @@ TreeTablePanel.hierarchy=Org. hierarchy
TreeTablePanel.menu.addOrgUnit=Add org. unit
TreeTablePanel.menu.addUser=Add user
TreeTablePanel.menu.delete=Delete
TreeTablePanel,menu.recompute=Recompute
TreeTablePanel.menu.removeFromHierarchy=Remove from org. unit
TreeTablePanel.menu.addToHierarchy=Add to org. unit
TreeTablePanel.menu.move=Move
Expand All @@ -30,4 +31,6 @@ TreeTablePanel.dialog.title.confirmDelete=Confirm delete
TreeTablePanel.collapseAll=Collapse all
TreeTablePanel.expandAll=Expand all
TreeTablePanel.moveRoot=Move root
TreeTablePanel.deleteRoot=Delete root
TreeTablePanel.deleteRoot=Delete root
TreeTablePanel.recomputeRoot=Recompute root
TreeTablePanel.message.recomputeError=Can't recompute Org. unit

0 comments on commit 0b6bf46

Please sign in to comment.