|
17 | 17 | import com.laker.postman.service.curl.CurlParser; |
18 | 18 | import com.laker.postman.service.har.HarParser; |
19 | 19 | import com.laker.postman.service.http.HttpUtil; |
| 20 | +import com.laker.postman.service.httpfile.HttpFileParser; |
20 | 21 | import com.laker.postman.service.postman.PostmanCollectionParser; |
21 | 22 | import com.laker.postman.util.I18nUtil; |
22 | 23 | import com.laker.postman.util.MessageKeys; |
@@ -149,12 +150,16 @@ private JPopupMenu getImportMenu() { |
149 | 150 | JMenuItem importHarItem = new JMenuItem(I18nUtil.getMessage(MessageKeys.COLLECTIONS_IMPORT_HAR), |
150 | 151 | new FlatSVGIcon("icons/har.svg", 20, 20)); |
151 | 152 | importHarItem.addActionListener(e -> importHarCollection()); |
| 153 | + JMenuItem importHttpItem = new JMenuItem(I18nUtil.getMessage(MessageKeys.COLLECTIONS_IMPORT_HTTP), |
| 154 | + new FlatSVGIcon("icons/http.svg", 20, 20)); |
| 155 | + importHttpItem.addActionListener(e -> importHttpFile()); |
152 | 156 | JMenuItem importCurlItem = new JMenuItem(I18nUtil.getMessage(MessageKeys.COLLECTIONS_IMPORT_CURL), |
153 | 157 | new FlatSVGIcon("icons/curl.svg", 20, 20)); |
154 | 158 | importCurlItem.addActionListener(e -> importCurlToCollection(null)); |
155 | 159 | importMenu.add(importEasyToolsItem); |
156 | 160 | importMenu.add(importPostmanItem); |
157 | 161 | importMenu.add(importHarItem); |
| 162 | + importMenu.add(importHttpItem); |
158 | 163 | importMenu.add(importCurlItem); |
159 | 164 | return importMenu; |
160 | 165 | } |
@@ -254,6 +259,47 @@ private void importHarCollection() { |
254 | 259 | } |
255 | 260 | } |
256 | 261 |
|
| 262 | + // 导入HTTP文件 |
| 263 | + private void importHttpFile() { |
| 264 | + RequestCollectionsLeftPanel leftPanel = SingletonFactory.getInstance(RequestCollectionsLeftPanel.class); |
| 265 | + MainFrame mainFrame = SingletonFactory.getInstance(MainFrame.class); |
| 266 | + JFileChooser fileChooser = new JFileChooser(); |
| 267 | + fileChooser.setDialogTitle(I18nUtil.getMessage(MessageKeys.COLLECTIONS_IMPORT_HTTP_DIALOG_TITLE)); |
| 268 | + // 设置文件过滤器,只显示 .http 文件 |
| 269 | + javax.swing.filechooser.FileFilter httpFilter = new javax.swing.filechooser.FileFilter() { |
| 270 | + @Override |
| 271 | + public boolean accept(File f) { |
| 272 | + return f.isDirectory() || f.getName().toLowerCase().endsWith(".http"); |
| 273 | + } |
| 274 | + |
| 275 | + @Override |
| 276 | + public String getDescription() { |
| 277 | + return "HTTP Files (*.http)"; |
| 278 | + } |
| 279 | + }; |
| 280 | + fileChooser.setFileFilter(httpFilter); |
| 281 | + int userSelection = fileChooser.showOpenDialog(mainFrame); |
| 282 | + if (userSelection == JFileChooser.APPROVE_OPTION) { |
| 283 | + File fileToOpen = fileChooser.getSelectedFile(); |
| 284 | + try { |
| 285 | + String content = FileUtil.readString(fileToOpen, StandardCharsets.UTF_8); |
| 286 | + DefaultMutableTreeNode collectionNode = HttpFileParser.parseHttpFile(content); |
| 287 | + if (collectionNode != null) { |
| 288 | + leftPanel.getRootTreeNode().add(collectionNode); |
| 289 | + leftPanel.getTreeModel().reload(); |
| 290 | + leftPanel.getPersistence().saveRequestGroups(); |
| 291 | + leftPanel.getRequestTree().expandPath(new TreePath(collectionNode.getPath())); |
| 292 | + NotificationUtil.showSuccess(I18nUtil.getMessage(MessageKeys.COLLECTIONS_IMPORT_SUCCESS)); |
| 293 | + } else { |
| 294 | + NotificationUtil.showError(I18nUtil.getMessage(MessageKeys.COLLECTIONS_IMPORT_HTTP_INVALID)); |
| 295 | + } |
| 296 | + } catch (Exception ex) { |
| 297 | + log.error("Import HTTP file error", ex); |
| 298 | + NotificationUtil.showError(I18nUtil.getMessage(MessageKeys.COLLECTIONS_IMPORT_FAIL, ex.getMessage())); |
| 299 | + } |
| 300 | + } |
| 301 | + } |
| 302 | + |
257 | 303 | private void importCurlToCollection(String defaultCurl) { |
258 | 304 | MainFrame mainFrame = SingletonFactory.getInstance(MainFrame.class); |
259 | 305 | String curlText; |
|
0 commit comments