/** * Обработчик события сохранения 'save' В зависимости от состояния выполняет сохранение * существующего или создание нового объекта. * * <p>Метод используется в случае использования стандартного сервиса работы с данными * JepStandardService. При реализации в прикладном модуле собственного сервиса необходимо в * презентере-наследнике прикладного модуля реализовать перекрывающий метод onSave(). */ public void onSave(SaveEvent event) { if (fields.isValid()) { JepRecord formProperties = fields.getValues(); logger.debug(this.getClass() + ".onSave(): formProperties = " + formProperties); // Для подчинённых объектов добавляется foreignKey. if (JepScopeStack.instance.size() > 1 || !JepScopeStack.instance.peek().isMainActive()) { JepClientUtil.addForeignKey(formProperties); } // Для режима редактирования текущую запись // необходимо дополнить или переписать значениями с формы. if (EDIT.equals(_workstate)) { JepRecord updatedRecord = new JepRecord(currentRecord); updatedRecord.update(formProperties); formProperties = updatedRecord; } // Если не выполнены первоначальные условия проверки, то выходим из сохранения. if (!beforeSave(formProperties)) return; eventBus.setSaveButtonEnabled(false); if (CREATE.equals(_workstate)) { saveOnCreate(formProperties); } else if (EDIT.equals(_workstate)) { saveOnEdit(formProperties); } } else { messageBox.showError(clientFactory.getTexts().errors_dialog_form_incorrectInputData()); } }
/** * {@inheritDoc}<br> * Обрабатываем лишь специфичные для детальной формы состояния. */ @Override protected boolean isAcceptableWorkstate(WorkstateEnum workstate) { return SEARCH.equals(workstate) || CREATE.equals(workstate) || VIEW_DETAILS.equals(workstate) || EDIT.equals(workstate); }
@Override public void actionPerformed(ActionEvent e) { if (EDIT.equals(e.getActionCommand())) { // The user has clicked the cell, so // bring up the dialog. RMSetterDialog<T> dialog = new RMSetterDialog<T>(); dialog.setTitle(title); dialog.setButtonEnabler(buttonEnabler); T result = dialog.showDialog(button, remoteConfig, panelClass, value); if ((result != null) && !result.toString().equals(value.toString())) { value = result; fireEditingStopped(); // Fire any list selection listeners by clearing and reselecting cell int row = table.getSelectedRow(); int col = table.getSelectedColumn(); if (row >= 0 && col >= 0) { table.clearSelection(); table.setRowSelectionInterval(row, row); table.setColumnSelectionInterval(col, col); } } else { fireEditingCanceled(); } } }
/** * Обработчик события Удалить.<br> * Метод вызывает диалог подтверждения удаления и, в обработчике ConfirmCallback, взывает * обработчик непосредственно удаления {@link #onDeleteConfirmation(Boolean, JepRecord) * onDeleteConfirmation}. * * @param event событие Удалить */ public void onDoDelete(DoDeleteEvent event) { // Проверим состояние, чтобы обеспечить срабатывание данного обработчика только при активной // детальной форме. if (VIEW_DETAILS.equals(_workstate) || EDIT.equals(_workstate)) { messageBox.confirmDeletion( false, new ConfirmCallback() { public void onConfirm(Boolean yes) { onDeleteConfirmation(yes, currentRecord); } }); } }
protected void onChangeWorkstate(WorkstateEnum workstate) { fields.changeWorkstate(workstate); if (VIEW_DETAILS.equals(workstate)) { fields.setValues(currentRecord); updateScope(workstate); } else if (EDIT.equals(workstate)) { fields.setValues(currentRecord); updateScope(workstate); } else if (CREATE.equals(workstate)) { fields.clear(); resetScope(); } else if (SEARCH.equals(workstate)) { if (searchTemplate != null) { // Если есть сохраненные поисковые параметры, то восстановим их. fields.setValues(searchTemplate); } else { // Очистим поля, если сохраненные поисковые параметры отсутствуют. fields.clear(); } resetScope(); } }
/** * Обработчик нового состояния. * * @param newWorkstate новое состояние */ protected void onChangeWorkstate(WorkstateEnum newWorkstate) { if (EDIT.equals(newWorkstate)) { resetEditableCard(); } super.onChangeWorkstate(newWorkstate); }