1515import com .intellij .psi .PsiDirectory ;
1616import com .intellij .psi .PsiManager ;
1717import com .intellij .psi .PsiPackage ;
18- import org .apache . http . client . utils . URIBuilder ;
18+ import org .jetbrains . annotations . Nullable ;
1919import org .jetbrains .idea .maven .project .MavenProjectsManager ;
2020
2121import java .io .*;
2222import java .net .MalformedURLException ;
2323import java .net .URISyntaxException ;
24- import java .net .URL ;
25- import java .net .URLConnection ;
26- import java .util .ArrayList ;
24+ import java .util .HashMap ;
2725import java .util .List ;
26+ import java .util .Map ;
27+
2828
29- /**
30- * Created by Layoric on 14/05/2015.
31- */
3229public class AddServiceStackRefHandler {
3330
3431 private static final String dependencyGroupId = "net.servicestack" ;
@@ -42,49 +39,10 @@ public static void setDependencyVersion(String version) {
4239 }
4340
4441 public static void handleOk (String addressUrl , String qualifiedPackageName , String fileName , String selectedDirectory , Module module , StringBuilder errorMessage ) {
45- String url ;
46- List <String > javaCodeLines = new ArrayList <String >();
47- try {
48- URIBuilder urlBuilder = createUrl (addressUrl );
49- urlBuilder .addParameter ("Package" , qualifiedPackageName );
50- String name = getDtoNameWithoutExtension (fileName ).replaceAll ("\\ ." , "_" );
51- urlBuilder .addParameter ("GlobalNamespace" , name );
52- url = urlBuilder .build ().toString ();
53-
54- URL serviceUrl = new URL (url );
55- URLConnection javaResponseConnection = serviceUrl .openConnection ();
56- BufferedReader javaResponseReader = new BufferedReader (
57- new InputStreamReader (
58- javaResponseConnection .getInputStream ()));
59- String metadataInputLine ;
42+ List <String > javaCodeLines = getDtoLines (addressUrl , qualifiedPackageName , fileName , errorMessage );
6043
61- while ((metadataInputLine = javaResponseReader .readLine ()) != null )
62- javaCodeLines .add (metadataInputLine );
44+ if (javaCodeLines == null ) return ;
6345
64- javaResponseReader .close ();
65-
66- if (!javaCodeLines .get (0 ).startsWith ("/* Options:" )) {
67- //Invalid endpoint
68- errorMessage .append ("The address url is not a valid ServiceStack endpoint." );
69- return ;
70- }
71-
72- } catch (URISyntaxException e ) {
73- e .printStackTrace ();
74- errorMessage .append (e .getClass ().getName ()).append (" - Invalid ServiceStack endpoint provided - " ).append (addressUrl );
75- return ;
76- } catch (MalformedURLException e ) {
77- e .printStackTrace ();
78- errorMessage .append (e .getClass ().getName ()).append (" - Invalid ServiceStack endpoint provided - " ).append (addressUrl );
79- return ;
80- } catch (IOException e ) {
81- e .printStackTrace ();
82- errorMessage .append (e .getClass ().getName ()).append (" - Failed to read response - " ).append (addressUrl );
83- return ;
84- }
85-
86-
87- GradleBuildFileHelper gradleBuildFileHelper = new GradleBuildFileHelper (module );
8846 boolean showDto = true ;
8947 final MavenProjectsManager mavenProjectsManager = MavenProjectsManager .getInstance (module .getProject ());
9048
@@ -94,7 +52,7 @@ public static void handleOk(String addressUrl, String qualifiedPackageName, Stri
9452 } else {
9553 //Gradle
9654 try {
97- showDto = addGradleDependencyIfRequired (module , gradleBuildFileHelper );
55+ showDto = addGradleDependencyIfRequired (module );
9856 } catch (FileNotFoundException e ) {
9957 e .printStackTrace ();
10058 String message = "Failed to update build.gradle with '" +
@@ -123,6 +81,45 @@ public static void handleOk(String addressUrl, String qualifiedPackageName, Stri
12381 VirtualFileManager .getInstance ().syncRefresh ();
12482 }
12583
84+ @ Nullable
85+ private static List <String > getDtoLines (String addressUrl , String qualifiedPackageName , String fileName , StringBuilder errorMessage ) {
86+ Map <String ,String > options = new HashMap <String ,String >();
87+ List <String > javaCodeLines ;
88+ try {
89+ options .put ("Package" , qualifiedPackageName );
90+ String name = getDtoNameWithoutExtension (fileName ).replaceAll ("\\ ." , "_" );
91+ options .put ("GlobalNamespace" , name );
92+ javaCodeLines = getNativeTypesHandler (fileName ).getUpdatedCode (addressUrl ,options );
93+
94+ if (!javaCodeLines .get (0 ).startsWith ("/* Options:" )) {
95+ //Invalid endpoint
96+ errorMessage .append ("The address url is not a valid ServiceStack endpoint." );
97+ return null ;
98+ }
99+
100+ } catch (URISyntaxException e ) {
101+ e .printStackTrace ();
102+ errorMessage .append (e .getClass ().getName ()).append (" - Invalid ServiceStack endpoint provided - " ).append (addressUrl );
103+ return null ;
104+ } catch (MalformedURLException e ) {
105+ e .printStackTrace ();
106+ errorMessage .append (e .getClass ().getName ()).append (" - Invalid ServiceStack endpoint provided - " ).append (addressUrl );
107+ return null ;
108+ } catch (IOException e ) {
109+ e .printStackTrace ();
110+ errorMessage .append (e .getClass ().getName ()).append (" - Failed to read response - " ).append (addressUrl );
111+ return null ;
112+ }
113+ return javaCodeLines ;
114+ }
115+
116+ private static INativeTypesHandler getNativeTypesHandler (String fileName ) {
117+ //Default Java
118+ INativeTypesHandler result = new JavaNativeTypesHandler ();
119+ if (fileName .endsWith (".kt" )) return new KotlinNativeTypesHandler ();
120+ return result ;
121+ }
122+
126123 private static boolean tryAddMavenDependency (Module module ) {
127124 boolean showDto ;
128125 String message = "Unable to locate module pom.xml file. Can't add required dependency '" +
@@ -155,9 +152,9 @@ private static boolean tryAddMavenDependency(Module module) {
155152 return showDto ;
156153 }
157154
158- private static boolean addGradleDependencyIfRequired (Module module , GradleBuildFileHelper gradleBuildFileHelper ) throws FileNotFoundException {
155+ private static boolean addGradleDependencyIfRequired (Module module ) throws FileNotFoundException {
159156 boolean result = true ;
160- if (gradleBuildFileHelper .addDependency (dependencyGroupId , dependencyPackageId , dependencyVersion )) {
157+ if (GradleBuildFileHelper .addDependency (module , dependencyGroupId , dependencyPackageId , dependencyVersion )) {
161158 result = false ;
162159 refreshBuildFile (module );
163160 }
@@ -197,8 +194,8 @@ private static String getDtoPath(Module module, String qualifiedPackageName, Str
197194
198195 PsiPackage mainPackage = JavaPsiFacade .getInstance (module .getProject ()).findPackage (qualifiedPackageName );
199196 if (mainPackage != null && mainPackage .isValid () && mainPackage .getDirectories ().length > 0 ) {
200- File foo = new File (selectedDirectory );
201- VirtualFile selectedFolder = LocalFileSystem .getInstance ().findFileByIoFile (foo );
197+ File file = new File (selectedDirectory );
198+ VirtualFile selectedFolder = LocalFileSystem .getInstance ().findFileByIoFile (file );
202199 if (selectedFolder == null ) {
203200 errorMessage .append ("Unable to determine path for DTO file." );
204201 throw new FileNotFoundException ();
@@ -258,43 +255,24 @@ private static void refreshFile(Module module, String filePath, boolean openFile
258255 VirtualFileManager .getInstance ().syncRefresh ();
259256 }
260257
261- public static URIBuilder createUrl (String text ) throws MalformedURLException , URISyntaxException {
262- String serverUrl = text .endsWith ("/" ) ? text : (text + "/" );
263- serverUrl = (serverUrl .startsWith ("http://" ) || serverUrl .startsWith ("https://" )) ? serverUrl : ("http://" + serverUrl );
264- URL url = new URL (serverUrl );
265- String path = url .getPath ().contains ("?" ) ? url .getPath ().split ("\\ ?" , 2 )[0 ] : url .getPath ();
266- if (!path .endsWith ("types/java/" )) {
267- serverUrl += "types/java/" ;
268- }
269- URIBuilder builder ;
270-
271- try {
272- builder = new URIBuilder (serverUrl );
273- } catch (URISyntaxException e ) {
274- e .printStackTrace ();
275- throw e ;
276- }
277-
278-
279- return builder ;
280- }
281-
282258 public static String getDtoFileName (String name ) {
259+ INativeTypesHandler nativeTypesHandler = getNativeTypesHandler (name );
283260 int p = name .lastIndexOf ("." );
284- String e = name .substring (p + 1 );
285- if (p == -1 || !e .equals ("java" )) {
261+ String e = name .substring (p );
262+ if (p == -1 || !e .equals (nativeTypesHandler . getFileExtension () )) {
286263 /* file has no extension */
287- return name + ".java" ;
264+ return name + nativeTypesHandler . getFileExtension () ;
288265 } else {
289266 /* file has extension e */
290267 return name ;
291268 }
292269 }
293270
294271 public static String getDtoNameWithoutExtension (String name ) {
272+ INativeTypesHandler nativeTypesHandler = getNativeTypesHandler (name );
295273 int p = name .lastIndexOf ("." );
296- String e = name .substring (p + 1 );
297- if (p == -1 || !e .equals ("java" )) {
274+ String e = name .substring (p );
275+ if (p == -1 || !e .equals (nativeTypesHandler . getFileExtension () )) {
298276 /* file has no extension */
299277 return name ;
300278 } else {
0 commit comments