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
skublik committed Jun 25, 2018
2 parents b9542f4 + ec4505e commit 9eb97d5
Show file tree
Hide file tree
Showing 10 changed files with 302 additions and 32 deletions.
Expand Up @@ -26,6 +26,7 @@
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.component.util.SelectableBean;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.security.SecurityUtils;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleType;
Expand All @@ -50,10 +51,12 @@ public abstract class AbstractAssignmentPopupTabPanel<O extends ObjectType> exte
private static final String OPERATION_LOAD_ASSIGNABLE_ROLES = DOT_CLASS + "loadAssignableRoles";

private ObjectTypes type;
protected List<O> selectedObjects;

public AbstractAssignmentPopupTabPanel(String id, ObjectTypes type){
public AbstractAssignmentPopupTabPanel(String id, ObjectTypes type, List<O> selectedObjects){
super(id);
this.type = type;
this.selectedObjects = selectedObjects;
}

@Override
Expand All @@ -64,15 +67,19 @@ protected void onInitialize(){
}

private PopupObjectListPanel initObjectListPanel(){
PopupObjectListPanel<O> listPanel = new PopupObjectListPanel<O>(ID_OBJECT_LIST_PANEL, (Class)type.getClassDefinition(), true, getPageBase()) {
PopupObjectListPanel<O> listPanel = new PopupObjectListPanel<O>(ID_OBJECT_LIST_PANEL, (Class)type.getClassDefinition(),
null, true, getPageBase(), selectedObjects) {

private static final long serialVersionUID = 1L;

@Override
protected void onUpdateCheckbox(AjaxRequestTarget target) {
// if (type.equals(ObjectTypes.RESOURCE)) {
// target.add(AbstractAssignmentPopupTabPanel.this);
// }
if (selectedObjects == null){
selectedObjects = new ArrayList<>();
}
selectedObjects.clear();
selectedObjects.addAll(getSelectedObjectsList());

onSelectionPerformed(target);
}

Expand Down Expand Up @@ -111,7 +118,13 @@ protected ObjectQuery addFilterToContentQuery(ObjectQuery query) {
}

};
listPanel.add(new VisibleEnableBehaviour(){
private static final long serialVersionUID = 1L;

public boolean isVisible(){
return isObjectListPanelVisible();
}
});
listPanel.setOutputMarkupId(true);
return listPanel;
}
Expand All @@ -132,6 +145,10 @@ protected IModel<Boolean> getObjectSelectCheckBoxEnableModel(IModel<SelectableBe
return Model.of(true);
}

protected boolean isObjectListPanelVisible(){
return true;
}

protected abstract void initParametersPanel();

protected void onSelectionPerformed(AjaxRequestTarget target){}
Expand Down
Expand Up @@ -3,6 +3,7 @@
import com.evolveum.midpoint.gui.api.component.tabs.CountablePanelTab;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.schema.constants.ObjectTypes;
import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.schema.util.ObjectTypeUtil;
import com.evolveum.midpoint.web.component.AjaxButton;
import com.evolveum.midpoint.web.component.TabbedPanel;
Expand All @@ -14,9 +15,7 @@
import org.apache.wicket.extensions.markup.html.tabs.ITab;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.list.Loop;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.StringResourceModel;

import javax.xml.namespace.QName;
Expand All @@ -35,11 +34,14 @@ public class AssignmentPopup<O extends ObjectType> extends BasePanel implements
private static final String ID_FORM = "form";

private FocusTypeAssignmentPopupTabPanel rolesTabPanel;
private FocusTypeAssignmentPopupTabPanel orgsTabPanel;
private OrgTypeAssignmentPopupTabPanel orgsTabPanel;
private OrgTypeAssignmentPopupTabPanel orgTreeViewTabPanel;
private FocusTypeAssignmentPopupTabPanel servicesTabPanel;
private FocusTypeAssignmentPopupTabPanel usersTabPanel;
private ResourceTypeAssignmentPopupTabPanel resourcesTabPanel;

private List<OrgType> selectedOrgsList = new ArrayList<>();
private boolean isOrgTreeView;

public AssignmentPopup(String id){
super(id);
Expand Down Expand Up @@ -89,10 +91,11 @@ public void onClick(AjaxRequestTarget target) {
newAssignmentsList.add(newAssignment);
});
}
if (orgsTabPanel != null){
List<O> selectedOrgs = orgsTabPanel.getSelectedObjectsList();
QName relation = orgsTabPanel.getRelationValue();
selectedOrgs.forEach(selectedOrg -> {
//todo synchronize relation drop down between 2 org tabs
if (orgsTabPanel != null || orgTreeViewTabPanel != null){
QName relation = orgsTabPanel != null ? orgsTabPanel.getRelationValue() :
(orgTreeViewTabPanel != null ? orgTreeViewTabPanel.getRelationValue() : SchemaConstants.ORG_DEFAULT);
selectedOrgsList.forEach(selectedOrg -> {
ObjectReferenceType ref = ObjectTypeUtil.createObjectRef(selectedOrg, relation);
AssignmentType newAssignment = new AssignmentType();
newAssignment.setTargetRef(ref);
Expand Down Expand Up @@ -135,6 +138,7 @@ public void onClick(AjaxRequestTarget target) {

private List<ITab> createAssignmentTabs() {
List<ITab> tabs = new ArrayList<>();
//TODO check authorization for each tab
VisibleEnableBehaviour authorization = new VisibleEnableBehaviour(){
};

Expand Down Expand Up @@ -164,14 +168,15 @@ public String getCount() {
}
});

IModel<Boolean> isOrgTreeViewModel = getOrgTreeViewModel();
tabs.add(
new CountablePanelTab(getPageBase().createStringResource("ObjectTypes.ORG"), authorization) {

private static final long serialVersionUID = 1L;

@Override
public WebMarkupContainer createPanel(String panelId) {
orgsTabPanel = new FocusTypeAssignmentPopupTabPanel(panelId, ObjectTypes.ORG){
orgsTabPanel = new OrgTypeAssignmentPopupTabPanel(panelId, isOrgTreeViewModel, selectedOrgsList){
private static final long serialVersionUID = 1L;

@Override
Expand All @@ -180,18 +185,42 @@ protected void onSelectionPerformed(AjaxRequestTarget target){
}

};
orgsTabPanel.setOutputMarkupId(true);
return orgsTabPanel;
}

@Override
public String getCount() {
if (orgsTabPanel == null){
return "0";
}
return Integer.toString(orgsTabPanel.getObjectListPanel().getSelectedObjectsCount());
return Integer.toString(selectedOrgsList.size());
}
});


tabs.add(new CountablePanelTab(getPageBase().createStringResource("TypedAssignablePanel.orgTreeView"), authorization) {

private static final long serialVersionUID = 1L;

@Override
public WebMarkupContainer createPanel(String panelId) {
orgTreeViewTabPanel = new OrgTypeAssignmentPopupTabPanel(panelId, isOrgTreeViewModel, selectedOrgsList){
private static final long serialVersionUID = 1L;

@Override
protected void onOrgTreeCheckBoxSelectionPerformed(AjaxRequestTarget target){
tabLabelPanelUpdate(target);
}

};
orgTreeViewTabPanel.setOutputMarkupId(true);
return orgTreeViewTabPanel;
}

@Override
public String getCount() {
return Integer.toString(selectedOrgsList.size());
}
});

tabs.add(
new CountablePanelTab(getPageBase().createStringResource("ObjectTypes.SERVICE"), authorization) {

Expand Down Expand Up @@ -251,17 +280,35 @@ public String getCount() {
return tabs;
}

private IModel<Boolean> getOrgTreeViewModel(){
//the index of the Org Tree panel is 2
int orgTreeViewTabIndex = 2;
return new IModel<Boolean>() {
private static final long serialVersionUID = 1L;

@Override
public Boolean getObject() {
isOrgTreeView = getTabbedPanel() != null && getTabbedPanel().getSelectedTab() == orgTreeViewTabIndex;
return isOrgTreeView;
}

@Override
public void setObject(Boolean object) {
isOrgTreeView = object;
}

@Override
public void detach() {

}
};
}

private TabbedPanel getTabbedPanel(){
return (TabbedPanel) get(ID_FORM).get(ID_TABS_PANEL);
}

private void tabLabelPanelUpdate(AjaxRequestTarget target){
// TabbedPanel tabbedPanel = getTabbedPanel();
// Loop tabs = tabbedPanel.getTabsPanel();
// tabs.forEach(tabPanel -> {
// target.add(tabPanel.get(tabbedPanel.getTabLinkPanelId()));
// });

target.add(getTabbedPanel());
}

Expand Down
Expand Up @@ -17,6 +17,7 @@
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org">
<wicket:extend>
<wicket:child />
<div class="form-inline search-form">
<div class="row">
<div class="col-md-4">
Expand Down
Expand Up @@ -29,6 +29,7 @@
import org.apache.wicket.model.Model;

import javax.xml.namespace.QName;
import java.util.ArrayList;
import java.util.List;

/**
Expand All @@ -45,7 +46,11 @@ public class FocusTypeAssignmentPopupTabPanel<F extends FocusType> extends Abstr
private static final Trace LOGGER = TraceManager.getTrace(FocusTypeAssignmentPopupTabPanel.class);

public FocusTypeAssignmentPopupTabPanel(String id, ObjectTypes type){
super(id, type);
this(id, type, new ArrayList<>());
}

public FocusTypeAssignmentPopupTabPanel(String id, ObjectTypes type, List<F> selectedObjects){
super(id, type, selectedObjects);
}

@Override
Expand Down
@@ -0,0 +1,22 @@
<!--
~ Copyright (c) 2010-2018 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.
-->

<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org">
<wicket:extend>
<div wicket:id="orgTreeViewPanel"></div>
</wicket:extend>
</html>

0 comments on commit 9eb97d5

Please sign in to comment.