package org.activityinfo.ui.client.page.config.design; import com.extjs.gxt.ui.client.Style; import com.extjs.gxt.ui.client.binding.Converter; import com.extjs.gxt.ui.client.binding.FieldBinding; import com.extjs.gxt.ui.client.binding.FormBinding; import com.extjs.gxt.ui.client.widget.form.*; import com.google.gwt.safehtml.shared.SafeHtmlUtils; import org.activityinfo.core.shared.workflow.Workflow; import org.activityinfo.i18n.shared.I18N; import org.activityinfo.legacy.shared.model.LocationTypeDTO; import org.activityinfo.ui.client.widget.legacy.MappingComboBox; import org.activityinfo.ui.client.widget.legacy.OnlyValidFieldBinding; public class LocationTypeForm extends AbstractDesignForm { private FormBinding binding; public LocationTypeForm() { binding = new FormBinding(this); final NumberField idField = new NumberField(); idField.setFieldLabel("ID"); idField.setReadOnly(true); binding.addFieldBinding(new FieldBinding(idField, "id")); add(idField); TextField<String> nameField = new TextField<String>(); nameField.setFieldLabel(I18N.CONSTANTS.name()); nameField.setMaxLength(LocationTypeDTO.NAME_MAX_LENGTH); nameField.setAllowBlank(false); binding.addFieldBinding(new OnlyValidFieldBinding(nameField, "name")); add(nameField); final Radio openWorkflow = new Radio(); openWorkflow.setName("workflowId"); openWorkflow.setBoxLabel(SafeHtmlUtils.htmlEscape(I18N.CONSTANTS.openWorkflow())); final Radio closedWorkflow = new Radio(); closedWorkflow.setBoxLabel(SafeHtmlUtils.htmlEscape(I18N.CONSTANTS.closedWorkflow())); closedWorkflow.setName("workflowId"); RadioGroup workflowGroup = new RadioGroup("workflowId"); workflowGroup.setFieldLabel(I18N.CONSTANTS.permissions()); workflowGroup.setOrientation(Style.Orientation.VERTICAL); workflowGroup.add(openWorkflow); workflowGroup.add(closedWorkflow); add(workflowGroup); FieldBinding workflowBinding = new FieldBinding(workflowGroup, "workflowId"); workflowBinding.setConverter(new WorkflowIdConverter(closedWorkflow, openWorkflow)); binding.addFieldBinding(workflowBinding); hideFieldWhenNull(idField); } @Override public FormBinding getBinding() { return binding; } private static class WorkflowIdConverter extends Converter { private final Radio closedWorkflow; private final Radio openWorkflow; public WorkflowIdConverter(Radio closedWorkflow, Radio openWorkflow) { this.closedWorkflow = closedWorkflow; this.openWorkflow = openWorkflow; } @Override public Radio convertModelValue(Object value) { if(Workflow.CLOSED_WORKFLOW_ID.equals(value)) { return closedWorkflow; } else { return openWorkflow; } } @Override public String convertFieldValue(Object value) { if(value == closedWorkflow) { return Workflow.CLOSED_WORKFLOW_ID; } else { return Workflow.OPEN_WORKFLOW_ID; } } } }