Skip to content

Commit 55d69d5

Browse files
committed
✨ feat(GoORMHelperSettingForm): Add tag mode combo box for setting form #31
1 parent 10e2596 commit 55d69d5

File tree

13 files changed

+123
-40
lines changed

13 files changed

+123
-40
lines changed

src/main/java/com/github/maiqingqiang/goormhelper/Types.java

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.github.maiqingqiang.goormhelper.sql2struct.impl.SQL2GormStruct;
77
import com.github.maiqingqiang.goormhelper.sql2struct.impl.SQL2Struct;
88
import com.github.maiqingqiang.goormhelper.sql2struct.impl.SQL2XormStruct;
9+
import com.intellij.openapi.project.Project;
910

1011
import java.util.List;
1112
import java.util.regex.Pattern;
@@ -61,12 +62,12 @@ public String toString() {
6162
return name;
6263
}
6364

64-
public ISQL2Struct sql2Struct(String sql, DbType dbType) {
65+
public ISQL2Struct sql2Struct(Project project, String sql, DbType dbType) {
6566
return switch (this) {
66-
case General -> new SQL2Struct(sql, dbType);
67-
case Gorm -> new SQL2GormStruct(sql, dbType);
68-
case Xorm -> new SQL2XormStruct(sql, dbType);
69-
case GoFrame -> new SQL2GoFrameStruct(sql, dbType);
67+
case General -> new SQL2Struct(project, sql, dbType);
68+
case Gorm -> new SQL2GormStruct(project, sql, dbType);
69+
case Xorm -> new SQL2XormStruct(project, sql, dbType);
70+
case GoFrame -> new SQL2GoFrameStruct(project, sql, dbType);
7071
default -> null;
7172
};
7273
}
@@ -96,4 +97,20 @@ public String toString() {
9697
return name;
9798
}
9899
}
100+
101+
enum TagMode {
102+
Compact(GoORMHelperBundle.message("tagMode.Compact")),
103+
Full(GoORMHelperBundle.message("tagMode.Full"));
104+
105+
private final String name;
106+
107+
@Override
108+
public String toString() {
109+
return name;
110+
}
111+
112+
TagMode(String name) {
113+
this.name = name;
114+
}
115+
}
99116
}

src/main/java/com/github/maiqingqiang/goormhelper/actions/EditorPasteListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ protected void doExecute(@NotNull Editor editor, @Nullable Caret caret, DataCont
8585
return;
8686
}
8787

88-
ISQL2Struct sql2Struct = finalSelectedORM.sql2Struct(text, finalSelectedDatabase.toDbType());
88+
ISQL2Struct sql2Struct = finalSelectedORM.sql2Struct(project, text, finalSelectedDatabase.toDbType());
8989
if (sql2Struct == null) {
9090
return;
9191
}

src/main/java/com/github/maiqingqiang/goormhelper/actions/SQL2StructAction.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.intellij.openapi.command.WriteCommandAction;
1111
import com.intellij.openapi.editor.Caret;
1212
import com.intellij.openapi.editor.Editor;
13+
import com.intellij.openapi.project.Project;
1314
import org.jetbrains.annotations.NotNull;
1415

1516
import java.util.Objects;
@@ -19,13 +20,15 @@ public class SQL2StructAction extends AnAction {
1920
@Override
2021
public void actionPerformed(@NotNull AnActionEvent e) {
2122

22-
GoORMHelperProjectSettings.State state = Objects.requireNonNull(GoORMHelperProjectSettings.getInstance(Objects.requireNonNull(e.getProject())).getState());
23+
Project project = e.getProject();
24+
25+
GoORMHelperProjectSettings.State state = Objects.requireNonNull(GoORMHelperProjectSettings.getInstance(Objects.requireNonNull(project)).getState());
2326

2427
Types.ORM selectedORM = state.defaultORM;
2528
Types.Database selectedDatabase = state.defaultDatabase;
2629

2730
if (selectedORM == Types.ORM.AskEveryTime || selectedDatabase == Types.Database.AskEveryTime) {
28-
ConvertSettingDialogWrapper wrapper = new ConvertSettingDialogWrapper(e.getProject());
31+
ConvertSettingDialogWrapper wrapper = new ConvertSettingDialogWrapper(project);
2932
if (!wrapper.showAndGet()) return;
3033

3134
selectedORM = (Types.ORM) wrapper.getOrmComponent().getComponent().getSelectedItem();
@@ -44,10 +47,10 @@ public void actionPerformed(@NotNull AnActionEvent e) {
4447
final Types.ORM finalSelectedORM = selectedORM;
4548
final Types.Database finalSelectedDatabase = selectedDatabase;
4649

47-
WriteCommandAction.runWriteCommandAction(e.getProject(), () -> {
50+
WriteCommandAction.runWriteCommandAction(project, () -> {
4851
if (text == null || text.isEmpty() || finalSelectedORM == null || finalSelectedDatabase == null) return;
4952

50-
ISQL2Struct sql2Struct = finalSelectedORM.sql2Struct(text, finalSelectedDatabase.toDbType());
53+
ISQL2Struct sql2Struct = finalSelectedORM.sql2Struct(project, text, finalSelectedDatabase.toDbType());
5154

5255
editor.getDocument().replaceString(start, end, sql2Struct.convert());
5356
});

src/main/java/com/github/maiqingqiang/goormhelper/services/GoORMHelperProjectSettings.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ public void setDefaultDatabase(Types.Database database) {
4444
state.defaultDatabase = database;
4545
}
4646

47+
public void setDefaultTagMode(Types.TagMode tagMode) {
48+
state.defaultTagMode = tagMode;
49+
}
50+
4751
public void setEnableGlobalScan(boolean enable) {
4852
state.enableGlobalScan = enable;
4953
}
@@ -59,6 +63,7 @@ public void setScanPathList(List<String> scanPathList) {
5963
public static class State extends SimpleModificationTracker {
6064
public Types.ORM defaultORM = Types.ORM.AskEveryTime;
6165
public Types.Database defaultDatabase = Types.Database.AskEveryTime;
66+
public Types.TagMode defaultTagMode = Types.TagMode.Full;
6267
public boolean enableGlobalScan = true;
6368

6469

src/main/java/com/github/maiqingqiang/goormhelper/sql2struct/impl/SQL2GoFrameStruct.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@
22

33
import com.alibaba.druid.DbType;
44
import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition;
5+
import com.intellij.openapi.project.Project;
56
import org.jetbrains.annotations.NotNull;
67

78
public class SQL2GoFrameStruct extends SQL2Struct {
8-
public SQL2GoFrameStruct(String sql, DbType dbType) {
9-
super(sql, dbType);
9+
public SQL2GoFrameStruct(Project project, String sql, DbType dbType) {
10+
super(project, sql, dbType);
1011
}
1112

1213
@Override

src/main/java/com/github/maiqingqiang/goormhelper/sql2struct/impl/SQL2GormStruct.java

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,37 @@
22

33
import com.alibaba.druid.DbType;
44
import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition;
5+
import com.github.maiqingqiang.goormhelper.Types;
6+
import com.github.maiqingqiang.goormhelper.services.GoORMHelperProjectSettings;
57
import com.github.maiqingqiang.goormhelper.utils.Strings;
8+
import com.intellij.openapi.project.Project;
69
import org.jetbrains.annotations.NotNull;
710

11+
import java.util.Objects;
12+
813
public class SQL2GormStruct extends SQL2Struct {
9-
public SQL2GormStruct(String sql, DbType dbType) {
10-
super(sql, dbType);
14+
public SQL2GormStruct(Project project, String sql, DbType dbType) {
15+
super(project, sql, dbType);
1116
}
1217

1318
@Override
1419
protected void generateORMTag(@NotNull StringBuilder stringBuilder, @NotNull SQLColumnDefinition definition) {
15-
stringBuilder.append("gorm:\"")
16-
.append("column:").append(getColumn(definition)).append(";")
17-
.append("type:").append(getDBType(definition)).append(";");
20+
GoORMHelperProjectSettings.State state = Objects.requireNonNull(GoORMHelperProjectSettings.getInstance(project).getState());
21+
22+
if (state.defaultTagMode == Types.TagMode.Compact || state.defaultTagMode == Types.TagMode.Full) {
23+
stringBuilder.append("gorm:\"")
24+
.append("column:").append(getColumn(definition)).append(";");
25+
}
26+
27+
if (state.defaultTagMode == Types.TagMode.Full) {
28+
appendOriginalTagAttributes(stringBuilder, definition);
29+
}
30+
31+
stringBuilder.append("\" ");
32+
}
33+
34+
private void appendOriginalTagAttributes(@NotNull StringBuilder stringBuilder, @NotNull SQLColumnDefinition definition) {
35+
stringBuilder.append("type:").append(getDBType(definition)).append(";");
1836

1937
String comment = getComment(definition);
2038
if (!comment.isEmpty()) {
@@ -31,12 +49,9 @@ protected void generateORMTag(@NotNull StringBuilder stringBuilder, @NotNull SQL
3149

3250
if (definition.getDefaultExpr() != null) {
3351
String def = Strings.clearSingleQuotn(definition.getDefaultExpr().toString());
34-
3552
if (!def.isEmpty()) {
3653
stringBuilder.append("default:").append(def).append(";");
3754
}
3855
}
39-
40-
stringBuilder.append("\" ");
4156
}
42-
}
57+
}

src/main/java/com/github/maiqingqiang/goormhelper/sql2struct/impl/SQL2Struct.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.github.maiqingqiang.goormhelper.sql2struct.ISQL2Struct;
1111
import com.github.maiqingqiang.goormhelper.utils.Strings;
1212
import com.google.common.base.CaseFormat;
13+
import com.intellij.openapi.project.Project;
1314
import org.jetbrains.annotations.NotNull;
1415

1516
import java.util.List;
@@ -63,11 +64,13 @@ public class SQL2Struct implements ISQL2Struct {
6364
private static final String defaultUnsignedDataType = "uint32";
6465
private final String sql;
6566
private final DbType dbType;
67+
protected final Project project;
6668

6769

68-
public SQL2Struct(String sql, DbType dbType) {
70+
public SQL2Struct(Project project, String sql, DbType dbType) {
6971
this.sql = sql;
7072
this.dbType = dbType;
73+
this.project = project;
7174
}
7275

7376
public String convert() {

src/main/java/com/github/maiqingqiang/goormhelper/sql2struct/impl/SQL2XormStruct.java

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,37 @@
22

33
import com.alibaba.druid.DbType;
44
import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition;
5+
import com.github.maiqingqiang.goormhelper.Types;
6+
import com.github.maiqingqiang.goormhelper.services.GoORMHelperProjectSettings;
57
import com.github.maiqingqiang.goormhelper.utils.Strings;
8+
import com.intellij.openapi.project.Project;
69
import org.jetbrains.annotations.NotNull;
710

11+
import java.util.Objects;
12+
813
public class SQL2XormStruct extends SQL2Struct {
9-
public SQL2XormStruct(String sql, DbType dbType) {
10-
super(sql, dbType);
14+
public SQL2XormStruct(Project project, String sql, DbType dbType) {
15+
super(project, sql, dbType);
1116
}
1217

1318
@Override
1419
protected void generateORMTag(@NotNull StringBuilder stringBuilder, @NotNull SQLColumnDefinition definition) {
15-
stringBuilder.append("xorm:\"");
20+
GoORMHelperProjectSettings.State state = Objects.requireNonNull(GoORMHelperProjectSettings.getInstance(project).getState());
21+
22+
if (state.defaultTagMode == Types.TagMode.Compact || state.defaultTagMode == Types.TagMode.Full) {
23+
stringBuilder.append("xorm:\"")
24+
.append(getDBType(definition)).append(" ")
25+
.append("'").append(getColumn(definition)).append("' ");
26+
}
27+
28+
if (state.defaultTagMode == Types.TagMode.Full) {
29+
appendOriginalTagAttributes(stringBuilder, definition);
30+
}
1631

17-
stringBuilder.append(getDBType(definition)).append(" ");
18-
stringBuilder.append("'").append(getColumn(definition)).append("' ");
32+
stringBuilder.append("\" ");
33+
}
1934

35+
private void appendOriginalTagAttributes(@NotNull StringBuilder stringBuilder, @NotNull SQLColumnDefinition definition) {
2036
String comment = getComment(definition);
2137
if (!comment.isEmpty()) {
2238
stringBuilder.append("comment('").append(comment).append("') ");
@@ -30,18 +46,15 @@ protected void generateORMTag(@NotNull StringBuilder stringBuilder, @NotNull SQL
3046
stringBuilder.append("autoincr ");
3147
}
3248

33-
if (definition.containsNotNullConstaint()) {
49+
if (definition.containsNotNullConstraint()) {
3450
stringBuilder.append("notnull ");
3551
}
3652

3753
if (definition.getDefaultExpr() != null) {
3854
String def = Strings.clearSingleQuotn(definition.getDefaultExpr().toString());
39-
4055
if (!def.isEmpty()) {
4156
stringBuilder.append("default ").append(def).append(" ");
4257
}
4358
}
44-
45-
stringBuilder.append("\" ");
4659
}
47-
}
60+
}

src/main/java/com/github/maiqingqiang/goormhelper/ui/GoORMHelperSettingForm.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ public class GoORMHelperSettingForm implements ConfigurableUi<GoORMHelperProject
2929
private JPanel panel;
3030
private ComboBox<Types.ORM> ormComboBox;
3131
private ComboBox<Types.Database> databaseComboBox;
32+
private ComboBox<Types.TagMode> tagModeComboBox;
33+
3234
private JCheckBox enableGlobalScanCheckBox;
3335
private ListTableModel<String> scanPathListTableModel;
3436
// private TextFieldWithBrowseButton sqlPathTextField;
@@ -63,13 +65,16 @@ private static FileChooserDescriptor getFileChooserDescriptor(String title) {
6365
private void initComponent() {
6466
ormComboBox = new ComboBox<>(Types.ORM.values());
6567
databaseComboBox = new ComboBox<>(Types.Database.values());
68+
tagModeComboBox = new ComboBox<>(Types.TagMode.values());
69+
6670
enableGlobalScanCheckBox = new JCheckBox(GoORMHelperBundle.message("setting.enableGlobalScanCheckBox.title"));
6771
findStructTableNameFuncCheckBox = new JCheckBox(GoORMHelperBundle.message("setting.findStructTableNameFuncCheckBox.title"));
6872

6973
panel = FormBuilder
7074
.createFormBuilder()
7175
.addLabeledComponent(GoORMHelperBundle.message("setting.ormComboBox.title"), ormComboBox)
7276
.addLabeledComponent(GoORMHelperBundle.message("setting.databaseComboBox.title"), databaseComboBox)
77+
.addLabeledComponent(GoORMHelperBundle.message("setting.tagModeComboBox.title"), tagModeComboBox)
7378
.addComponent(enableGlobalScanCheckBox)
7479
.addComponentFillVertically(initScanPathComponent(), 0)
7580
.addComponent(new JSeparator())
@@ -134,6 +139,8 @@ private void loadSettings(@NotNull GoORMHelperProjectSettings settings) {
134139

135140
ormComboBox.setSelectedItem(state.defaultORM);
136141
databaseComboBox.setSelectedItem(state.defaultDatabase);
142+
tagModeComboBox.setSelectedItem(state.defaultTagMode);
143+
137144
// sqlPathTextField.setText(state.sqlPath);
138145
enableGlobalScanCheckBox.setSelected(state.enableGlobalScan);
139146
findStructTableNameFuncCheckBox.setSelected(state.findStructTableNameFunc);
@@ -147,6 +154,7 @@ public boolean isModified(@NotNull GoORMHelperProjectSettings settings) {
147154

148155
return !(ormComboBox.getSelectedItem() == state.defaultORM
149156
&& databaseComboBox.getSelectedItem() == state.defaultDatabase
157+
&& tagModeComboBox.getSelectedItem() == state.defaultTagMode
150158
// && sqlPathTextField.getText().equals(state.sqlPath)
151159
&& enableGlobalScanCheckBox.isSelected() == state.enableGlobalScan
152160
&& findStructTableNameFuncCheckBox.isSelected() == state.findStructTableNameFunc
@@ -160,6 +168,7 @@ public void apply(@NotNull GoORMHelperProjectSettings settings) {
160168
List<String> oldscanPathList = scanPathListTableModel.getItems();
161169

162170
settings.setDefaultDatabase((Types.Database) databaseComboBox.getSelectedItem());
171+
settings.setDefaultTagMode((Types.TagMode) tagModeComboBox.getSelectedItem());
163172
settings.setDefaultORM((Types.ORM) ormComboBox.getSelectedItem());
164173
settings.setEnableGlobalScan(enableGlobalScanCheckBox.isSelected());
165174
settings.setFindStructTableNameFunc(findStructTableNameFuncCheckBox.isSelected());

src/main/resources/messages/GoORMHelperBundle.properties

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,21 @@ sql.convert.struct.check=Please check if the SQL is correct.
1010
action.GoORMHelper.SQL2StructAction.text=SQL Convert Struct
1111
action.GoORMHelper.SQL2StructAction.description=SQL Convert Struct
1212
# setting
13+
setting.basic.title=Basic
1314
setting.tableview.column.location=Location
1415
setting.decorator.title=Scan Path
1516
setting.ormComboBox.title=ORM
1617
setting.databaseComboBox.title=Database
17-
setting.sqlPathTextField.title=SQL File Path
18+
setting.tagModeComboBox.title=Tag Mode
19+
setting.scanPath.title=SQL File Path
1820
setting.enableGlobalScanCheckBox.title=Global Scan
1921
setting.findStructTableNameFuncCheckBox.title=Scan Struct Table Name
2022
setting.experimental.title=Experimental:
2123
# database
2224
database.AskEveryTime=Ask every time
2325
# orm
2426
orm.AskEveryTime=Ask every time
25-
orm.General=General
27+
orm.General=General
28+
# tag mode
29+
tagMode.Compact=Compact
30+
tagMode.Full=Full

0 commit comments

Comments
 (0)