Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
mederly committed Aug 23, 2017
2 parents 2daf222 + 73d08da commit b2fee07
Show file tree
Hide file tree
Showing 207 changed files with 3,405 additions and 3,041 deletions.
Expand Up @@ -49,7 +49,7 @@ private String createImageModel() {
return WebComponentUtil.createDefaultIcon((ObjectType) getModelObject());
}

return WebComponentUtil.createDefaultColoredIcon(getModelObject().asPrismContainerValue().getContainer().getComplexTypeDefinition().getTypeName());
return WebComponentUtil.createDefaultColoredIcon(getModelObject().asPrismContainerValue().getComplexTypeDefinition().getTypeName());

}

Expand All @@ -61,7 +61,7 @@ private IModel<String> createHeaderModel() {
if (ObjectType.class.isAssignableFrom(getModelObject().getClass())) {
return Model.of(WebComponentUtil.getEffectiveName((ObjectType) getModelObject(), AbstractRoleType.F_DISPLAY_NAME));
}
PrismProperty<String> name = getModelObject().asPrismContainerValue().getContainer().findProperty(ObjectType.F_NAME);
PrismProperty<String> name = getModelObject().asPrismContainerValue().findProperty(ObjectType.F_NAME);
if (name == null || name.isEmpty()) {
return Model.of("");
}
Expand Down
Expand Up @@ -1549,9 +1549,12 @@ private void createSelfServiceMenu(SideBarMenuItem menu) {
item = new MainMenuItem("fa fa-shield", createStringResource("PageAdmin.menu.credentials"),
PageSelfCredentials.class);
menu.getItems().add(item);
item = new MainMenuItem("fa fa-pencil-square-o", createStringResource("PageAdmin.menu.request"),
item = new MainMenuItem("fa fa-pencil-square-o", createStringResource("PageAdmin.menu.request"),
PageAssignmentShoppingKart.class);
menu.getItems().add(item);
item = new MainMenuItem("fa fa-eur", createStringResource("PageAdmin.menu.consent"),
PageSelfConsents.class);
menu.getItems().add(item);
}

private void createAdditionalMenu(SideBarMenuItem menu) {
Expand Down
Expand Up @@ -141,7 +141,7 @@ protected void addPerformed(AjaxRequestTarget target, List selected, QName relat
panel.setOutputMarkupId(true);
getPageBase().showMainPopup(panel, target);
}
private <T extends ObjectType> void addSelectedAssignmentsPerformed(AjaxRequestTarget target, List<T> assignmentsList, QName relation){
protected <T extends ObjectType> void addSelectedAssignmentsPerformed(AjaxRequestTarget target, List<T> assignmentsList, QName relation){
if (assignmentsList == null || assignmentsList.isEmpty()){
warn(getParentPage().getString("AssignmentTablePanel.message.noAssignmentSelected"));
target.add(getPageBase().getFeedbackPanel());
Expand Down
Expand Up @@ -75,9 +75,13 @@ public String getObject() {
}

public static IModel<String> createActivationTitleModelExperimental(IModel<AssignmentDto> model, BasePanel basePanel) {
return createActivationTitleModelExperimental(model.getObject(), basePanel);
}

public static IModel<String> createActivationTitleModelExperimental(AssignmentDto model, BasePanel basePanel) {

AssignmentDto assignmentDto = model.getObject();
ActivationType activation = assignmentDto.getAssignment().getActivation();
// AssignmentDto assignmentDto = model.getObject();
ActivationType activation = model.getAssignment().getActivation();
if (activation == null) {
return basePanel.createStringResource("ActivationType.undefined");
}
Expand Down
Expand Up @@ -19,6 +19,7 @@
import com.evolveum.midpoint.web.component.data.column.CheckBoxColumn;
import com.evolveum.midpoint.web.session.UserProfileStorage.TableId;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleType;

public class GdprAssignmentPanel extends AbstractRoleAssignmentPanel{
Expand Down Expand Up @@ -65,7 +66,6 @@ public Boolean getObject() {
}
};
}


});

Expand All @@ -77,4 +77,12 @@ protected boolean isRelationVisible() {
return false;
}

@Override
protected <T extends ObjectType> void addSelectedAssignmentsPerformed(AjaxRequestTarget target, List<T> assignmentsList,
QName relation) {
super.addSelectedAssignmentsPerformed(target, assignmentsList, SchemaConstants.ORG_CONSENT);
}



}
@@ -0,0 +1,51 @@
<!--
~ Copyright (c) 2010-2017 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.
-->
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:wicket="http://wicket.apache.org">
<body>
<wicket:panel>

<!--
.small-box .status {
-webkit-transition: all .3s linear;
-o-transition: all .3s linear;
transition: all .3s linear;
position: absolute;
top: -10px;
left: 10px;
z-index: 0;
font-size: 90px;
color: rgba(0, 0, 0, 0.15);
}
-->

<div class="col-md-12">
<div class="info-box">
<span><i wicket:id="consentIcon"></i></span>

<div class="info-box-content">
<span wicket:id="displayName"/>
<span class="info-box-text" wicket:id="validity"/>
</div>
<!-- /.info-box-content -->
<a class="btn btn-danger" wicket:id="revoke"></a>
<a class="btn btn-success" wicket:id="agree"></a>
</div>
<!-- /.info-box -->
</div>
</wicket:panel>
</body>
</html>
@@ -0,0 +1,150 @@
package com.evolveum.midpoint.web.component.assignment;

import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;

import com.evolveum.midpoint.gui.api.GuiStyleConstants;
import com.evolveum.midpoint.gui.api.component.BasePanel;
import com.evolveum.midpoint.gui.api.component.DisplayNamePanel;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.web.component.AjaxButton;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.page.self.PageSelfConsents;
import com.evolveum.midpoint.web.page.self.PageSelfDashboard;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AbstractRoleType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType;

public class SelfConsentPanel extends BasePanel<AssignmentDto>{

private static final long serialVersionUID = 1L;

private static final String ID_DISPLAY_NAME = "displayName";
private static final String ID_CONSENT_ICON = "consentIcon";
private static final String ID_VALIDITY = "validity";

private static final String ID_REVOKE = "revoke";
private static final String ID_AGREE = "agree";

private static final String DOT_CLASS = SelfConsentPanel.class.getSimpleName() + ".";
private static final String OPERATION_LOAD_TARGET = DOT_CLASS + "loadTargetRef";
// private PageBase parentPage;

public SelfConsentPanel(String id, IModel<AssignmentDto> model, PageBase parentPage) {
super(id, model);

Task task = parentPage.createSimpleTask(OPERATION_LOAD_TARGET);
OperationResult result = task.getResult();
PrismObject<AbstractRoleType> abstractRole = WebModelServiceUtils
.loadObject(getModelObject().getAssignment().getTargetRef(), parentPage, task, result);

if (abstractRole == null) {
getSession().error("Failed to load target ref");
throw new RestartResponseException(PageSelfDashboard.class);
}

initLayout(abstractRole.asObjectable());
}

private void initLayout(final AbstractRoleType abstractRole) {

DisplayNamePanel<? extends AbstractRoleType> displayName = new DisplayNamePanel<>(ID_DISPLAY_NAME, Model.of(abstractRole));
displayName.setOutputMarkupId(true);
add(displayName);

WebMarkupContainer iconCssClass = new WebMarkupContainer(ID_CONSENT_ICON);
iconCssClass.add(AttributeAppender.append("class", getIconCssClass(getModelObject())));
iconCssClass.setOutputMarkupId(true);
add(iconCssClass);

Label validityLabel = new Label(ID_VALIDITY, AssignmentsUtil.createActivationTitleModelExperimental(getModel(), displayName));
validityLabel.setOutputMarkupId(true);
add(validityLabel);

AjaxButton revoke = new AjaxButton(ID_REVOKE, createStringResource("SelfConsentPanel.button.revoke")) {

private static final long serialVersionUID = 1L;

@Override
public void onClick(AjaxRequestTarget target) {
SelfConsentPanel.this.getModelObject().getAssignment().setLifecycleState(SchemaConstants.LIFECYCLE_FAILED);
target.add(SelfConsentPanel.this);
}
};
add(revoke);
revoke.add(new VisibleEnableBehaviour() {

private static final long serialVersionUID = 1L;

@Override
public boolean isVisible() {
return isActiveConsent();
}
});

AjaxButton activate = new AjaxButton(ID_AGREE, createStringResource("SelfConsentPanel.button.agree")) {

private static final long serialVersionUID = 1L;

@Override
public void onClick(AjaxRequestTarget target) {
SelfConsentPanel.this.getModelObject().getAssignment().setLifecycleState(SchemaConstants.LIFECYCLE_ACTIVE);
target.add(SelfConsentPanel.this);
}
};
add(activate);
activate.add(new VisibleEnableBehaviour() {

private static final long serialVersionUID = 1L;

@Override
public boolean isVisible() {
return !isActiveConsent();
}
});
}

//TODO move to the WebComponentUtil ???
private String getIconCssClass(AssignmentDto assignment) {
AssignmentType assignmentType = assignment.getAssignment();
String currentLifecycle = assignmentType.getLifecycleState();
if (StringUtils.isBlank(currentLifecycle)) {
return GuiStyleConstants.CLASS_APPROVAL_OUTCOME_ICON_FUTURE_COLORED;
}

if (SchemaConstants.LIFECYCLE_DRAFT.equals(currentLifecycle) || SchemaConstants.LIFECYCLE_PROPOSED.equals(currentLifecycle)) {
return GuiStyleConstants.CLASS_APPROVAL_OUTCOME_ICON_IN_PROGRESS_COLORED;
}

if (SchemaConstants.LIFECYCLE_ACTIVE.equals(currentLifecycle)) {
return GuiStyleConstants.CLASS_APPROVAL_OUTCOME_ICON_APPROVED_COLORED;
}

if (SchemaConstants.LIFECYCLE_FAILED.equals(currentLifecycle)) {
return GuiStyleConstants.CLASS_APPROVAL_OUTCOME_ICON_REJECTED_COLORED;
}

return GuiStyleConstants.CLASS_APPROVAL_OUTCOME_ICON_FUTURE_COLORED;
}

private boolean isActiveConsent(){
String lifecycle = SelfConsentPanel.this.getModelObject().getAssignment().getLifecycleState();
if (StringUtils.isBlank(lifecycle)) {
return false;
}

return lifecycle.equals(SchemaConstants.LIFECYCLE_ACTIVE);
}

}
Expand Up @@ -405,7 +405,7 @@ private int countAssignments() {
PrismObject<F> focus = getObjectModel().getObject().getObject();
List<AssignmentType> assignments = focus.asObjectable().getAssignment();
for (AssignmentType assignment : assignments) {
if (!isPolicyRuleAssignment(assignment) && isAssignmentRelevant(assignment)) {
if (!isPolicyRuleAssignment(assignment) && !isConsentAssignment(assignment) && isAssignmentRelevant(assignment)) {
rv++;
}
}
Expand All @@ -419,7 +419,7 @@ private List<AssignmentDto> loadAssignments() {
PrismObject<F> focus = focusWrapper.getObject();
List<AssignmentType> assignments = focus.asObjectable().getAssignment();
for (AssignmentType assignment : assignments) {
if (!isPolicyRuleAssignment(assignment) && isAssignmentRelevant(assignment)) {
if (!isPolicyRuleAssignment(assignment) && !isConsentAssignment(assignment) && isAssignmentRelevant(assignment)) {
list.add(new AssignmentDto(assignment, StringUtils.isEmpty(focusWrapper.getOid()) ? UserDtoStatus.ADD : UserDtoStatus.MODIFY));
}
}
Expand Down Expand Up @@ -471,6 +471,13 @@ private boolean isPolicyRuleAssignment(AssignmentType assignment) {
&& assignment.asPrismContainerValue().findContainer(AssignmentType.F_POLICY_RULE) != null;
}

private boolean isConsentAssignment(AssignmentType assignment) {
if (assignment.getTargetRef() == null) {
return false;
}

return QNameUtil.match(assignment.getTargetRef().getRelation(), SchemaConstants.ORG_CONSENT);
}


@Override
Expand Down Expand Up @@ -530,9 +537,7 @@ protected void handleAssignmentForAdd(PrismObject<F> focus, QName containerName,
protected void prepareObjectDeltaForModify(ObjectDelta<F> focusDelta) throws SchemaException {
super.prepareObjectDeltaForModify(focusDelta);
// handle accounts
SchemaRegistry registry = getPrismContext().getSchemaRegistry();
PrismObjectDefinition<F> objectDefinition = registry
.findObjectDefinitionByCompileTimeClass(getCompileTimeClass());
PrismObjectDefinition<F> objectDefinition = getObjectDefinition();
PrismReferenceDefinition refDef = objectDefinition.findReferenceDefinition(FocusType.F_LINK_REF);
ReferenceDelta refDelta = prepareUserAccountsDeltaForModify(refDef);
if (!refDelta.isEmpty()) {
Expand All @@ -550,12 +555,18 @@ protected void prepareObjectDeltaForModify(ObjectDelta<F> focusDelta) throws Sch
// only slow down the operation - especially if we have many assignments
if (isAssignmentsLoaded()) {
// handle assignments
PrismContainerDefinition def = objectDefinition.findContainerDefinition(UserType.F_ASSIGNMENT);
PrismContainerDefinition<AssignmentType> def = objectDefinition.findContainerDefinition(UserType.F_ASSIGNMENT);
// handleAssignmentDeltas(focusDelta, getFocusAssignments(), def);
handleAssignmentExperimentalDeltas(focusDelta, getFocusAssignments(), def, false);
}
}

protected PrismObjectDefinition<F> getObjectDefinition() {
SchemaRegistry registry = getPrismContext().getSchemaRegistry();
return registry
.findObjectDefinitionByCompileTimeClass(getCompileTimeClass());
}


protected ContainerDelta handleAssignmentDeltas(ObjectDelta<F> focusDelta,
List<AssignmentEditorDto> assignments, PrismContainerDefinition def) throws SchemaException {
Expand Down
Expand Up @@ -26,6 +26,7 @@
import com.evolveum.midpoint.model.api.ModelAuthorizationAction;
import com.evolveum.midpoint.prism.PrismContainerDefinition;
import com.evolveum.midpoint.prism.PrismReferenceValue;
import com.evolveum.midpoint.prism.delta.ContainerDelta;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.prism.query.ObjectFilter;
import com.evolveum.midpoint.prism.query.ObjectQuery;
Expand All @@ -34,6 +35,7 @@
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.QNameUtil;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.logging.LoggingUtils;
import com.evolveum.midpoint.web.component.assignment.AssignmentDto;
import com.evolveum.midpoint.web.component.assignment.AssignmentEditorDto;
Expand Down Expand Up @@ -365,6 +367,17 @@ private List<AssignmentsPreviewDto> getUserPrivilegesList(){
}
return list;
}

@Override
protected void prepareObjectDeltaForModify(ObjectDelta<UserType> focusDelta) throws SchemaException {

super.prepareObjectDeltaForModify(focusDelta);

PrismContainerDefinition<AssignmentType> def = getObjectDefinition().findContainerDefinition(UserType.F_ASSIGNMENT);
if (consentsModel.isLoaded()) {
handleAssignmentExperimentalDeltas(focusDelta, consentsModel.getObject(), def, false);
}
}

@Override
protected boolean processDeputyAssignments(boolean previewOnly) {
Expand Down

0 comments on commit b2fee07

Please sign in to comment.