Skip to content

Commit 020aff9

Browse files
committed
Add dependency working.
`build.gradle` updated and user prompted to sync.
1 parent cf4329a commit 020aff9

File tree

7 files changed

+298
-173
lines changed

7 files changed

+298
-173
lines changed

src/ServiceStackIDEA/.idea/vcs.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/ServiceStackIDEA/.idea/workspace.xml

Lines changed: 195 additions & 148 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/ServiceStackIDEA/META-INF/plugin.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
</project-components>
3838

3939
<actions>
40-
<action id="AddServiceStackReference" class="AddServiceStackReference" text="Add ServiceStack Reference..." icon="/icons/logo-16.png"
40+
<action id="AddServiceStackReference" class="AddServiceStackReference" text="ServiceStack Reference..." icon="/icons/logo-16.png"
4141
description="Adds a ServiceStack reference to the selected module">
4242
<add-to-group group-id="NewGroup" anchor="after" relative-to-action="NewAction"/>
4343
<keyboard-shortcut keymap="$default" first-keystroke="shift ctrl alt R"/>

src/ServiceStackIDEA/src/AddRef.form

Lines changed: 37 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@
66
<xy x="48" y="54" width="650" height="350"/>
77
</constraints>
88
<properties>
9+
<maximumSize width="550" height="220"/>
910
<minimumSize width="400" height="220"/>
10-
<preferredSize width="400" height="220"/>
11+
<opaque value="true"/>
12+
<preferredSize width="550" height="220"/>
1113
<requestFocusEnabled value="true"/>
1214
</properties>
1315
<border type="none"/>
@@ -63,34 +65,39 @@
6365
</properties>
6466
<border type="none"/>
6567
<children>
66-
<component id="1b633" class="javax.swing.JTextPane" binding="messageTextPane">
68+
<component id="e88c4" class="javax.swing.JTextPane" binding="errorTextPane">
6769
<constraints>
68-
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="6" anchor="0" fill="3" indent="0" use-parent-layout="false">
70+
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="6" anchor="0" fill="3" indent="0" use-parent-layout="false">
6971
<preferred-size width="150" height="50"/>
7072
</grid>
7173
</constraints>
7274
<properties>
73-
<background color="-1118482"/>
74-
<disabledTextColor color="-16777216"/>
7575
<editable value="false"/>
76-
<enabled value="false"/>
76+
<focusCycleRoot value="false"/>
7777
<focusable value="false"/>
78-
<text value="To generate the DTO Service Model types for a specific ServiceStack instance, enter the base URI for the remote ServiceStack server and click OK."/>
78+
<opaque value="false"/>
79+
<visible value="false"/>
7980
</properties>
8081
</component>
81-
<component id="e88c4" class="javax.swing.JTextPane" binding="errorTextPane">
82+
<component id="bc9e3" class="javax.swing.JTextPane" binding="infoTextPane">
8283
<constraints>
83-
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="6" anchor="0" fill="3" indent="0" use-parent-layout="false">
84+
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="6" anchor="0" fill="3" indent="0" use-parent-layout="false">
8485
<preferred-size width="150" height="50"/>
8586
</grid>
8687
</constraints>
8788
<properties>
88-
<visible value="false"/>
89+
<editable value="false"/>
90+
<focusCycleRoot value="false"/>
91+
<focusable value="false"/>
92+
<font name="Arial"/>
93+
<opaque value="false"/>
94+
<requestFocusEnabled value="false"/>
95+
<text value="To generate the DTO Service Model types for a specific ServiceStack instance, enter the base URI for the remote ServiceStack server and click OK."/>
8996
</properties>
9097
</component>
9198
</children>
9299
</grid>
93-
<grid id="d865d" layout-manager="GridLayoutManager" row-count="2" column-count="3" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
100+
<grid id="d865d" layout-manager="GridLayoutManager" row-count="3" column-count="3" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
94101
<margin top="0" left="0" bottom="0" right="0"/>
95102
<constraints>
96103
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
@@ -133,6 +140,25 @@
133140
</constraints>
134141
<properties/>
135142
</component>
143+
<component id="885b4" class="javax.swing.JLabel">
144+
<constraints>
145+
<grid row="2" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
146+
</constraints>
147+
<properties>
148+
<labelFor value="eec01"/>
149+
<text value="Name"/>
150+
</properties>
151+
</component>
152+
<component id="eec01" class="javax.swing.JTextField" binding="nameTextField">
153+
<constraints>
154+
<grid row="2" column="1" row-span="1" col-span="2" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false">
155+
<preferred-size width="150" height="-1"/>
156+
</grid>
157+
</constraints>
158+
<properties>
159+
<text value="dto.java"/>
160+
</properties>
161+
</component>
136162
</children>
137163
</grid>
138164
</children>

src/ServiceStackIDEA/src/AddRef.java

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
import com.google.gson.Gson;
22
import com.intellij.ide.util.PackageChooserDialog;
3+
import com.intellij.openapi.editor.Document;
4+
import com.intellij.openapi.fileEditor.FileDocumentManager;
5+
import com.intellij.openapi.fileEditor.FileEditorManager;
36
import com.intellij.openapi.module.ModuleManager;
47
import com.intellij.openapi.project.Project;
58
import com.intellij.openapi.module.Module;
69
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
10+
import com.intellij.openapi.vfs.VirtualFile;
11+
import com.intellij.openapi.vfs.VirtualFileManager;
712
import org.jetbrains.annotations.Nullable;
813

914
import javax.swing.*;
@@ -19,17 +24,22 @@ public class AddRef extends JDialog {
1924
private JPanel contentPane;
2025
private JButton buttonOK;
2126
private JButton buttonCancel;
22-
private JTextPane messageTextPane;
2327
private JTextPane errorTextPane;
2428
private JTextField addressUrlTextField;
2529
private TextFieldWithBrowseButton packageBrowse;
30+
private JTextField nameTextField;
31+
private JTextPane infoTextPane;
2632
private Module module;
2733

2834
public AddRef(@Nullable Module module) {
2935
this.module = module;
3036
setContentPane(contentPane);
3137
setModal(true);
3238
getRootPane().setDefaultButton(buttonOK);
39+
ImageIcon imageIcon = createImageIcon("/icons/logo-16.png","ServiceStack");
40+
if(imageIcon != null) {
41+
this.setIconImage(imageIcon.getImage());
42+
}
3343

3444
buttonOK.addActionListener(new ActionListener() {
3545
public void actionPerformed(ActionEvent e) {
@@ -65,10 +75,20 @@ public void actionPerformed(ActionEvent e) {
6575
}, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
6676
}
6777

78+
private ImageIcon createImageIcon(String path, String description) {
79+
java.net.URL imgURL = getClass().getResource(path);
80+
if (imgURL != null) {
81+
return new ImageIcon(imgURL, description);
82+
} else {
83+
System.err.println("Couldn't find file: " + path);
84+
return null;
85+
}
86+
}
6887

6988
private void onOK() throws IOException {
7089
GradleBuildFileHelper gradleBuildFileHelper = new GradleBuildFileHelper(this.module);
71-
gradleBuildFileHelper.addJsonServiceClientDependency();
90+
gradleBuildFileHelper.addDependency("com.google.code.gson", "gson", "2.3.1");
91+
refreshBuildFile();
7292
String url = createUrl(addressUrlTextField.getText());
7393
String typeMetadataUrl = createUrl(addressUrlTextField.getText()).replace("types/java/", "types/metadata/?format=json");
7494
URL metadataUrl = new URL(typeMetadataUrl);
@@ -97,6 +117,17 @@ private void onOK() throws IOException {
97117
dispose();
98118
}
99119

120+
private void refreshBuildFile() {
121+
VirtualFileManager.getInstance().syncRefresh();
122+
VirtualFile fileByUrl = VirtualFileManager.getInstance().findFileByUrl(module.getModuleFile().getParent().getUrl() + "/build.gradle");
123+
124+
FileEditorManager.getInstance(module.getProject()).openFile(fileByUrl,false);
125+
Document document = FileEditorManager.getInstance(module.getProject()).getSelectedTextEditor().getDocument();
126+
127+
FileDocumentManager.getInstance().reloadFromDisk(document);
128+
VirtualFileManager.getInstance().syncRefresh();
129+
}
130+
100131
private static class BrowsePackageListener implements ActionListener {
101132
private TextFieldWithBrowseButton _textField;
102133
private Project _project;

src/ServiceStackIDEA/src/AddServiceStackReference.java

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import com.intellij.facet.Facet;
12
import com.intellij.facet.FacetManager;
23
import com.intellij.facet.FacetTypeId;
34
import com.intellij.openapi.actionSystem.AnAction;
@@ -9,6 +10,7 @@
910
import org.jetbrains.annotations.NotNull;
1011

1112
import java.util.Collection;
13+
import java.util.Objects;
1214

1315
public class AddServiceStackReference extends AnAction {
1416
public static final FacetTypeId ID = new FacetTypeId("android");
@@ -22,17 +24,18 @@ public void actionPerformed(AnActionEvent e) {
2224
dialog.pack();
2325
dialog.setLocationRelativeTo(null);
2426
dialog.setSize(dialog.getPreferredSize());
27+
dialog.setResizable(false);
2528
dialog.setVisible(true);
2629
}
2730

2831
@Override
2932
public void update(AnActionEvent e) {
3033
Module m = getModule(e);
31-
// if (m == null || !isAndroidProject(m)) {
32-
// e.getPresentation().setEnabled(false);
33-
// return;
34-
// }
35-
// e.getPresentation().setEnabled(false);
34+
if (m == null || !isAndroidProject(m)) {
35+
e.getPresentation().setEnabled(false);
36+
return;
37+
}
38+
e.getPresentation().setEnabled(true);
3639
super.update(e);
3740
}
3841

@@ -47,8 +50,13 @@ static Module getModule(Project project) {
4750
}
4851

4952
private static boolean isAndroidProject(@NotNull Module module) {
50-
Collection facetsByType = FacetManager.getInstance(module).getFacetsByType(ID);
51-
return facetsByType.size() > 0;
53+
Facet[] facetsByType = FacetManager.getInstance(module).getAllFacets();
54+
for (Facet facet :facetsByType) {
55+
if(Objects.equals(facet.getTypeId().toString(), "android")) {
56+
return true;
57+
}
58+
}
59+
return false;
5260
}
5361

5462
static Module getModule(AnActionEvent e) {

src/ServiceStackIDEA/src/GradleBuildFileHelper.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public GradleBuildFileHelper(Module module) {
1818
this.module = module;
1919
}
2020

21-
public void addJsonServiceClientDependency() {
21+
public void addDependency(String groupId, String packageName, String version) {
2222
VirtualFile moduleFile = module.getModuleFile();
2323
if(moduleFile == null) {
2424
return;
@@ -28,7 +28,7 @@ public void addJsonServiceClientDependency() {
2828
File[] matchingFiles = file.listFiles(new FilenameFilter() {
2929
@Override
3030
public boolean accept(File dir, String name) {
31-
return name.startsWith("gradle.build");
31+
return name.startsWith("build.gradle");
3232
}
3333
});
3434
if(matchingFiles == null || matchingFiles.length == 0) {
@@ -62,7 +62,20 @@ public boolean accept(File dir, String name) {
6262
return;
6363
}
6464

65-
list.add(dependenciesEndIndex - 1, "compile: 'net.servicestack:client:0.1'");
65+
boolean dependencyRequired = true;
66+
//Check if groupId + package already listed as dependency
67+
for (int i = dependenciesStartIndex; i < dependenciesEndIndex; i++) {
68+
String dependencyLoC = list.get(i);
69+
if(dependencyLoC.contains(groupId + ":" + packageName)) {
70+
dependencyRequired = false;
71+
break;
72+
}
73+
}
74+
75+
if(!dependencyRequired) {
76+
return;
77+
}
78+
list.add(dependenciesEndIndex, " compile '" + groupId + ":" + packageName + ":" + version + "'");
6679
try {
6780
PrintWriter writer = new PrintWriter(gradleFile);
6881
for(String item : list) {

0 commit comments

Comments
 (0)