Skip to content

Commit

Permalink
[GEOS-8237] UI page table contents get ruined once page is serialized…
Browse files Browse the repository at this point in the history
… and read back
  • Loading branch information
aaime committed Jul 28, 2017
1 parent 15eff2c commit 087759e
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 18 deletions.
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import org.apache.wicket.markup.html.panel.Fragment; import org.apache.wicket.markup.html.panel.Fragment;
import org.apache.wicket.markup.repeater.ReuseIfModelsEqualStrategy; import org.apache.wicket.markup.repeater.ReuseIfModelsEqualStrategy;
import org.apache.wicket.model.IModel; import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.PropertyModel; import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.validation.IValidatable; import org.apache.wicket.validation.IValidatable;
import org.apache.wicket.validation.IValidator; import org.apache.wicket.validation.IValidator;
Expand Down Expand Up @@ -158,8 +159,13 @@ class Editor extends FormComponentPanel<DefaultValueConfigurations> {
public Editor(String id, final Collection<String> enabledDimensionNames, public Editor(String id, final Collection<String> enabledDimensionNames,
IModel<DefaultValueConfigurations> model) { IModel<DefaultValueConfigurations> model) {
super(id, model); super(id, model);
List<Property<DefaultValueConfiguration>> properties = Arrays.asList(DIMENSION, POLICY, IModel<List<Property<DefaultValueConfiguration>>> properties = new LoadableDetachableModel<List<Property<DefaultValueConfiguration>>>() {
DEFAULT_VALUE_EXPRESSION);
@Override
protected List<Property<DefaultValueConfiguration>> load() {
return Arrays.asList(DIMENSION, POLICY, DEFAULT_VALUE_EXPRESSION);
}
};


table = new ReorderableTablePanel<DefaultValueConfiguration>("defaultConfigs", table = new ReorderableTablePanel<DefaultValueConfiguration>("defaultConfigs",
configurations, properties) { configurations, properties) {
Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.markup.repeater.DefaultItemReuseStrategy; import org.apache.wicket.markup.repeater.DefaultItemReuseStrategy;
import org.apache.wicket.model.IModel; import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.Model; import org.apache.wicket.model.Model;
import org.apache.wicket.request.resource.PackageResourceReference; import org.apache.wicket.request.resource.PackageResourceReference;
import org.geoserver.catalog.LayerGroupInfo; import org.geoserver.catalog.LayerGroupInfo;
Expand All @@ -46,19 +47,19 @@ public class LayerGroupEntryPanel extends Panel {


private static final long serialVersionUID = -5483938812185582866L; private static final long serialVersionUID = -5483938812185582866L;


public static Property<LayerGroupEntry> LAYER = new PropertyPlaceholder<LayerGroupEntry>( public static final Property<LayerGroupEntry> LAYER = new PropertyPlaceholder<LayerGroupEntry>(
"layer"); "layer");


public static Property<LayerGroupEntry> DEFAULT_STYLE = new PropertyPlaceholder<LayerGroupEntry>( public static final Property<LayerGroupEntry> DEFAULT_STYLE = new PropertyPlaceholder<LayerGroupEntry>(
"defaultStyle"); "defaultStyle");


public static Property<LayerGroupEntry> STYLE = new PropertyPlaceholder<LayerGroupEntry>( public static final Property<LayerGroupEntry> STYLE = new PropertyPlaceholder<LayerGroupEntry>(
"style"); "style");


public static Property<LayerGroupEntry> REMOVE = new PropertyPlaceholder<LayerGroupEntry>( public static final Property<LayerGroupEntry> REMOVE = new PropertyPlaceholder<LayerGroupEntry>(
"remove"); "remove");


static List<Property<LayerGroupEntry>> PROPERTIES = Arrays.asList(LAYER, DEFAULT_STYLE, STYLE, REMOVE); static final List<Property<LayerGroupEntry>> PROPERTIES = Arrays.asList(LAYER, DEFAULT_STYLE, STYLE, REMOVE);


ModalWindow popupWindow; ModalWindow popupWindow;
GeoServerTablePanel<LayerGroupEntry> layerTable; GeoServerTablePanel<LayerGroupEntry> layerTable;
Expand All @@ -79,8 +80,16 @@ public LayerGroupEntryPanel( String id, LayerGroupInfo layerGroup, IModel<Worksp
add(dialog = new GeoServerDialog("dialog")); add(dialog = new GeoServerDialog("dialog"));
add(new HelpLink("layersHelp").setDialog(dialog)); add(new HelpLink("layersHelp").setDialog(dialog));


//layers // make sure we don't end up serializing the list, but get it fresh from the dataProvider,
add(layerTable = new ReorderableTablePanel<LayerGroupEntry>("layers", items, PROPERTIES) { // to avoid serialization issues seen in GEOS-8273
LoadableDetachableModel<List<Property<LayerGroupEntry>>> propertiesModel = new LoadableDetachableModel<List<Property<LayerGroupEntry>>>() {
@Override
protected List<Property<LayerGroupEntry>> load() {
return PROPERTIES;
}
};
// layers
add(layerTable = new ReorderableTablePanel<LayerGroupEntry>("layers", items, propertiesModel) {


private static final long serialVersionUID = -3270471094618284639L; private static final long serialVersionUID = -3270471094618284639L;


Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
import org.apache.wicket.markup.repeater.ReuseIfModelsEqualStrategy; import org.apache.wicket.markup.repeater.ReuseIfModelsEqualStrategy;
import org.apache.wicket.markup.repeater.data.DataView; import org.apache.wicket.markup.repeater.data.DataView;
import org.apache.wicket.model.IModel; import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.Model; import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel; import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.model.ResourceModel; import org.apache.wicket.model.ResourceModel;
Expand Down Expand Up @@ -208,8 +209,18 @@ protected void populateItem(ListItem<Property<T>> item) {


protected void buildRowListView(final GeoServerDataProvider<T> dataProvider, Item<T> item, protected void buildRowListView(final GeoServerDataProvider<T> dataProvider, Item<T> item,
final IModel<T> itemModel) { final IModel<T> itemModel) {
// make sure we don't serialize the list, but get it fresh from the dataProvider,
// to avoid serialization issues seen in GEOS-8273
IModel propertyList = new LoadableDetachableModel() {

@Override
protected Object load() {
return dataProvider.getVisibleProperties();
}

};
// create one component per viewable property // create one component per viewable property
ListView<Property<T>> items = new ListView<Property<T>>("itemProperties", dataProvider.getVisibleProperties()) { ListView<Property<T>> items = new ListView<Property<T>>("itemProperties", propertyList) {


private static final long serialVersionUID = -4552413955986008990L; private static final long serialVersionUID = -4552413955986008990L;


Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.OddEvenItem; import org.apache.wicket.markup.repeater.OddEvenItem;
import org.apache.wicket.model.IModel; import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.Model; import org.apache.wicket.model.Model;
import org.geoserver.web.data.layergroup.LayerGroupEntry; import org.geoserver.web.data.layergroup.LayerGroupEntry;
import org.geoserver.web.wicket.GeoServerDataProvider.Property; import org.geoserver.web.wicket.GeoServerDataProvider.Property;
Expand Down Expand Up @@ -47,19 +48,30 @@ static class ReorderableDataProvider<T> extends GeoServerDataProvider<T> {


private List<T> items; private List<T> items;


private List<org.geoserver.web.wicket.GeoServerDataProvider.Property<T>> properties; private IModel<List<org.geoserver.web.wicket.GeoServerDataProvider.Property<T>>> properties;


@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public ReorderableDataProvider(List<T> items, List<Property<T>> properties) { public ReorderableDataProvider(List<T> items, IModel<List<Property<T>>> properties) {
this.items = items; this.items = items;
this.properties = new ArrayList<Property<T>>(properties); // make sure we don't serialize the list, but get it fresh from the dataProvider,
this.properties.add(0, (Property<T>) POSITION); // to avoid serialization issues seen in GEOS-8273
this.properties.add(0, (Property<T>) RENDERING_ORDER); this.properties = new LoadableDetachableModel<List<Property<T>>>() {

@Override
protected List<Property<T>> load() {
List result = new ArrayList<Property<T>>(properties.getObject());
result.add(0, (Property<T>) POSITION);
result.add(0, (Property<T>) RENDERING_ORDER);
return result;
}

};

} }


@Override @Override
protected List<Property<T>> getProperties() { protected List<Property<T>> getProperties() {
return properties; return properties.getObject();
} }


@Override @Override
Expand All @@ -76,9 +88,19 @@ protected List<T> getItems() {
static Property<?> POSITION = new PropertyPlaceholder<Object>("position"); static Property<?> POSITION = new PropertyPlaceholder<Object>("position");


static Property<?> RENDERING_ORDER = new PropertyPlaceholder<Object>("order"); static Property<?> RENDERING_ORDER = new PropertyPlaceholder<Object>("order");


/**
* Deprecated, provide a loadable model for properties instead which ensures always the
* same exact property objects are returned (or use equality by name in the getComponentForProperty method)
*/
@SuppressWarnings("serial") @SuppressWarnings("serial")
@Deprecated
public ReorderableTablePanel(String id, List<T> items, List<Property<T>> properties) { public ReorderableTablePanel(String id, List<T> items, List<Property<T>> properties) {
this(id, items, Model.ofList(properties));
}

@SuppressWarnings("serial")
public ReorderableTablePanel(String id, List<T> items, IModel<List<Property<T>>> properties) {
super(id, new ReorderableDataProvider<T>(items, properties)); super(id, new ReorderableDataProvider<T>(items, properties));
this.setOutputMarkupId(true); this.setOutputMarkupId(true);
this.add(new WebTheme()); this.add(new WebTheme());
Expand Down Expand Up @@ -110,7 +132,14 @@ public void onDrop(AjaxRequestTarget target, Transfer transfer, Location locatio
@Override @Override
protected void buildRowListView(GeoServerDataProvider<T> dataProvider, Item<T> item, IModel<T> itemModel) { protected void buildRowListView(GeoServerDataProvider<T> dataProvider, Item<T> item, IModel<T> itemModel) {
// create one component per viewable property // create one component per viewable property
ListView<Property<T>> items = new ListView<Property<T>>("itemProperties", dataProvider.getVisibleProperties()) { IModel propertyList = new LoadableDetachableModel() {

@Override
protected Object load() {
return dataProvider.getVisibleProperties();
}
};
ListView<Property<T>> items = new ListView<Property<T>>("itemProperties", propertyList) {


private static final long serialVersionUID = -7089826211241039856L; private static final long serialVersionUID = -7089826211241039856L;


Expand Down

0 comments on commit 087759e

Please sign in to comment.