Skip to content

Commit

Permalink
factory should not be serializable!
Browse files Browse the repository at this point in the history
  • Loading branch information
katkav committed Feb 1, 2022
1 parent adbf00c commit 2cca7d3
Show file tree
Hide file tree
Showing 6 changed files with 141 additions and 75 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,10 @@ protected <C> IConverter<C> getAutoCompleteConverter(Class<C> type, IConverter<C
return new LookupTableConverter<>(originConverter, lookupTable, getBaseFormComponent(), strict);
}

protected LookupTableType getLookupTable() {
return lookupTable;
}

@Override
public FormComponent<T> getBaseFormComponent() {
return (FormComponent<T>) get(ID_INPUT);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,39 +6,30 @@
*/
package com.evolveum.midpoint.gui.impl.factory.panel;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
import javax.annotation.PostConstruct;
import javax.xml.namespace.QName;

import com.evolveum.midpoint.gui.impl.model.DisplayableModel;
import com.evolveum.midpoint.gui.impl.prism.panel.LookupAutocompletePanel;
import com.evolveum.midpoint.util.DisplayableValue;

import com.evolveum.midpoint.web.component.search.FilterSearchItem;
import com.evolveum.midpoint.web.page.admin.configuration.component.EmptyOnChangeAjaxFormUpdatingBehavior;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.springframework.stereotype.Component;

import com.evolveum.midpoint.common.LocalizationService;
import com.evolveum.midpoint.gui.api.component.autocomplete.AutoCompleteTextPanel;
import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.util.DOMUtil;
import com.evolveum.midpoint.web.component.input.TextPanel;
import com.evolveum.midpoint.web.component.prism.InputPanel;
import com.evolveum.midpoint.xml.ns._public.common.common_3.LookupTableType;

//FIXME serializable
@Component
public class TextPanelFactory<T> extends AbstractInputGuiComponentFactory<T> implements Serializable {
public class TextPanelFactory<T> extends AbstractInputGuiComponentFactory<T> {

@PostConstruct
public void register() {
Expand All @@ -57,46 +48,18 @@ public void register() {
protected InputPanel getPanel(PrismPropertyPanelContext<T> panelCtx) {
LookupTableType lookupTable = panelCtx.getPredefinedValues();
if (lookupTable != null) {
return new AutoCompleteTextPanel<T>(panelCtx.getComponentId(),
panelCtx.getRealValueModel(), panelCtx.getTypeClass(), panelCtx.hasValueEnumerationRef(), lookupTable) {

private static final long serialVersionUID = 1L;

@Override
public Iterator<T> getIterator(String input) {
return (Iterator<T>) prepareAutoCompleteList(input, lookupTable, panelCtx.getPageBase().getLocalizationService()).iterator();
}
};
return new LookupAutocompletePanel<>(panelCtx.getComponentId(), panelCtx.getRealValueModel(), panelCtx.getTypeClass(), panelCtx.hasValueEnumerationRef(), lookupTable);
}

Collection<? extends DisplayableValue<T>> allowedValues = panelCtx.getAllowedValues();
if (CollectionUtils.isNotEmpty(allowedValues)) {
IModel<List<DisplayableValue<T>>> choices = Model.ofList(allowedValues.stream().collect(Collectors.toCollection(ArrayList::new)));
IModel convertModel = new IModel<DisplayableValue<T>>(){
@Override
public DisplayableValue<T> getObject() {
Object value = panelCtx.getRealValueModel().getObject();
for (DisplayableValue<T> dispValue : choices.getObject()) {
if (dispValue.getValue().equals(value)) {
return dispValue;
}
}
return null;
}

@Override
public void setObject(DisplayableValue<T> object) {
panelCtx.getRealValueModel().setObject(object.getValue());
}
};
IModel<List<DisplayableValue<T>>> choices = Model.ofList(new ArrayList<>(allowedValues)); //allowedValues.stream().collect(Collectors.toCollection(ArrayList::new))
DisplayableModel<T> convertModel = new DisplayableModel<>(panelCtx.getRealValueModel(), allowedValues);
return WebComponentUtil.createDropDownChoices(panelCtx.getComponentId(), convertModel, choices, true, panelCtx.getPageBase());
}

return new TextPanel<>(panelCtx.getComponentId(),
panelCtx.getRealValueModel(), panelCtx.getTypeClass(), false);
}

protected List<String> prepareAutoCompleteList(String input, LookupTableType lookupTable, LocalizationService localizationService) {
return WebComponentUtil.prepareAutoCompleteList(lookupTable, input, localizationService);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,26 +6,21 @@
*/
package com.evolveum.midpoint.gui.impl.factory.panel;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.Serializable;
import javax.annotation.PostConstruct;

import org.apache.wicket.ajax.AjaxRequestTarget;
import com.evolveum.midpoint.gui.impl.prism.panel.GenericUploadDownloadPanel;

import org.springframework.stereotype.Component;

import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper;
import com.evolveum.midpoint.util.DOMUtil;
import com.evolveum.midpoint.web.component.input.UploadDownloadPanel;
import com.evolveum.midpoint.web.component.prism.InputPanel;

/**
* @author katkav
*/
//FIXME serializable
@Component
public class UploadDownloadPanelFactory<T> extends AbstractInputGuiComponentFactory<T> implements Serializable {
public class UploadDownloadPanelFactory<T> extends AbstractInputGuiComponentFactory<T> {

@PostConstruct
public void register() {
Expand All @@ -39,29 +34,7 @@ public void register() {

@Override
protected InputPanel getPanel(PrismPropertyPanelContext<T> panelCtx) {
return new UploadDownloadPanel(panelCtx.getComponentId(), false) { //getModel().getObject().isReadonly()

private static final long serialVersionUID = 1L;

@Override
public InputStream getStream() {
T object = panelCtx.getRealValueModel().getObject();
if (object instanceof String) {
return new ByteArrayInputStream(((String) object).getBytes());
}
return object != null ? new ByteArrayInputStream((byte[]) object) : new ByteArrayInputStream(new byte[0]);
}

@Override
public void updateValue(byte[] file) {
panelCtx.getRealValueModel().setObject((T) file);
}

@Override
public void uploadFileFailed(AjaxRequestTarget target) {
super.uploadFileFailed(target);
target.add(((PageBase) getPage()).getFeedbackPanel());
}
};
return new GenericUploadDownloadPanel(panelCtx.getComponentId(), panelCtx.getRealValueModel(), false);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/*
* Copyright (C) 2022 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.model;

import com.evolveum.midpoint.util.DisplayableValue;

import org.apache.wicket.model.IModel;

import java.util.Collection;

public class DisplayableModel<T> implements IModel<DisplayableValue<T>> {

private IModel<T> realValueModel;
private Collection<? extends DisplayableValue<T>> choices;

public DisplayableModel(IModel<T> realValueModel, Collection<? extends DisplayableValue<T>> choices) {
this.realValueModel = realValueModel;
this.choices = choices;
}

@Override
public DisplayableValue<T> getObject() {
Object value = realValueModel.getObject();
for (DisplayableValue<T> dispValue : choices) {
if (dispValue.getValue().equals(value)) {
return dispValue;
}
}
return null;
}

@Override
public void setObject(DisplayableValue<T> object) {
realValueModel.setObject(object.getValue());
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
/*
* Copyright (C) 2022 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.prism.panel;

import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.web.component.input.UploadDownloadPanel;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.model.IModel;

import java.io.ByteArrayInputStream;
import java.io.InputStream;

public class GenericUploadDownloadPanel<T> extends UploadDownloadPanel {

private IModel<T> realValueModel;

public GenericUploadDownloadPanel(String id, IModel<T> realValueModel, boolean isReadOnly) {
super(id, isReadOnly);
this.realValueModel = realValueModel;
}

@Override
public InputStream getStream() {
T object = realValueModel.getObject();
if (object instanceof String) {
return new ByteArrayInputStream(((String) object).getBytes());
}
return object != null ? new ByteArrayInputStream((byte[]) object) : new ByteArrayInputStream(new byte[0]);
}

@Override
public void updateValue(byte[] file) {
realValueModel.setObject((T) file);
}

@Override
public void uploadFileFailed(AjaxRequestTarget target) {
super.uploadFileFailed(target);
target.add(((PageBase) getPage()).getFeedbackPanel());
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/*
* Copyright (C) 2022 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.prism.panel;

import com.evolveum.midpoint.common.LocalizationService;
import com.evolveum.midpoint.gui.api.component.autocomplete.AutoCompleteTextPanel;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.impl.factory.panel.TextPanelFactory;
import com.evolveum.midpoint.xml.ns._public.common.common_3.LookupTableType;

import org.apache.wicket.model.IModel;

import java.util.Iterator;
import java.util.List;

public class LookupAutocompletePanel<T> extends AutoCompleteTextPanel<T> {


public LookupAutocompletePanel(String id, IModel<T> model, Class<T> type, boolean strict, LookupTableType lookupTable) {
super(id, model, type, strict, lookupTable);
}

@Override
public Iterator<T> getIterator(String input) {
return (Iterator<T>) prepareAutoCompleteList(input, getLookupTable(), ((PageBase) getPage()).getLocalizationService()).iterator();
}

protected List<String> prepareAutoCompleteList(String input, LookupTableType lookupTable, LocalizationService localizationService) {
return WebComponentUtil.prepareAutoCompleteList(lookupTable, input, localizationService);
}

}

0 comments on commit 2cca7d3

Please sign in to comment.