Skip to content

Commit

Permalink
Fixed situation constraint evaluator. Fixed InformationPanel (to show…
Browse files Browse the repository at this point in the history
… localizable messages).
  • Loading branch information
mederly committed Sep 14, 2017
1 parent 013495f commit 8fc1987
Show file tree
Hide file tree
Showing 8 changed files with 235 additions and 52 deletions.
Expand Up @@ -17,6 +17,7 @@
package com.evolveum.midpoint.gui.api.component.result;

import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.prism.Visitable;
import com.evolveum.midpoint.prism.Visitor;
import com.evolveum.midpoint.schema.result.OperationResult;
Expand All @@ -34,10 +35,6 @@
import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskType;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang.Validate;
import org.apache.wicket.Application;
import org.apache.wicket.Localizer;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.StringResourceModel;

import java.io.PrintWriter;
import java.io.Serializable;
Expand Down Expand Up @@ -94,19 +91,7 @@ public static OpResult getOpResult(PageBase page, OperationResult result){
if (result.getCause() != null && result.getCause() instanceof CommonException){
LocalizableMessage localizableMessage = ((CommonException) result.getCause()).getUserFriendlyMessage();
if (localizableMessage != null) {
while (localizableMessage.getFallbackLocalizableMessage() != null) {
if (localizableMessage.getKey() != null) {
Localizer localizer = Application.get().getResourceSettings().getLocalizer();
if (localizer.getString(localizableMessage.getKey(), page) != null) {
break; // the key exists => we can use the current localizableMessage
}
}
localizableMessage = localizableMessage.getFallbackLocalizableMessage();
}
String key = localizableMessage.getKey() != null ? localizableMessage.getKey() : localizableMessage.getFallbackMessage();
StringResourceModel stringResourceModel = new StringResourceModel(key, page).setModel(new Model<String>()).setDefaultValue(localizableMessage.getFallbackMessage())
.setParameters(localizableMessage.getArgs());
opResult.message = stringResourceModel.getString();
opResult.message = WebComponentUtil.resolveLocalizableMessage(localizableMessage, page);
}
}

Expand Down
Expand Up @@ -37,6 +37,8 @@
import com.evolveum.midpoint.model.api.ModelExecuteOptions;
import com.evolveum.midpoint.schema.GetOperationOptions;
import com.evolveum.midpoint.schema.SelectorOptions;
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.util.ObjectTypeGuiDescriptor;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
Expand All @@ -47,11 +49,7 @@
import org.apache.commons.lang.math.NumberUtils;
import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.commons.validator.routines.checkdigit.VerhoeffCheckDigit;
import org.apache.wicket.Component;
import org.apache.wicket.MarkupContainer;
import org.apache.wicket.Page;
import org.apache.wicket.PageReference;
import org.apache.wicket.Session;
import org.apache.wicket.*;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
Expand All @@ -68,6 +66,7 @@
import org.apache.wicket.markup.html.form.*;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.StringResourceModel;
import org.apache.wicket.request.IRequestHandler;
import org.apache.wicket.request.mapper.parameter.PageParameters;
Expand Down Expand Up @@ -123,11 +122,6 @@
import com.evolveum.midpoint.security.api.AuthorizationConstants;
import com.evolveum.midpoint.security.api.MidPointPrincipal;
import com.evolveum.midpoint.task.api.TaskCategory;
import com.evolveum.midpoint.util.DOMUtil;
import com.evolveum.midpoint.util.DebugUtil;
import com.evolveum.midpoint.util.DisplayableValue;
import com.evolveum.midpoint.util.MiscUtil;
import com.evolveum.midpoint.util.QNameUtil;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.exception.SystemException;
import com.evolveum.midpoint.util.logging.LoggingUtils;
Expand Down Expand Up @@ -284,6 +278,34 @@ protected void onUpdate(AjaxRequestTarget target) {
});
}

public static String resolveLocalizableMessage(LocalizableMessageType localizableMessage, Component component) {
if (localizableMessage == null) {
return null;
}
return resolveLocalizableMessage(LocalizationUtil.parseLocalizableMessageType(localizableMessage), component);
}

public static String resolveLocalizableMessage(LocalizableMessage localizableMessage, Component component) {
if (localizableMessage == null) {
return null;
}
while (localizableMessage.getFallbackLocalizableMessage() != null) {
if (localizableMessage.getKey() != null) {
Localizer localizer = Application.get().getResourceSettings().getLocalizer();
if (localizer.getString(localizableMessage.getKey(), component) != null) {
break; // the key exists => we can use the current localizableMessage
}
}
localizableMessage = localizableMessage.getFallbackLocalizableMessage();
}
String key = localizableMessage.getKey() != null ? localizableMessage.getKey() : localizableMessage.getFallbackMessage();
StringResourceModel stringResourceModel = new StringResourceModel(key, component)
.setModel(new Model<String>())
.setDefaultValue(localizableMessage.getFallbackMessage())
.setParameters(localizableMessage.getArgs());
return stringResourceModel.getString();
}

public enum Channel {
// TODO: move this to schema component
LIVE_SYNC(SchemaConstants.CHANGE_CHANNEL_LIVE_SYNC_URI),
Expand Down
@@ -0,0 +1,58 @@
/*
* 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.
*/

package com.evolveum.midpoint.web.component.util;

import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.xml.ns._public.common.common_3.LocalizableMessageType;
import org.apache.wicket.Component;
import org.apache.wicket.model.IModel;

import java.io.Serializable;

/**
* TODO is this right approach?
* @author mederly
*/
public class LocalizableMessageModel implements Serializable, IModel<String> {

private final IModel<LocalizableMessageType> model;
private final Component component;

public LocalizableMessageModel(IModel<LocalizableMessageType> model, Component component) {
this.model = model;
this.component = component;
}

@Override
public String getObject() {
LocalizableMessageType message = model.getObject();
if (message != null) {
return WebComponentUtil.resolveLocalizableMessage(message, component);
} else {
return null;
}
}

@Override
public void setObject(String object) {
// silently ignored
}

@Override
public void detach() {
}
}
Expand Up @@ -17,6 +17,8 @@
package com.evolveum.midpoint.web.page.admin.workflow;

import com.evolveum.midpoint.gui.api.component.BasePanel;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.web.component.util.LocalizableMessageModel;
import com.evolveum.midpoint.web.component.util.VisibleBehaviour;
import com.evolveum.midpoint.xml.ns._public.common.common_3.InformationPartType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.InformationType;
Expand All @@ -41,7 +43,7 @@ public InformationPanel(String id, IModel<InformationType> model) {
}

private void initLayout() {
Label titleLabel = new Label(ID_TITLE, new PropertyModel<>(getModel(), InformationType.F_TITLE.getLocalPart()));
Label titleLabel = new Label(ID_TITLE, new LocalizableMessageModel(new PropertyModel<>(getModel(), InformationType.F_TITLE.getLocalPart()), this));
titleLabel.add(new VisibleBehaviour(() -> getModelObject().getTitle() != null));
add(titleLabel);

Expand All @@ -50,7 +52,7 @@ private void initLayout() {
@Override
protected void populateItem(ListItem<InformationPartType> item) {
InformationPartType part = item.getModelObject();
Label label = new Label(ID_PART, part.getText());
Label label = new Label(ID_PART, WebComponentUtil.resolveLocalizableMessage(part.getText(), InformationPanel.this));
if (Boolean.TRUE.equals(part.isHasMarkup())) {
label.setEscapeModelStrings(false);
}
Expand Down
Expand Up @@ -21,6 +21,7 @@
import com.evolveum.midpoint.util.LocalizableMessageBuilder;
import com.evolveum.midpoint.xml.ns._public.common.common_3.LocalizableMessageArgumentType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.LocalizableMessageType;
import org.jetbrains.annotations.NotNull;

import java.text.MessageFormat;
import java.util.ArrayList;
Expand Down Expand Up @@ -78,7 +79,11 @@ public static LocalizableMessageType createForKey(String key) {
return new LocalizableMessageType().key(key);
}

public static LocalizableMessage parseLocalizableMessageType(LocalizableMessageType message, LocalizableMessage defaultMessage) {
public static LocalizableMessage parseLocalizableMessageType(@NotNull LocalizableMessageType message) {
return parseLocalizableMessageType(message, null);
}

public static LocalizableMessage parseLocalizableMessageType(@NotNull LocalizableMessageType message, LocalizableMessage defaultMessage) {
LocalizableMessage fallbackLocalizableMessage;
if (message.getFallbackLocalizableMessage() != null) {
fallbackLocalizableMessage = parseLocalizableMessageType(message.getFallbackLocalizableMessage(), defaultMessage);
Expand Down
Expand Up @@ -431,4 +431,5 @@ DefaultPolicyConstraint.and=All included constraints triggered
DefaultPolicyConstraint.or=At least one of included constraints triggered
DefaultPolicyConstraint.not=Included constraints have not triggered
DefaultPolicyConstraint.transition=Transition policy constraint matched
DefaultPolicyConstraint.situation=Situation policy constraint matched
PolicyViolationException.message.aggregate={0} policy violations occurred
Expand Up @@ -355,4 +355,87 @@
<type>RoleType</type>
</focusSelector>
</globalPolicyRule>
<globalPolicyRule>
<name>test-primary</name>
<policyConstraints>
<objectState>
<filter>
<q:equal>
<q:path>name</q:path>
<q:value>correct</q:value>
</q:equal>
</filter>
</objectState>
<objectState>
<name>temp.always-true</name>
<expression>
<value>true</value>
</expression>
</objectState>
</policyConstraints>
<policySituation>http://test/complete</policySituation>
<policyActions>
<!-- nothing: just to mark the situation -->
</policyActions>
<focusSelector>
<type>RoleType</type>
</focusSelector>
</globalPolicyRule>
<globalPolicyRule>
<name>test-secondary</name>
<policyConstraints>
<situation>
<situation>http://test/complete</situation>
</situation>
</policyConstraints>
<policyActions>
<!-- nothing: just to test -->
</policyActions>
<focusSelector>
<type>RoleType</type>
</focusSelector>
</globalPolicyRule>
<globalPolicyRule>
<name>test2-primary</name>
<policyConstraints>
<objectState>
<filter>
<q:equal>
<q:path>name</q:path>
<q:value>correct</q:value>
</q:equal>
</filter>
</objectState>
<objectState>
<name>temp.always-true.2</name>
<presentation>
<hidden>true</hidden> <!-- to pass only state filter message out -->
</presentation>
<expression>
<value>true</value>
</expression>
</objectState>
</policyConstraints>
<policySituation>http://test/complete2</policySituation>
<policyActions>
<!-- nothing: just to mark the situation -->
</policyActions>
<focusSelector>
<type>RoleType</type>
</focusSelector>
</globalPolicyRule>
<globalPolicyRule>
<name>test2-secondary</name>
<policyConstraints>
<situation>
<situation>http://test/complete2</situation>
</situation>
</policyConstraints>
<policyActions>
<!-- nothing: just to test -->
</policyActions>
<focusSelector>
<type>RoleType</type>
</focusSelector>
</globalPolicyRule>
</systemConfiguration>

0 comments on commit 8fc1987

Please sign in to comment.