From cf2c9c514ab50c6271d865ac031c09acfd1f5f12 Mon Sep 17 00:00:00 2001 From: Oleg Samarin Date: Thu, 21 May 2026 18:25:36 +0300 Subject: [PATCH] Added Add, Rename, and Sort buttons to Model Aliases dialog Co-Authored-By: Claude Sonnet 4.6 --- CHANGELOG.md | 1 + docs/screenshots/model-aliases.png | Bin 0 -> 65081 bytes docs/user-manual.md | 5 ++ pom.xml | 2 +- .../settings/ModelAliasesDialog.java | 76 ++++++++++++++++- .../settings/ModelAliasesDialogTest.java | 78 ++++++++++++++++++ 6 files changed, 160 insertions(+), 2 deletions(-) create mode 100644 docs/screenshots/model-aliases.png create mode 100644 src/test/java/io/github/nbplugins/claudecodegui/settings/ModelAliasesDialogTest.java diff --git a/CHANGELOG.md b/CHANGELOG.md index ab00cfa6..ee8647ae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,4 @@ +- Added ability to manually add, rename, and sort models in the Model Aliases dialog - Fixed missing Claude Code icon in Tools → Options dialog # 1.0.4 (2026-05-18) diff --git a/docs/screenshots/model-aliases.png b/docs/screenshots/model-aliases.png new file mode 100644 index 0000000000000000000000000000000000000000..c754a5aa1f16f351f0906780874ab8562ce73324 GIT binary patch literal 65081 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.github.nbplugins netbeans-plugin-claude-code-gui - 1.1.1-SNAPSHOT + 1.1.3-SNAPSHOT nbm Netbeans Plugin Claude Code GUI NetBeans plugin that provides a GUI for Claude Code CLI — run claude code sessions directly inside the IDE. diff --git a/src/main/java/io/github/nbplugins/claudecodegui/settings/ModelAliasesDialog.java b/src/main/java/io/github/nbplugins/claudecodegui/settings/ModelAliasesDialog.java index df81cb36..1d2a5c9f 100644 --- a/src/main/java/io/github/nbplugins/claudecodegui/settings/ModelAliasesDialog.java +++ b/src/main/java/io/github/nbplugins/claudecodegui/settings/ModelAliasesDialog.java @@ -153,19 +153,25 @@ public Component getTableCellRendererComponent(JTable t, Object value, // --- Button panel (right, vertical) --- JButton fetchBtn = new JButton("Fetch"); + JButton addBtn = new JButton("Add"); + JButton renameBtn = new JButton("Rename"); JButton upBtn = new JButton("\u2191"); JButton downBtn = new JButton("\u2193"); + JButton sortBtn = new JButton("Sort"); JButton deleteBtn = new JButton("Delete"); JButton pruneBtn = new JButton("Prune"); - for (JButton b : new JButton[]{fetchBtn, upBtn, downBtn, deleteBtn, pruneBtn}) { + for (JButton b : new JButton[]{fetchBtn, addBtn, renameBtn, upBtn, downBtn, sortBtn, deleteBtn, pruneBtn}) { b.setAlignmentX(Component.CENTER_ALIGNMENT); b.setMaximumSize(new Dimension(80, 28)); } fetchBtn .addActionListener(e -> onFetch()); + addBtn .addActionListener(e -> onAdd()); + renameBtn.addActionListener(e -> onRename()); upBtn .addActionListener(e -> moveRow(-1)); downBtn .addActionListener(e -> moveRow(+1)); + sortBtn .addActionListener(e -> onSort()); deleteBtn.addActionListener(e -> onDelete()); pruneBtn .addActionListener(e -> onPrune()); @@ -173,10 +179,16 @@ public Component getTableCellRendererComponent(JTable t, Object value, btnPanel.setLayout(new BoxLayout(btnPanel, BoxLayout.Y_AXIS)); btnPanel.add(fetchBtn); btnPanel.add(Box.createVerticalStrut(4)); + btnPanel.add(addBtn); + btnPanel.add(Box.createVerticalStrut(2)); + btnPanel.add(renameBtn); + btnPanel.add(Box.createVerticalStrut(4)); btnPanel.add(upBtn); btnPanel.add(Box.createVerticalStrut(2)); btnPanel.add(downBtn); btnPanel.add(Box.createVerticalStrut(4)); + btnPanel.add(sortBtn); + btnPanel.add(Box.createVerticalStrut(4)); btnPanel.add(deleteBtn); btnPanel.add(Box.createVerticalStrut(4)); btnPanel.add(pruneBtn); @@ -326,6 +338,16 @@ private void moveRow(int delta) { table.setRowSelectionInterval(target, target); } + private void onSort() { + stopEditing(); + List rows = collectModels(); + rows.sort((a, b) -> a.id().compareToIgnoreCase(b.id())); + tableModel.setRowCount(0); + for (ModelAlias m : rows) { + tableModel.addRow(new Object[]{m.id(), m.available(), m.alias()}); + } + } + private void onDelete() { stopEditing(); int sel = table.getSelectedRow(); @@ -341,6 +363,58 @@ private void onPrune() { } } + private void onAdd() { + String id = JOptionPane.showInputDialog(this, "Model ID:", "Add Model", JOptionPane.PLAIN_MESSAGE); + if (id == null) return; + id = id.trim(); + String error = validateModelId(id, -1); + if (error != null) { statusLabel.setText(error); return; } + tableModel.addRow(new Object[]{id, null, ""}); + int newRow = tableModel.getRowCount() - 1; + table.setRowSelectionInterval(newRow, newRow); + table.scrollRectToVisible(table.getCellRect(newRow, 0, true)); + statusLabel.setText(" "); + } + + private void onRename() { + stopEditing(); + int sel = table.getSelectedRow(); + if (sel < 0) return; + String current = (String) tableModel.getValueAt(sel, 0); + String newId = (String) JOptionPane.showInputDialog( + this, "Model ID:", "Rename Model", JOptionPane.PLAIN_MESSAGE, null, null, current); + if (newId == null) return; + newId = newId.trim(); + if (newId.equals(current)) return; + String error = validateModelId(newId, sel); + if (error != null) { statusLabel.setText(error); return; } + tableModel.setValueAt(newId, sel, 0); + tableModel.setValueAt(null, sel, 1); + statusLabel.setText(" "); + } + + String validateModelId(String id, int skipRow) { + List ids = new ArrayList<>(); + for (int i = 0; i < tableModel.getRowCount(); i++) { + ids.add((String) tableModel.getValueAt(i, 0)); + } + return validateModelId(id, ids, skipRow); + } + + /** + * Returns an error message if {@code id} is blank or already exists in + * {@code existingIds} (excluding {@code skipRow}), or {@code null} if valid. + */ + static String validateModelId(String id, List existingIds, int skipRow) { + if (id.isBlank()) return "Model ID must not be blank."; + for (int i = 0; i < existingIds.size(); i++) { + if (i != skipRow && id.equals(existingIds.get(i))) { + return "Model already in the list: " + id; + } + } + return null; + } + private void onOk() { stopEditing(); List models = collectModels(); diff --git a/src/test/java/io/github/nbplugins/claudecodegui/settings/ModelAliasesDialogTest.java b/src/test/java/io/github/nbplugins/claudecodegui/settings/ModelAliasesDialogTest.java new file mode 100644 index 00000000..be9be2a0 --- /dev/null +++ b/src/test/java/io/github/nbplugins/claudecodegui/settings/ModelAliasesDialogTest.java @@ -0,0 +1,78 @@ +package io.github.nbplugins.claudecodegui.settings; + +import java.util.List; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; + +/** + * Unit tests for {@link ModelAliasesDialog} helpers. + */ +class ModelAliasesDialogTest { + + // ------------------------------------------------------------------------- + // parseModelIds + // ------------------------------------------------------------------------- + + @Test + void parseModelIds_emptyString_returnsEmpty() { + assertTrue(ModelAliasesDialog.parseModelIds("").isEmpty()); + } + + @Test + void parseModelIds_nullInput_returnsEmpty() { + assertTrue(ModelAliasesDialog.parseModelIds(null).isEmpty()); + } + + @Test + void parseModelIds_validResponse_returnsIds() { + String json = "{\"data\":[{\"id\":\"claude-sonnet-4-5\"},{\"id\":\"claude-opus-4\"}]}"; + List ids = ModelAliasesDialog.parseModelIds(json); + assertEquals(List.of("claude-sonnet-4-5", "claude-opus-4"), ids); + } + + @Test + void parseModelIds_blankId_skipped() { + String json = "{\"data\":[{\"id\":\"\"},{\"id\":\"claude-haiku-4-5\"}]}"; + List ids = ModelAliasesDialog.parseModelIds(json); + assertEquals(List.of("claude-haiku-4-5"), ids); + } + + @Test + void parseModelIds_noDataKey_stillFindsIds() { + String json = "{\"id\":\"model-x\"}"; + List ids = ModelAliasesDialog.parseModelIds(json); + assertEquals(List.of("model-x"), ids); + } + + // ------------------------------------------------------------------------- + // validateModelId + // ------------------------------------------------------------------------- + + @Test + void validateModelId_blank_returnsError() { + assertNotNull(ModelAliasesDialog.validateModelId("", List.of(), -1)); + assertNotNull(ModelAliasesDialog.validateModelId(" ", List.of(), -1)); + } + + @Test + void validateModelId_uniqueId_returnsNull() { + assertNull(ModelAliasesDialog.validateModelId("new-model", List.of("existing"), -1)); + } + + @Test + void validateModelId_duplicateId_returnsError() { + assertNotNull(ModelAliasesDialog.validateModelId("existing", List.of("existing"), -1)); + } + + @Test + void validateModelId_skipRowAllowsSameId() { + // Rename: skipping row 0 means the same name at row 0 is not a conflict + assertNull(ModelAliasesDialog.validateModelId("existing", List.of("existing"), 0)); + } + + @Test + void validateModelId_skipRowStillCatchesDuplicateInOtherRow() { + // Renaming row 0 to "b" (which is at row 1) → conflict + assertNotNull(ModelAliasesDialog.validateModelId("b", List.of("a", "b"), 0)); + } +}