Skip to content

Commit

Permalink
Fixed loadable models updating in RW. Fixed schema reload in RW.
Browse files Browse the repository at this point in the history
  • Loading branch information
mederly committed May 18, 2016
1 parent ee40837 commit b5cba7c
Show file tree
Hide file tree
Showing 11 changed files with 175 additions and 165 deletions.
Expand Up @@ -114,16 +114,11 @@ protected CapabilityStepDto load() {
return loadDtoModel();
}
};
parentPage.registerDependentModel(dtoModel);

initLayout();
}

@Override
protected void onConfigure() {
// we cannot reset dtoModel here, as it contains data that cannot be re-fetched
// so if new native capabilities are discovered while wizard is open, they won't be shown here
}

@NotNull
private CapabilityStepDto loadDtoModel() {
ResourceType resource = resourceModel.getObject().asObjectable();
Expand Down Expand Up @@ -302,41 +297,43 @@ private void editCapabilityPerformed(final AjaxRequestTarget target, CapabilityD

@Override
public IModel<List<QName>> createAttributeChoiceModel(final IChoiceRenderer<QName> renderer) {
return new LoadableModel<List<QName>>(false) {
LoadableModel<List<QName>> attributeChoiceModel = new LoadableModel<List<QName>>(false) {

@Override
protected List<QName> load() {
List<QName> choices = new ArrayList<>();
@Override
protected List<QName> load() {
List<QName> choices = new ArrayList<>();

PrismObject<ResourceType> resourcePrism = resourceModel.getObject();
PrismObject<ResourceType> resourcePrism = resourceModel.getObject();

try {
ResourceSchema schema = RefinedResourceSchema.getResourceSchema(resourcePrism, getPageBase().getPrismContext());
try {
ResourceSchema schema = RefinedResourceSchema.getResourceSchema(resourcePrism, getPageBase().getPrismContext());
if (schema != null) {
ObjectClassComplexTypeDefinition def = schema.findDefaultObjectClassDefinition(ShadowKindType.ACCOUNT);
for (ResourceAttributeDefinition attribute : def.getAttributeDefinitions()) {
choices.add(attribute.getName());
}
}
} catch (CommonException|RuntimeException e) {
LoggingUtils.logUnexpectedException(LOGGER, "Couldn't load resource schema attributes.", e);
getPageBase().error("Couldn't load resource schema attributes" + e);
}
} catch (CommonException | RuntimeException e) {
LoggingUtils.logUnexpectedException(LOGGER, "Couldn't load resource schema attributes.", e);
getPageBase().error("Couldn't load resource schema attributes" + e);
}

Collections.sort(choices, new Comparator<QName>() {
Collections.sort(choices, new Comparator<QName>() {

@Override
public int compare(QName o1, QName o2) {
String s1 = (String) renderer.getDisplayValue(o1);
String s2 = (String) renderer.getDisplayValue(o2);
@Override
public int compare(QName o1, QName o2) {
String s1 = (String) renderer.getDisplayValue(o1);
String s2 = (String) renderer.getDisplayValue(o2);

return String.CASE_INSENSITIVE_ORDER.compare(s1, s2);
}
});
return String.CASE_INSENSITIVE_ORDER.compare(s1, s2);
}
});

return choices;
}
};
return choices;
}
};
parentPage.registerDependentModel(attributeChoiceModel);
return attributeChoiceModel;
}
};
} else if (capType instanceof ScriptCapabilityType) {
Expand Down
Expand Up @@ -97,6 +97,7 @@ protected List<ContainerWrapper> load() {
return createConfigContainerWrappers();
}
};
parentPage.registerDependentModel(configurationPropertiesModel);

initLayout();
}
Expand Down Expand Up @@ -166,7 +167,6 @@ public int compare(PrismContainerDefinition o1, PrismContainerDefinition o2) {

@Override
protected void onConfigure() {
configurationPropertiesModel.reset();
updateConfigurationTabs();
}

Expand Down
Expand Up @@ -93,13 +93,12 @@ public class NameStep extends WizardStep {

final private LoadableModel<String> resourceNameModel;
final private LoadableModel<String> resourceDescriptionModel;
final private LoadableModel<List<PrismObject<ConnectorHostType>>> allHostsModel;
final private LoadableModel<PrismObject<ConnectorHostType>> selectedHostModel;
final private LoadableModel<List<PrismObject<ConnectorType>>> allConnectorsModel;
final private LoadableModel<List<PrismObject<ConnectorType>>> relevantConnectorsModel; // filtered, based on selected host
final private LoadableModel<PrismObject<ConnectorType>> selectedConnectorModel;
final private IModel<String> schemaChangeWarningModel;
final private List<LoadableModel<?>> resetOnConfigure = new ArrayList<>();
final private LoadableModel<List<PrismObject<ConnectorHostType>>> allHostsModel; // this one is not dependent on resource content

final private PageResourceWizard parentPage;

Expand All @@ -114,55 +113,54 @@ protected String load() {
return PolyString.getOrig(resourceModelRaw.getObject().getName());
}
};
resetOnConfigure.add(resourceNameModel);
parentPage.registerDependentModel(resourceNameModel);

resourceDescriptionModel = new LoadableModel<String>() {
@Override
protected String load() {
return resourceModelRaw.getObject().asObjectable().getDescription();
}
};
resetOnConfigure.add(resourceDescriptionModel);
parentPage.registerDependentModel(resourceDescriptionModel);

allHostsModel = new LoadableModel<List<PrismObject<ConnectorHostType>>>(false) {
@Override
protected List<PrismObject<ConnectorHostType>> load() {
return WebModelServiceUtils.searchObjects(ConnectorHostType.class, null, null, NameStep.this.parentPage);
}
};
resetOnConfigure.add(allHostsModel);

selectedHostModel = new LoadableModel<PrismObject<ConnectorHostType>>(false) {
@Override
protected PrismObject<ConnectorHostType> load() {
return getExistingConnectorHost();
}
};
resetOnConfigure.add(selectedHostModel);
parentPage.registerDependentModel(selectedHostModel);

allConnectorsModel = new LoadableModel<List<PrismObject<ConnectorType>>>(false) {
@Override
protected List<PrismObject<ConnectorType>> load() {
return WebModelServiceUtils.searchObjects(ConnectorType.class, null, null, NameStep.this.parentPage);
}
};
resetOnConfigure.add(allConnectorsModel);
parentPage.registerDependentModel(allConnectorsModel);

relevantConnectorsModel = new LoadableModel<List<PrismObject<ConnectorType>>>(false) {
@Override
protected List<PrismObject<ConnectorType>> load() {
return loadConnectors(selectedHostModel.getObject());
}
};
resetOnConfigure.add(relevantConnectorsModel);
parentPage.registerDependentModel(relevantConnectorsModel);

selectedConnectorModel = new LoadableModel<PrismObject<ConnectorType>>(false) {
@Override
protected PrismObject<ConnectorType> load() {
return getExistingConnector();
}
};
resetOnConfigure.add(selectedConnectorModel);
parentPage.registerDependentModel(selectedConnectorModel);

schemaChangeWarningModel = new AbstractReadOnlyModel<String>() {
@Override
Expand All @@ -174,13 +172,6 @@ public String getObject() {
initLayout();
}

@Override
protected void onConfigure() {
for (LoadableModel<?> model : resetOnConfigure) {
model.reset();
}
}

private void initLayout() {
add(new TextFormGroup(ID_NAME, resourceNameModel, createStringResource("NameStep.name"), "col-md-3", "col-md-6", true));
add(new TextAreaFormGroup(ID_DESCRIPTION, resourceDescriptionModel, createStringResource("NameStep.description"), "col-md-3", "col-md-6", false, 3));
Expand Down
Expand Up @@ -16,8 +16,6 @@

package com.evolveum.midpoint.web.component.wizard.resource;


import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.model.NonEmptyLoadableModel;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
Expand Down Expand Up @@ -49,7 +47,6 @@
import com.evolveum.midpoint.web.util.InfoTooltipBehavior;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import com.evolveum.prism.xml.ns._public.types_3.ItemPathType;

import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
Expand All @@ -72,8 +69,10 @@
import org.jetbrains.annotations.NotNull;

import javax.xml.namespace.QName;

import java.util.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

/**
* @author lazyman
Expand Down Expand Up @@ -141,20 +140,12 @@ protected SchemaHandlingDto load() {
return loadSchemaHandlingDto();
}
};
parentPage.registerDependentModel(schemaHandlingDtoModel);

initLayout();
setOutputMarkupId(true);
}

@Override
protected void onConfigure() {
if (schemaHandlingDtoModel.isLoaded()) {
int index = schemaHandlingDtoModel.getObject().getSelectedIndex();
schemaHandlingDtoModel.reset();
schemaHandlingDtoModel.getObject().setSelectedIndex(index);
}
}

private SchemaHandlingDto loadSchemaHandlingDto() {

List<ResourceObjectTypeDefinitionTypeDto> list = new ArrayList<>();
Expand Down Expand Up @@ -286,10 +277,9 @@ static void addKindAndIntent(StringBuilder sb, ShadowKindType kind, String inten
}

private void initObjectTypeEditor(WebMarkupContainer editor){
Label editorLabel = new Label(ID_EDITOR_NAME, new LoadableModel<String>() {

Label editorLabel = new Label(ID_EDITOR_NAME, new AbstractReadOnlyModel<Object>() {
@Override
protected String load() {
public String getObject() {
ResourceObjectTypeDefinitionTypeDto selected = schemaHandlingDtoModel.getObject().getSelected();
return selected != null ? selected.getObjectType().getDisplayName() : "";
}
Expand Down Expand Up @@ -716,6 +706,7 @@ private void editAssociationPerformed(AjaxRequestTarget target, ResourceObjectAs
@Override
public void applyState() {
savePerformed();
insertEmptyThirdRow();
}

private void savePerformed() {
Expand Down
Expand Up @@ -19,13 +19,14 @@
import com.evolveum.midpoint.gui.api.model.NonEmptyLoadableModel;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.model.api.util.ResourceUtils;
import com.evolveum.midpoint.prism.PrismContainer;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.schema.SchemaConstantsGenerated;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.exception.CommonException;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.logging.LoggingUtils;
import com.evolveum.midpoint.util.logging.Trace;
Expand All @@ -36,9 +37,8 @@
import com.evolveum.midpoint.web.component.wizard.WizardStep;
import com.evolveum.midpoint.web.component.wizard.resource.component.SchemaListPanel;
import com.evolveum.midpoint.web.component.wizard.resource.component.XmlEditorPanel;
import com.evolveum.midpoint.web.page.admin.resources.PageResourceWizard;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.XmlSchemaType;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.markup.html.tabs.AbstractTab;
import org.apache.wicket.extensions.markup.html.tabs.ITab;
Expand All @@ -62,11 +62,14 @@ public class SchemaStep extends WizardStep {
private static final String ID_TAB_PANEL = "tabPanel";
private static final String ID_RELOAD = "reload";
private static final String ID_ACE_EDITOR = "aceEditor";

@NotNull private final NonEmptyLoadableModel<PrismObject<ResourceType>> model;
@NotNull private final PageResourceWizard parentPage;

public SchemaStep(@NotNull NonEmptyLoadableModel<PrismObject<ResourceType>> model, PageBase pageBase) {
super(pageBase);
public SchemaStep(@NotNull NonEmptyLoadableModel<PrismObject<ResourceType>> model, @NotNull PageResourceWizard parentPage) {
super(parentPage);
this.model = model;
this.parentPage = parentPage;
setOutputMarkupId(true);

initLayout();
Expand Down Expand Up @@ -118,25 +121,25 @@ public String getObject() {
}

private void reloadPerformed(AjaxRequestTarget target) {

PrismObject<ResourceType> resource = model.getObject();
resource.asObjectable().setSchema(new XmlSchemaType());
Task task = getPageBase().createSimpleTask(OPERATION_RELOAD_RESOURCE_SCHEMA);
OperationResult result = task.getResult();

resource = WebModelServiceUtils.loadObject(ResourceType.class, resource.getOid(), getPageBase(), task, result);
if (resource != null) {
model.getObject().asObjectable().setSchema(resource.asObjectable().getSchema());
try {
ResourceUtils.deleteSchema(model.getObject(), parentPage.getModelService(), parentPage.getPrismContext(), task, result);
parentPage.resetModels();
result.computeStatusIfUnknown();
} catch (CommonException|RuntimeException e) {
LoggingUtils.logUnexpectedException(LOGGER, "Couldn't reload the schema", e);
result.recordFatalError("Couldn't reload the schema: " + e.getMessage(), e);
}

result.computeStatusIfUnknown();
if(result.isSuccess()){
LOGGER.info(getString("SchemaStep.message.reload.ok", WebComponentUtil.getName(resource)));
result.recordSuccess();
} else {
LOGGER.error(getString("SchemaStep.message.reload.fail", WebComponentUtil.getName(resource)));
result.recordFatalError(getString("SchemaStep.message.reload.fail", WebComponentUtil.getName(resource)));
}
// if (result.isSuccess()) {
// LOGGER.info(getString("SchemaStep.message.reload.ok", WebComponentUtil.getName(resource)));
// result.recordSuccess();
// } else {
// LOGGER.error(getString("SchemaStep.message.reload.fail", WebComponentUtil.getName(resource)));
// result.recordFatalError(getString("SchemaStep.message.reload.fail", WebComponentUtil.getName(resource)));
// }

getPageBase().showResult(result);
target.add(getPageBase().getFeedbackPanel(), this);
Expand All @@ -163,7 +166,7 @@ private ITab createSimpleSchemaView() {

@Override
public WebMarkupContainer getPanel(String panelId) {
return new SchemaListPanel(panelId, model);
return new SchemaListPanel(panelId, model, parentPage);
}
};
}
Expand Down
Expand Up @@ -16,7 +16,6 @@

package com.evolveum.midpoint.web.component.wizard.resource;

import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.model.NonEmptyLoadableModel;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
Expand Down Expand Up @@ -135,20 +134,12 @@ protected ResourceSynchronizationDto load() {
return loadResourceSynchronization();
}
};
parentPage.registerDependentModel(syncDtoModel);

initLayout();
setOutputMarkupId(true);
}

@Override
protected void onConfigure() {
if (syncDtoModel.isLoaded()) {
int index = syncDtoModel.getObject().getSelectedIndex();
syncDtoModel.reset();
syncDtoModel.getObject().setSelectedIndex(index);
}
}

@NotNull
private ResourceSynchronizationDto loadResourceSynchronization() {

Expand Down Expand Up @@ -320,10 +311,9 @@ protected String createAutoCompleteObjectLabel(QName object) {

@Override
protected IValidator<String> createAutoCompleteValidator(){
return createObjectClassValidator(new LoadableModel<List<QName>>(false) {

return createObjectClassValidator(new AbstractReadOnlyModel<List<QName>>() {
@Override
protected List<QName> load() {
public List<QName> getObject() {
return syncDtoModel.getObject().getObjectClassList();
}
});
Expand Down

0 comments on commit b5cba7c

Please sign in to comment.