diff --git a/.idea/misc.xml b/.idea/misc.xml index bced92a..1f4201d 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/GravSupport.iml b/GravSupport.iml index 13f939a..ff12d46 100644 --- a/GravSupport.iml +++ b/GravSupport.iml @@ -9,10 +9,9 @@ - + - @@ -23,6 +22,7 @@ + diff --git a/README.md b/README.md index cee04b1..2b6c05a 100644 --- a/README.md +++ b/README.md @@ -6,16 +6,17 @@ within for IntelliJ Community / Ultimate Edition and PhpStorm [Grav](https://getgrav.org/) is a flat-file CMS and it's open source. Tested with: -* PhpStorm 2018.3.*, 2019.1.1 -* IntelliJ IDEA Ultimate 2018.2.4, 2019.1.1 +* PhpStorm 2018.3.*, 2019.1.1, 2019.3.3 +* IntelliJ IDEA Ultimate 2018.2.4, 2019.1.1, 2019.3.3 * IntelliJ IDEA Community 2017.2.* The plugin is also available in the [JetBrains Plugins Repository](https://plugins.jetbrains.com/plugin/9971-grav-support). ## Version -This plugin supports the following Grav versions: 1.4.*, 1.5.*, 1.6.*, ... +The latest plugin supports the following Grav versions: 1.6.*, ... +Furthermore, I only provide support for PHP 7.*. If you have a lower version than the plugin may not work correctly. ## Install diff --git a/resources/META-INF/plugin.xml b/resources/META-INF/plugin.xml index 37a5a6e..5fd415e 100644 --- a/resources/META-INF/plugin.xml +++ b/resources/META-INF/plugin.xml @@ -1,7 +1,7 @@ net.offbeatpioneer.intellij.plugins.gravsupport Grav Support - 0.4.2 + 0.5.0 Dominik Grzelak + 0.5.0 +
    +
  • Internal Changes
  • +
      +
    • Plugin availability for IDEA 2019.3.*
    • +
    • Revised codebase because of upcoming breaking changes in IDEA 2019.3.* and above
    • +
    +
+

0.4.2

    @@ -164,7 +174,7 @@ - + @@ -176,7 +186,7 @@ org.jetbrains.plugins.yaml com.jetbrains.php - com.jetbrains.twig + com.jetbrains.twig org.intellij.plugins.markdown @@ -184,19 +194,26 @@ - - + + + + + + + + + - - - net.offbeatpioneer.intellij.plugins.grav.project.GravProjectComponent - - - + + + + + @@ -239,9 +256,16 @@ + + + - + + @@ -265,10 +289,10 @@ - - - - + + + + diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/action/CreateNewThemeAction.java b/src/net/offbeatpioneer/intellij/plugins/grav/action/CreateNewThemeAction.java index c3f59d1..a706cff 100644 --- a/src/net/offbeatpioneer/intellij/plugins/grav/action/CreateNewThemeAction.java +++ b/src/net/offbeatpioneer/intellij/plugins/grav/action/CreateNewThemeAction.java @@ -97,7 +97,9 @@ private void createTheme(@NotNull Project project, Module module) { "--name", themeData.getName(), "--description", themeData.getDescription(), "--developer", themeData.getDeveloper(), - "--email", themeData.getEmail()}; + "--email", themeData.getEmail(), + "--githubid", themeData.getGitHubId() + }; String srcPath = module.getProject().getBasePath(); if (Objects.isNull(srcPath)) { diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/action/CreateThemeDialog.form b/src/net/offbeatpioneer/intellij/plugins/grav/action/CreateThemeDialog.form index 9ae7895..cdde000 100644 --- a/src/net/offbeatpioneer/intellij/plugins/grav/action/CreateThemeDialog.form +++ b/src/net/offbeatpioneer/intellij/plugins/grav/action/CreateThemeDialog.form @@ -8,7 +8,7 @@ - + @@ -80,6 +80,22 @@ + + + + + + + + + + + + + + + + diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/action/CreateThemeDialog.java b/src/net/offbeatpioneer/intellij/plugins/grav/action/CreateThemeDialog.java index 38fa863..3b53fa0 100644 --- a/src/net/offbeatpioneer/intellij/plugins/grav/action/CreateThemeDialog.java +++ b/src/net/offbeatpioneer/intellij/plugins/grav/action/CreateThemeDialog.java @@ -11,6 +11,7 @@ public class CreateThemeDialog extends JDialog implements CaretListener { public JTextField textField2; public JTextField textField3; public JTextField textField4; + private JTextField textField5; private NewThemeData themeData = new NewThemeData(); @@ -22,6 +23,7 @@ public CreateThemeDialog() { textField2.addCaretListener(this); textField3.addCaretListener(this); textField4.addCaretListener(this); + textField5.addCaretListener(this); } public static void main(String[] args) { @@ -45,6 +47,9 @@ public void caretUpdate(CaretEvent e) { if (e.getSource() == textField4) { themeData.setEmail(textField4.getText()); } + if (e.getSource() == textField4) { + themeData.setGitHubId(textField5.getText()); + } } public NewThemeData getThemeData() { diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/action/CustomCreateFileFromTemplateDialog.java b/src/net/offbeatpioneer/intellij/plugins/grav/action/CustomCreateFileFromTemplateDialog.java index 0b65ac6..b0c0d46 100644 --- a/src/net/offbeatpioneer/intellij/plugins/grav/action/CustomCreateFileFromTemplateDialog.java +++ b/src/net/offbeatpioneer/intellij/plugins/grav/action/CustomCreateFileFromTemplateDialog.java @@ -28,7 +28,7 @@ import com.intellij.psi.PsiElement; import com.intellij.util.PlatformIcons; import com.intellij.util.ui.JBUI; -import net.offbeatpioneer.intellij.plugins.grav.files.GravConfigurationFileType; +import net.offbeatpioneer.intellij.plugins.grav.files.AbstractGravFileType; import net.offbeatpioneer.intellij.plugins.grav.files.GravFileTypes; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -105,7 +105,7 @@ protected CustomCreateFileFromTemplateDialog(@NotNull Project project) { myKindCombo.getComboBox().addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - for (GravConfigurationFileType each : GravFileTypes.CONFIGURATION_FILE_TYPES) { + for (AbstractGravFileType each : GravFileTypes.CONFIGURATION_FILE_TYPES) { if (getKindCombo().getSelectedName().equalsIgnoreCase(each.getCorrespondingTemplateFile())) { disableEnableFields(each.needsFilename()); if (!each.needsFilename()) { diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/action/CustomCreateFromTemplateAction.java b/src/net/offbeatpioneer/intellij/plugins/grav/action/CustomCreateFromTemplateAction.java index 485d8ad..dd55213 100644 --- a/src/net/offbeatpioneer/intellij/plugins/grav/action/CustomCreateFromTemplateAction.java +++ b/src/net/offbeatpioneer/intellij/plugins/grav/action/CustomCreateFromTemplateAction.java @@ -10,7 +10,6 @@ import com.intellij.openapi.editor.Editor; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.fileEditor.FileEditorManager; -import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Ref; import com.intellij.openapi.vfs.VirtualFile; diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/action/NewThemeData.java b/src/net/offbeatpioneer/intellij/plugins/grav/action/NewThemeData.java index 8d86647..5b51822 100644 --- a/src/net/offbeatpioneer/intellij/plugins/grav/action/NewThemeData.java +++ b/src/net/offbeatpioneer/intellij/plugins/grav/action/NewThemeData.java @@ -8,16 +8,18 @@ public class NewThemeData { private String developer; private String description; private String email; + private String githubId; public NewThemeData() { - this(null, "", "", ""); + this(null, "", "", "", ""); } - public NewThemeData(String name, String developer, String description, String email) { + public NewThemeData(String name, String developer, String description, String email, String githubId) { this.name = name; this.developer = developer; this.description = description; this.email = email; + this.githubId = githubId; } public String getName() { @@ -51,4 +53,12 @@ public String getEmail() { public void setEmail(String email) { this.email = email; } + + public String getGitHubId() { + return githubId; + } + + public void setGitHubId(String text) { + this.githubId = text; + } } diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/assets/GravIcons.java b/src/net/offbeatpioneer/intellij/plugins/grav/assets/GravIcons.java index 93b2b8d..fa5744b 100644 --- a/src/net/offbeatpioneer/intellij/plugins/grav/assets/GravIcons.java +++ b/src/net/offbeatpioneer/intellij/plugins/grav/assets/GravIcons.java @@ -5,6 +5,8 @@ import javax.swing.*; /** + * Icons for various files in Grav or other purposes. + * * @author Dominik Grzelak */ public class GravIcons { diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/editor/GravLanguageEditorProvider.java b/src/net/offbeatpioneer/intellij/plugins/grav/editor/GravLanguageEditorProvider.java index 797cab8..326aae3 100644 --- a/src/net/offbeatpioneer/intellij/plugins/grav/editor/GravLanguageEditorProvider.java +++ b/src/net/offbeatpioneer/intellij/plugins/grav/editor/GravLanguageEditorProvider.java @@ -1,7 +1,6 @@ package net.offbeatpioneer.intellij.plugins.grav.editor; import com.intellij.openapi.fileEditor.FileEditor; -import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.fileEditor.FileEditorPolicy; import com.intellij.openapi.fileEditor.FileEditorProvider; import com.intellij.openapi.project.DumbAware; @@ -12,11 +11,6 @@ import net.offbeatpioneer.intellij.plugins.grav.project.GravProjectComponent; import org.jetbrains.annotations.NotNull; -import java.util.Map; -import java.util.Objects; -import java.util.concurrent.ConcurrentHashMap; - -import static net.offbeatpioneer.intellij.plugins.grav.helper.GravYamlFiles.LangFileEditorType.LANGUAGE_FOLDER; import static net.offbeatpioneer.intellij.plugins.grav.helper.GravYamlFiles.LangFileEditorType.NONE; //TODO listen for file deletion and updates diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/files/GravConfigurationFileType.java b/src/net/offbeatpioneer/intellij/plugins/grav/files/AbstractGravFileType.java similarity index 61% rename from src/net/offbeatpioneer/intellij/plugins/grav/files/GravConfigurationFileType.java rename to src/net/offbeatpioneer/intellij/plugins/grav/files/AbstractGravFileType.java index fb11365..e0365cd 100644 --- a/src/net/offbeatpioneer/intellij/plugins/grav/files/GravConfigurationFileType.java +++ b/src/net/offbeatpioneer/intellij/plugins/grav/files/AbstractGravFileType.java @@ -1,26 +1,28 @@ package net.offbeatpioneer.intellij.plugins.grav.files; -import com.intellij.lang.Language; import com.intellij.openapi.fileTypes.LanguageFileType; import org.jetbrains.annotations.NotNull; +import org.jetbrains.yaml.YAMLLanguage; /** - * Base class for Gravs configuration files - * Configuration files are in the yaml format. + * Base abstarct class for all Grav-specific files (i.e., mainly configuration files). + * Configuration files come mostly in the YAML format: *
      *
    • Blueprints for theme (yaml)
    • *
    • THEME.yaml
    • *
    - * Created by Dome on 16.07.2017. + * + * @author Dominik Grzelak + * @since 16.07.2017. */ -public abstract class GravConfigurationFileType extends LanguageFileType { - - protected GravConfigurationFileType(@NotNull Language language) { - super(language); - } +public abstract class AbstractGravFileType extends LanguageFileType { public static final String DEFAULT_EXTENSION = "yaml"; + protected AbstractGravFileType() { + super(YAMLLanguage.INSTANCE); + } + @NotNull @Override public String getDefaultExtension() { diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/files/GravConfigurationFileTypeFactory.java b/src/net/offbeatpioneer/intellij/plugins/grav/files/GravConfigurationFileTypeFactory.java deleted file mode 100644 index 9ada63c..0000000 --- a/src/net/offbeatpioneer/intellij/plugins/grav/files/GravConfigurationFileTypeFactory.java +++ /dev/null @@ -1,15 +0,0 @@ -package net.offbeatpioneer.intellij.plugins.grav.files; - -import com.intellij.openapi.fileTypes.FileTypeConsumer; -import com.intellij.openapi.fileTypes.FileTypeFactory; -import org.jetbrains.annotations.NotNull; - -/** - * Created by Dome on 16.07.2017. - */ -public class GravConfigurationFileTypeFactory extends FileTypeFactory { - @Override - public void createFileTypes(@NotNull FileTypeConsumer consumer) { - consumer.consume(ThemeBlueprintsFileType.INSTANCE); - } -} diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/files/GravFileTypes.java b/src/net/offbeatpioneer/intellij/plugins/grav/files/GravFileTypes.java index 8276c0a..6dbe445 100644 --- a/src/net/offbeatpioneer/intellij/plugins/grav/files/GravFileTypes.java +++ b/src/net/offbeatpioneer/intellij/plugins/grav/files/GravFileTypes.java @@ -1,16 +1,19 @@ package net.offbeatpioneer.intellij.plugins.grav.files; /** - * Created by Dome on 16.07.2017. + * Enum-like class that provides all available file types if necessary. + * + * @author Dominik Grzelak + * @since 16.07.2017. */ public class GravFileTypes { - public static GravConfigurationFileType[] CONFIGURATION_FILE_TYPES = new GravConfigurationFileType[]{ + public static AbstractGravFileType[] CONFIGURATION_FILE_TYPES = new AbstractGravFileType[]{ new ThemeBlueprintsFileType(), new ThemeConfigurationFileType() }; public static void setModuleName(String moduleName) { - ((ThemeConfigurationFileType)CONFIGURATION_FILE_TYPES[1]).setDefaultFileName(moduleName); + ((ThemeConfigurationFileType) CONFIGURATION_FILE_TYPES[1]).setDefaultFileName(moduleName); } } diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/files/ThemeBlueprintsFileType.java b/src/net/offbeatpioneer/intellij/plugins/grav/files/ThemeBlueprintsFileType.java index 5019565..b72c223 100644 --- a/src/net/offbeatpioneer/intellij/plugins/grav/files/ThemeBlueprintsFileType.java +++ b/src/net/offbeatpioneer/intellij/plugins/grav/files/ThemeBlueprintsFileType.java @@ -4,24 +4,26 @@ import net.offbeatpioneer.intellij.plugins.grav.assets.GravIcons; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.yaml.YAMLLanguage; import javax.swing.*; /** - * Created by Dome on 16.07.2017. + * Concrete implementation of Grav's theme blueprint configuration file. + * + * @author Dominik Grzelak + * @since 16.07.2017. */ -public class ThemeBlueprintsFileType extends GravConfigurationFileType { +public class ThemeBlueprintsFileType extends AbstractGravFileType { public static final LanguageFileType INSTANCE = new ThemeBlueprintsFileType(); public ThemeBlueprintsFileType() { - super(YAMLLanguage.INSTANCE); + super(); } @NotNull @Override public String getName() { - return "blueprints"; + return "Theme blueprints"; } @NotNull diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/files/ThemeConfigurationFileType.java b/src/net/offbeatpioneer/intellij/plugins/grav/files/ThemeConfigurationFileType.java index 4efd408..327668b 100644 --- a/src/net/offbeatpioneer/intellij/plugins/grav/files/ThemeConfigurationFileType.java +++ b/src/net/offbeatpioneer/intellij/plugins/grav/files/ThemeConfigurationFileType.java @@ -4,19 +4,21 @@ import net.offbeatpioneer.intellij.plugins.grav.assets.GravIcons; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.yaml.YAMLLanguage; import javax.swing.*; /** - * Created by Dome on 16.07.2017. + * Concrete implementation of Grav's theme configuration file. + * + * @author Dominik Grzelak + * @since 16.07.2017. */ -public class ThemeConfigurationFileType extends GravConfigurationFileType { +public class ThemeConfigurationFileType extends AbstractGravFileType { public static final LanguageFileType INSTANCE = new ThemeConfigurationFileType(); private String defaultFileName; public ThemeConfigurationFileType() { - super(YAMLLanguage.INSTANCE); + super(); } @NotNull diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/helper/GravFileTemplateUtil.java b/src/net/offbeatpioneer/intellij/plugins/grav/helper/GravFileTemplateUtil.java index 1efbf31..980de6c 100644 --- a/src/net/offbeatpioneer/intellij/plugins/grav/helper/GravFileTemplateUtil.java +++ b/src/net/offbeatpioneer/intellij/plugins/grav/helper/GravFileTemplateUtil.java @@ -12,7 +12,7 @@ import com.intellij.util.SmartList; import com.intellij.util.containers.ContainerUtil; import com.jetbrains.twig.TwigFile; -import net.offbeatpioneer.intellij.plugins.grav.files.GravConfigurationFileType; +import net.offbeatpioneer.intellij.plugins.grav.files.AbstractGravFileType; import org.jetbrains.yaml.psi.YAMLFile; import org.jetbrains.yaml.psi.YAMLKeyValue; @@ -29,7 +29,7 @@ public static List getAvailableThemeConfigurationTemplates() { return getApplicableTemplates(new Condition() { @Override public boolean value(FileTemplate fileTemplate) { - return GravConfigurationFileType.DEFAULT_EXTENSION.equals(fileTemplate.getExtension()); + return AbstractGravFileType.DEFAULT_EXTENSION.equals(fileTemplate.getExtension()); } }); } diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/helper/IdeHelper.java b/src/net/offbeatpioneer/intellij/plugins/grav/helper/IdeHelper.java index 75e0ab4..49c4d0b 100644 --- a/src/net/offbeatpioneer/intellij/plugins/grav/helper/IdeHelper.java +++ b/src/net/offbeatpioneer/intellij/plugins/grav/helper/IdeHelper.java @@ -8,6 +8,8 @@ import net.offbeatpioneer.intellij.plugins.grav.project.settings.GravProjectSettings; import org.jetbrains.annotations.NotNull; +import java.util.Objects; + /** * @author Daniel Espendiller * @author Dominik Grzelak @@ -35,7 +37,7 @@ public static void notifyEnableMessage(@NotNull final Project project) { } private static void enablePluginAndConfigure(@NotNull Project project) { - GravProjectSettings.getInstance(project).pluginEnabled = true; + Objects.requireNonNull(GravProjectSettings.getInstance(project)).pluginEnabled = true; GravProjectConfigurable.enableGravToolWindow(project, true); } } diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/helper/ProcessUtils.java b/src/net/offbeatpioneer/intellij/plugins/grav/helper/ProcessUtils.java index dbb9ba3..7003fa6 100644 --- a/src/net/offbeatpioneer/intellij/plugins/grav/helper/ProcessUtils.java +++ b/src/net/offbeatpioneer/intellij/plugins/grav/helper/ProcessUtils.java @@ -96,6 +96,9 @@ public Object[] execute() { linesb.append(line).append("\n"); } this.errorOutput = linesb.toString(); + if (this.errorOutput.isEmpty()) { + this.errorOutput = "No error message was generated from Grav. Maybe the PHP installation is not correct"; + } } } catch (Exception e) { e.printStackTrace(); diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/helper/StreamGobbler.java b/src/net/offbeatpioneer/intellij/plugins/grav/helper/StreamGobbler.java index bf55bbb..3eedc30 100644 --- a/src/net/offbeatpioneer/intellij/plugins/grav/helper/StreamGobbler.java +++ b/src/net/offbeatpioneer/intellij/plugins/grav/helper/StreamGobbler.java @@ -1,32 +1,42 @@ package net.offbeatpioneer.intellij.plugins.grav.helper; -import java.io.BufferedInputStream; -import java.io.InputStream; -import java.io.PrintStream; +import java.io.*; import java.util.Scanner; //https://stackoverflow.com/questions/25878415/java-processbuilder-process-waiting-for-input class StreamGobbler implements Runnable { private PrintStream out; - private Scanner inScanner; + // private Scanner inScanner; + BufferedReader reader; private String name; private StringBuilder builder = new StringBuilder(""); public StreamGobbler(String name, PrintStream out, InputStream inStream) { this.name = name; this.out = out; - inScanner = new Scanner(new BufferedInputStream(inStream)); +// inScanner = new Scanner(new BufferedInputStream(inStream)); + reader = new BufferedReader(new InputStreamReader(inStream)); } @Override public void run() { - boolean entertemplate = false; - while (inScanner.hasNextLine()) { - String line = inScanner.nextLine(); - builder.append(line).append("\n"); - - System.out.printf("%s: %s%n", name, line); + builder = new StringBuilder(); + String line; + try { + while ((line = reader.readLine()) != null) { + builder.append(line); + builder.append(System.getProperty("line.separator")); + } + } catch (Exception e) { + e.printStackTrace(); } +// boolean entertemplate = false; +// while (inScanner.hasNextLine()) { +// String line = inScanner.nextLine(); +// builder.append(line).append("\n"); +// +// System.out.printf("%s: %s%n", name, line); +// } } public String getOutput() { diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/module/php/GravInstallerGeneratorPeer.java b/src/net/offbeatpioneer/intellij/plugins/grav/module/php/GravInstallerGeneratorPeer.java index a2c7720..7e71ed6 100644 --- a/src/net/offbeatpioneer/intellij/plugins/grav/module/php/GravInstallerGeneratorPeer.java +++ b/src/net/offbeatpioneer/intellij/plugins/grav/module/php/GravInstallerGeneratorPeer.java @@ -19,7 +19,7 @@ import javax.swing.*; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; -import java.io.File; +import java.io.*; import static net.offbeatpioneer.intellij.plugins.grav.module.wizard.CreateGravProjectWizardStep.LAST_USED_GRAV_HOME; diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/module/wizard/CreateGravProjectWizardGUI.java b/src/net/offbeatpioneer/intellij/plugins/grav/module/wizard/CreateGravProjectWizardGUI.java index 6748bf6..385afee 100644 --- a/src/net/offbeatpioneer/intellij/plugins/grav/module/wizard/CreateGravProjectWizardGUI.java +++ b/src/net/offbeatpioneer/intellij/plugins/grav/module/wizard/CreateGravProjectWizardGUI.java @@ -8,12 +8,14 @@ import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.application.AccessToken; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.application.WriteAction; import com.intellij.openapi.fileChooser.*; import com.intellij.openapi.progress.EmptyProgressIndicator; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.ComboBox; +import com.intellij.openapi.util.ThrowableComputable; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.platform.templates.github.DownloadUtil; diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/project/GravProjectComponent.java b/src/net/offbeatpioneer/intellij/plugins/grav/project/GravProjectComponent.java index cdff885..774af9e 100644 --- a/src/net/offbeatpioneer/intellij/plugins/grav/project/GravProjectComponent.java +++ b/src/net/offbeatpioneer/intellij/plugins/grav/project/GravProjectComponent.java @@ -1,64 +1,17 @@ package net.offbeatpioneer.intellij.plugins.grav.project; -import com.intellij.openapi.components.ProjectComponent; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectManager; -import com.intellij.openapi.vfs.VfsUtil; -import com.intellij.openapi.vfs.VirtualFile; -import net.offbeatpioneer.intellij.plugins.grav.helper.IdeHelper; -import net.offbeatpioneer.intellij.plugins.grav.module.GravSdkType; import net.offbeatpioneer.intellij.plugins.grav.project.settings.GravProjectSettings; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.annotations.SystemIndependent; - -import java.nio.file.Paths; /** - * Project component gets instantiated for every GRAV project created + * Project component * * @author Dominik Grzelak */ -public class GravProjectComponent implements ProjectComponent { - final private static Logger LOG = Logger.getInstance("Grav-Plugin"); - private GravProjectSettings settings; - private Project project; - - public GravProjectComponent(Project project) { - this.project = project; - } - - - @Override - public void projectOpened() { - notifyPluginEnableDialog(); - } - - @Override - public void projectClosed() { - } - - @Override - public void initComponent() { - settings = GravProjectSettings.getInstance(project); - if (settings != null) { - @SystemIndependent String basePath = project.getBasePath(); - settings.withSrcDirectory = false; - if (basePath != null) { - VirtualFile file = VfsUtil.findFile(Paths.get(project.getBasePath(), "src"), true); - if (file != null) { - settings.withSrcDirectory = true; - } - } - } - } - - @Override - public void disposeComponent() { - - } - +public class GravProjectComponent { public static boolean isEnabled(Project project) { if (project == null) return false; GravProjectSettings settings = GravProjectSettings.getInstance(project); @@ -82,25 +35,4 @@ public static Project getEnabledProject() { return null; } - @NotNull - @Override - public String getComponentName() { - return "GravProjectComponent"; - } - - private void notifyPluginEnableDialog() { - // Enable Project dialog - VirtualFile vf = project.getBaseDir(); - if (!settings.pluginEnabled && !settings.dismissEnableNotification) { - //is a src directory present? - if (settings.withSrcDirectory && vf.findChild("src") != null) { - vf = vf.findChild("src"); - if (vf != null && !GravSdkType.isValidGravSDK(vf)) vf = project.getBaseDir(); - } -// vf = settings.withSrcDirectory && vf.findChild("src") == null ? vf : vf.findChild("src"); - if (vf != null && GravSdkType.isValidGravSDK(vf)) { //grav module found - IdeHelper.notifyEnableMessage(project); - } - } - } } diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/project/GravProjectListener.java b/src/net/offbeatpioneer/intellij/plugins/grav/project/GravProjectListener.java new file mode 100644 index 0000000..c2cb8e5 --- /dev/null +++ b/src/net/offbeatpioneer/intellij/plugins/grav/project/GravProjectListener.java @@ -0,0 +1,70 @@ +package net.offbeatpioneer.intellij.plugins.grav.project; + +import com.intellij.openapi.project.Project; +import com.intellij.openapi.project.impl.ProjectLifecycleListener; +import com.intellij.openapi.vfs.VfsUtil; +import com.intellij.openapi.vfs.VirtualFile; +import net.offbeatpioneer.intellij.plugins.grav.helper.IdeHelper; +import net.offbeatpioneer.intellij.plugins.grav.module.GravSdkType; +import net.offbeatpioneer.intellij.plugins.grav.project.settings.GravProjectSettings; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.SystemIndependent; + +import java.nio.file.Paths; + +public class GravProjectListener implements ProjectLifecycleListener { + + public GravProjectListener() { + } + + @Override + public void beforeProjectLoaded(@NotNull Project project) { + System.out.println(project); + } + + @Override + public void afterProjectClosed(@NotNull Project project) { + System.out.println(project); + } + + @Override + public void postStartupActivitiesPassed(@NotNull Project project) { + initComponent(project); + notifyPluginEnableDialog(project); + } + + @Override + public void projectComponentsInitialized(@NotNull Project project) { + } + + public void initComponent(Project project) { + GravProjectSettings settings = GravProjectSettings.getInstance(project); + if (settings != null) { + @SystemIndependent String basePath = project.getBasePath(); + settings.withSrcDirectory = false; + if (basePath != null) { + VirtualFile file = VfsUtil.findFile(Paths.get(project.getBasePath(), "src"), true); + if (file != null) { + settings.withSrcDirectory = true; + } + } + } + } + + private void notifyPluginEnableDialog(Project project) { + GravProjectSettings settings = GravProjectSettings.getInstance(project); + // Enable Project dialog + VirtualFile vf = project.getBaseDir(); + if (!settings.pluginEnabled && !settings.dismissEnableNotification) { + //is a src directory present? + if (settings.withSrcDirectory && vf.findChild("src") != null) { + vf = vf.findChild("src"); + if (vf != null && !GravSdkType.isValidGravSDK(vf)) vf = project.getBaseDir(); + } +// vf = settings.withSrcDirectory && vf.findChild("src") == null ? vf : vf.findChild("src"); + if (vf != null && GravSdkType.isValidGravSDK(vf)) { //grav module found + IdeHelper.notifyEnableMessage(project); + } + } + } +} diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/project/settings/GravProjectSettings.java b/src/net/offbeatpioneer/intellij/plugins/grav/project/settings/GravProjectSettings.java index a1e5355..cb07fd5 100644 --- a/src/net/offbeatpioneer/intellij/plugins/grav/project/settings/GravProjectSettings.java +++ b/src/net/offbeatpioneer/intellij/plugins/grav/project/settings/GravProjectSettings.java @@ -1,9 +1,11 @@ package net.offbeatpioneer.intellij.plugins.grav.project.settings; -import com.intellij.openapi.components.*; +import com.intellij.openapi.components.PersistentStateComponent; +import com.intellij.openapi.components.ServiceManager; +import com.intellij.openapi.components.State; +import com.intellij.openapi.components.Storage; import com.intellij.openapi.project.Project; import com.intellij.util.xmlb.XmlSerializerUtil; -import net.offbeatpioneer.intellij.plugins.grav.storage.GravPersistentStateComponent; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/toolwindow/SystemSettingsToolWindowFactory.java b/src/net/offbeatpioneer/intellij/plugins/grav/toolwindow/SystemSettingsToolWindowFactory.java index 65d82ac..68e0aac 100644 --- a/src/net/offbeatpioneer/intellij/plugins/grav/toolwindow/SystemSettingsToolWindowFactory.java +++ b/src/net/offbeatpioneer/intellij/plugins/grav/toolwindow/SystemSettingsToolWindowFactory.java @@ -12,10 +12,7 @@ import com.intellij.ui.content.Content; import com.intellij.ui.content.ContentFactory; import com.intellij.util.ThrowableRunnable; -import net.offbeatpioneer.intellij.plugins.grav.helper.GravYAMLUtils; -import net.offbeatpioneer.intellij.plugins.grav.helper.NotificationHelper; -import net.offbeatpioneer.intellij.plugins.grav.helper.ProjectChecker; -import net.offbeatpioneer.intellij.plugins.grav.helper.Triple; +import net.offbeatpioneer.intellij.plugins.grav.helper.*; import net.offbeatpioneer.intellij.plugins.grav.project.GravProjectComponent; import org.jetbrains.annotations.NotNull; import org.jetbrains.yaml.YAMLElementGenerator;