Skip to content

Commit

Permalink
Merge branch 'master' of github.com:Evolveum/midpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
1azyman committed Feb 12, 2018
2 parents ff87207 + 4ec89ca commit c4179e2
Show file tree
Hide file tree
Showing 23 changed files with 899 additions and 440 deletions.
Expand Up @@ -7,20 +7,7 @@
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agr <div class="form-inline search-form">
<div class="row">
<div class="form-group col-md-12">
<label>
<wicket:message key="roleMemberPanel.type"/>
</label>
<select class="form-control input-sm" wicket:id="type"/>
<label>
<wicket:message key="AssignmentEditorPanel.relation"/>
</label>
<select class="form-control input-sm" wicket:id="relation"/>
</div>
</div>
</div>eed to in writing, software
~ 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
Expand All @@ -44,33 +31,40 @@
</label>
<span wicket:id="relation" />
</div>
<div class="col-md-3" wicket:id="orgTreeViewContainer">
<input type="checkbox" wicket:id="orgTreeView" />
<label>
<wicket:message key="TypedAssignablePanel.orgTreeView"/>
</label>
</div>
</div>
</div>
<div wicket:id="countContainer">
<div class="form-group col-md-3">
<label><wicket:message key="typedAssignablePanel.selectedResources" /></label>
<label wicket:id="resourcesSelected" />
</div>
<div class="form-group col-md-3">
<label><wicket:message key="typedAssignablePanel.selectedRoles" /></label>
<label wicket:id="rolesSelected" />
</div>
<div class="form-group col-md-3">
<label><wicket:message key="typedAssignablePanel.selectedOrgs" /></label>
<label wicket:id="orgSelected" />
</div>
<div class="form-group col-md-3">
<label><wicket:message key="typedAssignablePanel.selectedServices" /></label>
<label wicket:id="servicesSelected" />
</div>
</div>
<!--<div wicket:id="countContainer">-->
<!--<div class="form-group col-md-3">-->
<!--<label><wicket:message key="typedAssignablePanel.selectedResources" /></label> -->
<!--<label wicket:id="resourcesSelected" />-->
<!--</div>-->
<!--<div class="form-group col-md-3">-->
<!--<label><wicket:message key="typedAssignablePanel.selectedRoles" /></label> -->
<!--<label wicket:id="rolesSelected" />-->
<!--</div>-->
<!--<div class="form-group col-md-3">-->
<!--<label><wicket:message key="typedAssignablePanel.selectedOrgs" /></label> -->
<!--<label wicket:id="orgSelected" />-->
<!--</div>-->
<!--<div class="form-group col-md-3">-->
<!--<label><wicket:message key="typedAssignablePanel.selectedServices" /></label> -->
<!--<label wicket:id="servicesSelected" />-->
<!--</div>-->
<!--</div>-->
</div>

<div wicket:id="tablesContainer" style="margin: 5px;">
<div wicket:id="roleTable"></div>
<div wicket:id="resourceTable"></div>
<div wicket:id="orgTable"></div>
<div wicket:id="serviceTable"></div>
<div wicket:id="orgTreeViewPanel"></div>
</div>

<p align="center">
Expand Down
Expand Up @@ -15,6 +15,7 @@
*/
package com.evolveum.midpoint.gui.api.component;

import java.util.ArrayList;
import java.util.List;

import javax.xml.namespace.QName;
Expand All @@ -30,13 +31,18 @@
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.input.CheckPanel;
import com.evolveum.midpoint.web.component.util.VisibleBehaviour;
import com.evolveum.midpoint.web.page.admin.orgs.OrgTreeAssignablePanel;
import com.evolveum.midpoint.web.security.SecurityUtils;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxEventBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.CheckBox;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.EnumChoiceRenderer;
import org.apache.wicket.model.IModel;
Expand Down Expand Up @@ -71,6 +77,9 @@ public class TypedAssignablePanel<T extends ObjectType> extends BasePanel<T> imp
private static final String ID_ROLE_TABLE = "roleTable";
private static final String ID_RESOURCE_TABLE = "resourceTable";
private static final String ID_ORG_TABLE = "orgTable";
private static final String ID_ORG_TREE_VIEW = "orgTreeView";
private static final String ID_ORG_TREE_VIEW_CONTAINER = "orgTreeViewContainer";
private static final String ID_ORG_TREE_VIEW_PANEL = "orgTreeViewPanel";

private static final String ID_SELECTED_ROLES = "rolesSelected";
private static final String ID_SELECTED_RESOURCES = "resourcesSelected";
Expand All @@ -88,6 +97,7 @@ public class TypedAssignablePanel<T extends ObjectType> extends BasePanel<T> imp
private static final String OPERATION_LOAD_ASSIGNABLE_ROLES = DOT_CLASS + "loadAssignableRoles";

protected IModel<ObjectTypes> typeModel;
private IModel<Boolean> orgTreeViewModel;

public TypedAssignablePanel(String id, final Class<T> type) {
super(id);
Expand All @@ -104,6 +114,7 @@ protected ObjectTypes load() {
return ObjectTypes.getObjectType(type);
}
};
orgTreeViewModel = Model.of(false);
}

@Override
Expand All @@ -124,8 +135,30 @@ protected void onInitialize() {
PopupObjectListPanel<T> listServicePanel = createObjectListPanel(ID_SERVICE_TABLE, ID_SELECTED_SERVICES, ObjectTypes.SERVICE);
tablesContainer.add(listServicePanel);

WebMarkupContainer countContainer = createCountContainer();
add(countContainer);
OrgTreeAssignablePanel orgTreePanel = new OrgTreeAssignablePanel(
ID_ORG_TREE_VIEW_PANEL, true, getPageBase()) {
private static final long serialVersionUID = 1L;

@Override
protected void assignSelectedOrgPerformed(List<OrgType> selectedOrgs, AjaxRequestTarget target) {
TypedAssignablePanel.this.assignButtonClicked(target, (List<T>)selectedOrgs);
}
};
orgTreePanel.setOutputMarkupId(true);
orgTreePanel.add(new VisibleEnableBehaviour(){
private static final long serialVersionUID = 1L;

@Override
public boolean isVisible(){
return OrgType.COMPLEX_TYPE.equals(typeModel.getObject().getTypeQName()) && isOrgTreeViewSelected();
}
});
tablesContainer.add(orgTreePanel);

//todo now it's usually hiden by object list panel - bad layout; need to discuss: if count panel should be visible
//after org tree panel is added
// WebMarkupContainer countContainer = createCountContainer();
// add(countContainer);


AjaxButton addButton = new AjaxButton(ID_BUTTON_ASSIGN,
Expand All @@ -135,27 +168,36 @@ protected void onInitialize() {

@Override
public void onClick(AjaxRequestTarget target) {
List<T> selected = getSelectedData(ID_ROLE_TABLE);
selected.addAll(getSelectedData(ID_RESOURCE_TABLE));
selected.addAll(getSelectedData(ID_ORG_TABLE));
selected.addAll(getSelectedData(ID_SERVICE_TABLE));
TypedAssignablePanel.this.addPerformed(target, selected, getSelectedRelation());
TypedAssignablePanel.this.assignButtonClicked(target, new ArrayList<>());
}
};

addButton.add(new VisibleEnableBehaviour() {

private static final long serialVersionUID = 1L;

// @Override
// public boolean isVisible() {
// return multiselect;
// }
@Override
public boolean isVisible() {
return !isOrgTreeViewSelected();
}
});

add(addButton);
}

private void assignButtonClicked(AjaxRequestTarget target, List<T> selectedOrgs){
List<T> selected = getSelectedData(ID_ROLE_TABLE);
selected.addAll(getSelectedData(ID_RESOURCE_TABLE));
selected.addAll(getSelectedData(ID_SERVICE_TABLE));
if (isOrgTreeViewSelected()){
selected.addAll(selectedOrgs);
} else {
selected.addAll(getSelectedData(ID_ORG_TABLE));
}
addPerformed(target, selected, getSelectedRelation());
}


protected void initAssignmentParametersPanel(){
DropDownChoicePanel<ObjectTypes> typeSelect = new DropDownChoicePanel<>(
ID_TYPE, typeModel, Model.ofList(WebComponentUtil.createAssignableTypesList()), new EnumChoiceRenderer<>());
Expand All @@ -181,7 +223,7 @@ protected void onUpdate(AjaxRequestTarget target) {

@Override
public boolean isEnabled(){
return !ResourceType.COMPLEX_TYPE.equals(typeModel.getObject());
return !ResourceType.COMPLEX_TYPE.equals(typeModel.getObject().getTypeQName());
}

@Override
Expand All @@ -194,6 +236,35 @@ public boolean isVisible() {
relationSelector.setOutputMarkupPlaceholderTag(true);
add(relationSelector);

WebMarkupContainer orgTreeViewContainer = new WebMarkupContainer(ID_ORG_TREE_VIEW_CONTAINER);
orgTreeViewContainer.setOutputMarkupId(true);
orgTreeViewContainer.add(new VisibleEnableBehaviour(){
private static final long serialVersionUID = 1L;

@Override
public boolean isVisible(){
boolean res= OrgType.COMPLEX_TYPE.equals(typeModel.getObject().getTypeQName());
return res;
}
});
add(orgTreeViewContainer);

CheckBox orgTreeViewCheckbox = new CheckBox(ID_ORG_TREE_VIEW, orgTreeViewModel);
orgTreeViewCheckbox.add(new AjaxEventBehavior("change") {
@Override
protected void onEvent(AjaxRequestTarget ajaxRequestTarget) {
orgTreeViewModel.setObject(!orgTreeViewModel.getObject());
ajaxRequestTarget.add(TypedAssignablePanel.this);
}
});
orgTreeViewCheckbox.setOutputMarkupId(true);
orgTreeViewContainer.add(orgTreeViewCheckbox);

}

private boolean isOrgTreeViewSelected(){
CheckBox checkPanel = (CheckBox) TypedAssignablePanel.this.get(ID_ORG_TREE_VIEW_CONTAINER).get(ID_ORG_TREE_VIEW);
return checkPanel.getModel().getObject();
}

private List<T> getSelectedData(String id){
Expand Down Expand Up @@ -230,8 +301,8 @@ protected void onClick(AjaxRequestTarget target, T focus) {
}

private void refreshCounts(AjaxRequestTarget target) {
addOrReplace(createCountContainer());
target.add(get(ID_COUNT_CONTAINER));
// addOrReplace(createCountContainer());
// target.add(get(ID_COUNT_CONTAINER));
}

private PopupObjectListPanel<T> createObjectListPanel(String id, final String countId, final ObjectTypes type) {
Expand Down Expand Up @@ -283,6 +354,9 @@ protected ObjectQuery addFilterToContentQuery(ObjectQuery query) {

@Override
public boolean isVisible() {
if (typeModel.getObject().getTypeQName().equals(OrgType.COMPLEX_TYPE)){
return type.equals(typeModel.getObject()) && !isOrgTreeViewSelected();
}
return type.equals(typeModel.getObject());
}
});
Expand Down
Expand Up @@ -19,6 +19,7 @@
import java.util.*;

import com.evolveum.midpoint.model.api.ModelInteractionService;
import com.evolveum.midpoint.prism.*;
import com.evolveum.midpoint.prism.query.ObjectPaging;
import com.evolveum.midpoint.prism.query.OrderDirection;
import com.evolveum.midpoint.schema.RelationalValueSearchQuery;
Expand All @@ -34,9 +35,6 @@

import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.model.api.ModelExecuteOptions;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.PrismObjectDefinition;
import com.evolveum.midpoint.prism.delta.ChangeType;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.prism.path.ItemPath;
Expand Down Expand Up @@ -675,4 +673,29 @@ public static void dropPowerOfAttorney(ModelInteractionService modelInteractionS
result.computeStatusIfUnknown();
}
}

// deduplicate with Action.addIncludeOptionsForExport (ninja module)
public static void addIncludeOptionsForExportOrView(Collection<SelectorOptions<GetOperationOptions>> options,
Class<? extends ObjectType> type) {
// todo fix this brutal hack (related to checking whether to include particular options)
boolean all = type == null
|| Objectable.class.equals(type)
|| com.evolveum.prism.xml.ns._public.types_3.ObjectType.class.equals(type)
|| ObjectType.class.equals(type);

if (all || UserType.class.isAssignableFrom(type)) {
options.add(SelectorOptions.create(UserType.F_JPEG_PHOTO,
GetOperationOptions.createRetrieve(RetrieveOption.INCLUDE)));
}
if (all || LookupTableType.class.isAssignableFrom(type)) {
options.add(SelectorOptions.create(LookupTableType.F_ROW,
GetOperationOptions.createRetrieve(
new RelationalValueSearchQuery(
ObjectPaging.createPaging(PrismConstants.T_ID, OrderDirection.ASCENDING)))));
}
if (all || AccessCertificationCampaignType.class.isAssignableFrom(type)) {
options.add(SelectorOptions.create(AccessCertificationCampaignType.F_CASE,
GetOperationOptions.createRetrieve(RetrieveOption.INCLUDE)));
}
}
}
Expand Up @@ -16,18 +16,13 @@

package com.evolveum.midpoint.web.component;

import java.io.IOException;
import java.io.InputStream;

import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.AbstractAjaxBehavior;
import org.apache.wicket.request.IRequestCycle;
import org.apache.wicket.request.handler.resource.ResourceStreamRequestHandler;
import org.apache.wicket.request.resource.ContentDisposition;
import org.apache.wicket.util.resource.AbstractResourceStream;
import org.apache.wicket.util.resource.IResourceStream;
import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
import org.apache.wicket.util.time.Duration;

public abstract class AbstractAjaxDownloadBehavior extends AbstractAjaxBehavior {
Expand Down

0 comments on commit c4179e2

Please sign in to comment.