Skip to content

Commit f83b3f7

Browse files
committed
Optimized code
1 parent fd8f186 commit f83b3f7

5 files changed

Lines changed: 84 additions & 71 deletions

File tree

.gitignore

7 Bytes
Binary file not shown.

src/ladysnake/translatorhelper/application/TranslationHelper.java

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,15 @@
88
import javafx.geometry.Pos;
99
import javafx.scene.Scene;
1010
import javafx.scene.control.Button;
11+
import javafx.scene.control.ContextMenu;
12+
import javafx.scene.control.MenuItem;
1113
import javafx.scene.control.TableCell;
1214
import javafx.scene.control.TableColumn;
1315
import javafx.scene.control.TableView;
1416
import javafx.scene.control.cell.MapValueFactory;
1517
import javafx.scene.control.cell.TextFieldTableCell;
1618
import javafx.scene.layout.BorderPane;
1719
import javafx.scene.layout.GridPane;
18-
import javafx.scene.layout.VBox;
1920
import javafx.stage.Stage;
2021
import javafx.util.Callback;
2122
import javafx.util.StringConverter;
@@ -28,8 +29,8 @@ public class TranslationHelper extends Application {
2829
private ControllerFx control;
2930
private Stage stage;
3031
private BorderPane borderPane;
32+
private ContextMenu contextMenu;
3133
private TableView<Map<String, String>> trTable;
32-
private final VBox vbox = new VBox();
3334

3435
@Override
3536
public void start(Stage primaryStage) {
@@ -64,10 +65,13 @@ public void start(Stage primaryStage) {
6465
grid.add(savebtn, 2, 0);
6566
}
6667

67-
{
68-
vbox.setSpacing(5);
69-
vbox.setPadding(new Insets(10, 0, 0, 10));
70-
borderPane.setCenter(vbox);
68+
{ // context menu (right click)
69+
contextMenu = new ContextMenu();
70+
MenuItem item1 = new MenuItem("Delete row");
71+
item1.setOnAction(control::onDeleteRow);
72+
MenuItem item2 = new MenuItem("New translation key");
73+
item2.setOnAction(control::onInsertRow);
74+
contextMenu.getItems().addAll(item1, item2);
7175
}
7276

7377
primaryStage.setScene(scene);
@@ -79,9 +83,10 @@ public void start(Stage primaryStage) {
7983
}
8084
}
8185

82-
public void generateTable(ObservableList<Map<String, String>> allTranslations, String[] langNames) { // translation table
86+
public void generateTable(ObservableList<Map<String, String>> allTranslations, String[] langNames) {
8387
trTable = new TableView<Map<String, String>>(allTranslations);
8488
trTable.setEditable(true);
89+
trTable.setContextMenu(contextMenu);
8590

8691
Callback<TableColumn<Map<String, String>, String>, TableCell<Map<String, String>, String>>
8792
cellFactoryForMap = p -> new TextFieldTableCell<Map<String, String>, String>(new StringConverter<String>() {
@@ -99,12 +104,12 @@ public String fromString(String string) {
99104

100105
trTable.getColumns().clear();
101106

102-
for(String name : langNames) {
103-
TableColumn<Map<String, String>, String> langColumn = new TableColumn<>(name);
107+
for(int i = 0; i < langNames.length; i++) {
108+
TableColumn<Map<String, String>, String> langColumn = new TableColumn<>(langNames[i]);
104109
langColumn.setPrefWidth(300);
105-
langColumn.setCellValueFactory(new MapValueFactory(name));
110+
langColumn.setCellValueFactory(new MapValueFactory(langNames[i]));
106111
langColumn.setCellFactory(cellFactoryForMap);
107-
if(name.equals(Data.TRANSLATION_KEY))
112+
if(i == 0)
108113
langColumn.setOnEditCommit(control::onEditCommitKey);
109114
else
110115
langColumn.setOnEditCommit(control::onEditCommit);
@@ -113,8 +118,7 @@ public String fromString(String string) {
113118

114119
System.out.println(allTranslations);
115120

116-
vbox.getChildren().clear();
117-
vbox.getChildren().add(trTable);
121+
borderPane.setCenter(trTable);
118122
}
119123

120124
public TableView<Map<String, String>> getTable() {

src/ladysnake/translatorhelper/controller/ControllerFx.java

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package ladysnake.translatorhelper.controller;
22

33
import java.io.File;
4+
import java.util.HashMap;
45
import java.util.Map;
56
import java.util.regex.Pattern;
67

78
import javafx.event.ActionEvent;
9+
import javafx.scene.control.Dialog;
810
import javafx.scene.control.TableColumn.CellEditEvent;
11+
import javafx.scene.control.TextInputDialog;
912
import javafx.stage.DirectoryChooser;
1013
import ladysnake.translatorhelper.application.TranslationHelper;
1114
import ladysnake.translatorhelper.model.Data;
@@ -38,7 +41,7 @@ public void onChooseFolder(ActionEvent event) {
3841
for (int i = 0; i < langFiles.length; i++) {
3942
langNames[i+1] = langFiles[i].getName();
4043
}
41-
view.generateTable(data.generateDataInMap(), langNames);
44+
view.generateTable(data.getTranslationList(), langNames);
4245
}
4346
}
4447

@@ -47,13 +50,23 @@ public void onSave(ActionEvent event) {
4750
}
4851

4952
public void onEditCommitKey(CellEditEvent<Map<String, String>, String> event) {
50-
System.out.println("old translation key:" + event.getNewValue());
51-
data.updateTranslationKey(event.getOldValue(), event.getNewValue());
53+
data.updateTranslationKey(event.getOldValue(), event.getNewValue(), event.getTablePosition().getRow());
5254
}
5355

5456
public void onEditCommit(CellEditEvent<Map<String, String>, String> event) {
55-
String translationKey = event.getRowValue().get(Data.TRANSLATION_KEY);
56-
System.out.println("translation key:" + translationKey);
57-
data.updateTranslation(translationKey, event.getNewValue(), event.getTableColumn().getText());
57+
data.updateTranslation(event.getTablePosition().getRow(), event.getNewValue(), event.getTableColumn().getText());
58+
}
59+
60+
public void onDeleteRow(ActionEvent event) {
61+
data.removeTranslation(view.getTable().getSelectionModel().getSelectedIndex());
62+
}
63+
64+
public void onInsertRow(ActionEvent event) {
65+
Dialog<String> d = new TextInputDialog();
66+
d.setGraphic(null);
67+
d.setHeaderText("Enter the new translation key:");
68+
d.setTitle("New translation");
69+
d.showAndWait().ifPresent(data::addTranslation);
70+
view.getTable().sort();
5871
}
5972
}

src/ladysnake/translatorhelper/model/Data.java

Lines changed: 48 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.io.File;
66
import java.io.IOException;
77
import java.nio.file.Files;
8+
import java.util.Comparator;
89
import java.util.HashMap;
910
import java.util.Map;
1011
import java.util.TreeMap;
@@ -13,35 +14,34 @@
1314

1415
import javafx.collections.FXCollections;
1516
import javafx.collections.ObservableList;
17+
import javafx.scene.shape.Path;
1618

1719
public class Data {
1820

1921
public static final String TRANSLATION_KEY = "translation key";
2022

21-
/**key, language file, value*/
22-
private Map<String, Map<String, String>> translations;
23-
/**language file, key, value*/
24-
private Map<String, Map<String, String>> translationFiles;
25-
private static final Pattern translationPattern = Pattern.compile("(.*?)=(.*)");
23+
private static final Pattern TRANSLATION_PATTERN = Pattern.compile("(.*?)=(.*)");
24+
25+
private Map<String, Boolean> editedFiles;
26+
private ObservableList<Map<String, String>> translationList;
2627

2728
public Data() {
28-
translations = new HashMap<>();
29-
translationFiles = new HashMap<>();
29+
editedFiles = new HashMap<>();
30+
translationList = FXCollections.observableArrayList();
3031
}
3132

3233
public void load(File[] langFiles) {
3334
if(langFiles == null || langFiles.length == 0)
3435
return;
3536

36-
translations.clear();
37-
translationFiles.clear();
37+
Map<String, Map<String, String>> translations = new TreeMap<>();
3838

3939
for(File file : langFiles) {
40-
translationFiles.put(file.getName(), new TreeMap<>());
41-
try (BufferedReader reader = Files.newBufferedReader(file.toPath())){
40+
editedFiles.put(file.getName(), false);
41+
try (BufferedReader reader = Files.newBufferedReader(file.toPath())) {
4242
while(reader.ready()) {
4343
String line = reader.readLine();
44-
Matcher m = translationPattern.matcher(line);
44+
Matcher m = TRANSLATION_PATTERN.matcher(line);
4545
if(m.matches()) {
4646
String key = m.group(1);
4747
Map<String, String> values = translations.get(key);
@@ -50,71 +50,72 @@ public void load(File[] langFiles) {
5050
translations.put(m.group(1), values);
5151
}
5252
values.put(file.getName(), m.group(2));
53-
translationFiles.get(file.getName()).put(key, m.group(2));
5453
}
5554
}
5655
} catch (IOException e) {
5756
e.printStackTrace();
5857
}
5958
}
60-
System.out.println("================================");
61-
translations.forEach((key, values) -> System.out.println(key + "=" + values));
62-
System.out.println("================================");
63-
translationFiles.forEach((key, values) -> {
64-
System.out.println(key + ":");
65-
values.forEach((trKey, trValue) -> System.out.println(trKey + "=" + trValue));
66-
System.out.println("-------------------------");
67-
});
59+
60+
this.translationList = generateDataInMap(translations);
6861
}
6962

7063
public void save(File folder) {
71-
translationFiles.forEach((file, values) -> {
72-
try (BufferedWriter writer = Files.newBufferedWriter(new File(folder, file).toPath())) {
73-
for (String key : values.keySet()) {
74-
writer.write(key + "=" + values.get(key));
75-
writer.newLine();
64+
editedFiles.forEach((file, edited) -> {
65+
if(edited) {
66+
try (BufferedWriter writer = Files.newBufferedWriter(new File(folder, file).toPath())) {
67+
for(Map<String, String> pairs : translationList) {
68+
if(pairs.get(file) != null) {
69+
writer.write(pairs.get(TRANSLATION_KEY) + "=" + pairs.get(file));
70+
writer.newLine();
71+
}
72+
}
73+
} catch (IOException e) {
74+
e.printStackTrace();
7675
}
77-
} catch (IOException e) {
78-
e.printStackTrace();
76+
editedFiles.put(file, false);
7977
}
8078
});
8179
}
8280

83-
public ObservableList<Map<String, String>> generateDataInMap() {
81+
private ObservableList<Map<String, String>> generateDataInMap(Map<String, Map<String, String>> translations) {
8482
ObservableList<Map<String, String>> allData = FXCollections.observableArrayList();
8583
translations.forEach((translatKey, values) -> {
8684
Map<String, String> dataRow = new HashMap<>();
87-
88-
System.out.println("\n" + translatKey);
8985

9086
dataRow.put(TRANSLATION_KEY, translatKey);
9187
values.forEach((translatFile, translatValue) -> {
9288
dataRow.put(translatFile, translatValue);
93-
System.out.println(translatFile + ":" + translatValue);
9489
});
9590

9691
allData.add(dataRow);
9792
});
98-
System.out.println(allData);
9993
return allData;
10094
}
10195

102-
public void updateTranslationKey(String oldKey, String newKey) {
103-
Map<String, String> tr = translations.get(oldKey);
104-
translations.remove(oldKey);
105-
translations.put(newKey, tr);
106-
translationFiles.forEach((file, pair) -> {
107-
String value = pair.get(oldKey);
108-
pair.remove(oldKey);
109-
pair.put(newKey, value);
110-
});
96+
public ObservableList<Map<String, String>> getTranslationList() {
97+
return this.translationList;
98+
}
99+
100+
public void updateTranslationKey(String oldKey, String newKey, int selectedRow) {
101+
translationList.get(selectedRow).put(TRANSLATION_KEY, newKey);
102+
translationList.get(selectedRow).keySet().stream().filter(s -> !s.equals(TRANSLATION_KEY)).forEach(l -> editedFiles.put(l, true));
103+
}
104+
105+
public void updateTranslation(int selectedRow, String newValue, String lang) {
106+
editedFiles.put(lang, true);
107+
translationList.get(selectedRow).put(lang, newValue);
108+
}
109+
110+
public void removeTranslation(int selectedRow) {
111+
translationList.remove(selectedRow).keySet().stream().filter(s -> !s.equals(TRANSLATION_KEY)).forEach((lang) -> editedFiles.put(lang, true));
111112
}
112113

113-
public void updateTranslation(String key, String newValue, String lang) {
114-
translations.get(key).put(lang, newValue);
115-
translationFiles.get(lang).put(key, newValue);
116-
System.out.println(translations);
117-
System.out.println(translationFiles);
114+
public void addTranslation(String key) {
115+
Map<String, String> newMap = new HashMap<>();
116+
newMap.put(Data.TRANSLATION_KEY, key);
117+
translationList.add(newMap);
118+
translationList.sort((o1, o2) -> o1.get(TRANSLATION_KEY).compareTo(o2.get(TRANSLATION_KEY)));
118119
}
119120

120121
}

src/ladysnake/translatorhelper/model/TranslationField.java

Lines changed: 0 additions & 5 deletions
This file was deleted.

0 commit comments

Comments
 (0)