I'm writing an settings admin page for editing a bunch of Boolean settings. I'm using a custom component to edit the boolean values. This custom component needs access to two settings objects (masterSettings, customSettings) to determine if a custom setting is overridden by a master setting.

some pseudocode:

public class SettingsEditPage extends WebPage {

public SettingsEditPage(Settings masterSettings, Settings customSettings) { Model masterModel = new CompoundPropertyModel(new LoadableDetachableModel(masterSettings){/* load method omitted */}); Model cutomModel = new CompoundPropertyModel(new LoadableDetachableModel(customSettings){/* load method omitted */});
                //
add(new SettingsEditComponent("canDeleteWidgets", masterModel, customModel)); add(new SettingsEditComponent("canCreateWidgets", masterModel, customModel)); add(new SettingsEditComponent("allowsReturns", masterModel, customModel));
        }
}

I'd like to use the component id for the SettingsEditComponent as a property expression, like in a CompoundPropertyModel. This would be used to query the master settings first. If that returns null, use the value from the custom settings. I also need the ability to display to the user whether a value came from the masterSettings or customSettings.

It's not clear to me what the best way to architect this is.

Should I make a custom model that wraps both the masterSettings and customSettings objects? It would need a boolean method to determine whether a given propertyExpression is taken from the master or custom settings. If I do this, the SettingsEditComponent constructor would need to only accept that specific model type (or an interface with the boolean method, which is overkill).

Or, should I pass both settings objects into the SettingsEditComponent, as pictured above? It seems like it would be harder to have detachable models in this case (I guess I'd just need to override detatchModels()).

Or, some other option that I'm missing...

Thanks!

--
Sam Barnum
http://www.360works.com
415.865.0952



Reply via email to