Skip to content

Commit

Permalink
Merge remote-tracking branch 'refs/remotes/origin/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
skublik committed Sep 29, 2021
2 parents 4395758 + 843dfd8 commit ad5e72a
Show file tree
Hide file tree
Showing 20 changed files with 403 additions and 101 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,33 +11,30 @@
import java.util.*;
import javax.annotation.PostConstruct;

import com.evolveum.midpoint.model.api.authentication.CompiledObjectCollectionView;
import com.evolveum.midpoint.prism.polystring.PolyString;

import com.evolveum.midpoint.schema.util.MiscSchemaUtil;
import com.evolveum.prism.xml.ns._public.types_3.PolyStringTranslationType;

import com.evolveum.prism.xml.ns._public.types_3.PolyStringType;

import org.apache.commons.lang3.BooleanUtils;
import org.apache.wicket.markup.html.panel.Panel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.evolveum.midpoint.model.api.AdminGuiConfigurationMergeManager;
import com.evolveum.midpoint.model.api.authentication.CompiledGuiProfile;
import com.evolveum.midpoint.model.api.authentication.CompiledObjectCollectionView;
import com.evolveum.midpoint.model.api.authentication.GuiProfileCompilable;
import com.evolveum.midpoint.model.api.authentication.GuiProfileCompilerRegistry;
import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.PrismContainerDefinition;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.prism.polystring.PolyString;
import com.evolveum.midpoint.schema.constants.ObjectTypes;
import com.evolveum.midpoint.schema.util.MiscSchemaUtil;
import com.evolveum.midpoint.util.ClassPathUtil;
import com.evolveum.midpoint.util.QNameUtil;
import com.evolveum.midpoint.web.application.*;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import com.evolveum.prism.xml.ns._public.types_3.ItemPathType;
import com.evolveum.prism.xml.ns._public.types_3.PolyStringTranslationType;
import com.evolveum.prism.xml.ns._public.types_3.PolyStringType;

@Component
public class DefaultGuiConfigurationCompiler implements GuiProfileCompilable {
Expand All @@ -46,40 +43,39 @@ public class DefaultGuiConfigurationCompiler implements GuiProfileCompilable {
@Autowired private PrismContext prismContext;
@Autowired private AdminGuiConfigurationMergeManager adminGuiConfigurationMergeManager;

@SuppressWarnings("SpellCheckingInspection")
private static final String[] PANEL_PACKAGES_TO_SCAN = {
"com.evolveum.midpoint.web.component.objectdetails", //Old panels
"com.evolveum.midpoint.web.component.assignment", //Assignments
"com.evolveum.midpoint.gui.impl.page.admin",
"com.evolveum.midpoint.gui.impl.page.admin.component",
"com.evolveum.midpoint.gui.impl.page.admin.assignmentholder.component",
"com.evolveum.midpoint.gui.impl.page.admin.abstractrole.component",
"com.evolveum.midpoint.gui.impl.page.admin.focus.component",
"com.evolveum.midpoint.gui.impl.page.admin.resource.component",
"com.evolveum.midpoint.gui.impl.page.admin.task.component",
"com.evolveum.midpoint.gui.impl.component.assignment",
"com.evolveum.midpoint.gui.impl.page.admin.archetype.component",
"com.evolveum.midpoint.gui.impl.page.admin.assignmentholder.component",
"com.evolveum.midpoint.gui.impl.page.admin.assignmentholder.component.assignmentType.assignment",
"com.evolveum.midpoint.gui.impl.page.admin.assignmentholder.component.assignmentType.inducement",
"com.evolveum.midpoint.gui.impl.page.admin.org.component",
"com.evolveum.midpoint.gui.impl.page.admin.cases.component",
"com.evolveum.midpoint.gui.impl.page.admin.user.component",
"com.evolveum.midpoint.gui.impl.page.admin.component",
"com.evolveum.midpoint.gui.impl.page.admin.focus.component",
"com.evolveum.midpoint.gui.impl.page.admin.objectcollection.component",
"com.evolveum.midpoint.gui.impl.page.admin.objecttemplate.component",
"com.evolveum.midpoint.gui.impl.page.admin.archetype.component",
"com.evolveum.midpoint.gui.impl.page.admin.report.component"
"com.evolveum.midpoint.gui.impl.page.admin.org.component",
"com.evolveum.midpoint.gui.impl.page.admin.report.component",
"com.evolveum.midpoint.gui.impl.page.admin.resource.component",
"com.evolveum.midpoint.gui.impl.page.admin.task.component",
"com.evolveum.midpoint.gui.impl.page.admin.user.component",
"com.evolveum.midpoint.web.component.assignment", //Assignments
"com.evolveum.midpoint.web.component.objectdetails" //Old panels
};

private static final String[] COLLECTION_PACKAGES_TO_SCAN = {
"com.evolveum.midpoint.web.page.admin.users",
"com.evolveum.midpoint.web.page.admin.services",
"com.evolveum.midpoint.web.page.admin.tasks",
"com.evolveum.midpoint.web.page.admin.roles",
"com.evolveum.midpoint.web.page.admin.resources",
"com.evolveum.midpoint.web.page.admin.reports",
"com.evolveum.midpoint.web.page.admin.orgs",
"com.evolveum.midpoint.web.page.admin.objectTemplate",
"com.evolveum.midpoint.web.page.admin.objectCollection",
"com.evolveum.midpoint.web.page.admin.archetype",
"com.evolveum.midpoint.web.page.admin.cases",
"com.evolveum.midpoint.web.page.admin.archetype"
"com.evolveum.midpoint.web.page.admin.objectCollection",
"com.evolveum.midpoint.web.page.admin.objectTemplate",
"com.evolveum.midpoint.web.page.admin.orgs",
"com.evolveum.midpoint.web.page.admin.reports",
"com.evolveum.midpoint.web.page.admin.resources",
"com.evolveum.midpoint.web.page.admin.roles",
"com.evolveum.midpoint.web.page.admin.services",
"com.evolveum.midpoint.web.page.admin.users"
};

private final Map<String, Class<? extends Panel>> panelsMap = new HashMap<>();
Expand Down Expand Up @@ -217,6 +213,7 @@ private void fillInPanelsMap(Set<Class<?>> classes) {
if (isNotPanelTypeDefinition(clazz, panelType)) {
continue;
}
//noinspection unchecked
panelsMap.put(panelType.name(), (Class<? extends Panel>) clazz);
}
}
Expand Down Expand Up @@ -335,7 +332,7 @@ private boolean isNotApplicableFor(Class<? extends ObjectType> objectType, Panel
}

if (panelInstance.excludeTypes() != null && panelInstance.excludeTypes().length > 0) {
return Arrays.stream(panelInstance.excludeTypes()).anyMatch(o -> o.equals(objectType));
return Arrays.asList(panelInstance.excludeTypes()).contains(objectType);
}

return !panelInstance.applicableForType().isAssignableFrom(objectType);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4730,6 +4730,12 @@ public static AssignmentHolderType getObjectFromAddDeltyForCase(CaseType aCase)
return null;
}

public static boolean isResourceRelatedTask(TaskType task) {
return WebComponentUtil.hasArchetypeAssignment(task, SystemObjectsType.ARCHETYPE_RECONCILIATION_TASK.value())
|| WebComponentUtil.hasArchetypeAssignment(task, SystemObjectsType.ARCHETYPE_LIVE_SYNC_TASK.value())
|| WebComponentUtil.hasArchetypeAssignment(task, SystemObjectsType.ARCHETYPE_IMPORT_TASK.value());
}

public static boolean isRefreshEnabled(PageBase pageBase, QName type) {
CompiledGuiProfile cup = pageBase.getCompiledGuiProfile();
if (cup == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,17 @@
import java.util.Collections;
import java.util.Iterator;
import javax.annotation.PostConstruct;
import javax.xml.namespace.QName;

import com.evolveum.midpoint.gui.api.prism.wrapper.*;
import com.evolveum.midpoint.prism.Referencable;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import org.apache.wicket.extensions.ajax.markup.html.autocomplete.StringAutoCompleteRenderer;
import org.springframework.stereotype.Component;

import com.evolveum.midpoint.gui.api.component.autocomplete.AutoCompleteTextPanel;
import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismPropertyWrapper;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.gui.api.util.WebPrismUtil;
Expand All @@ -27,9 +31,6 @@
import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.web.component.prism.InputPanel;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowKindType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskType;

//FIXME serializable?
@Component
Expand All @@ -47,7 +48,11 @@ protected InputPanel getPanel(PrismPropertyPanelContext<String> panelCtx) {
@Override
public Iterator<String> getIterator(String input) {
PrismPropertyWrapper<String> itemWrapper = panelCtx.unwrapWrapperModel();
PrismReferenceValue objectRef = WebPrismUtil.findSingleReferenceValue(itemWrapper, ItemPath.create(TaskType.F_OBJECT_REF));
PrismReferenceValue objectRef = findResourceReference(itemWrapper);

if (objectRef == null || objectRef.getOid() == null) {
return Collections.emptyIterator();
}

Task task = panelCtx.getPageBase().createSimpleTask("load resource");
PrismObject<ResourceType> resourceType = WebModelServiceUtils.loadObject(objectRef, ResourceType.COMPLEX_TYPE, panelCtx.getPageBase(), task, task.getResult());
Expand All @@ -56,7 +61,7 @@ public Iterator<String> getIterator(String input) {
return Collections.emptyIterator();
}

PrismPropertyValue<ShadowKindType> kindPropValue = WebPrismUtil.findSinglePropertyValue(itemWrapper, ItemPath.create(TaskType.F_EXTENSION, SchemaConstants.MODEL_EXTENSION_KIND));
PrismPropertyValue<ShadowKindType> kindPropValue = findKind(itemWrapper);
if (kindPropValue == null) {
return Collections.emptyIterator();
}
Expand All @@ -67,7 +72,57 @@ public Iterator<String> getIterator(String input) {

@Override
public <IW extends ItemWrapper<?, ?>> boolean match(IW wrapper) {
return wrapper.getPath().equivalent(ItemPath.create(TaskType.F_EXTENSION, SchemaConstants.MODEL_EXTENSION_INTENT));
PrismObjectWrapper<?> objectWrapper = wrapper.findObjectWrapper();
if (objectWrapper == null) {
return false;
}

ObjectType object = objectWrapper.getObject().asObjectable();
if (!(object instanceof TaskType)) {
return false;
}

TaskType task = (TaskType) object;
if (WebComponentUtil.isResourceRelatedTask(task) && wrapper.getPath().startsWith(ItemPath.create(TaskType.F_ACTIVITY, ActivityDefinitionType.F_WORK)) && wrapper.getPath().lastName().equivalent(ResourceObjectSetType.F_INTENT)) {
return true;
}
return false;
}

//TODO coppied from TaskObjectClassFactory
private PrismReferenceValue findResourceReference(PrismPropertyWrapper<String> itemWrapper) {
PrismContainerValueWrapper<?> parent = itemWrapper.getParent();
if (parent == null) {
return null;
}
try {
PrismReferenceWrapper<Referencable> resourceRefWrapper = parent.findReference(ResourceObjectSetType.F_RESOURCE_REF);
if (resourceRefWrapper == null) {
return null;
}

return resourceRefWrapper.getValue().getNewValue();
} catch (SchemaException e) {
return null;
}
// WebPrismUtil.findSingleReferenceValue(itemWrapper, ItemPath.create(TaskType.F_OBJECT_REF))
}

private PrismPropertyValue<ShadowKindType> findKind(PrismPropertyWrapper<String> itemWrapper) {
PrismContainerValueWrapper<?> parent = itemWrapper.getParent();
if (parent == null) {
return null;
}
try {
PrismPropertyWrapper<ShadowKindType> kindWrapper = parent.findProperty(ResourceObjectSetType.F_KIND);
if (kindWrapper == null) {
return null;
}

return kindWrapper.getValue().getNewValue();
} catch (SchemaException e) {
return null;
}
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,17 @@
import javax.annotation.PostConstruct;
import javax.xml.namespace.QName;

import com.evolveum.midpoint.gui.api.prism.wrapper.*;

import com.evolveum.midpoint.prism.PrismReference;
import com.evolveum.midpoint.prism.Referencable;
import com.evolveum.midpoint.schema.util.ObjectTypeUtil;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import org.springframework.stereotype.Component;

import com.evolveum.midpoint.gui.api.component.autocomplete.AutoCompleteQNamePanel;
import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismPropertyWrapper;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.gui.api.util.WebPrismUtil;
Expand All @@ -26,8 +32,6 @@
import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.web.component.prism.InputPanel;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskType;

//FIXME serializable
@Component
Expand All @@ -40,13 +44,18 @@ public void register() {

@Override
protected InputPanel getPanel(PrismPropertyPanelContext<QName> panelCtx) {
return new AutoCompleteQNamePanel<QName>(panelCtx.getComponentId(), panelCtx.getRealValueModel()) {
return new AutoCompleteQNamePanel<>(panelCtx.getComponentId(), panelCtx.getRealValueModel()) {

@Override
public Collection<QName> loadChoices() {

PrismPropertyWrapper<QName> itemWrapper = panelCtx.unwrapWrapperModel();
PrismReferenceValue objectRef = WebPrismUtil.findSingleReferenceValue(itemWrapper, ItemPath.create(TaskType.F_OBJECT_REF));
PrismReferenceValue objectRef = findResourceReference(itemWrapper);

if (objectRef == null || objectRef.getOid() == null) {
return Collections.emptyList();
}

Task task = panelCtx.getPageBase().createSimpleTask("load resource");
PrismObject<ResourceType> resourceType = WebModelServiceUtils.loadObject(objectRef, ResourceType.COMPLEX_TYPE, panelCtx.getPageBase(), task, task.getResult());

Expand All @@ -65,7 +74,40 @@ protected boolean alwaysReload() {

@Override
public <IW extends ItemWrapper<?, ?>> boolean match(IW wrapper) {
return wrapper.getPath().equivalent(ItemPath.create(TaskType.F_EXTENSION, SchemaConstants.MODEL_EXTENSION_OBJECTCLASS));
PrismObjectWrapper<?> objectWrapper = wrapper.findObjectWrapper();
if (objectWrapper == null) {
return false;
}

ObjectType object = objectWrapper.getObject().asObjectable();
if (!(object instanceof TaskType)) {
return false;
}

TaskType task = (TaskType) object;
if (WebComponentUtil.isResourceRelatedTask(task) && wrapper.getPath().startsWith(ItemPath.create(TaskType.F_ACTIVITY, ActivityDefinitionType.F_WORK)) && wrapper.getPath().lastName().equivalent(ResourceObjectSetType.F_OBJECTCLASS)) {
return true;
}
return false;
// return wrapper.getPath().equivalent(ItemPath.create(TaskType.F_EXTENSION, SchemaConstants.MODEL_EXTENSION_OBJECTCLASS));
}

private PrismReferenceValue findResourceReference(PrismPropertyWrapper<QName> itemWrapper) {
PrismContainerValueWrapper<?> parent = itemWrapper.getParent();
if (parent == null) {
return null;
}
try {
PrismReferenceWrapper<Referencable> resourceRefWrapper = parent.findReference(ResourceObjectSetType.F_RESOURCE_REF);
if (resourceRefWrapper == null) {
return null;
}

return resourceRefWrapper.getValue().getNewValue();
} catch (SchemaException e) {
return null;
}
// WebPrismUtil.findSingleReferenceValue(itemWrapper, ItemPath.create(TaskType.F_OBJECT_REF))
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -228,14 +228,8 @@ public Collection<ObjectDeltaOperation<? extends ObjectType>> saveOrPreviewPerfo
LOGGER.trace("returning from saveOrPreviewPerformed");
Collection<ObjectDeltaOperation<? extends ObjectType>> executedDeltas = executeChanges(deltas, previewOnly, options, task, result, target);

result.computeStatusIfUnknown();
postProcessResult(result, executedDeltas);
showResult(result);
if (!previewOnly && result.isSuccess()) {
redirectBack();
} else {
target.add(getFeedbackPanel());
}

return executedDeltas;
}

Expand All @@ -256,7 +250,22 @@ protected Collection<ObjectDeltaOperation<? extends ObjectType>> executeChanges(
//// result.recomputeStatus();
//// }

return getChangeExecutor().executeChanges(deltas, previewOnly, task, result, target);
//TODO this is just a quick hack.. for focus objects, feedback panel and results are processed by ProgressAware.finishProcessing()

ObjectChangeExecutor changeExecutor = getChangeExecutor();
Collection<ObjectDeltaOperation<? extends ObjectType>> executedDeltas = changeExecutor.executeChanges(deltas, previewOnly, task, result, target);

result.computeStatusIfUnknown();
if (changeExecutor instanceof ObjectChangesExecutorImpl) {
showResult(result);
if (!previewOnly && result.isSuccess()) {
redirectBack();
} else {
target.add(getFeedbackPanel());
}
}

return executedDeltas;
}


Expand Down

0 comments on commit ad5e72a

Please sign in to comment.