Skip to content

Commit

Permalink
fixed object text infos handling
Browse files Browse the repository at this point in the history
  • Loading branch information
1azyman committed Jan 26, 2018
1 parent 559f835 commit ed6e0bf
Showing 1 changed file with 39 additions and 7 deletions.
Expand Up @@ -22,7 +22,10 @@
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.prism.path.ItemPathSegment;
import com.evolveum.midpoint.prism.path.NameItemPathSegment;
import com.evolveum.midpoint.repo.api.RepositoryService;
import com.evolveum.midpoint.repo.sql.data.RepositoryContext;
import com.evolveum.midpoint.repo.sql.data.common.RObject;
import com.evolveum.midpoint.repo.sql.data.common.RObjectTextInfo;
import com.evolveum.midpoint.repo.sql.data.common.any.*;
import com.evolveum.midpoint.repo.sql.data.common.container.Container;
import com.evolveum.midpoint.repo.sql.data.common.container.RAssignment;
Expand All @@ -35,11 +38,13 @@
import com.evolveum.midpoint.repo.sql.util.EntityState;
import com.evolveum.midpoint.repo.sql.util.PrismIdentifierGenerator;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.FullTextSearchConfigurationUtil;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.exception.SystemException;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.FullTextSearchConfigurationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowType;
import org.apache.commons.beanutils.PropertyUtils;
Expand Down Expand Up @@ -70,11 +75,13 @@ public class ObjectDeltaUpdater {

private static final Trace LOGGER = TraceManager.getTrace(ObjectDeltaUpdater.class);

@Autowired
private EntityRegistry entityRegistry;
@Autowired
private PrismContext prismContext;
@Autowired
private RepositoryService repositoryService;
@Autowired
private EntityRegistry entityRegistry;
@Autowired
private PrismEntityMapper prismEntityMapper;

/**
Expand Down Expand Up @@ -169,7 +176,7 @@ private <T extends ObjectType> void handleObjectCommonAttributes(Class<T> type,
// apply modifications, ids' for new containers already filled in delta values
ItemDelta.applyTo(modifications, prismObject);

handleObjectTextInfoChanges(type, modifications, object);
handleObjectTextInfoChanges(type, modifications, prismObject, object);

// generate ids for containers that weren't handled in previous step (not processed by repository)
PrismIdentifierGenerator generator = new PrismIdentifierGenerator();
Expand All @@ -179,19 +186,44 @@ private <T extends ObjectType> void handleObjectCommonAttributes(Class<T> type,
}

private <T extends ObjectType> boolean isObjectTextInfoRecomputationNeeded(Class<T> type, Collection<? extends ItemDelta> modifications) {
// todo implement
FullTextSearchConfigurationType config = repositoryService.getFullTextSearchConfiguration();
if (!FullTextSearchConfigurationUtil.isEnabled(config)) {
return false;
}

Set<ItemPath> paths = FullTextSearchConfigurationUtil.getFullTextSearchItemPaths(config, type);

for (ItemDelta modification :modifications) {
ItemPath modPath = modification.getPath();
ItemPath namesOnly = modPath.namedSegmentsOnly();

for (ItemPath path : paths) {
if (path.startsWith(namesOnly)) {
return true;
}
}
}

return false;
}

private <T extends ObjectType> void handleObjectTextInfoChanges(Class<T> type, Collection<? extends ItemDelta> modifications,
RObject object) {
PrismObject prismObject, RObject object) {
// update object text info if necessary
if (!isObjectTextInfoRecomputationNeeded(type, modifications)) {
return;
}

// todo implement
//ItemDelta.findItemDeltasSubPath()
Set<RObjectTextInfo> infos = RObjectTextInfo.createItemsSet((ObjectType) prismObject.asObjectable(), object,
new RepositoryContext( repositoryService, prismContext));

if (infos == null || infos.isEmpty()) {
object.getTextInfoItems().clear();
} else {
// todo improve this replace
object.getTextInfoItems().clear();
object.getTextInfoItems().addAll(infos);
}
}

private boolean isObjectExtensionDelta(ItemPath path) {
Expand Down

0 comments on commit ed6e0bf

Please sign in to comment.