Skip to content

Commit

Permalink
projection panel - activation, password visibility according to resou…
Browse files Browse the repository at this point in the history
…rce capabilities, small cleanup
  • Loading branch information
katkav committed Oct 23, 2017
1 parent 51f4028 commit 64219b2
Show file tree
Hide file tree
Showing 4 changed files with 90 additions and 276 deletions.
Expand Up @@ -50,6 +50,8 @@
import com.evolveum.midpoint.schema.util.LocalizationUtil;
import com.evolveum.midpoint.util.*;
import com.evolveum.midpoint.web.component.prism.InputPanel;
import com.evolveum.midpoint.web.component.prism.ItemWrapper;
import com.evolveum.midpoint.web.component.prism.ObjectWrapper;
import com.evolveum.midpoint.web.util.ObjectTypeGuiDescriptor;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import org.apache.commons.collections4.CollectionUtils;
Expand Down Expand Up @@ -136,6 +138,7 @@
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.result.OperationResultStatus;
import com.evolveum.midpoint.schema.util.ObjectTypeUtil;
import com.evolveum.midpoint.schema.util.ResourceTypeUtil;
import com.evolveum.midpoint.schema.util.ShadowUtil;
import com.evolveum.midpoint.security.api.AuthorizationConstants;
import com.evolveum.midpoint.security.api.MidPointPrincipal;
Expand Down Expand Up @@ -940,6 +943,7 @@ public static String getDisplayNameOrName(PrismObject object) {
if (object == null) {
return null;
}

String displayName = getDisplayName(object);
return displayName != null ? displayName : getName(object);
}
Expand Down Expand Up @@ -2154,5 +2158,45 @@ public static <AR extends AbstractRoleType> IModel<String> createAbstractRoleCon
actionName, ((ObjectType)((SelectableBean)action.getRowModel().getObject()).getValue()).getName());
}
}


public static List<ItemPath> getShadowItemsToShow() {
return Arrays.asList(new ItemPath(ShadowType.F_ATTRIBUTES), SchemaConstants.PATH_ACTIVATION,
SchemaConstants.PATH_PASSWORD, new ItemPath(ShadowType.F_ASSOCIATION));
}

public static boolean checkShadowActivationAndPasswordVisibility(ItemWrapper itemWrapper, IModel<ObjectWrapper<ShadowType>> shadowModel) {

ObjectWrapper<ShadowType> shadowWrapper = shadowModel.getObject();
PrismObject<ShadowType> shadow = shadowWrapper.getObject();
ShadowType shadowType = shadow.asObjectable();

ResourceType resource = shadowType.getResource();
if (resource == null) {
//TODO: what to return if we don't have resource available?
return true;
}

if (SchemaConstants.PATH_ACTIVATION.equivalent(itemWrapper.getPath())) {
return ResourceTypeUtil.isActivationCapabilityEnabled(resource);
}

if (SchemaConstants.PATH_ACTIVATION_ADMINISTRATIVE_STATUS.equivalent(itemWrapper.getPath())) {
return ResourceTypeUtil.isActivationStatusCapabilityEnabled(resource);
}

if (SchemaConstants.PATH_ACTIVATION_LOCKOUT_STATUS.equivalent(itemWrapper.getPath())) {
return ResourceTypeUtil.isActivationLockoutStatusCapabilityEnabled(resource);
}

if (SchemaConstants.PATH_ACTIVATION_VALID_FROM.equivalent(itemWrapper.getPath()) || SchemaConstants.PATH_ACTIVATION_VALID_TO.equivalent(itemWrapper.getPath())) {
return ResourceTypeUtil.isActivationValidityCapabilityEnabled(resource);
}

if (SchemaConstants.PATH_PASSWORD.equivalent(itemWrapper.getPath())) {
return ResourceTypeUtil.isPasswordCapabilityEnabled(resource);
}

return true;

}
}
Expand Up @@ -22,9 +22,6 @@

import javax.xml.namespace.QName;

import com.evolveum.midpoint.common.refinery.RefinedResourceSchemaImpl;
import com.evolveum.midpoint.web.component.prism.*;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import org.apache.commons.lang.Validate;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.AjaxRequestTarget;
Expand All @@ -42,18 +39,21 @@

import com.evolveum.midpoint.common.refinery.RefinedObjectClassDefinition;
import com.evolveum.midpoint.common.refinery.RefinedResourceSchema;
import com.evolveum.midpoint.common.refinery.RefinedResourceSchemaImpl;
import com.evolveum.midpoint.gui.api.component.ObjectBrowserPanel;
import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.PrismObjectDefinition;
import com.evolveum.midpoint.prism.PrismPropertyDefinition;
import com.evolveum.midpoint.prism.PrismPropertyValue;
import com.evolveum.midpoint.prism.PrismReferenceDefinition;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.ResourceTypeUtil;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.logging.LoggingUtils;
import com.evolveum.midpoint.util.logging.Trace;
Expand All @@ -64,14 +64,32 @@
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.prism.CheckTableHeader;
import com.evolveum.midpoint.web.component.prism.ContainerStatus;
import com.evolveum.midpoint.web.component.prism.ContainerWrapper;
import com.evolveum.midpoint.web.component.prism.ItemWrapper;
import com.evolveum.midpoint.web.component.prism.ObjectWrapper;
import com.evolveum.midpoint.web.component.prism.PrismPanel;
import com.evolveum.midpoint.web.component.prism.PropertyWrapper;
import com.evolveum.midpoint.web.component.prism.SimpleErrorPanel;
import com.evolveum.midpoint.web.component.prism.ValueWrapper;
import com.evolveum.midpoint.web.component.util.ObjectWrapperUtil;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.model.ContainerWrapperListFromObjectWrapperModel;
import com.evolveum.midpoint.web.page.admin.PageAdminFocus;
import com.evolveum.midpoint.web.page.admin.resources.content.PageAccount;
import com.evolveum.midpoint.web.page.admin.users.dto.FocusSubwrapperDto;
import com.evolveum.midpoint.web.page.admin.users.dto.UserDtoStatus;
import com.evolveum.midpoint.web.resource.img.ImgResources;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ActivationStatusType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ActivationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.FocusType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.LayerType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.LockoutStatusType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowKindType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType;
import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.ActivationLockoutStatusCapabilityType;

/**
* @author semancik
Expand All @@ -86,8 +104,6 @@ public class FocusProjectionsTabPanel<F extends FocusType> extends AbstractObjec
private static final String ID_SHADOW_MENU = "shadowMenu";
private static final String ID_SHADOW_CHECK_ALL = "shadowCheckAll";

private static final String MODAL_ID_RESOURCE = "resourcePopup";

private static final String DOT_CLASS = FocusProjectionsTabPanel.class.getName() + ".";
private static final String OPERATION_ADD_ACCOUNT = DOT_CLASS + "addShadow";

Expand Down Expand Up @@ -121,7 +137,7 @@ private void initLayout(final PageBase page) {
protected void populateItem(final ListItem<FocusSubwrapperDto<ShadowType>> item) {
PackageResourceReference packageRef;
final FocusSubwrapperDto<ShadowType> dto = item.getModelObject();
final PropertyModel<ObjectWrapper<F>> objectWrapperModel = new PropertyModel<ObjectWrapper<F>>(
final PropertyModel<ObjectWrapper<ShadowType>> objectWrapperModel = new PropertyModel<ObjectWrapper<ShadowType>>(
item.getModel(), "object");

final Panel shadowPanel;
Expand All @@ -130,11 +146,9 @@ protected void populateItem(final ListItem<FocusSubwrapperDto<ShadowType>> item)
packageRef = new PackageResourceReference(ImgResources.class, ImgResources.HDD_PRISM);

shadowPanel = new PrismPanel<F>(ID_SHADOW,
new ContainerWrapperListFromObjectWrapperModel(objectWrapperModel,
Arrays.asList(new ItemPath(ShadowType.F_ATTRIBUTES),
SchemaConstants.PATH_ACTIVATION, SchemaConstants.PATH_PASSWORD
,new ItemPath(ShadowType.F_ASSOCIATION ))), packageRef,
getMainForm(), null, getPageBase());
new ContainerWrapperListFromObjectWrapperModel<>(objectWrapperModel,
WebComponentUtil.getShadowItemsToShow()), packageRef,
getMainForm(), itemWrapper -> WebComponentUtil.checkShadowActivationAndPasswordVisibility(itemWrapper, objectWrapperModel), getPageBase());
} else {
shadowPanel = new SimpleErrorPanel<ShadowType>(ID_SHADOW, item.getModel()) {
private static final long serialVersionUID = 1L;
Expand Down Expand Up @@ -166,7 +180,7 @@ public boolean isVisible() {

item.add(shadowPanel);

CheckTableHeader<F> shadowHeader = new CheckTableHeader<F>(ID_SHADOW_HEADER,
CheckTableHeader<ShadowType> shadowHeader = new CheckTableHeader<ShadowType>(ID_SHADOW_HEADER,
objectWrapperModel) {
private static final long serialVersionUID = 1L;

Expand Down Expand Up @@ -203,7 +217,7 @@ protected void onUpdate(AjaxRequestTarget target) {

shadows.add(projectionList);
}

private void onExpandCollapse(AjaxRequestTarget target, IModel<FocusSubwrapperDto<ShadowType>> dtoModel) {
FocusSubwrapperDto<ShadowType> shadowWrapperDto = dtoModel.getObject();
ObjectWrapper<ShadowType> shadowWrapper = shadowWrapperDto.getObject();
Expand Down Expand Up @@ -276,7 +290,7 @@ private void addSelectedAccountPerformed(AjaxRequestTarget target, List<Resource
private List<InlineMenuItem> createShadowMenu() {
List<InlineMenuItem> items = new ArrayList<InlineMenuItem>();

PrismObjectDefinition def = getObjectWrapper().getObject().getDefinition();
PrismObjectDefinition<F> def = getObjectWrapper().getObject().getDefinition();
PrismReferenceDefinition ref = def.findReferenceDefinition(UserType.F_LINK_REF);
InlineMenuItem item;
if (ref.canRead() && ref.canAdd()) {
Expand All @@ -293,10 +307,10 @@ public void onClick(AjaxRequestTarget target) {
pageBase.getMainPopupBodyId(), ResourceType.class, supportedTypes, true,
pageBase) {

private static final long serialVersionUID = 1L;
@Override
protected void addPerformed(AjaxRequestTarget target, QName type,
List<ResourceType> selected) {
// TODO Auto-generated method stub
FocusProjectionsTabPanel.this.addSelectedAccountPerformed(target,
selected);
}
Expand All @@ -309,9 +323,9 @@ protected void addPerformed(AjaxRequestTarget target, QName type,
items.add(item);
items.add(new InlineMenuItem());
}
PrismPropertyDefinition prop = def
PrismPropertyDefinition<ActivationStatusType> administrativeStatus = def
.findPropertyDefinition(SchemaConstants.PATH_ACTIVATION_ADMINISTRATIVE_STATUS);
if (prop.canRead() && prop.canModify()) {
if (administrativeStatus.canRead() && administrativeStatus.canModify()) {
item = new InlineMenuItem(createStringResource("pageAdminFocus.button.enable"),
new InlineMenuItemAction() {
private static final long serialVersionUID = 1L;
Expand Down Expand Up @@ -350,8 +364,8 @@ public void onClick(AjaxRequestTarget target) {
});
items.add(item);
}
prop = def.findPropertyDefinition(SchemaConstants.PATH_ACTIVATION_LOCKOUT_STATUS);
if (prop.canRead() && prop.canModify()) {
PrismPropertyDefinition<LockoutStatusType> locakoutStatus = def.findPropertyDefinition(SchemaConstants.PATH_ACTIVATION_LOCKOUT_STATUS);
if (locakoutStatus.canRead() && locakoutStatus.canModify()) {
item = new InlineMenuItem(createStringResource("pageAdminFocus.button.unlock"),
new InlineMenuItemAction() {
private static final long serialVersionUID = 1L;
Expand All @@ -364,8 +378,7 @@ public void onClick(AjaxRequestTarget target) {
});
items.add(item);
}
prop = def.findPropertyDefinition(SchemaConstants.PATH_ACTIVATION_ADMINISTRATIVE_STATUS);
if (prop.canRead() && prop.canModify()) {
if (administrativeStatus.canRead() && administrativeStatus.canModify()) {
items.add(new InlineMenuItem());
item = new InlineMenuItem(createStringResource("pageAdminFocus.button.delete"),
new InlineMenuItemAction() {
Expand Down

0 comments on commit 64219b2

Please sign in to comment.