Skip to content

Commit

Permalink
TransformableItem: Do not serialize parent if it is present in schema…
Browse files Browse the repository at this point in the history
… registry
  • Loading branch information
tonydamage committed Feb 17, 2022
1 parent e2dfe59 commit 069ea04
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -49,24 +49,29 @@ PrismObjectDefinition<O> get() {
static class ComplexTypeDerived<I extends ItemDefinition<?>> extends DelegatedItem<I> {

private ItemName itemName;
private TransformableComplexTypeDefinition parent; // could we remove this?
private QName parent; // could we remove this?
private transient I delegate;



public ComplexTypeDerived(TransformableComplexTypeDefinition parent, I delegate) {
public ComplexTypeDerived(QName typeName, I delegate) {
super();
this.itemName = delegate.getItemName();
this.parent = parent;
this.parent = typeName;
this.delegate = delegate;
}



@SuppressWarnings("unchecked")
@Override
I get() {
if (delegate == null) {
delegate = (I) parent.delegate().findItemDefinition(itemName);
var typeDef = PrismContext.get().getSchemaRegistry().findComplexTypeDefinitionByType(parent);
if (typeDef == null) {
throw new IllegalStateException("Missing definition for " + parent + " in schema registry");
}
delegate = (I) typeDef.findItemDefinition(itemName);
}
return delegate;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public class TransformableComplexTypeDefinition implements ComplexTypeDefinition
private static final TransformableItemDefinition REMOVED = new Removed();
private final Map<QName,ItemDefinition<?>> overrides = new HashMap<>();

private DelegatedItem<ComplexTypeDefinition> delegate;
protected DelegatedItem<ComplexTypeDefinition> delegate;
private transient List<ItemDefinition<?>> definitionsCache;

public TransformableComplexTypeDefinition(ComplexTypeDefinition delegate) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
package com.evolveum.midpoint.model.impl.schema.transform;

import java.util.HashMap;
import java.util.Map;
import java.util.function.Consumer;

import javax.xml.namespace.QName;

import com.evolveum.midpoint.prism.*;
Expand Down Expand Up @@ -342,10 +338,13 @@ public String toString() {


ItemDefinition<?> attachTo(TransformableComplexTypeDefinition complexType) {
var delegateDef = complexType.delegate().findItemDefinition(getItemName());
// If definition is same object as definition from schema - reuse it
if (delegateDef == delegate()) {
delegate = new DelegatedItem.ComplexTypeDerived<>(complexType, delegate());
var parentDelegator = complexType.delegate;
if (parentDelegator instanceof DelegatedItem.StaticComplexType) {
var delegateDef = parentDelegator.get().findItemDefinition(getItemName());
// If definition is same object as definition from schema - reuse it
if (delegateDef == delegate()) {
delegate = new DelegatedItem.ComplexTypeDerived<>(complexType.getTypeName(), delegate());
}
}
return this;
}
Expand Down

0 comments on commit 069ea04

Please sign in to comment.