move update process into parent class

This commit is contained in:
marhali 2022-04-14 15:23:35 +02:00
parent 25c8f0f3db
commit 0a8a92d3f8
3 changed files with 35 additions and 14 deletions

View File

@ -4,11 +4,11 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogBuilder; import com.intellij.openapi.ui.DialogBuilder;
import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.DialogWrapper;
import de.marhali.easyi18n.InstanceManager;
import de.marhali.easyi18n.model.action.TranslationCreate; import de.marhali.easyi18n.model.action.TranslationCreate;
import de.marhali.easyi18n.model.KeyPath; import de.marhali.easyi18n.model.KeyPath;
import de.marhali.easyi18n.model.Translation; import de.marhali.easyi18n.model.Translation;
import de.marhali.easyi18n.model.TranslationValue; import de.marhali.easyi18n.model.TranslationValue;
import de.marhali.easyi18n.model.action.TranslationUpdate;
import de.marhali.easyi18n.settings.ProjectSettingsService; import de.marhali.easyi18n.settings.ProjectSettingsService;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@ -58,9 +58,10 @@ public class AddDialog extends TranslationDialog {
} }
@Override @Override
protected void handleExit(int exitCode) { protected @Nullable TranslationUpdate handleExit(int exitCode) {
if(exitCode == DialogWrapper.OK_EXIT_CODE) { if(exitCode == DialogWrapper.OK_EXIT_CODE) {
InstanceManager.get(project).processUpdate(new TranslationCreate(getState())); return new TranslationCreate(getState());
} }
return null;
} }
} }

View File

@ -4,13 +4,13 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogBuilder; import com.intellij.openapi.ui.DialogBuilder;
import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.DialogWrapper;
import de.marhali.easyi18n.InstanceManager;
import de.marhali.easyi18n.dialog.descriptor.DeleteActionDescriptor; import de.marhali.easyi18n.dialog.descriptor.DeleteActionDescriptor;
import de.marhali.easyi18n.model.action.TranslationDelete; import de.marhali.easyi18n.model.action.TranslationDelete;
import de.marhali.easyi18n.model.action.TranslationUpdate; import de.marhali.easyi18n.model.action.TranslationUpdate;
import de.marhali.easyi18n.model.Translation; import de.marhali.easyi18n.model.Translation;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*; import javax.swing.*;
@ -42,14 +42,14 @@ public class EditDialog extends TranslationDialog {
} }
@Override @Override
protected void handleExit(int exitCode) { protected @Nullable TranslationUpdate handleExit(int exitCode) {
switch (exitCode) { switch (exitCode) {
case DialogWrapper.OK_EXIT_CODE: case DialogWrapper.OK_EXIT_CODE:
InstanceManager.get(project).processUpdate(new TranslationUpdate(origin, getState())); return new TranslationUpdate(origin, getState());
break;
case DeleteActionDescriptor.EXIT_CODE: case DeleteActionDescriptor.EXIT_CODE:
InstanceManager.get(project).processUpdate(new TranslationDelete(origin)); return new TranslationDelete(origin);
break; default:
return null;
} }
} }
} }

View File

@ -4,24 +4,25 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogBuilder; import com.intellij.openapi.ui.DialogBuilder;
import com.intellij.ui.components.JBScrollPane; import com.intellij.ui.components.JBScrollPane;
import com.intellij.ui.components.JBTextField; import com.intellij.ui.components.JBTextField;
import com.intellij.util.Consumer;
import com.intellij.util.ui.FormBuilder; import com.intellij.util.ui.FormBuilder;
import de.marhali.easyi18n.InstanceManager; import de.marhali.easyi18n.InstanceManager;
import de.marhali.easyi18n.model.KeyPath; import de.marhali.easyi18n.model.KeyPath;
import de.marhali.easyi18n.model.Translation; import de.marhali.easyi18n.model.Translation;
import de.marhali.easyi18n.model.TranslationValue; import de.marhali.easyi18n.model.TranslationValue;
import de.marhali.easyi18n.model.action.TranslationUpdate;
import de.marhali.easyi18n.settings.ProjectSettings; import de.marhali.easyi18n.settings.ProjectSettings;
import de.marhali.easyi18n.settings.ProjectSettingsService; import de.marhali.easyi18n.settings.ProjectSettingsService;
import de.marhali.easyi18n.util.KeyPathConverter; import de.marhali.easyi18n.util.KeyPathConverter;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*; import javax.swing.*;
import javax.swing.border.EtchedBorder; import javax.swing.border.EtchedBorder;
import java.awt.*; import java.awt.*;
import java.util.HashMap; import java.util.*;
import java.util.Map;
import java.util.ResourceBundle;
/** /**
* Base for add and edit translation dialogs. * Base for add and edit translation dialogs.
@ -39,6 +40,8 @@ abstract class TranslationDialog {
protected final JTextField keyField; protected final JTextField keyField;
protected final Map<String, JTextField> localeValueFields; protected final Map<String, JTextField> localeValueFields;
private final Set<Consumer<TranslationUpdate>> callbacks;
/** /**
* Constructs a new translation dialog. * Constructs a new translation dialog.
* @param project Opened project * @param project Opened project
@ -50,6 +53,8 @@ abstract class TranslationDialog {
this.converter = new KeyPathConverter(settings); this.converter = new KeyPathConverter(settings);
this.origin = origin; this.origin = origin;
this.callbacks = new HashSet<>();
// Fields // Fields
TranslationValue value = origin.getValue(); TranslationValue value = origin.getValue();
@ -61,6 +66,15 @@ abstract class TranslationDialog {
} }
} }
/**
* Registers a callback that is called on dialog close with the final state.
* If the user aborts the dialog no callback is called.
* @param callback Callback to register
*/
public void registerCallback(Consumer<TranslationUpdate> callback) {
callbacks.add(callback);
}
/** /**
* Implementation needs to configure the dialog. E.g. title, actions, ... * Implementation needs to configure the dialog. E.g. title, actions, ...
* The implementation needs to set the provided centerPanel as the view panel. * The implementation needs to set the provided centerPanel as the view panel.
@ -72,8 +86,9 @@ abstract class TranslationDialog {
/** /**
* Implementation needs to handle exit * Implementation needs to handle exit
* @param exitCode See {@link com.intellij.openapi.ui.DialogWrapper} for exit codes * @param exitCode See {@link com.intellij.openapi.ui.DialogWrapper} for exit codes
* @return update conclusion, null if aborted
*/ */
protected abstract void handleExit(int exitCode); protected abstract @Nullable TranslationUpdate handleExit(int exitCode);
/** /**
* Opens the translation modal and applies the appropriate logic on modal close. * Opens the translation modal and applies the appropriate logic on modal close.
@ -81,7 +96,12 @@ abstract class TranslationDialog {
*/ */
public void showAndHandle() { public void showAndHandle() {
int exitCode = createDialog().show(); int exitCode = createDialog().show();
handleExit(exitCode); TranslationUpdate update = handleExit(exitCode);
if(update != null) {
InstanceManager.get(project).processUpdate(update);
callbacks.forEach(callback -> callback.consume(update));
}
} }
/** /**