Mercurial > dive4elements > river
diff flys-client/src/main/java/org/dive4elements/river/client/client/ui/ModuleSelection.java @ 5834:f507086aa94b
Repaired internal references.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Thu, 25 Apr 2013 12:31:32 +0200 |
parents | flys-client/src/main/java/de/intevation/flys/client/client/ui/ModuleSelection.java@360e22afb98b |
children | 821a02bbfb4e |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-client/src/main/java/org/dive4elements/river/client/client/ui/ModuleSelection.java Thu Apr 25 12:31:32 2013 +0200 @@ -0,0 +1,176 @@ +package de.intevation.flys.client.client.ui; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.rpc.AsyncCallback; + +import com.smartgwt.client.types.VerticalAlignment; +import com.smartgwt.client.util.SC; +import com.smartgwt.client.widgets.Canvas; +import com.smartgwt.client.widgets.Label; +import com.smartgwt.client.widgets.form.DynamicForm; +import com.smartgwt.client.widgets.form.fields.RadioGroupItem; +import com.smartgwt.client.widgets.layout.HLayout; +import com.smartgwt.client.widgets.layout.VLayout; + +import de.intevation.flys.client.client.Config; +import de.intevation.flys.client.client.FLYSConstants; +import de.intevation.flys.client.client.services.ModuleService; +import de.intevation.flys.client.client.services.ModuleServiceAsync; +import de.intevation.flys.client.shared.model.Data; +import de.intevation.flys.client.shared.model.DataItem; +import de.intevation.flys.client.shared.model.DataList; +import de.intevation.flys.client.shared.model.DefaultData; +import de.intevation.flys.client.shared.model.DefaultDataItem; +import de.intevation.flys.client.shared.model.Module; + +import java.util.LinkedHashMap; + +/** + * The ModuleSelection combines the river selection and the module selection in + * one widget. It will display a vertical splitted widget - the upper part will + * render checkboxes for each module, the lower one will display a combobox at + * the left and a map panel on the right to choose the river. + * + * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> + */ +public class ModuleSelection extends MapSelection { + + private static final long serialVersionUID = -5634831815175543328L; + + /** The message class that provides i18n strings.*/ + protected FLYSConstants MESSAGES = GWT.create(FLYSConstants.class); + + /** The module checkboxes.*/ + protected RadioGroupItem radio; + + /** */ + protected Module[] modules; + + /** The ModuleService used to retrieve the available modules of a user.*/ + protected ModuleServiceAsync moduleService = GWT.create(ModuleService.class); + + + /** + * The default constructor. + */ + public ModuleSelection() { + readModules(); + } + + + /** + * This method returns a widget that renders the checkboxes for each module + * and the MapSelection that lets the user choose the river. + * + * @param data The provided rivers. + * + * @return the module selection combined with the river selection. + */ + @Override + public Canvas create(DataList data) { + GWT.log("ModuleSelection - create()"); + VLayout newLayout = new VLayout(); + newLayout.setMembersMargin(10); + newLayout.setAlign(VerticalAlignment.TOP); + Canvas moduleSelection = createWidget(); + + moduleSelection.setHeight(100); + newLayout.setHeight(70); + newLayout.addMember(moduleSelection); + + return newLayout; + } + + private void readModules() { + Config config = Config.getInstance(); + String locale = config.getLocale(); + + moduleService.list(locale, new AsyncCallback<Module[]>() { + @Override + public void onFailure(Throwable caught) { + GWT.log("Could not recieve a list of modules."); + SC.warn(MSG.getString(caught.getMessage())); + } + + @Override + public void onSuccess(Module[] newmodules) { + GWT.log("Retrieved " + newmodules.length + " modules."); + modules = newmodules; + setModules(); + } + }); + } + + private void setModules() { + LinkedHashMap<String, String> values = new LinkedHashMap<String, String>(); + + if (this.modules!= null) { + for(Module module : this.modules) { + values.put(module.getName(), module.getLocalizedName()); + if (module.isSelected()) { + GWT.log("Module " + module.getName() + " is selected."); + if (radio != null) { + radio.setDefaultValue(module.getName()); + GWT.log("Setting " + module.getName() + " as selected."); + } + } + } + } + if (radio != null) { + radio.setValueMap(values); + } + } + + /** + * Creates a widget that displays a checkbox for each module. + * + * @return a widget with checkboxes. + */ + protected Canvas createWidget() { + HLayout layout = new HLayout(); + + Label label = new Label(MESSAGES.module_selection()); + DynamicForm form = new DynamicForm(); + + radio = new RadioGroupItem("plugin"); + + label.setWidth(50); + label.setHeight(25); + + + radio.setShowTitle(false); + radio.setVertical(true); + + setModules(); + + form.setFields(radio); + + layout.addMember(label); + layout.addMember(form); + + return layout; + } + + + /** + * This method prepares the data of two widgets - the module selection and + * the river selection. The returning field will contain the Data that + * represents the module selection at first position, the second position + * stores the Data object that represents the river selection. + * + * @return the Data that was chosen in this widget. + */ + @Override + protected Data[] getData() { + + String module = radio.getValueAsString(); + + DataItem[] items = new DefaultDataItem[1]; + items[0] = new DefaultDataItem(module, module, module); + + Data data = new DefaultData("module", null, null, items); + + return new Data[] {data}; + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :