Skip to content

Commit

Permalink
Update to version 2.2.0
Browse files Browse the repository at this point in the history
Signed-off-by: Elhussein Hamed <elhussein.muzamil@gmail.com>
  • Loading branch information
Elhussein-Hamed committed Sep 21, 2024
1 parent 7c9d910 commit ce5bc5d
Show file tree
Hide file tree
Showing 22 changed files with 122 additions and 53 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,15 @@ build/
.idea/compiler.xml
.idea/workspace.xml
.idea/libraries/
.idea/runConfigurations/
.idea/*
*.iws
*.iml
*.ipr
out/
!**/src/main/**/out/
!**/src/test/**/out/
.run/*

### Eclipse ###
.apt_generated
Expand Down
85 changes: 49 additions & 36 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,30 +1,57 @@
import org.jetbrains.intellij.platform.gradle.tasks.VerifyPluginTask

plugins {
id("java")
id("org.jetbrains.kotlin.jvm") version "1.7.0"
id("org.jetbrains.intellij") version "1.12.0"
id("org.jetbrains.kotlin.jvm") version "2.0.0"
id("org.jetbrains.intellij.platform") version "2.0.1"
id("maven-publish")
}

group = "com.hamed"
version = "2.0.0"
version = "2.2.0"

repositories {
mavenCentral()

intellijPlatform {
defaultRepositories()
}
}

// Configure Gradle IntelliJ Plugin
// Read more: https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html
intellij {
version.set("2023.2")
type.set("IC") // Target IDE Platform
dependencies {
implementation("com.squareup.okhttp3:okhttp:4.12.0")
implementation("com.fifesoft:rsyntaxtextarea:3.5.1")
implementation(kotlin("script-runtime"))
testImplementation("junit:junit:4.13.2")

intellijPlatform {
// Target IDE Platform
create("IC", "2024.1")

bundledPlugin("com.intellij.java")
plugin("com.robohorse.robopojogenerator:2.6.1")

pluginVerifier()
zipSigner()
instrumentationTools()
}

plugins.set(listOf("com.robohorse.robopojogenerator:2.4.1", "com.intellij.java"))
tasks {
setupDependencies {
doLast {
// Fixes IDEA-298989.
fileTree("$buildDir/instrumented/instrumentCode") { include("**/**/*Dialog.class") }.files.forEach { delete(it) }
}
}
}
}

dependencies {
implementation("com.squareup.okhttp3:okhttp:4.10.0")
implementation("com.fifesoft:rsyntaxtextarea:3.3.1")
intellijPlatform {
pluginVerification {
ides {
recommended()
}
}
}

tasks {
Expand All @@ -36,43 +63,29 @@ tasks {
targetCompatibility = "17"
}

withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
kotlinOptions {
jvmTarget = "17"
}
}

patchPluginXml {
sinceBuild.set("231.0") // From 2023.1
}

listProductsReleases {
doFirst {
val text =
File("${project.buildDir}/tmp/downloadIdeaProductReleasesXml/idea_product_releases.xml").readText()
val output = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n$text"
File("${project.buildDir}/tmp/downloadIdeaProductReleasesXml/idea_product_releases.xml").writeText(output)
}
}

signPlugin {
if (System.getenv("CERTIFICATE_CHAIN") != null && System.getenv("PRIVATE_KEY") != null) {
certificateChain.set(File(System.getenv("CERTIFICATE_CHAIN")).readText(Charsets.UTF_8))
privateKey.set(File(System.getenv("PRIVATE_KEY")).readText(Charsets.UTF_8))
certificateChainFile.set(file(System.getenv("CERTIFICATE_CHAIN")))
privateKeyFile.set(file(System.getenv("PRIVATE_KEY")))
password.set(System.getenv("PRIVATE_KEY_PASSWORD"))
}
else
assert(false)
}

publishPlugin {
token.set(System.getenv("PUBLISH_TOKEN"))
verifyPluginSignature {
if (System.getenv("CERTIFICATE_CHAIN") != null) {
certificateChainFile.set(file(System.getenv("CERTIFICATE_CHAIN")))
}
else
assert(false)
}

setupDependencies {
doLast {
// Fixes IDEA-298989.
fileTree("$buildDir/instrumented/instrumentCode") { include("**/**/*Dialog.class") }.files.forEach { delete(it) }
}
publishPlugin {
token.set(System.getenv("PUBLISH_TOKEN"))
}
}
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public static class UIConstants {
public static final String MAIN_DIALOG_TITLE = "Postman To Retrofit2 V2";
public static final String OPTIONS_DIALOG_TITLE = "Options";
public static final int DIALOG_WIDTH = 600;
public static final int DIALOG_HEIGHT = 400;
public static final int DIALOG_HEIGHT = 500;
}

public static final String[] retrofit2RawTypes = { "Call<T>", "Call<Response<T>>" };
Expand Down
6 changes: 5 additions & 1 deletion src/main/java/com/hamed/postmantoretrofit2v2/Model.java
Original file line number Diff line number Diff line change
Expand Up @@ -120,8 +120,12 @@ private HashMap<Item, String> generateClassFromResponse(Project project, List<It
Item.Response response = item.getResponse().get(0);
String className = response.getName();
String jsonBody = response.getBody();
if(ResponseClassGenerator.generateClasses(project, userSettings.getReturnTypeClassesDirectory() , className, jsonBody, userSettings.getLanguage(), userSettings.getFramework(), userSettings.getAutomaticClassGenerationOptions()))
if(ResponseClassGenerator.generateClasses(project, userSettings.getReturnTypeClassesDirectory(),
userSettings.getGeneratedClassesPackageName(), className, jsonBody,
userSettings.getLanguage(), userSettings.getFramework(),
userSettings.getAutomaticClassGenerationOptions())) {
mappedGeneratedClasses.put(item, className);
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull;

import javax.swing.*;

public class Retrofit2Generator extends AnAction {

@Override
Expand All @@ -36,8 +38,7 @@ public void onCancelled() {

@Override
public void onUserConfirm(ReturnedData data) {
if (data instanceof JsonDialogReturnedData) {
JsonDialogReturnedData jsonDialogReturnedData = (JsonDialogReturnedData) data;
if (data instanceof JsonDialogReturnedData jsonDialogReturnedData) {

// Parse the Postman collection json text
Model model = new Model();
Expand All @@ -51,6 +52,7 @@ public void onUserConfirm(ReturnedData data) {
assert editor != null;
UserSettings userSettings = new UserSettings(project);
userSettings.setAutomaticClassGenerationOptions(jsonDialogReturnedData.getAutomaticClassGenerationOptions());
userSettings.setGeneratedClassesPackageName(jsonDialogReturnedData.getGeneratedClassesPackageName());
model.generateRetrofitCode(project, editor, collection.getItems(),
jsonDialogReturnedData.useDynamicHeaders(),
userSettings,
Expand All @@ -70,7 +72,7 @@ else if (!jsonDialogReturnedData.getCollectionJsonText().isEmpty()) {
}
});

jsonDialog.setVisible(true);
SwingUtilities.invokeLater(() -> jsonDialog.setVisible(true));
}

@NotNull
Expand Down
11 changes: 11 additions & 0 deletions src/main/java/com/hamed/postmantoretrofit2v2/UserSettings.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,12 @@ public class UserSettings {

private AutomaticClassGenerationOptions automaticClassGenerationOptions;

private String generatedClassesPackageName;

public UserSettings(Project project) {
this.mProject = project;
this.automaticClassGenerationOptions = new AutomaticClassGenerationOptions();
this.generatedClassesPackageName = "";
}

public int getIndentSize() {
Expand Down Expand Up @@ -110,4 +113,12 @@ public AutomaticClassGenerationOptions getAutomaticClassGenerationOptions() {
public void setAutomaticClassGenerationOptions(AutomaticClassGenerationOptions automaticClassGenerationOptions) {
this.automaticClassGenerationOptions = automaticClassGenerationOptions;
}

public String getGeneratedClassesPackageName() {
return generatedClassesPackageName;
}

public void setGeneratedClassesPackageName(String generatedClassesPackageName) {
this.generatedClassesPackageName = generatedClassesPackageName;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,18 @@
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.JavaDirectoryService;
import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiManager;
import com.intellij.psi.PsiPackage;
import com.robohorse.robopojogenerator.models.FrameworkVW;
import com.robohorse.robopojogenerator.models.GenerationModel;
import com.robohorse.robopojogenerator.models.ProjectModel;
import org.json.JSONException;

public class ResponseClassGenerator {

public static boolean generateClasses(Project project, String directory, String name, String responseBody, Language language, Framework framework, AutomaticClassGenerationOptions generationOptions)
public static boolean generateClasses(Project project, String directory, String packageName, String name, String responseBody, Language language, Framework framework, AutomaticClassGenerationOptions generationOptions)
{
// Response body example:
// "{\n \"userId\": 1,\n \"id\": 1,\n \"title\": \"sunt aut facere repellat provident occaecati excepturi optio reprehenderit\",\n \"body\": \"quia et suscipit\\nsuscipit recusandae consequuntur expedita et cum\\nreprehenderit molestiae ut ut quas totam\\nnostrum rerum est autem sunt rem eveniet architecto\"\n}"
Expand Down Expand Up @@ -50,9 +52,6 @@ public static boolean generateClasses(Project project, String directory, String
PsiDirectory psiDirectory = PsiManager.getInstance(project).findDirectory(returnTypeClassesDirVirtualFile);
assert psiDirectory != null;


String packageName = PackageIndex.getInstance(project).getPackageNameByDirectory(returnTypeClassesDirVirtualFile);

ProjectModel projectModel = new ProjectModel(
psiDirectory,
packageName,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class MyBulkFileListener implements BulkFileListener {

Expand Down Expand Up @@ -58,7 +57,7 @@ public void after(@NotNull List<? extends @NotNull VFileEvent> events) {
|| event.getFile().getPath().contains(projectRootDir.getPath()) // Or ensure the file is under the project directory or one of its subdirectories
&& event.getFile().getExtension() != null // Ensure the file has an extension
&& Constants.supportedClassFileExtensions.contains(event.getFile().getExtension()))) // Ensure the extension is one of the supported extensions
.collect(Collectors.toList())
.toList()
.forEach(this::handleEvent);

}
Expand Down
26 changes: 24 additions & 2 deletions src/main/java/com/hamed/postmantoretrofit2v2/forms/JsonDialog.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,23 @@
package com.hamed.postmantoretrofit2v2.forms;

import com.hamed.postmantoretrofit2v2.Constants;
import com.hamed.postmantoretrofit2v2.UserSettings;
import com.hamed.postmantoretrofit2v2.forms.listeners.DialogClosedListener;
import com.hamed.postmantoretrofit2v2.forms.listeners.JsonDialogReturnedData;
import com.hamed.postmantoretrofit2v2.forms.listeners.OptionsDialogReturnedData;
import com.hamed.postmantoretrofit2v2.forms.listeners.ReturnedData;
import com.hamed.postmantoretrofit2v2.pluginstate.PluginService;
import com.hamed.postmantoretrofit2v2.pluginstate.PluginState;
import com.hamed.postmantoretrofit2v2.pluginstate.helperclasses.AutomaticClassGenerationOptions;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ReadAction;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.PackageIndex;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiManager;
import com.intellij.util.concurrency.AppExecutorUtil;

import javax.swing.*;
import javax.swing.filechooser.FileFilter;
Expand Down Expand Up @@ -37,13 +46,15 @@ public class JsonDialog extends JDialog {

OptionsDialog optionsDialog;
AutomaticClassGenerationOptions automaticClassGenerationOptions;
String generatedClassesPackageName;
Container optionsDialogContentPane;

public JsonDialog(Project project) {
mProject = project;
optionsDialog = new OptionsDialog(this, mProject);
optionsDialogContentPane = optionsDialog.getContentPane();
automaticClassGenerationOptions = new AutomaticClassGenerationOptions();
generatedClassesPackageName = "";

setContentPane(contentPane);
setModal(true);
Expand Down Expand Up @@ -115,7 +126,7 @@ public void windowClosing(WindowEvent e) {
private void onOK() {
dispose();
if (dialogClosedListener != null)
dialogClosedListener.onUserConfirm(new JsonDialogReturnedData(jsonTextArea.getText(), dynamicHeaderCheckBox.isSelected(), automaticClassGenerationOptions));
dialogClosedListener.onUserConfirm(new JsonDialogReturnedData(jsonTextArea.getText(), dynamicHeaderCheckBox.isSelected(), automaticClassGenerationOptions, generatedClassesPackageName));
}

private void onCancel() {
Expand Down Expand Up @@ -145,9 +156,20 @@ public void onCancelled() {
public void onUserConfirm(ReturnedData data) {
OptionsDialogReturnedData dialogReturnedData = (OptionsDialogReturnedData) data;
automaticClassGenerationOptions = dialogReturnedData.getAutomaticClassGenerationOptions();
ReadAction.nonBlocking(() -> {
UserSettings userSettings = new UserSettings(mProject);
VirtualFile returnTypeClassesDirVirtualFile = LocalFileSystem.getInstance().findFileByPath(userSettings.getReturnTypeClassesDirectory());
assert returnTypeClassesDirVirtualFile != null;
PsiDirectory psiDirectory = PsiManager.getInstance(mProject).findDirectory(returnTypeClassesDirVirtualFile);
assert psiDirectory != null;

return PackageIndex.getInstance(mProject).getPackageNameByDirectory(returnTypeClassesDirVirtualFile);
}).finishOnUiThread(ApplicationManager.getApplication().getDefaultModalityState(), packageName -> {
generatedClassesPackageName = packageName;
}).submit(AppExecutorUtil.getAppExecutorService());
}
});
optionsDialog.setVisible(true);
SwingUtilities.invokeLater(() -> optionsDialog.setVisible(true));
}

public void setOnDialogClosedListener(DialogClosedListener dialogClosedListener)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,6 @@
<properties>
<enabled value="false"/>
<font/>
<label resource-bundle="labels" key="OptionsDialog.ButtonText.Browse"/>
<text resource-bundle="labels" key="OptionsDialog.ButtonText.Browse"/>
</properties>
</component>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,13 @@ public class JsonDialogReturnedData implements ReturnedData {

private final AutomaticClassGenerationOptions automaticClassGenerationOptions;

public JsonDialogReturnedData(String collectionJsonText, boolean useDynamicHeaders, AutomaticClassGenerationOptions automaticClassGenerationOptions) {
private final String generatedClassesPackageName;

public JsonDialogReturnedData(String collectionJsonText, boolean useDynamicHeaders, AutomaticClassGenerationOptions automaticClassGenerationOptions, String generatedClassesPackageName) {
this.collectionJsonText = collectionJsonText;
this.useDynamicHeaders = useDynamicHeaders;
this.automaticClassGenerationOptions = automaticClassGenerationOptions;
this.generatedClassesPackageName = generatedClassesPackageName;
}

public String getCollectionJsonText() {
Expand All @@ -26,4 +29,8 @@ public boolean useDynamicHeaders() {
public AutomaticClassGenerationOptions getAutomaticClassGenerationOptions() {
return automaticClassGenerationOptions;
}

public String getGeneratedClassesPackageName() {
return generatedClassesPackageName;
}
}
10 changes: 10 additions & 0 deletions src/main/resources/META-INF/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,16 @@
]]></description>

<change-notes><![CDATA[
<h2>2.2.0</h2>
<ul>
<li>An update for new IDE versions</li>
</ul>
<h2>2.1.0</h2>
<ul>
<li>An update for new IDE versions</li>
</ul>
<h2>2.0.0</h2>
<ul>
<li>An update for new IDE versions</li>
Expand Down
File renamed without changes.
Loading

0 comments on commit ce5bc5d

Please sign in to comment.