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.DialogWrapper;
import de.marhali.easyi18n.InstanceManager;
import de.marhali.easyi18n.model.action.TranslationCreate;
import de.marhali.easyi18n.model.KeyPath;
import de.marhali.easyi18n.model.Translation;
import de.marhali.easyi18n.model.TranslationValue;
import de.marhali.easyi18n.model.action.TranslationUpdate;
import de.marhali.easyi18n.settings.ProjectSettingsService;
import org.jetbrains.annotations.NotNull;
@ -58,9 +58,10 @@ public class AddDialog extends TranslationDialog {
}
@Override
protected void handleExit(int exitCode) {
protected @Nullable TranslationUpdate handleExit(int exitCode) {
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.DialogWrapper;
import de.marhali.easyi18n.InstanceManager;
import de.marhali.easyi18n.dialog.descriptor.DeleteActionDescriptor;
import de.marhali.easyi18n.model.action.TranslationDelete;
import de.marhali.easyi18n.model.action.TranslationUpdate;
import de.marhali.easyi18n.model.Translation;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
@ -42,14 +42,14 @@ public class EditDialog extends TranslationDialog {
}
@Override
protected void handleExit(int exitCode) {
protected @Nullable TranslationUpdate handleExit(int exitCode) {
switch (exitCode) {
case DialogWrapper.OK_EXIT_CODE:
InstanceManager.get(project).processUpdate(new TranslationUpdate(origin, getState()));
break;
return new TranslationUpdate(origin, getState());
case DeleteActionDescriptor.EXIT_CODE:
InstanceManager.get(project).processUpdate(new TranslationDelete(origin));
break;
return new TranslationDelete(origin);
default:
return null;
}
}
}

View File

@ -4,24 +4,25 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogBuilder;
import com.intellij.ui.components.JBScrollPane;
import com.intellij.ui.components.JBTextField;
import com.intellij.util.Consumer;
import com.intellij.util.ui.FormBuilder;
import de.marhali.easyi18n.InstanceManager;
import de.marhali.easyi18n.model.KeyPath;
import de.marhali.easyi18n.model.Translation;
import de.marhali.easyi18n.model.TranslationValue;
import de.marhali.easyi18n.model.action.TranslationUpdate;
import de.marhali.easyi18n.settings.ProjectSettings;
import de.marhali.easyi18n.settings.ProjectSettingsService;
import de.marhali.easyi18n.util.KeyPathConverter;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import javax.swing.border.EtchedBorder;
import java.awt.*;
import java.util.HashMap;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.*;
/**
* Base for add and edit translation dialogs.
@ -39,6 +40,8 @@ abstract class TranslationDialog {
protected final JTextField keyField;
protected final Map<String, JTextField> localeValueFields;
private final Set<Consumer<TranslationUpdate>> callbacks;
/**
* Constructs a new translation dialog.
* @param project Opened project
@ -50,6 +53,8 @@ abstract class TranslationDialog {
this.converter = new KeyPathConverter(settings);
this.origin = origin;
this.callbacks = new HashSet<>();
// Fields
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, ...
* The implementation needs to set the provided centerPanel as the view panel.
@ -72,8 +86,9 @@ abstract class TranslationDialog {
/**
* Implementation needs to handle exit
* @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.
@ -81,7 +96,12 @@ abstract class TranslationDialog {
*/
public void showAndHandle() {
int exitCode = createDialog().show();
handleExit(exitCode);
TranslationUpdate update = handleExit(exitCode);
if(update != null) {
InstanceManager.get(project).processUpdate(update);
callbacks.forEach(callback -> callback.consume(update));
}
}
/**