diff --git a/src/main/java/xyz/wbsite/dbtool/javafx/ctrl/MainController.java b/src/main/java/xyz/wbsite/dbtool/javafx/ctrl/MainController.java index bf7b8592..c38daa07 100644 --- a/src/main/java/xyz/wbsite/dbtool/javafx/ctrl/MainController.java +++ b/src/main/java/xyz/wbsite/dbtool/javafx/ctrl/MainController.java @@ -207,6 +207,12 @@ public class MainController { Dialog.showApi(); } + @FXML + public void generateDoc(ActionEvent actionEvent) { + Dialog.showDoc(); + } + + @FXML public void generateAndroid(ActionEvent actionEvent) { Dialog.showAndroid(); diff --git a/src/main/java/xyz/wbsite/dbtool/javafx/ctrl/OptionDocController.java b/src/main/java/xyz/wbsite/dbtool/javafx/ctrl/OptionDocController.java new file mode 100644 index 00000000..9effcdf0 --- /dev/null +++ b/src/main/java/xyz/wbsite/dbtool/javafx/ctrl/OptionDocController.java @@ -0,0 +1,521 @@ +package xyz.wbsite.dbtool.javafx.ctrl; + +import javafx.beans.property.SimpleBooleanProperty; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.scene.control.Button; +import javafx.scene.control.CheckBox; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.control.cell.TextFieldTableCell; +import javafx.util.Callback; +import javafx.util.converter.DefaultStringConverter; +import xyz.wbsite.dbtool.javafx.po.Api; +import xyz.wbsite.dbtool.javafx.po.ApiMethod; +import xyz.wbsite.dbtool.javafx.po.Doc; +import xyz.wbsite.dbtool.javafx.tool.ApiClassReader; +import xyz.wbsite.dbtool.javafx.tool.DocClassReader; +import xyz.wbsite.dbtool.javafx.tool.Tool; +import xyz.wbsite.dbtool.javafx.view.DBCheckBoxTableCell; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class OptionDocController { + + @FXML + private TextField modulePath; + @FXML + private TextField docPath; + @FXML + private Button selectModulePath; + @FXML + private Button selectDocPath; + @FXML + private Button start; + @FXML + private Button cancel; + @FXML + private TableView apis; + @FXML + private CheckBox AjaxDoc; + @FXML + private CheckBox ApiDoc; + @FXML + private List data = new ArrayList<>(); + + public Button getSelectModulePath() { + return selectModulePath; + } + + public void setSelectModulePath(Button selectModulePath) { + this.selectModulePath = selectModulePath; + } + + public Button getSelectDocPath() { + return selectDocPath; + } + + public void setSelectDocPath(Button selectDocPath) { + this.selectDocPath = selectDocPath; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public TextField getModulePath() { + return modulePath; + } + + public void setModulePath(TextField modulePath) { + this.modulePath = modulePath; + } + + public TextField getDocPath() { + return docPath; + } + + public void setDocPath(TextField docPath) { + this.docPath = docPath; + } + + public Button getStart() { + return start; + } + + public void setStart(Button start) { + this.start = start; + } + + public Button getCancel() { + return cancel; + } + + public void setCancel(Button cancel) { + this.cancel = cancel; + } + + public TableView getApis() { + return apis; + } + + public void setApis(TableView apis) { + this.apis = apis; + } + + public CheckBox getAjaxDoc() { + return AjaxDoc; + } + + public void setAjaxDoc(CheckBox ajaxDoc) { + AjaxDoc = ajaxDoc; + } + + public CheckBox getApiDoc() { + return ApiDoc; + } + + public void setApiDoc(CheckBox apiDoc) { + ApiDoc = apiDoc; + } + + public void load() { + File moduleFile = new File(modulePath.getText()); + + data.clear(); + if (moduleFile.exists()) { + + List actionPath = Tool.find(moduleFile, "action"); + + if (actionPath.size() == 0) { + return; + } + + File ajaxPath = Tool.createPath(actionPath.get(0), "ajax"); + for (File file : ajaxPath.listFiles()) { + String module = file.getName(); + for (File tar : file.listFiles()) { + try { + String target = tar.getName().replaceAll("Ajax$", "").replaceAll(".java", ""); + DocClassReader docClassReader = new DocClassReader(tar); + + for (ApiMethod apiMethod : docClassReader.getMethodList()) { + Doc doc = new Doc(); + doc.setType("Ajax"); + doc.setModule(module); + doc.setTarget(target); + doc.setRequest(apiMethod.getRequest()); + doc.setResponse(apiMethod.getResponse()); + doc.setMethod(apiMethod.getMethod()); + + List reqFiles = Tool.findRequest(moduleFile, apiMethod.getRequest() + ".java"); + if (reqFiles.size() == 0) { + doc.setError(doc.getError() + "未找到请求"); + } else if (reqFiles.size() > 1) { + doc.setError(doc.getError() + "找到多个请求"); + } else { + doc.setRequestFile(reqFiles.get(0)); + //查找依赖ent + List entities = findEntities(reqFiles.get(0)); + for (String entity : entities) { + doc.getDepEnt().add(entity); + } + + //查找依赖req + List reqss = findReq(reqFiles.get(0)); + for (String string : reqss) { + doc.getDepReq().add(string); + } + } + + List rspfiles = Tool.findResponse(moduleFile, apiMethod.getResponse() + ".java"); + if (rspfiles.size() == 0) { + doc.setError(doc.getError() + "未找到响应"); + } else if (rspfiles.size() > 1) { + doc.setError(doc.getError() + "找到多个响应"); + } else { + doc.setResponseFile(rspfiles.get(0)); + //查找依赖ent + List entities = findEntities(rspfiles.get(0)); + for (String entity : entities) { + doc.getDepEnt().add(entity); + } + + //查找依赖req + List reqss = findReq(rspfiles.get(0)); + for (String string : reqss) { + doc.getDepReq().add(string); + } + } + + doc.setCheck(true); + data.add(doc); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + File apiPath = Tool.createPath(actionPath.get(0), "api"); + for (File file : apiPath.listFiles()) { + String module = file.getName(); + for (File tar : file.listFiles()) { + try { + String target = tar.getName().replaceAll("Api$", "").replaceAll(".java", ""); + DocClassReader docClassReader = new DocClassReader(tar); + + for (ApiMethod apiMethod : docClassReader.getMethodList()) { + Doc doc = new Doc(); + doc.setType("Api"); + doc.setModule(module); + doc.setTarget(target); + doc.setRequest(apiMethod.getRequest()); + doc.setResponse(apiMethod.getResponse()); + doc.setMethod(apiMethod.getMethod()); + + List reqFiles = Tool.findRequest(moduleFile, apiMethod.getRequest() + ".java"); + if (reqFiles.size() == 0) { + doc.setError(doc.getError() + "未找到请求"); + } else if (reqFiles.size() > 1) { + doc.setError(doc.getError() + "找到多个请求"); + } else { + doc.setRequestFile(reqFiles.get(0)); + //查找依赖ent + List entities = findEntities(reqFiles.get(0)); + for (String entity : entities) { + doc.getDepEnt().add(entity); + } + + //查找依赖req + List reqss = findReq(reqFiles.get(0)); + for (String string : reqss) { + doc.getDepReq().add(string); + } + } + + List rspfiles = Tool.findResponse(moduleFile, apiMethod.getResponse() + ".java"); + if (rspfiles.size() == 0) { + doc.setError(doc.getError() + "未找到响应"); + } else if (rspfiles.size() > 1) { + doc.setError(doc.getError() + "找到多个响应"); + } else { + doc.setResponseFile(rspfiles.get(0)); + //查找依赖ent + List entities = findEntities(rspfiles.get(0)); + for (String entity : entities) { + doc.getDepEnt().add(entity); + } + + //查找依赖req + List reqss = findReq(rspfiles.get(0)); + for (String string : reqss) { + doc.getDepReq().add(string); + } + } + + doc.setCheck(true); + data.add(doc); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + initData(); + } + } + + public List findEntities(File file) { + ArrayList strings = new ArrayList<>(); + InputStreamReader read = null;//考虑到编码格式 + try { + read = new InputStreamReader(new FileInputStream(file), "UTF-8"); + BufferedReader bufferedReader = new BufferedReader(read); + String line = null; + while ((line = bufferedReader.readLine()) != null) { + //指定字符串判断处 + if (line.contains(".ent.")) { + Pattern compile = Pattern.compile(".*\\.ent\\.(.*);"); + + Matcher matcher = compile.matcher(line); + + if (matcher.find()) { + String group = matcher.group(1); + strings.add(group); +// System.out.println(group); + } + } + } + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return strings; + } + + public List findReq(File file) { + ArrayList strings = new ArrayList<>(); + InputStreamReader read = null;//考虑到编码格式 + try { + read = new InputStreamReader(new FileInputStream(file), "UTF-8"); + BufferedReader bufferedReader = new BufferedReader(read); + String line = null; + Pattern compile1 = Pattern.compile(".*private\\s([a-zA-Z_]*Request)\\s[a-zA-Z_]*Request;.*"); + Pattern compile2 = Pattern.compile(".*private\\sList<([a-zA-Z_]*Request)>\\s[a-zA-Z_]*Requests;.*"); + Pattern compile3 = Pattern.compile(".*private\\sList<([a-zA-Z_]*Request)>\\s[a-zA-Z_]*RequestList;.*"); + + + while ((line = bufferedReader.readLine()) != null) { + //携带一个Request + if (line.matches(".*private\\s([a-zA-Z_]*Request)\\s[a-zA-Z_]*Request;.*")) { + Matcher matcher = compile1.matcher(line); + + if (matcher.find()) { + String group = matcher.group(1); + + strings.add(group); + System.out.println(group); + } + } + //携带一个List<*Request> *Requests; + if (line.matches(".*private\\sList<([a-zA-Z_]*Request)>\\s[a-zA-Z_]*Requests;.*")) { + Matcher matcher = compile2.matcher(line); + + if (matcher.find()) { + String group = matcher.group(1); + + strings.add(group); + System.out.println(group); + } + } + //携带一个List<*Request> *RequestList; + if (line.matches(".*private\\sList<([a-zA-Z_]*Request)>\\s[a-zA-Z_]*RequestList;.*")) { + Matcher matcher = compile3.matcher(line); + + if (matcher.find()) { + String group = matcher.group(1); + + strings.add(group); + System.out.println(group); + } + } + } + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return strings; + } + + public void initData() { + apis.setEditable(true); + apis.setSortPolicy(new Callback() { + @Override + public Boolean call(TableView param) { + //禁止点击列头排序 + return false; + } + }); + ObservableList columns = apis.getColumns(); + columns.get(0).setCellValueFactory(new PropertyValueFactory("check")); + columns.get(0).setCellFactory(new Callback() { + @Override + public TableCell call(TableColumn param) { + final DBCheckBoxTableCell checkBoxTableCell = new DBCheckBoxTableCell(); + DBCheckBoxTableCell.sCallback sCallback = checkBoxTableCell.new sCallback() { + @Override + public ObservableValue call(Integer param) { + super.call(param); + if (data.get(param).isCheck()) { + return new SimpleBooleanProperty(true); + } else { + return new SimpleBooleanProperty(false); + } + } + }; + checkBoxTableCell.setSelectedStateCallback(sCallback); + checkBoxTableCell.setOnChangeListener(new ChangeListener() { + @Override + public void changed(ObservableValue observable, Boolean oldValue, Boolean newValue) { + int param1 = checkBoxTableCell.getParam(); + Doc api = data.get(param1); + api.setCheck(newValue); + } + }); + return checkBoxTableCell; + } + }); + columns.get(1).setCellValueFactory(new PropertyValueFactory("type")); + columns.get(1).setCellFactory(new Callback() { + @Override + public TableCell call(TableColumn param) { + TextFieldTableCell textFieldTableCell = new TextFieldTableCell(new DefaultStringConverter()) { + @Override + public void updateItem(Object item, boolean empty) { + super.updateItem(item, empty); + } + }; + + textFieldTableCell.setEditable(false); + return textFieldTableCell; + } + }); + columns.get(2).setCellValueFactory(new PropertyValueFactory("module")); + columns.get(2).setCellFactory(new Callback() { + @Override + public TableCell call(TableColumn param) { + TextFieldTableCell textFieldTableCell = new TextFieldTableCell(new DefaultStringConverter()) { + @Override + public void updateItem(Object item, boolean empty) { + super.updateItem(item, empty); + } + }; + + textFieldTableCell.setEditable(false); + return textFieldTableCell; + } + }); + columns.get(3).setCellValueFactory(new PropertyValueFactory("target")); + columns.get(3).setCellFactory(new Callback() { + @Override + public TableCell call(TableColumn param) { + TextFieldTableCell textFieldTableCell = new TextFieldTableCell(new DefaultStringConverter()) { + @Override + public void updateItem(Object item, boolean empty) { + super.updateItem(item, empty); + } + }; + + textFieldTableCell.setEditable(false); + return textFieldTableCell; + } + }); + columns.get(4).setCellValueFactory(new PropertyValueFactory("method")); + columns.get(4).setCellFactory(new Callback() { + @Override + public TableCell call(TableColumn param) { + TextFieldTableCell textFieldTableCell = new TextFieldTableCell(new DefaultStringConverter()) { + @Override + public void updateItem(Object item, boolean empty) { + super.updateItem(item, empty); + } + }; + textFieldTableCell.setEditable(false); + return textFieldTableCell; + } + }); + columns.get(5).setCellValueFactory(new PropertyValueFactory("error")); + columns.get(5).setCellFactory(new Callback() { + @Override + public TableCell call(TableColumn param) { + TextFieldTableCell textFieldTableCell = new TextFieldTableCell(new DefaultStringConverter()) { + @Override + public void updateItem(Object item, boolean empty) { + super.updateItem(item, empty); + } + }; + textFieldTableCell.setEditable(false); + return textFieldTableCell; + } + }); + columns.get(6).setCellValueFactory(new PropertyValueFactory("request")); + columns.get(6).setCellFactory(new Callback() { + @Override + public TableCell call(TableColumn param) { + TextFieldTableCell textFieldTableCell = new TextFieldTableCell(new DefaultStringConverter()) { + @Override + public void updateItem(Object item, boolean empty) { + super.updateItem(item, empty); + } + }; + textFieldTableCell.setEditable(false); + return textFieldTableCell; + } + }); + columns.get(7).setCellValueFactory(new PropertyValueFactory("response")); + columns.get(7).setCellFactory(new Callback() { + @Override + public TableCell call(TableColumn param) { + TextFieldTableCell textFieldTableCell = new TextFieldTableCell(new DefaultStringConverter()) { + @Override + public void updateItem(Object item, boolean empty) { + super.updateItem(item, empty); + } + }; + textFieldTableCell.setEditable(false); + return textFieldTableCell; + } + }); + ObservableList ObservableList = FXCollections.observableArrayList(); + ObservableList.addAll(data); + apis.setItems(ObservableList); + } +} diff --git a/src/main/java/xyz/wbsite/dbtool/javafx/manger/ProjectManager.java b/src/main/java/xyz/wbsite/dbtool/javafx/manger/ProjectManager.java index 0c6cffa3..60dc3e51 100644 --- a/src/main/java/xyz/wbsite/dbtool/javafx/manger/ProjectManager.java +++ b/src/main/java/xyz/wbsite/dbtool/javafx/manger/ProjectManager.java @@ -3,12 +3,14 @@ package xyz.wbsite.dbtool.javafx.manger; import org.springframework.boot.system.ApplicationHome; import xyz.wbsite.dbtool.javafx.manger.callable.AndroidCallable; import xyz.wbsite.dbtool.javafx.manger.callable.ApiCallable; +import xyz.wbsite.dbtool.javafx.manger.callable.DocCallable; import xyz.wbsite.dbtool.javafx.manger.callable.SpringBootCallable; import xyz.wbsite.dbtool.javafx.manger.callable.SpringBootServiceCallable; import xyz.wbsite.dbtool.javafx.manger.callable.VueCallable; import xyz.wbsite.dbtool.javafx.po.AbstractDBmapper; import xyz.wbsite.dbtool.javafx.po.AndroidOption; import xyz.wbsite.dbtool.javafx.po.Api; +import xyz.wbsite.dbtool.javafx.po.Doc; import xyz.wbsite.dbtool.javafx.po.Field; import xyz.wbsite.dbtool.javafx.po.FieldType; import xyz.wbsite.dbtool.javafx.po.Module; @@ -408,6 +410,35 @@ public class ProjectManager { } } + public void generateDoc(File module, File api, List apis) { + if (module.exists()) { + Dialog.showProgress("生成中..."); + + service.execute(new Runnable() { + @Override + public void run() { + boolean mkdirs = api.mkdirs(); + DocCallable docCallable = new DocCallable(module, api, apis); + Future submit = service.submit(docCallable); + try { + Boolean b = (Boolean) submit.get(); + if (!b) { + Dialog.showError("请确认目录结构是否存在或正确!"); + } + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } + + Dialog.stopPopup(); + Dialog.showSuccess("Api生成完毕."); + } + }); + } + } + + public void generate(final String path, AndroidOption option) { Dialog.showProgress("生成中..."); new Thread() { diff --git a/src/main/java/xyz/wbsite/dbtool/javafx/manger/callable/DocCallable.java b/src/main/java/xyz/wbsite/dbtool/javafx/manger/callable/DocCallable.java new file mode 100644 index 00000000..7b0461f0 --- /dev/null +++ b/src/main/java/xyz/wbsite/dbtool/javafx/manger/callable/DocCallable.java @@ -0,0 +1,81 @@ +package xyz.wbsite.dbtool.javafx.manger.callable; + +import xyz.wbsite.dbtool.javafx.manger.FreeMarkerManager; +import xyz.wbsite.dbtool.javafx.manger.ManagerFactory; +import xyz.wbsite.dbtool.javafx.po.Doc; +import xyz.wbsite.dbtool.javafx.tool.RequestReader; +import xyz.wbsite.dbtool.javafx.tool.ResponseReader; +import xyz.wbsite.dbtool.javafx.tool.Tool; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Callable; + +public class DocCallable implements Callable { + + private File module; + private File docFile; + private List ajaxDocList; + private List apiDocList; + private Tool tool = new Tool(); + File docModule; + private FreeMarkerManager freeMarkerManager; + + public DocCallable(File module, File docFile, List docList) { + this.module = module; + this.docFile = docFile; + this.ajaxDocList = docList; + this.apiDocList = docList; + this.freeMarkerManager = ManagerFactory.getFreeMarkerManager(); + } + + public Boolean call() throws Exception { + if (!docFile.exists()) { + docFile.mkdir(); + } else { + Tool.clear(docFile); + } + + List ajaxList = new ArrayList<>(); + List apiList = new ArrayList<>(); + for (Doc doc : ajaxDocList) { + if ("ajax".equals(doc.getType())) { + ajaxList.add(doc); + } + if ("api".equals(doc.getType())) { + apiList.add(doc); + } + } + if (ajaxList.size() > 0) { + File ajax = Tool.createPath(this.docFile, "ajax"); + for (Doc doc : ajaxList) { + if (doc.isCheck()) { + + RequestReader requestReader = new RequestReader(doc.getRequestFile()); +// generateRequest(requestReader); + + ResponseReader responseReader = new ResponseReader(doc.getResponseFile()); +// generateResponse(responseReader); + } + } + } + + if (apiList.size() > 0) { + File api = Tool.createPath(this.docFile, "api"); + for (Doc doc : apiList) { + if (doc.isCheck()) { + RequestReader requestReader = new RequestReader(doc.getRequestFile()); +// generateRequest(requestReader); + + ResponseReader responseReader = new ResponseReader(doc.getResponseFile()); +// generateResponse(responseReader); + } + } + } + + System.out.println("finish"); + return true; + } + +} diff --git a/src/main/java/xyz/wbsite/dbtool/javafx/po/Doc.java b/src/main/java/xyz/wbsite/dbtool/javafx/po/Doc.java new file mode 100644 index 00000000..fa86b30b --- /dev/null +++ b/src/main/java/xyz/wbsite/dbtool/javafx/po/Doc.java @@ -0,0 +1,122 @@ +package xyz.wbsite.dbtool.javafx.po; + +import java.io.File; +import java.util.HashSet; +import java.util.Set; + +public class Doc { + private boolean check; + + private String type; + //目标请求对象 + private String request; + //目标请求响应 + private String response; + private String module; + private String target; + private String method; + + private File requestFile; + private File responseFile; + + private Set depReq = new HashSet<>(); + private Set depEnt = new HashSet<>(); + + private String error = ""; + + public boolean isCheck() { + return check; + } + + public void setCheck(boolean check) { + this.check = check; + } + + public String getRequest() { + return request; + } + + public void setRequest(String request) { + this.request = request; + } + + public String getResponse() { + return response; + } + + public void setResponse(String response) { + this.response = response; + } + + public String getModule() { + return module; + } + + public void setModule(String module) { + this.module = module; + } + + public String getTarget() { + return target; + } + + public void setTarget(String target) { + this.target = target; + } + + public String getMethod() { + return method; + } + + public void setMethod(String method) { + this.method = method; + } + + public File getRequestFile() { + return requestFile; + } + + public void setRequestFile(File requestFile) { + this.requestFile = requestFile; + } + + public File getResponseFile() { + return responseFile; + } + + public void setResponseFile(File responseFile) { + this.responseFile = responseFile; + } + + public Set getDepReq() { + return depReq; + } + + public void setDepReq(Set depReq) { + this.depReq = depReq; + } + + public Set getDepEnt() { + return depEnt; + } + + public void setDepEnt(Set depEnt) { + this.depEnt = depEnt; + } + + public String getError() { + return error; + } + + public void setError(String error) { + this.error = error; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } +} diff --git a/src/main/java/xyz/wbsite/dbtool/javafx/tool/Dialog.java b/src/main/java/xyz/wbsite/dbtool/javafx/tool/Dialog.java index 4beec54a..a935bc79 100644 --- a/src/main/java/xyz/wbsite/dbtool/javafx/tool/Dialog.java +++ b/src/main/java/xyz/wbsite/dbtool/javafx/tool/Dialog.java @@ -510,6 +510,141 @@ public class Dialog { } } + public static void showDoc() { + Stage stage = new Stage(); + stage.initModality(Modality.APPLICATION_MODAL); + + FXMLLoader dbdetailloader = new FXMLLoader(Application.class.getResource("../../../fxml/OptionDoc.fxml")); + try { + dbdetailloader.load(); + Parent root = dbdetailloader.getRoot(); + Scene scene = new Scene(root); + + stage.setScene(scene); + stage.setTitle("Doc生成"); + + OptionDocController controller = dbdetailloader.getController(); + TextField modulePath = controller.getModulePath(); + TextField docPath = controller.getDocPath(); + TableView apis = controller.getApis(); + + controller.getSelectModulePath().setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + DirectoryChooser directoryChooser = new DirectoryChooser(); + Stage stage = new Stage(); + stage.setAlwaysOnTop(true); + File file = directoryChooser.showDialog(stage); + + if (file == null) { + return; + } + modulePath.setText(file.getAbsolutePath()); + + String projectName = ""; + // 尝试查找Windows下的项目名称 + String path = file.getAbsolutePath(); + String pathReplace = Tool.replaceSeparator(path, "#"); + Pattern compile = Pattern.compile("#([^#]*)#src#main#java#"); + Matcher matcher = compile.matcher(pathReplace); + if (matcher.find()) { + projectName = matcher.group(1); + } + + docPath.setText(new File(ProjectManager.getPath(), projectName + "-doc").getAbsolutePath()); + } + }); + + controller.getSelectDocPath().setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + DirectoryChooser directoryChooser = new DirectoryChooser(); + Stage stage = new Stage(); + File file = directoryChooser.showDialog(stage); + + if (file == null) { + return; + } + String text = modulePath.getText(); + File moduleFile = new File(text); + + docPath.setText(new File(file.getAbsolutePath(), moduleFile.getName() + "-doc").getAbsolutePath()); + System.out.println(file.getAbsolutePath()); + } + }); + + docPath.requestFocus(); + modulePath.textProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observable, String oldValue, String newValue) { + Dialog.showProgress("初始化面板"); + Callable callable = Executors.callable(new Runnable() { + @Override + public void run() { + controller.load(); + Dialog.stopPopup(); + } + }); + Executors.newSingleThreadExecutor().submit(callable); + } + }); + + ProjectManager dBmanger = ManagerFactory.getProjectManager(); + + File file = dBmanger.getPath(); + File[] files = file.listFiles(); + s: + for (File f : files) { + if (!f.getName().contains(".")) { + File modul = findAction(f); + if (modul == null) { + modulePath.setText(""); + docPath.setText(""); + } else { + modulePath.setText(f.getAbsolutePath()); + docPath.setText(new File(ProjectManager.getPath(), f.getName() + "-doc").getAbsolutePath()); + break s; + } + } + } + + Button start = controller.getStart(); + start.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + String module = controller.getModulePath().getText(); + String api = controller.getDocPath().getText(); + + if (new File(module).exists()) { + Dialog.showProgress("生成中..."); + dBmanger.generateDoc(new File(module), new File(api), controller.getData()); + Dialog.stopPopup(); + Platform.runLater(new Runnable() { + @Override + public void run() { + stage.close(); + } + }); + } else { + Dialog.showConfirmDialog("项目不存在!"); + } + } + }); + + Button cancel = controller.getCancel(); + cancel.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + stage.close(); + } + }); + + stage.show(); + } catch (IOException e) { + e.printStackTrace(); + } + } + public static void showAndroid() { FXMLLoader dbdetailloader = new FXMLLoader(Application.class.getResource("../../../fxml/androidOption.fxml")); try { diff --git a/src/main/java/xyz/wbsite/dbtool/javafx/tool/DocClassReader.java b/src/main/java/xyz/wbsite/dbtool/javafx/tool/DocClassReader.java new file mode 100644 index 00000000..cdb9abf4 --- /dev/null +++ b/src/main/java/xyz/wbsite/dbtool/javafx/tool/DocClassReader.java @@ -0,0 +1,67 @@ +package xyz.wbsite.dbtool.javafx.tool; + +import xyz.wbsite.dbtool.javafx.po.ApiMethod; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class DocClassReader { + private File javaClass; + + private List methodList; + + public DocClassReader(File javaClass) throws IOException { + this.javaClass = javaClass; + methodList = new ArrayList<>(); + read(); + } + + private void read() throws IOException { + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(javaClass), "utf-8")); + + String line = null; + Pattern compile = Pattern.compile("\\s+public (.*Response)\\s+(.*)\\((.*Request) request.*\\) \\{"); + while ((line = bufferedReader.readLine()) != null) { + + Matcher matcher = compile.matcher(line); + + if (matcher.find()) { + ApiMethod apiMethod = new ApiMethod(); + apiMethod.setResponse(matcher.group(1)); + apiMethod.setMethod(matcher.group(2)); + apiMethod.setRequest(matcher.group(3)); + methodList.add(apiMethod); + } + } + bufferedReader.close(); + } + + public File getJavaClass() { + return javaClass; + } + + public void setJavaClass(File javaClass) { + this.javaClass = javaClass; + } + + public List getMethodList() { + return methodList; + } + + public void setMethodList(List methodList) { + this.methodList = methodList; + } + + public static void main(String[] args) throws IOException { + DocClassReader javaClassReader = new DocClassReader(new File("D:\\wangbing\\Project\\dbtool\\target\\project\\example-web\\src\\main\\java\\com\\example\\action\\api\\system\\DictApi.java")); + + System.out.println(); + } +} diff --git a/src/main/resources/fxml/OptionDoc.fxml b/src/main/resources/fxml/OptionDoc.fxml new file mode 100644 index 00000000..d73bd02a --- /dev/null +++ b/src/main/resources/fxml/OptionDoc.fxml @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + +