Skip to content

Commit a70a329

Browse files
committed
feat: sql tab use plain language format
1 parent 1f7f054 commit a70a329

File tree

6 files changed

+126
-25
lines changed

6 files changed

+126
-25
lines changed

src/main/java/io/github/linyimin/plugin/service/SqlParamGenerateService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public String generateSql(Project project, String methodQualifiedName, String pa
5050
MybatisPojoCompile.compile(project);
5151
}
5252

53-
return MybatisSqlUtils.getSql(mybatisConfig, methodQualifiedName, params);
53+
return MybatisSqlUtils.getSql(mybatisConfig, methodQualifiedName, params, false);
5454

5555
}
5656

@@ -60,7 +60,7 @@ private boolean checkNeedCompile(String mybatisConfig, String methodQualifiedNam
6060
}
6161

6262
try {
63-
MybatisSqlUtils.getSql(mybatisConfig, methodQualifiedName, params);
63+
MybatisSqlUtils.getSql(mybatisConfig, methodQualifiedName, params, true);
6464
} catch (Exception | NoClassDefFoundError e) {
6565
return true;
6666
}

src/main/java/io/github/linyimin/plugin/utils/MybatisSqlUtils.java

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
import com.alibaba.fastjson.JSON;
44
import com.alibaba.fastjson.TypeReference;
55
import com.github.vertical_blank.sqlformatter.SqlFormatter;
6+
import com.intellij.openapi.ui.Messages;
67
import io.github.linyimin.plugin.compile.MybatisPojoCompile;
8+
import io.github.linyimin.plugin.dom.Constant;
79
import org.apache.commons.collections.CollectionUtils;
810
import org.apache.commons.io.IOUtils;
911
import org.apache.ibatis.io.Resources;
@@ -28,17 +30,24 @@
2830
**/
2931
public class MybatisSqlUtils {
3032

31-
public static String getSql(String mybatisConfiguration, String qualifiedMethod, String params) {
33+
public static String getSql(String mybatisConfiguration, String qualifiedMethod, String params, boolean isCheck) {
3234

33-
InputStream in = IOUtils.toInputStream(mybatisConfiguration, Charset.defaultCharset());
34-
Resources.setDefaultClassLoader(MybatisPojoCompile.classLoader);
35+
try {
36+
InputStream in = IOUtils.toInputStream(mybatisConfiguration, Charset.defaultCharset());
37+
Resources.setDefaultClassLoader(MybatisPojoCompile.classLoader);
3538

36-
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
37-
Configuration configuration = sqlSessionFactory.getConfiguration();
39+
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
40+
Configuration configuration = sqlSessionFactory.getConfiguration();
3841

39-
BoundSql sql = getBoundSql(configuration, qualifiedMethod, params);
42+
BoundSql sql = getBoundSql(configuration, qualifiedMethod, params);
4043

41-
return formatSql(configuration, sql);
44+
return formatSql(configuration, sql);
45+
} catch (Exception e) {
46+
if (!isCheck) {
47+
Messages.showInfoMessage(e.getMessage(), Constant.APPLICATION_NAME);
48+
}
49+
throw e;
50+
}
4251
}
4352

4453
private static String formatSql(Configuration configuration, BoundSql boundSql) {

src/main/java/io/github/linyimin/plugin/view/JsonTextField.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import com.intellij.openapi.editor.EditorSettings;
99
import com.intellij.openapi.editor.ex.EditorEx;
1010
import com.intellij.openapi.project.Project;
11-
import com.intellij.openapi.ui.Messages;
1211
import com.intellij.psi.PsiDocumentManager;
1312
import com.intellij.psi.PsiFile;
1413
import com.intellij.psi.codeStyle.CodeStyleManager;
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
package io.github.linyimin.plugin.view;
2+
3+
import com.intellij.lang.Language;
4+
import com.intellij.openapi.application.ReadAction;
5+
import com.intellij.openapi.command.WriteCommandAction;
6+
import com.intellij.openapi.editor.Document;
7+
import com.intellij.openapi.editor.EditorSettings;
8+
import com.intellij.openapi.editor.ex.EditorEx;
9+
import com.intellij.openapi.fileTypes.LanguageFileType;
10+
import com.intellij.openapi.project.Project;
11+
import com.intellij.psi.PsiDocumentManager;
12+
import com.intellij.psi.PsiFile;
13+
import com.intellij.psi.codeStyle.CodeStyleManager;
14+
import com.intellij.ui.ErrorStripeEditorCustomization;
15+
import com.intellij.ui.LanguageTextField;
16+
import org.jetbrains.annotations.NotNull;
17+
import org.jetbrains.annotations.Nullable;
18+
19+
/**
20+
* @author yiminlin
21+
* @date 2022/02/13 2:11 上午
22+
* @description TODO:
23+
**/
24+
public class MyTextField extends LanguageTextField {
25+
private final Project myProject;
26+
private final Language language;
27+
private final LanguageFileType fileType;
28+
29+
public MyTextField(Project myProject, Language language, LanguageFileType fileType) {
30+
super(language, myProject, "", false);
31+
this.myProject = myProject;
32+
this.language = language;
33+
this.fileType = fileType;
34+
}
35+
36+
@Override
37+
protected @NotNull EditorEx createEditor() {
38+
EditorEx editor = super.createEditor();
39+
setUpEditor(editor);
40+
return editor;
41+
}
42+
43+
@Override
44+
public void setText(@Nullable String text) {
45+
super.setFileType(fileType);
46+
ReadAction.nonBlocking(() -> {
47+
Document document = createDocument(text, language, myProject, new SimpleDocumentCreator());
48+
setDocument(document);
49+
PsiFile psiFile = PsiDocumentManager.getInstance(myProject).getPsiFile(document);
50+
if (psiFile != null) {
51+
WriteCommandAction.runWriteCommandAction(
52+
myProject,
53+
() -> {
54+
CodeStyleManager.getInstance(getProject()).reformat(psiFile);
55+
}
56+
);
57+
}
58+
}).executeSynchronously();
59+
}
60+
61+
private void setUpEditor(EditorEx editor) {
62+
editor.offsetToVisualPosition(100);
63+
editor.offsetToLogicalPosition(100);
64+
editor.setHorizontalScrollbarVisible(true);
65+
editor.setShowPlaceholderWhenFocused(true);
66+
editor.setVerticalScrollbarVisible(true);
67+
editor.setCaretEnabled(true);
68+
editor.setEmbeddedIntoDialogWrapper(true);
69+
EditorSettings settings = editor.getSettings();
70+
settings.setLeadingWhitespaceShown(true);
71+
settings.setTrailingWhitespaceShown(true);
72+
settings.setGutterIconsShown(true);
73+
settings.setSmartHome(true);
74+
settings.setLineNumbersShown(true);
75+
settings.setIndentGuidesShown(true);
76+
settings.setUseSoftWraps(true);
77+
settings.setAutoCodeFoldingEnabled(true);
78+
settings.setFoldingOutlineShown(true);
79+
settings.setAllowSingleLogicalLineFolding(true);
80+
settings.setRightMarginShown(true);
81+
settings.setCaretRowShown(true);
82+
settings.setLineMarkerAreaShown(true);
83+
settings.setDndEnabled(true);
84+
//开启右侧的错误条纹
85+
ErrorStripeEditorCustomization.ENABLED.customize(editor);
86+
}
87+
}

src/main/java/io/github/linyimin/plugin/view/MybatisSqlViewerToolWindow.form

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,13 @@
4040
<properties/>
4141
<border type="none"/>
4242
<children>
43-
<component id="28fa2" class="javax.swing.JTextArea" binding="sql">
43+
<grid id="d9725" binding="sql" custom-create="true" layout-manager="GridLayoutManager" row-count="1" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
44+
<margin top="0" left="0" bottom="0" right="0"/>
4445
<constraints/>
45-
<properties>
46-
<editable value="false"/>
47-
</properties>
48-
</component>
46+
<properties/>
47+
<border type="none"/>
48+
<children/>
49+
</grid>
4950
</children>
5051
</scrollpane>
5152
<scrollpane id="1709">

src/main/java/io/github/linyimin/plugin/view/MybatisSqlViewerToolWindow.java

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package io.github.linyimin.plugin.view;
22

3+
import com.intellij.json.JsonFileType;
4+
import com.intellij.json.JsonLanguage;
5+
import com.intellij.openapi.fileTypes.PlainTextFileType;
6+
import com.intellij.openapi.fileTypes.PlainTextLanguage;
37
import com.intellij.openapi.project.Project;
48
import com.intellij.openapi.ui.SimpleToolWindowPanel;
59
import com.intellij.openapi.wm.ToolWindow;
@@ -34,7 +38,7 @@ public class MybatisSqlViewerToolWindow extends SimpleToolWindowPanel {
3438
private JTextArea connectionInfoTextArea;
3539
private JPanel params;
3640
private JTextArea result;
37-
private JTextArea sql;
41+
private JPanel sql;
3842

3943
private final Project myProject;
4044

@@ -68,28 +72,29 @@ public void refresh(Project project) {
6872

6973
methodName.setText(config.getMethod());
7074
result.setText(config.getResult());
71-
((JsonTextField) params).setText(config.getParams());
72-
sql.setText(config.getSql());
75+
((MyTextField) params).setText(config.getParams());
76+
((MyTextField) sql).setText(config.getSql());
77+
7378
// 默认每次打开,都展示第一个tab
7479
tabbedPane.setSelectedIndex(0);
7580
}
7681

7782
private void createUIComponents() {
78-
params = new JsonTextField(this.myProject);
79-
83+
params = new MyTextField(this.myProject, JsonLanguage.INSTANCE, JsonFileType.INSTANCE);
84+
sql = new MyTextField(this.myProject, PlainTextLanguage.INSTANCE, PlainTextFileType.INSTANCE);
8085
}
8186

8287
private void addComponentListener() {
8388
host.getDocument().addDocumentListener(new DatasourceChangeListener());
8489
port.getDocument().addDocumentListener(new DatasourceChangeListener());
8590
database.getDocument().addDocumentListener(new DatasourceChangeListener());
8691

87-
((JsonTextField) params).addDocumentListener(new com.intellij.openapi.editor.event.DocumentListener() {
92+
((MyTextField) params).addDocumentListener(new com.intellij.openapi.editor.event.DocumentListener() {
8893
@Override
8994
public void documentChanged(com.intellij.openapi.editor.event.@NotNull DocumentEvent event) {
9095
MybatisSqlConfiguration config = myProject.getService(MybatisSqlStateComponent.class).getState();
9196
assert config != null;
92-
config.setParams(((JsonTextField) params).getText());
97+
config.setParams(((MyTextField) params).getText());
9398
}
9499
});
95100

@@ -115,7 +120,7 @@ public void documentChanged(com.intellij.openapi.editor.event.@NotNull DocumentE
115120

116121
// 点击sql tab时生成sql
117122
if (selectedIndex == TabbedComponentType.sql.index) {
118-
sql.setText("Loading...");
123+
((MyTextField) sql).setText("Loading...");
119124
generateSql();
120125
}
121126

@@ -137,7 +142,7 @@ private void generateSql() {
137142
String sqlStr = generateService.generateSql(myProject, sqlConfig.getMethod(), sqlConfig.getParams());
138143
sqlConfig.setSql(sqlStr);
139144

140-
sql.setText(sqlStr);
145+
((MyTextField) sql).setText(sqlStr);
141146
}
142147

143148
private void executeSql() {
@@ -146,7 +151,7 @@ private void executeSql() {
146151
String passwordText = String.valueOf(password.getPassword());
147152
String resultText;
148153
try {
149-
resultText = MybatisSqlUtils.executeSql(urlText, user.getText(), passwordText, sql.getText());
154+
resultText = MybatisSqlUtils.executeSql(urlText, user.getText(), passwordText, ((MyTextField) sql).getText());
150155
} catch (SQLException e) {
151156
resultText = "Execute Sql Failed. err: " + e.getMessage();
152157
}

0 commit comments

Comments
 (0)