Skip to content

Commit

Permalink
org assignments rework + implemented common orgTreePanel
Browse files Browse the repository at this point in the history
  • Loading branch information
katkav committed Apr 18, 2016
1 parent 90cad25 commit f462838
Show file tree
Hide file tree
Showing 20 changed files with 1,745 additions and 1,088 deletions.
Expand Up @@ -51,5 +51,8 @@
<div wicket:id="orgTable"></div>
<div wicket:id="serviceTable"></div>
</div>

<p align="center">
<a class="btn btn-sm btn-primary" wicket:id="assignButton"/>
</p>
</wicket:panel>
Expand Up @@ -29,6 +29,8 @@
import com.evolveum.midpoint.prism.query.ObjectFilter;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.ObjectQueryUtil;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.exception.SecurityViolationException;
import com.evolveum.midpoint.util.logging.LoggingUtils;
Expand All @@ -39,6 +41,8 @@
import com.evolveum.midpoint.web.component.menu.cog.InlineMenu;
import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItem;
import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItemAction;
import com.evolveum.midpoint.web.page.admin.orgs.OrgTreeAssignablePanel;
import com.evolveum.midpoint.web.page.admin.orgs.OrgTreePanel;
import com.evolveum.midpoint.web.page.admin.users.component.*;
import com.evolveum.midpoint.web.page.admin.users.dto.UserDtoStatus;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
Expand Down Expand Up @@ -267,9 +271,20 @@ protected void addPerformed(AjaxRequestTarget target, List selected) {
item = new InlineMenuItem(createStringResource("AssignmentTablePanel.menu.assignOrg"),
new InlineMenuItemAction() {

@Override
public void onClick(AjaxRequestTarget target) {
showAssignableOrgPopupPerformed(target);
@Override
public void onClick(AjaxRequestTarget target){
OrgTreeAssignablePanel orgTreePanel = new OrgTreeAssignablePanel(getPageBase().getMainPopupBodyId(), true, getPageBase()){

@Override
protected void assignSelectedOrgPerformed(List<OrgType> selectedOrgs,
AjaxRequestTarget target) {
// TODO Auto-generated method stub
addSelectedAssignablePerformed(target, (List)selectedOrgs, getPageBase().getMainPopup().getId());
}
};
orgTreePanel.setOutputMarkupId(true);
getPageBase().showMainPopup(orgTreePanel, new Model<String>("Select Org"), target, 900, 500);

}
});
items.add(item);
Expand Down Expand Up @@ -394,6 +409,7 @@ private void addSelectedAssignablePerformed(AjaxRequestTarget target, List<Objec
if (window != null) {
window.close(target);
}
getPageBase().hideMainPopup(target);
if (newAssignments.isEmpty()) {
warn(getString("AssignmentTablePanel.message.noAssignmentSelected"));
//target.add(getPageBase().getFeedbackPanel());
Expand Down Expand Up @@ -442,7 +458,7 @@ private void addSelectedResourceAssignPerformed(ResourceType resource) {
AssignmentEditorDto dto = new AssignmentEditorDto(UserDtoStatus.ADD, assignment, getPageBase());
assignments.add(dto);

dto.setMinimized(false);
dto.setMinimized(true);
dto.setShowEmpty(true);
}

Expand Down
Expand Up @@ -57,6 +57,7 @@
import com.evolveum.midpoint.web.component.menu.cog.InlineMenu;
import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItem;
import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItemAction;
import com.evolveum.midpoint.web.component.util.SelectableBean;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.page.admin.users.component.AbstractTreeTablePanel;
import com.evolveum.midpoint.web.page.admin.users.component.OrgTreeProvider;
Expand Down Expand Up @@ -85,9 +86,9 @@ public class OrgTreeTablePanel extends AbstractTreeTablePanel{
public OrgTreeTablePanel(String id, IModel<String> rootOid) {
super(id, rootOid);

selected = new LoadableModel<OrgTreeDto>() {
selected = new LoadableModel<SelectableBean<OrgType>>() {
@Override
protected OrgTreeDto load() {
protected SelectableBean<OrgType> load() {
return getRootFromProvider();
}
};
Expand All @@ -105,8 +106,8 @@ protected void initLayout() {
treeHeader.add(treeMenu);

ISortableTreeProvider provider = new OrgTreeProvider(this, getModel());
List<IColumn<OrgTreeDto, String>> columns = new ArrayList<>();
columns.add(new TreeColumn<OrgTreeDto, String>(createStringResource("TreeTablePanel.hierarchy")));
List<IColumn<SelectableBean<OrgType>, String>> columns = new ArrayList<>();
columns.add(new TreeColumn<SelectableBean<OrgType>, String>(createStringResource("TreeTablePanel.hierarchy")));

WebMarkupContainer treeContainer = new WebMarkupContainer(ID_TREE_CONTAINER) {

Expand All @@ -120,11 +121,11 @@ public void renderHead(IHeaderResponse response) {
};
add(treeContainer);

TableTree<OrgTreeDto, String> tree = new TableTree<OrgTreeDto, String>(ID_TREE, columns, provider,
TableTree<SelectableBean<OrgType>, String> tree = new TableTree<SelectableBean<OrgType>, String>(ID_TREE, columns, provider,
Integer.MAX_VALUE, new TreeStateModel(provider)) {

@Override
protected Component newContentComponent(String id, IModel<OrgTreeDto> model) {
protected Component newContentComponent(String id, IModel<SelectableBean<OrgType>> model) {
return new SelectableFolderContent(id, this, model, selected) {

@Override
Expand All @@ -137,13 +138,13 @@ protected void onClick(AjaxRequestTarget target) {
}

@Override
protected Item<OrgTreeDto> newRowItem(String id, int index, final IModel<OrgTreeDto> model) {
Item<OrgTreeDto> item = super.newRowItem(id, index, model);
protected Item<SelectableBean<OrgType>> newRowItem(String id, int index, final IModel<SelectableBean<OrgType>> model) {
Item<SelectableBean<OrgType>> item = super.newRowItem(id, index, model);
item.add(AttributeModifier.append("class", new AbstractReadOnlyModel<String>() {

@Override
public String getObject() {
OrgTreeDto itemObject = model.getObject();
SelectableBean<OrgType> itemObject = model.getObject();
if (itemObject != null && itemObject.equals(selected.getObject())) {
return "success";
}
Expand All @@ -160,7 +161,7 @@ public String getObject() {
treeContainer.add(tree);

initTables();
initSearch();
// initSearch();
}

protected CharSequence computeTreeHeight() {
Expand Down Expand Up @@ -268,8 +269,8 @@ protected IModel<String> createIconModel(IModel<OrgTableDto> rowModel) {
/**
* This method check selection in table.
*/
public List<OrgTableDto> getSelectedOrgs(AjaxRequestTarget target) {
List<OrgTableDto> objects = WebComponentUtil.getSelectedData(getOrgChildTable());
public List<SelectableBean<OrgType>> getSelectedOrgs(AjaxRequestTarget target) {
List<SelectableBean<OrgType>> objects = WebComponentUtil.getSelectedData(getOrgChildTable());
if (objects.isEmpty()) {
warn(getString("TreeTablePanel.message.nothingSelected"));
target.add(getPageBase().getFeedbackPanel());
Expand All @@ -278,8 +279,8 @@ public List<OrgTableDto> getSelectedOrgs(AjaxRequestTarget target) {
return objects;
}

public List<OrgTableDto> getSelectedOrgs() {
List<OrgTableDto> objects = WebComponentUtil.getSelectedData(getOrgChildTable());
public List<SelectableBean<OrgType>> getSelectedOrgs() {
List<SelectableBean<OrgType>> objects = WebComponentUtil.getSelectedData(getOrgChildTable());
if (objects.isEmpty()) {
// warn(getString("TreeTablePanel.message.nothingSelected"));
// target.add(getPageBase().getFeedbackPanel());
Expand All @@ -305,32 +306,32 @@ private void selectTreeItemPerformed(AjaxRequestTarget target) {
}


private void updateActivationPerformed(AjaxRequestTarget target, boolean enable) {
List<OrgTableDto> objects = getSelectedOrgs(target);
if (objects.isEmpty()) {
return;
}

PageBase page = getPageBase();
OperationResult result = new OperationResult(OPERATION_UPDATE_OBJECTS);
for (OrgTableDto object : objects) {
if (!(FocusType.class.isAssignableFrom(object.getType()))) {
continue;
}

OperationResult subResult = result.createSubresult(OPERATION_UPDATE_OBJECT);
ObjectDelta delta = WebModelServiceUtils.createActivationAdminStatusDelta(object.getType(), object.getOid(),
enable, page.getPrismContext());

WebModelServiceUtils.save(delta, subResult, page);
}
result.computeStatusComposite();

page.showResult(result);
target.add(page.getFeedbackPanel());

refreshTable(target);
}
// private void updateActivationPerformed(AjaxRequestTarget target, boolean enable) {
// List<SelectableBean<OrgType>> objects = getSelectedOrgs(target);
// if (objects.isEmpty()) {
// return;
// }
//
// PageBase page = getPageBase();
// OperationResult result = new OperationResult(OPERATION_UPDATE_OBJECTS);
// for (SelectableBean<OrgType> object : objects) {
//// if (!(FocusType.class.isAssignableFrom(object.getType()))) {
//// continue;
//// }
//
// OperationResult subResult = result.createSubresult(OPERATION_UPDATE_OBJECT);
// ObjectDelta delta = WebModelServiceUtils.createActivationAdminStatusDelta(object.getType(), object.getOid(),
// enable, page.getPrismContext());
//
// WebModelServiceUtils.save(delta, subResult, page);
// }
// result.computeStatusComposite();
//
// page.showResult(result);
// target.add(page.getFeedbackPanel());
//
// refreshTable(target);
// }

@Override
protected void refreshTable(AjaxRequestTarget target) {
Expand All @@ -341,35 +342,35 @@ protected void refreshTable(AjaxRequestTarget target) {
}

private void collapseAllPerformed(AjaxRequestTarget target) {
TableTree<OrgTreeDto, String> tree = getTree();
TableTree<SelectableBean<OrgType>, String> tree = getTree();
TreeStateModel model = (TreeStateModel) tree.getDefaultModel();
model.collapseAll();

target.add(tree);
}

private void expandAllPerformed(AjaxRequestTarget target) {
TableTree<OrgTreeDto, String> tree = getTree();
TableTree<SelectableBean<OrgType>, String> tree = getTree();
TreeStateModel model = (TreeStateModel) tree.getDefaultModel();
model.expandAll();

target.add(tree);
}

private static class TreeStateModel extends AbstractReadOnlyModel<Set<OrgTreeDto>> {
private static class TreeStateModel extends AbstractReadOnlyModel<Set<SelectableBean<OrgType>>> {

private TreeStateSet<OrgTreeDto> set = new TreeStateSet<>();
private TreeStateSet<SelectableBean<OrgType>> set = new TreeStateSet<>();
private ISortableTreeProvider provider;

TreeStateModel(ISortableTreeProvider provider) {
this.provider = provider;
}

@Override
public Set<OrgTreeDto> getObject() {
public Set<SelectableBean<OrgType>> getObject() {
//just to have root expanded at all time
if (set.isEmpty()) {
Iterator<OrgTreeDto> iterator = provider.getRoots();
Iterator<SelectableBean<OrgType>> iterator = provider.getRoots();
if (iterator.hasNext()) {
set.add(iterator.next());
}
Expand Down
Expand Up @@ -55,4 +55,20 @@ public List<InlineMenuItem> getMenuItems() {
}
return menuItems;
}

@Override
public boolean equals(Object obj) {
if (!(obj instanceof SelectableBean)){
return false;
}

T object = ((SelectableBean<T>) obj).getValue();
return object.equals(value);
}

@Override
public int hashCode() {
int result = (value != null ? value.hashCode() : 0);
return result;
}
}
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright (c) 2010-2013 Evolveum
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->

<wicket:panel xmlns:wicket="http://wicket.apache.org">
<div wicket:id="tabs" class="nav-tabs-custom" />
</wicket:panel>

0 comments on commit f462838

Please sign in to comment.