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
KaterynaHonchar committed Dec 5, 2017
2 parents 7e5e136 + 489dc9b commit 8ea8548
Show file tree
Hide file tree
Showing 52 changed files with 1,204 additions and 724 deletions.
Expand Up @@ -90,12 +90,10 @@
import org.joda.time.format.DateTimeFormat;

import com.evolveum.midpoint.gui.api.GuiStyleConstants;
import com.evolveum.midpoint.gui.api.SubscriptionType;
import com.evolveum.midpoint.gui.api.component.MainObjectListPanel;
import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.model.NonEmptyModel;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.model.api.ModelExecuteOptions;
import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.Objectable;
import com.evolveum.midpoint.prism.PrismContainer;
Expand Down Expand Up @@ -128,9 +126,7 @@
import com.evolveum.midpoint.prism.query.builder.QueryBuilder;
import com.evolveum.midpoint.prism.xml.XmlTypeConverter;
import com.evolveum.midpoint.schema.DeltaConvertor;
import com.evolveum.midpoint.schema.GetOperationOptions;
import com.evolveum.midpoint.schema.SchemaConstantsGenerated;
import com.evolveum.midpoint.schema.SelectorOptions;
import com.evolveum.midpoint.schema.constants.ObjectTypes;
import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.schema.result.OperationResult;
Expand All @@ -152,7 +148,6 @@
import com.evolveum.midpoint.web.component.data.column.ColumnMenuAction;
import com.evolveum.midpoint.web.component.input.DisplayableValueChoiceRenderer;
import com.evolveum.midpoint.web.component.input.DropDownChoicePanel;
import com.evolveum.midpoint.web.component.prism.InputPanel;
import com.evolveum.midpoint.web.component.util.Selectable;
import com.evolveum.midpoint.web.component.util.SelectableBean;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
Expand All @@ -178,7 +173,6 @@
import com.evolveum.midpoint.web.session.UserProfileStorage.TableId;
import com.evolveum.midpoint.web.util.DateValidator;
import com.evolveum.midpoint.web.util.InfoTooltipBehavior;
import com.evolveum.midpoint.web.util.ObjectTypeGuiDescriptor;
import com.evolveum.midpoint.web.util.OnePageParameterEncoder;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AbstractRoleType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationCampaignType;
Expand Down Expand Up @@ -346,10 +340,22 @@ public static String resolveLocalizableMessage(LocalizableMessageType localizabl
if (localizableMessage == null) {
return null;
}
return resolveLocalizableMessage(LocalizationUtil.parseLocalizableMessageType(localizableMessage), component);
return resolveLocalizableMessage(LocalizationUtil.toLocalizableMessage(localizableMessage), component);
}

public static String resolveLocalizableMessage(LocalizableMessage localizableMessage, Component component) {
if (localizableMessage == null) {
return null;
} else if (localizableMessage instanceof SingleLocalizableMessage) {
return resolveLocalizableMessage((SingleLocalizableMessage) localizableMessage, component);
} else if (localizableMessage instanceof LocalizableMessageList) {
return resolveLocalizableMessage((LocalizableMessageList) localizableMessage, component);
} else {
throw new AssertionError("Unsupported localizable message type: " + localizableMessage);
}
}

private static String resolveLocalizableMessage(SingleLocalizableMessage localizableMessage, Component component) {
if (localizableMessage == null) {
return null;
}
Expand All @@ -360,7 +366,11 @@ public static String resolveLocalizableMessage(LocalizableMessage localizableMes
break; // the key exists => we can use the current localizableMessage
}
}
localizableMessage = localizableMessage.getFallbackLocalizableMessage();
if (localizableMessage.getFallbackLocalizableMessage() instanceof SingleLocalizableMessage) {
localizableMessage = (SingleLocalizableMessage) localizableMessage.getFallbackLocalizableMessage();
} else {
return resolveLocalizableMessage(localizableMessage.getFallbackLocalizableMessage(), component);
}
}
String key = localizableMessage.getKey() != null ? localizableMessage.getKey() : localizableMessage.getFallbackMessage();
StringResourceModel stringResourceModel = new StringResourceModel(key, component)
Expand All @@ -372,8 +382,22 @@ public static String resolveLocalizableMessage(LocalizableMessage localizableMes
return rv;
}

// todo deduplicate with similar method in LocalizationServiceImpl
private static String resolveLocalizableMessage(LocalizableMessageList msgList, Component component) {
String separator = resolveIfPresent(msgList.getSeparator(), component);
String prefix = resolveIfPresent(msgList.getPrefix(), component);
String suffix = resolveIfPresent(msgList.getPostfix(), component);
return msgList.getMessages().stream()
.map(m -> resolveLocalizableMessage(m, component))
.collect(Collectors.joining(separator, prefix, suffix));
}

private static String resolveIfPresent(LocalizableMessage msg, Component component) {
return msg != null ? resolveLocalizableMessage(msg, component) : "";
}

private static Object[] resolveArguments(Object[] args, Component component) {
if (args == null){
if (args == null) {
return null;
}
Object[] rv = new Object[args.length];
Expand Down
Expand Up @@ -30,4 +30,8 @@ public interface LocalizationService {
String translate(String key, Object[] params, Locale locale, String defaultMessage);

String translate(LocalizableMessage msg, Locale locale);

default String translate(LocalizableMessage msg) {
return translate(msg, Locale.getDefault());
}
}
Expand Up @@ -18,6 +18,8 @@

import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.util.LocalizableMessage;
import com.evolveum.midpoint.util.LocalizableMessageList;
import com.evolveum.midpoint.util.SingleLocalizableMessage;
import com.evolveum.midpoint.util.exception.SystemException;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
Expand All @@ -34,6 +36,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.stream.Collectors;

/**
* Created by Viliam Repan (lazyman).
Expand Down Expand Up @@ -78,7 +81,7 @@ public String translate(String key, Object[] params, Locale locale, String defau
String value = source.getMessage(key, translated, locale);
if (StringUtils.isNotEmpty(value)) {
if (LOG.isTraceEnabled()) {
LOG.trace("Resolved key {} to value {} using message source {}", new Object[]{key, value, source});
LOG.trace("Resolved key {} to value {} using message source {}", key, value, source);
}

return value;
Expand All @@ -93,19 +96,42 @@ public String translate(String key, Object[] params, Locale locale, String defau

@Override
public String translate(LocalizableMessage msg, Locale locale) {
if (msg == null) {
return null;
} else if (msg instanceof SingleLocalizableMessage) {
return translate((SingleLocalizableMessage) msg, locale);
} else if (msg instanceof LocalizableMessageList) {
return translate((LocalizableMessageList) msg, locale);
} else {
throw new AssertionError("Unsupported localizable message type: " + msg);
}
}

// todo deduplicate with similar method in WebComponentUtil
public String translate(LocalizableMessageList msgList, Locale locale) {
String separator = translateIfPresent(msgList.getSeparator(), locale);
String prefix = translateIfPresent(msgList.getPrefix(), locale);
String suffix = translateIfPresent(msgList.getPostfix(), locale);
return msgList.getMessages().stream()
.map(m -> translate(m, locale))
.collect(Collectors.joining(separator, prefix, suffix));
}

private String translateIfPresent(LocalizableMessage msg, Locale locale) {
return msg != null ? translate(msg, locale) : "";
}

public String translate(SingleLocalizableMessage msg, Locale locale) {
String translated = translate(msg.getKey(), msg.getArgs(), locale);
if (StringUtils.isNotEmpty(translated)) {
return translated;
}

if (msg.getFallbackLocalizableMessage() != null) {
translated = translate(msg.getFallbackLocalizableMessage(), locale);

if (StringUtils.isNotEmpty(translated)) {
return translated;
}
}

return msg.getFallbackMessage();
}

Expand Down
Expand Up @@ -40,6 +40,8 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;

import static java.util.Collections.emptySet;

/**
* Used to represent combined definition of structural and auxiliary object classes.
*
Expand Down Expand Up @@ -709,4 +711,14 @@ public boolean isReferenceMarker() {
return structuralObjectClassDefinition.isReferenceMarker();
}

@NotNull
@Override
public Collection<TypeDefinition> getStaticSubTypes() {
return emptySet();
}

@Override
public Integer getInstantiationOrder() {
return null;
}
}
Expand Up @@ -37,6 +37,8 @@
import com.evolveum.prism.xml.ns._public.types_3.ItemPathType;
import org.jetbrains.annotations.NotNull;

import static java.util.Collections.emptySet;

/**
* @author semancik
* @author mederly
Expand Down Expand Up @@ -643,4 +645,14 @@ public boolean isShared() {
}
}

@NotNull
@Override
public Collection<TypeDefinition> getStaticSubTypes() {
return emptySet(); // not supported for now (this type itself is not statically defined)
}

@Override
public Integer getInstantiationOrder() {
return null;
}
}
Expand Up @@ -52,6 +52,8 @@
import java.util.function.Supplier;
import java.util.stream.Collectors;

import static java.util.Collections.emptySet;

/**
* @author semancik
*/
Expand Down Expand Up @@ -634,6 +636,12 @@ public PrismContext getPrismContext() {
return originalObjectClassDefinition.getPrismContext();
}

@NotNull
@Override
public Collection<TypeDefinition> getStaticSubTypes() {
return emptySet(); // not supported for now (this type itself is not statically defined)
}

@Nullable
@Override
public Class<?> getCompileTimeClass() {
Expand Down Expand Up @@ -1305,5 +1313,10 @@ public void trimTo(@NotNull Collection<ItemPath> paths) {
public boolean isShared() {
return shared;
}


@Override
public Integer getInstantiationOrder() {
return null;
}

}
Expand Up @@ -147,4 +147,8 @@ public interface ComplexTypeDefinition extends TypeDefinition, LocalDefinitionSt
* USE WITH CARE. Be sure no shared definitions would be affected by this operation!
*/
void trimTo(@NotNull Collection<ItemPath> paths);

default boolean containsItemDefinition(QName itemName) {
return findItemDefinition(itemName) != null;
}
}
Expand Up @@ -197,6 +197,7 @@ public PrismPropertyDefinition createPropertyDefinition(String localName, String
//region Finding definitions

// TODO deduplicate w.r.t. findNamedItemDefinition
// but beware, consider only local definitions!
@Override
public <T extends ItemDefinition> T findItemDefinition(@NotNull QName name, @NotNull Class<T> clazz, boolean caseInsensitive) {
for (ItemDefinition def : getDefinitions()) {
Expand Down Expand Up @@ -442,6 +443,12 @@ public String debugDump(int indent, IdentityHashMap<Definition, Object> seen) {
if (xsdAnyMarker) {
sb.append(",Ma");
}
if (instantiationOrder != null) {
sb.append(",o:").append(instantiationOrder);
}
if (!staticSubTypes.isEmpty()) {
sb.append(",st:").append(staticSubTypes.size());
}
extendDumpHeader(sb);
if (seen.containsKey(this)) {
sb.append(" (already shown)");
Expand Down
Expand Up @@ -163,6 +163,7 @@ default SchemaRegistry getSchemaRegistry() {
// TODO fix this!
Class getTypeClassIfKnown();

// todo suspicious, please investigate and document
Class getTypeClass();

@NotNull
Expand Down
Expand Up @@ -57,6 +57,7 @@ public class PrismConstants {

public static final QName A_PROPERTY_CONTAINER = new QName(NS_ANNOTATION, "container");
public static final QName A_OBJECT = new QName(NS_ANNOTATION, "object");
public static final QName A_INSTANTIATION_ORDER = new QName(NS_ANNOTATION, "instantiationOrder");

public static final QName A_DEFAULT_NAMESPACE = new QName(NS_ANNOTATION, "defaultNamespace");
public static final QName A_IGNORED_NAMESPACE = new QName(NS_ANNOTATION, "ignoredNamespace");
Expand Down
Expand Up @@ -16,9 +16,11 @@

package com.evolveum.midpoint.prism;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import javax.xml.namespace.QName;
import java.util.Collection;

/**
* @author mederly
Expand All @@ -38,4 +40,12 @@ public interface TypeDefinition extends Definition {
*/
@Nullable
QName getSuperType();

/**
* Subtypes - but only these that are a part of the static schema. A little bit experimental. :)
*/
@NotNull
Collection<TypeDefinition> getStaticSubTypes();

Integer getInstantiationOrder();
}
Expand Up @@ -16,8 +16,13 @@

package com.evolveum.midpoint.prism;

import org.jetbrains.annotations.NotNull;

import javax.xml.namespace.QName;
import java.util.Collection;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;

/**
* @author mederly
Expand All @@ -26,6 +31,8 @@ public abstract class TypeDefinitionImpl extends DefinitionImpl implements TypeD

protected QName superType;
protected Class<?> compileTimeClass;
@NotNull protected final Set<TypeDefinition> staticSubTypes = new HashSet<>();
protected Integer instantiationOrder;

public TypeDefinitionImpl(QName typeName, PrismContext prismContext) {
super(typeName, prismContext);
Expand All @@ -40,6 +47,25 @@ public void setSuperType(QName superType) {
this.superType = superType;
}

@Override
@NotNull
public Collection<TypeDefinition> getStaticSubTypes() {
return staticSubTypes;
}

public void addStaticSubType(TypeDefinition subtype) {
staticSubTypes.add(subtype);
}

@Override
public Integer getInstantiationOrder() {
return instantiationOrder;
}

public void setInstantiationOrder(Integer instantiationOrder) {
this.instantiationOrder = instantiationOrder;
}

@Override
public Class<?> getCompileTimeClass() {
return compileTimeClass;
Expand Down

0 comments on commit 8ea8548

Please sign in to comment.