package org.activityinfo.ui.client.page.config; /* * #%L * ActivityInfo Server * %% * Copyright (C) 2009 - 2013 UNICEF * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ import com.extjs.gxt.ui.client.event.Events; import com.extjs.gxt.ui.client.event.FieldEvent; import com.extjs.gxt.ui.client.event.Listener; import com.extjs.gxt.ui.client.store.ListStore; import com.extjs.gxt.ui.client.widget.HorizontalPanel; import com.extjs.gxt.ui.client.widget.form.*; import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction; import com.google.gwt.event.shared.EventBus; import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.event.shared.SimpleEventBus; import com.google.gwt.safehtml.shared.SafeHtmlUtils; import com.google.gwt.user.client.ui.Widget; import org.activityinfo.i18n.shared.I18N; import org.activityinfo.legacy.client.AsyncMonitor; import org.activityinfo.legacy.shared.model.ActivityDTO; import org.activityinfo.legacy.shared.model.LockedPeriodDTO; import org.activityinfo.legacy.shared.model.ProjectDTO; import org.activityinfo.legacy.shared.model.UserDatabaseDTO; import org.activityinfo.ui.client.page.config.LockedPeriodsPresenter.AddLockedPeriodView; public class AddLockedPeriodDialog extends FormPanel implements AddLockedPeriodView { private FieldSet fieldsetContainer; private RadioGroup radiogroupContainer; private Radio radioDatabase; private Radio radioActivity; private Radio radioProject; private LabelField labelDatabase; private LabelField labelDatabaseName; private LabelField labelProject; private LabelField labelActivity; private HorizontalPanel panelDatabase; private HorizontalPanel panelActivity; private HorizontalPanel panelProject; private UserDatabaseDTO userDatabase; private ComboBox<ProjectDTO> comboboxProjects; private ListStore<ProjectDTO> storeProjects; private ComboBox<ActivityDTO> comboboxActivities; private ListStore<ActivityDTO> storeActivities; private TextField<String> textfieldName; private DateField datefieldFromDate; private DateField datefieldToDate; private CheckBox checkboxEnabled; private EventBus eventBus = new SimpleEventBus(); public AddLockedPeriodDialog() { super(); initializeComponent(); setStartState(); } @Override public void setUserDatabase(UserDatabaseDTO userDatabase) { this.userDatabase = userDatabase; labelDatabaseName.setValue(userDatabase.getName()); storeProjects.removeAll(); storeProjects.add(userDatabase.getProjects()); storeActivities.removeAll(); storeActivities.add(userDatabase.getActivities()); } private void initializeComponent() { setWidth(400); setHeight(280); setHeaderVisible(false); fieldsetContainer = new FieldSet(); fieldsetContainer.setHeadingHtml(SafeHtmlUtils.htmlEscape(I18N.CONSTANTS.type())); comboboxProjects = new ComboBox<ProjectDTO>(); storeProjects = new ListStore<ProjectDTO>(); comboboxProjects.setStore(storeProjects); comboboxProjects.setDisplayField("name"); comboboxProjects.setForceSelection(true); comboboxProjects.setTriggerAction(TriggerAction.ALL); comboboxProjects.setEditable(false); comboboxActivities = new ComboBox<ActivityDTO>(); storeActivities = new ListStore<ActivityDTO>(); comboboxActivities.setStore(storeActivities); comboboxActivities.setDisplayField("name"); comboboxActivities.setForceSelection(true); comboboxActivities.setTriggerAction(TriggerAction.ALL); comboboxActivities.setEditable(false); radiogroupContainer = new RadioGroup(); radiogroupContainer.setFieldLabel(I18N.CONSTANTS.type()); labelDatabase = new LabelField(I18N.CONSTANTS.database()); labelDatabase.setWidth(100); labelDatabase.setUseHtml(false); labelDatabaseName = new LabelField(); labelDatabaseName.setUseHtml(false); radioDatabase = new Radio(); radioDatabase.setFieldLabel(I18N.CONSTANTS.database()); radiogroupContainer.add(radioDatabase); panelDatabase = new HorizontalPanel(); panelDatabase.add(labelDatabase); panelDatabase.add(radioDatabase); panelDatabase.add(labelDatabaseName); fieldsetContainer.add(panelDatabase); radioActivity = new Radio(); radioActivity.setFieldLabel(I18N.CONSTANTS.activity()); labelActivity = new LabelField(I18N.CONSTANTS.activity()); labelActivity.setWidth(100); labelActivity.setUseHtml(false); panelActivity = new HorizontalPanel(); panelActivity.add(labelActivity); panelActivity.add(radioActivity); panelActivity.add(comboboxActivities); fieldsetContainer.add(panelActivity); radiogroupContainer.add(radioActivity); radioProject = new Radio(); radioProject.setFieldLabel(I18N.CONSTANTS.project()); radioProject.addListener(Events.Change, new Listener<FieldEvent>() { @Override public void handleEvent(FieldEvent be) { comboboxProjects.setEnabled(radioProject.getValue()); } }); labelProject = new LabelField(I18N.CONSTANTS.project()); labelProject.setWidth(100); labelProject.setUseHtml(false); panelProject = new HorizontalPanel(); panelProject.add(labelProject); panelProject.add(radioProject); panelProject.add(comboboxProjects); fieldsetContainer.add(panelProject); radiogroupContainer.add(radioProject); add(fieldsetContainer); textfieldName = new TextField<String>(); textfieldName.setFieldLabel(I18N.CONSTANTS.name()); textfieldName.setAllowBlank(false); add(textfieldName); checkboxEnabled = new CheckBox(); checkboxEnabled.setFieldLabel(I18N.CONSTANTS.enabledColumn()); add(checkboxEnabled); datefieldToDate = new DateField(); datefieldFromDate = new DateField(); datefieldFromDate.setFieldLabel(I18N.CONSTANTS.fromDate()); datefieldFromDate.setAllowBlank(false); datefieldFromDate.setValidator(new Validator() { @Override public String validate(Field<?> field, String value) { if (datefieldFromDate.getValue().after(datefieldToDate.getValue())) { return I18N.CONSTANTS.fromDateIsBeforeToDate(); } return null; } }); add(datefieldFromDate); datefieldToDate.setFieldLabel(I18N.CONSTANTS.toDate()); datefieldToDate.setAllowBlank(false); add(datefieldToDate); radiogroupContainer.addListener(Events.Change, new Listener<FieldEvent>() { @Override public void handleEvent(FieldEvent be) { comboboxActivities.setAllowBlank(!radioActivity.getValue()); comboboxProjects.setAllowBlank(!radioProject.getValue()); comboboxActivities.clearInvalid(); comboboxProjects.clearInvalid(); } }); } @Override public void initialize() { } @Override public AsyncMonitor getLoadingMonitor() { return null; } @Override public void setValue(LockedPeriodDTO value) { if (value != null) { textfieldName.setValue(value.getName()); checkboxEnabled.setValue(value.isEnabled()); datefieldFromDate.setValue(value.getFromDate().atMidnightInMyTimezone()); datefieldToDate.setValue(value.getToDate().atMidnightInMyTimezone()); } } @Override public LockedPeriodDTO getValue() { LockedPeriodDTO newLockedPeriod = new LockedPeriodDTO(); newLockedPeriod.setName(textfieldName.getValue()); newLockedPeriod.setEnabled(checkboxEnabled.getValue()); newLockedPeriod.setFromDate(datefieldFromDate.getValue()); newLockedPeriod.setToDate(datefieldToDate.getValue()); if (radioActivity.getValue() && comboboxActivities.getValue() != null) { newLockedPeriod.setParent(comboboxActivities.getValue()); } if (radioProject.getValue() && comboboxProjects.getValue() != null) { newLockedPeriod.setParent(comboboxProjects.getValue()); } if (radioDatabase.getValue()) { newLockedPeriod.setParent(userDatabase); } return newLockedPeriod; } @Override public Widget asWidget() { return this; } @Override public HandlerRegistration addCreateHandler(org.activityinfo.ui.client.page.config.mvp.CanCreate.CreateHandler handler) { return eventBus.addHandler(CreateEvent.TYPE, handler); } @Override public void create(LockedPeriodDTO item) { } @Override public void setCreateEnabled(boolean createEnabled) { } @Override public HandlerRegistration addCancelCreateHandler(org.activityinfo.ui.client.page.config.mvp.CanCreate .CancelCreateHandler handler) { return eventBus.addHandler(CancelCreateEvent.TYPE, handler); } @Override public HandlerRegistration addStartCreateHandler(org.activityinfo.ui.client.page.config.mvp.CanCreate .StartCreateHandler handler) { return null; } @Override public void startCreate() { this.show(); } private void setStartState() { textfieldName.setValue(null); datefieldFromDate.setValue(null); datefieldToDate.setValue(null); checkboxEnabled.setValue(true); radioActivity.setValue(false); radioProject.setValue(false); radioDatabase.setValue(true); } @Override public void cancelCreate() { setStartState(); this.hide(); } @Override public void update(LockedPeriodDTO item) { } @Override public void cancelUpdate(LockedPeriodDTO item) { } @Override public void cancelUpdateAll() { } @Override public void startUpdate() { } @Override public void setUpdateEnabled(boolean updateEnabled) { } @Override public HandlerRegistration addUpdateHandler(org.activityinfo.ui.client.page.config.mvp.CanUpdate.UpdateHandler handler) { return null; } @Override public HandlerRegistration addCancelUpdateHandler(org.activityinfo.ui.client.page.config.mvp.CanUpdate .CancelUpdateHandler handler) { return null; } @Override public HandlerRegistration addRequestUpdateHandler(org.activityinfo.ui.client.page.config.mvp.CanUpdate .RequestUpdateHandler handler) { return null; } @Override public AsyncMonitor getCreatingMonitor() { return null; } @Override public AsyncMonitor getUpdatingMonitor() { return null; } }