Skip to content

Commit

Permalink
GUI perf - loadableDetachableModels WIP
Browse files Browse the repository at this point in the history
(cherry-picked from commit d0b2847)
  • Loading branch information
katkav committed Jan 19, 2022
1 parent fafcaad commit 8b216bc
Show file tree
Hide file tree
Showing 34 changed files with 287 additions and 93 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@
import org.apache.wicket.feedback.FeedbackMessages;
import org.apache.wicket.injection.Injector;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
import org.apache.wicket.markup.html.TransparentWebMarkupContainer;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.WebPage;
Expand Down Expand Up @@ -656,6 +658,12 @@ protected void onBeforeRender() {
getSession().getFeedbackMessages().clear();
}

@Override
public void renderHead(IHeaderResponse response) {
super.renderHead(response);
response.render(OnDomReadyHeaderItem.forScript("jQuery(document).on('scroll', function(){console.trace('blabla')})"));
}

private void initHeaderLayout(WebMarkupContainer container) {
WebMarkupContainer menuToggle = new WebMarkupContainer(ID_MENU_TOGGLE);
menuToggle.add(createUserStatusBehaviour());
Expand Down Expand Up @@ -802,8 +810,8 @@ public boolean isVisible() {

private void initLayout() {
TransparentWebMarkupContainer body = new TransparentWebMarkupContainer(ID_BODY);
// body.add(new AttributeAppender("class", "hold-transition ", " "));
// body.add(new AttributeAppender("class", "custom-hold-transition ", " "));
body.add(new AttributeAppender("class", "hold-transition ", " "));
body.add(new AttributeAppender("class", "custom-hold-transition ", " "));

body.add(AttributeAppender.append("class", new IModel<String>() {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import org.apache.wicket.markup.html.panel.Fragment;
import org.apache.wicket.markup.repeater.RepeatingView;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.StringResourceModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
Expand Down Expand Up @@ -116,7 +117,7 @@ public abstract class ContainerableListPanel<C extends Containerable, PO extends

private final Class<C> defaultType;

private LoadableModel<Search<C>> searchModel;
private LoadableDetachableModel<Search<C>> searchModel;

private Collection<SelectorOptions<GetOperationOptions>> options;

Expand Down Expand Up @@ -162,8 +163,8 @@ private void initSearchModel(){
}
}

protected LoadableModel<Search<C>> createSearchModel(){
return new LoadableModel<>(false) {
protected LoadableDetachableModel<Search<C>> createSearchModel(){
return new LoadableDetachableModel<>() {

private static final long serialVersionUID = 1L;

Expand Down Expand Up @@ -380,7 +381,7 @@ public BoxedTablePanel<PO> getTable() {
}

public Class<C> getType() {
if (getSearchModel().isLoaded()) {
if (getSearchModel().isAttached()) {
return getSearchModel().getObject().getTypeClass();
}
PageStorage storage = getPageStorage();
Expand Down Expand Up @@ -1117,7 +1118,7 @@ public void resetSearchModel(){
storage.setPaging(null);
}

searchModel.reset();
// searchModel.reset();
}

protected void saveSearchModel(ObjectPaging paging) {
Expand Down Expand Up @@ -1186,7 +1187,7 @@ public void setManualRefreshEnabled(Boolean manualRefreshEnabled) {
this.manualRefreshEnabled = manualRefreshEnabled;
}

protected LoadableModel<Search<C>> getSearchModel() {
protected LoadableDetachableModel<Search<C>> getSearchModel() {
return searchModel;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.markup.repeater.RepeatingView;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.util.string.StringValue;
Expand Down Expand Up @@ -108,8 +109,8 @@ protected ODM createObjectDetailsModels(PrismObject<O> object) {
return (ODM) new ObjectDetailsModels<>(createPrismObjectModel(object), this);
}

protected LoadableModel<PrismObject<O>> createPrismObjectModel(PrismObject<O> object) {
return new LoadableModel<>(false) {
protected LoadableDetachableModel<PrismObject<O>> createPrismObjectModel(PrismObject<O> object) {
return new LoadableDetachableModel<>() {

@Override
protected PrismObject<O> load() {
Expand Down Expand Up @@ -149,7 +150,7 @@ protected void initFragmentLayout() {
}

private Panel initSummaryPanel() {
LoadableModel<O> summaryModel = objectDetailsModels.getSummaryModel();
LoadableDetachableModel<O> summaryModel = objectDetailsModels.getSummaryModel();
Panel summaryPanel = createSummaryPanel(ID_SUMMARY, summaryModel);
summaryPanel.add(new VisibleBehaviour(() -> objectDetailsModels.getObjectStatus() != ItemStatus.ADDED));
return summaryPanel;
Expand Down Expand Up @@ -484,7 +485,7 @@ public IModel<List<ContainerPanelConfigurationType>> getPanelConfigurations() {
}

public abstract Class<O> getType();
protected abstract Panel createSummaryPanel(String id, LoadableModel<O> summaryModel);
protected abstract Panel createSummaryPanel(String id, IModel<O> summaryModel);

private MidpointForm getMainForm() {
return (MidpointForm) get(createComponentPath(ID_DETAILS_VIEW, ID_MAIN_FORM));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@
import com.evolveum.midpoint.web.util.validation.SimpleValidationError;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import org.apache.wicket.model.LoadableDetachableModel;

public class ObjectDetailsModels<O extends ObjectType> implements Serializable {

private static final Trace LOGGER = TraceManager.getTrace(ObjectDetailsModels.class);
Expand All @@ -43,22 +45,22 @@ public class ObjectDetailsModels<O extends ObjectType> implements Serializable {
protected static final String OPERATION_LOAD_PARENT_ORG = DOT_CLASS + "loadParentOrgs";

private ModelServiceLocator modelServiceLocator;
private LoadableModel<PrismObject<O>> prismObjectModel;
private LoadableDetachableModel<PrismObject<O>> prismObjectModel;

private LoadableModel<PrismObjectWrapper<O>> objectWrapperModel;
private LoadableModel<GuiObjectDetailsPageType> detailsPageConfigurationModel;
private LoadableDetachableModel<GuiObjectDetailsPageType> detailsPageConfigurationModel;

private LoadableModel<O> summaryModel;
private LoadableDetachableModel<O> summaryModel;

public ObjectDetailsModels(LoadableModel<PrismObject<O>> prismObjectModel, ModelServiceLocator serviceLocator) {
public ObjectDetailsModels(LoadableDetachableModel<PrismObject<O>> prismObjectModel, ModelServiceLocator serviceLocator) {
this.prismObjectModel = prismObjectModel;
this.modelServiceLocator = serviceLocator;

objectWrapperModel = new LoadableModel<>(false) {

@Override
protected PrismObjectWrapper<O> load() {
PrismObject<O> prismObject = prismObjectModel.getObject();
PrismObject<O> prismObject = getPrismObject();//prismObjectModel.getObject();

PrismObjectWrapperFactory<O> factory = modelServiceLocator.findObjectWrapperFactory(prismObject.getDefinition());
Task task = modelServiceLocator.createSimpleTask("createWrapper");
Expand All @@ -79,14 +81,14 @@ protected PrismObjectWrapper<O> load() {
}
};

detailsPageConfigurationModel = new LoadableModel<>(false) {
detailsPageConfigurationModel = new LoadableDetachableModel<>() {
@Override
protected GuiObjectDetailsPageType load() {
return loadDetailsPageConfiguration(prismObjectModel.getObject()).clone();
return loadDetailsPageConfiguration(null).clone();
}
};

summaryModel = new LoadableModel<O>(false) {
summaryModel = new LoadableDetachableModel<O>() {

@Override
protected O load() {
Expand Down Expand Up @@ -144,11 +146,11 @@ protected PageBase getPageBase() {
}

protected GuiObjectDetailsPageType loadDetailsPageConfiguration(PrismObject<O> prismObject) {
return modelServiceLocator.getCompiledGuiProfile().findObjectDetailsConfiguration(prismObject.getDefinition().getTypeName());
return modelServiceLocator.getCompiledGuiProfile().findObjectDetailsConfiguration(getPrismObject().getDefinition().getTypeName());
}

//TODO change summary panels to wrappers?
public LoadableModel<O> getSummaryModel() {
public LoadableDetachableModel<O> getSummaryModel() {
return summaryModel;
}

Expand Down Expand Up @@ -282,10 +284,10 @@ protected List<ObjectDelta<? extends ObjectType>> getAdditionalModifyDeltas(Oper


public void reset() {
prismObjectModel.reset();
// prismObjectModel.reset();
objectWrapperModel.reset();
detailsPageConfigurationModel.reset();
summaryModel.reset();
// detailsPageConfigurationModel.reset();
// summaryModel.reset();
}

protected ModelServiceLocator getModelServiceLocator() {
Expand All @@ -305,10 +307,13 @@ public PrismObjectWrapper<O> getObjectWrapper() {
}

protected PrismObject<O> getPrismObject() {
if (!objectWrapperModel.isLoaded()) {
return prismObjectModel.getObject();
}
return getObjectWrapper().getObject();
}

public LoadableModel<GuiObjectDetailsPageType> getObjectDetailsPageConfiguration() {
public LoadableDetachableModel<GuiObjectDetailsPageType> getObjectDetailsPageConfiguration() {
return detailsPageConfigurationModel;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ protected SelectableBeanObjectDataProvider<AH> createProvider() {

@Override
public void refreshTable(AjaxRequestTarget target) {
if (getSearchModel().isLoaded() && getSearchModel().getObject()!= null
if (getSearchModel().isAttached() && getSearchModel().getObject()!= null
&& getSearchModel().getObject().isTypeChanged()) {
clearCache();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@
*/
package com.evolveum.midpoint.gui.impl.page.admin.archetype;

import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.impl.page.admin.assignmentholder.FocusDetailsModels;
import com.evolveum.midpoint.gui.impl.page.admin.focus.PageFocusDetails;
import com.evolveum.midpoint.web.page.admin.configuration.PageAdminConfiguration;

import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.security.api.AuthorizationConstants;
Expand Down Expand Up @@ -60,7 +60,7 @@ public Class<ArchetypeType> getType() {
}

@Override
protected Panel createSummaryPanel(String id, LoadableModel<ArchetypeType> summaryModel) {
protected Panel createSummaryPanel(String id, IModel<ArchetypeType> summaryModel) {
return new ArchetypeSummaryPanel(id, summaryModel, getSummaryPanelSpecification());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,15 @@
import com.evolveum.midpoint.xml.ns._public.common.common_3.GuiObjectDetailsPageType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType;

import org.apache.wicket.model.LoadableDetachableModel;

import java.util.List;

public class AssignmentHolderDetailsModel<AH extends AssignmentHolderType> extends ObjectDetailsModels<AH> {

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

public AssignmentHolderDetailsModel(LoadableModel<PrismObject<AH>> prismObjectModel, ModelServiceLocator serviceLocator) {
public AssignmentHolderDetailsModel(LoadableDetachableModel<PrismObject<AH>> prismObjectModel, ModelServiceLocator serviceLocator) {
super(prismObjectModel, serviceLocator);
}

Expand All @@ -35,6 +37,7 @@ protected GuiObjectDetailsPageType loadDetailsPageConfiguration(PrismObject<AH>
GuiObjectDetailsPageType defaultPageConfig = super.loadDetailsPageConfiguration(assignmentHolder);

OperationResult result = new OperationResult("mergeArchetypeConfig");
assignmentHolder = getPrismObject();
try {
ArchetypePolicyType archetypePolicyType = getModelServiceLocator().getModelInteractionService().determineArchetypePolicy(assignmentHolder, result);
return getAdminGuiConfigurationMergeManager().mergeObjectDetailsPageConfiguration(defaultPageConfig, archetypePolicyType, result);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

import com.evolveum.midpoint.web.page.admin.users.component.ExecuteChangeOptionsDto;

import org.apache.wicket.model.LoadableDetachableModel;
import org.jetbrains.annotations.NotNull;

import com.evolveum.midpoint.gui.api.factory.wrapper.PrismObjectWrapperFactory;
Expand Down Expand Up @@ -46,14 +47,14 @@ public class FocusDetailsModels<F extends FocusType> extends AssignmentHolderDet
private static final String DOT_CLASS = FocusDetailsModels.class.getName() + ".";
private static final String OPERATION_LOAD_SHADOW = DOT_CLASS + "loadShadow";

private LoadableModel<List<ShadowWrapper>> projectionModel;
private LoadableDetachableModel<List<ShadowWrapper>> projectionModel;
private final LoadableModel<ExecuteChangeOptionsDto> executeOptionsModel;
private boolean isSelfProfile = false;

public FocusDetailsModels(LoadableModel<PrismObject<F>> prismObjectModel, PageBase serviceLocator) {
public FocusDetailsModels(LoadableDetachableModel<PrismObject<F>> prismObjectModel, PageBase serviceLocator) {
super(prismObjectModel, serviceLocator);

projectionModel = new LoadableModel<>(false) {
projectionModel = new LoadableDetachableModel<>() {
private static final long serialVersionUID = 1L;

@Override
Expand Down Expand Up @@ -210,7 +211,7 @@ private PrismObject<ShadowType> getPrismObjectForShadowWrapper(String oid, boole
return projection;
}

public LoadableModel<List<ShadowWrapper>> getProjectionModel() {
public LoadableDetachableModel<List<ShadowWrapper>> getProjectionModel() {
return projectionModel;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,14 @@
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.xml.ns._public.common.common_3.CaseType;

import org.apache.wicket.model.LoadableDetachableModel;

public class CaseDetailsModels extends AssignmentHolderDetailsModel<CaseType> {

private static final Trace LOGGER = TraceManager.getTrace(CaseDetailsModels.class);
private static final String DOT_CLASS = CaseDetailsModels.class.getName() + ".";

public CaseDetailsModels(LoadableModel<PrismObject<CaseType>> prismObjectModel, PageBase serviceLocator) {
public CaseDetailsModels(LoadableDetachableModel<PrismObject<CaseType>> prismObjectModel, PageBase serviceLocator) {
super(prismObjectModel, serviceLocator);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import com.evolveum.midpoint.xml.ns._public.common.common_3.CaseType;

import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;

@PageDescriptor(
Expand Down Expand Up @@ -51,7 +52,7 @@ public Class<CaseType> getType() {
}

@Override
protected Panel createSummaryPanel(String id, LoadableModel<CaseType> summaryModel) {
protected Panel createSummaryPanel(String id, IModel<CaseType> summaryModel) {
return new CaseSummaryPanel(id, summaryModel, getSummaryPanelSpecification());
}

Expand Down

0 comments on commit 8b216bc

Please sign in to comment.