Skip to content

Commit

Permalink
adding support of template in new resource wizard
Browse files Browse the repository at this point in the history
  • Loading branch information
skublik committed Jul 11, 2022
1 parent 2603a17 commit f29a28f
Show file tree
Hide file tree
Showing 10 changed files with 304 additions and 117 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,6 @@ public class WrapperContext {
private GuiObjectDetailsPageType detailsPageTypeConfiguration;
private Collection<VirtualContainersSpecificationType> virtualContainers = new ArrayList<>();

private DiscoveredConfiguration connectorConfigurationSuggestions;

public WrapperContext(Task task, OperationResult result) {
this.task = task;
this.result = result != null ? result : new OperationResult("temporary"); // TODO !!!
Expand Down Expand Up @@ -250,14 +248,6 @@ public void setDetailsPageTypeConfiguration(GuiObjectDetailsPageType detailsPage
this.detailsPageTypeConfiguration = detailsPageTypeConfiguration;
}

public DiscoveredConfiguration getConnectorConfigurationSuggestions() {
return connectorConfigurationSuggestions;
}

public void setConnectorConfigurationSuggestions(DiscoveredConfiguration connectorConfigurationSuggestions) {
this.connectorConfigurationSuggestions = connectorConfigurationSuggestions;
}

public WrapperContext clone() {
WrapperContext ctx = new WrapperContext(task,result);
ctx.setAuthzPhase(authzPhase);
Expand All @@ -274,7 +264,6 @@ public WrapperContext clone() {
ctx.setMetadataItemProcessingSpec(metadataItemProcessingSpec);
ctx.lookupTableCache = lookupTableCache;
ctx.setDetailsPageTypeConfiguration(detailsPageTypeConfiguration);
ctx.setConnectorConfigurationSuggestions(connectorConfigurationSuggestions);
return ctx;
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
/*
* Copyright (c) 2010-2018 Evolveum and contributors
*
* This work is dual-licensed under the Apache License 2.0
* and European Union Public License. See LICENSE file for details.
*/
package com.evolveum.midpoint.gui.impl.factory.wrapper;

import com.evolveum.midpoint.gui.api.factory.wrapper.WrapperContext;
import com.evolveum.midpoint.gui.api.prism.ItemStatus;
import com.evolveum.midpoint.gui.api.prism.wrapper.*;
import com.evolveum.midpoint.gui.impl.prism.wrapper.ResourceWrapper;
import com.evolveum.midpoint.prism.*;
import com.evolveum.midpoint.util.QNameUtil;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.List;

/**
* @author skublik
*/
@Component
public class ResourceWrapperFactoryImpl extends PrismObjectWrapperFactoryImpl<ResourceType> {

@Override
public PrismObjectWrapper<ResourceType> createObjectWrapper(PrismObject<ResourceType> object, ItemStatus status) {
return new ResourceWrapper(object, status);
}

@Override
public boolean match(ItemDefinition<?> def) {
return def instanceof PrismObjectDefinition && QNameUtil.match(def.getTypeName(), ResourceType.COMPLEX_TYPE);
}

@Override
@PostConstruct
public void register() {
getRegistry().addToRegistry(this);
}

@Override
public int getOrder() {
return 99;
}

@Override
protected void addItemWrapper(ItemDefinition<?> def, PrismContainerValueWrapper<?> containerValueWrapper, WrapperContext context, List<ItemWrapper<?, ?>> wrappers) throws SchemaException {
if (ResourceType.F_DESCRIPTION.equivalent(def.getItemName())) {
def.toMutable().setEmphasized(true);
}
super.addItemWrapper(def, containerValueWrapper, context, wrappers);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,6 @@ protected PrismObjectWrapper<O> load() {
WrapperContext ctx = new WrapperContext(task, result);
ctx.setCreateIfEmpty(true);
ctx.setDetailsPageTypeConfiguration(detailsPageConfigurationModel.getObject());
customizationWrapperContext(ctx);
if (isReadonly()) {
ctx.setReadOnly(isReadonly());
}
Expand Down Expand Up @@ -111,9 +110,6 @@ protected O load() {
};
}

protected void customizationWrapperContext(WrapperContext ctx) {
}

private void loadParentOrgs(PrismObject<O> object) {
Task task = getModelServiceLocator().createSimpleTask(OPERATION_LOAD_PARENT_ORG);
OperationResult subResult = task.getResult();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import com.evolveum.midpoint.gui.impl.page.admin.assignmentholder.AssignmentHolderDetailsModel;
import com.evolveum.midpoint.gui.impl.page.admin.resource.component.wizard.ObjectClassWrapper;
import com.evolveum.midpoint.prism.*;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.prism.schema.PrismSchema;
import com.evolveum.midpoint.provisioning.api.DiscoveredConfiguration;
import com.evolveum.midpoint.schema.processor.ResourceObjectClassDefinition;
Expand All @@ -30,15 +31,13 @@
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.exception.SystemException;
import com.evolveum.midpoint.web.component.wizard.resource.dto.ObjectClassDto;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ConnectorConfigurationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ConnectorType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.GuiObjectDetailsPageType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

Expand Down Expand Up @@ -185,11 +184,12 @@ public void setConnectorConfigurationSuggestions(DiscoveredConfiguration connect
this.connectorConfigurationSuggestions = connectorConfigurationSuggestions;
}

protected void customizationWrapperContext(WrapperContext ctx) {
ctx.setConnectorConfigurationSuggestions(this.connectorConfigurationSuggestions);
}

public IModel<List<ObjectClassWrapper>> getObjectClassesModel() {
return objectClassesModel;
}

@Override
public Collection<ObjectDelta<? extends ObjectType>> collectDeltas(OperationResult result) throws SchemaException {
return super.collectDeltas(result);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,16 @@
import com.evolveum.midpoint.gui.impl.page.admin.resource.component.ResourceTilePanel;
import com.evolveum.midpoint.gui.impl.page.admin.resource.component.TemplateTile;
import com.evolveum.midpoint.gui.impl.util.GuiDisplayNameUtil;
import com.evolveum.midpoint.prism.CloneStrategy;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.PrismObjectDefinition;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.result.OperationResultStatus;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.QNameUtil;
import com.evolveum.midpoint.util.exception.ConfigurationException;
import com.evolveum.midpoint.util.exception.ObjectNotFoundException;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.web.session.PageStorage;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
Expand All @@ -34,6 +39,7 @@
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.LoadableDetachableModel;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import javax.xml.namespace.QName;
import java.io.Serializable;
Expand Down Expand Up @@ -153,23 +159,37 @@ private void onTemplateChosePerformed(TemplateTile<ResourceTemplate> tile, AjaxR
PrismObject<ResourceType> obj = def.instantiate();

ResourceTemplate resourceTemplate = tile.getTemplateObject();
if (resourceTemplate != null){
if (resourceTemplate != null) {
if (QNameUtil.match(ConnectorType.COMPLEX_TYPE, resourceTemplate.type)) {
obj.asObjectable().connectorRef(
new ObjectReferenceType()
obj.asObjectable().beginConnectorRef()
.oid(resourceTemplate.oid)
.type(ConnectorType.COMPLEX_TYPE));
.type(ConnectorType.COMPLEX_TYPE);
} else if (QNameUtil.match(ResourceType.COMPLEX_TYPE, resourceTemplate.type)) {
obj.asObjectable()._super(
new SuperResourceDeclarationType()
.resourceRef(
new ObjectReferenceType()
.oid(resourceTemplate.oid)
.type(ResourceType.COMPLEX_TYPE)));
Task task = getPageBase().createSimpleTask("load resource template");
OperationResult result = task.getResult();
// @Nullable PrismObject<ResourceType> resource = WebModelServiceUtils.loadObject(
// ResourceType.class,
// resourceTemplate.oid,
// getPageBase(),
// task,
// result);
// if (resource != null) {
obj.asObjectable().beginSuper().beginResourceRef()
.oid(resourceTemplate.oid)
.type(ResourceType.COMPLEX_TYPE);
// obj = resource.cloneComplex(CloneStrategy.REUSE);
getPageBase().getModelInteractionService().expandConfigurationObject(obj, task, result);
// }

result.computeStatus();
if (!result.isSuccess()) {
getPageBase().showResult(result);
target.add(getPageBase().getFeedbackPanel());
}
}
}
onTemplateChosePerformed(obj, target);
} catch (SchemaException ex) {
} catch (SchemaException | ConfigurationException | ObjectNotFoundException ex) {
getPageBase().getFeedbackMessages().error(getPageBase(), ex.getUserFriendlyMessage());
target.add(getPageBase().getFeedbackPanel());
}
Expand All @@ -193,7 +213,6 @@ protected List<TemplateTile<ResourceTemplate>> load() {
loadResourceTemplateTask.getResult(),
getPageBase());


if (CollectionUtils.isNotEmpty(connectors)) {
connectors.forEach(connector -> {
@NotNull ConnectorType connectorObject = connector.asObjectable();
Expand All @@ -215,10 +234,19 @@ protected List<TemplateTile<ResourceTemplate>> load() {
@NotNull List<PrismObject<ResourceType>> resources =
WebModelServiceUtils.searchObjects(
ResourceType.class,
searchModel.getObject().createObjectQuery(getPageBase()), // TODO fix me
searchModel.getObject().createObjectQuery(
// null,
getPageBase() //,
// PrismContext.get()
// .queryFor(ResourceType.class)
// .item(ResourceType.F_TEMPLATE) //TODO uncomment after adding to repo
// .eq(true).build()
),
loadResourceTemplateTask.getResult(),
getPageBase());

resources.removeIf(resource -> !Boolean.TRUE.equals(resource.asObjectable().isTemplate())); //TODO remove after adding to repo

if (CollectionUtils.isNotEmpty(resources)) {
resources.forEach(resource -> {
String title = WebComponentUtil.getDisplayNameOrName(resource);
Expand Down Expand Up @@ -255,7 +283,7 @@ protected class ResourceTemplate implements Serializable {
private String oid;
private QName type;

ResourceTemplate(String oid, QName type){
ResourceTemplate(String oid, QName type) {
this.oid = oid;
this.type = type;
}
Expand Down

0 comments on commit f29a28f

Please sign in to comment.