diff --git a/META-INF/plugin.xml b/META-INF/plugin.xml index 11d844690..e73e6c7b9 100644 --- a/META-INF/plugin.xml +++ b/META-INF/plugin.xml @@ -20,6 +20,8 @@ <extensions defaultExtensionNs="com.intellij"> <php.typeProvider implementation="fr.adrienbrault.idea.symfony2plugin.SymfonyContainerTypeProvider"/> + <projectConfigurable instance="fr.adrienbrault.idea.symfony2plugin.SettingsForm" /> + <projectService serviceImplementation="fr.adrienbrault.idea.symfony2plugin.Settings" /> </extensions> <depends>com.jetbrains.php</depends> diff --git a/src/fr/adrienbrault/idea/symfony2plugin/Settings.java b/src/fr/adrienbrault/idea/symfony2plugin/Settings.java new file mode 100644 index 000000000..384db4ba7 --- /dev/null +++ b/src/fr/adrienbrault/idea/symfony2plugin/Settings.java @@ -0,0 +1,46 @@ +package fr.adrienbrault.idea.symfony2plugin; + +import com.intellij.openapi.components.*; +import com.intellij.openapi.project.Project; +import com.intellij.util.xmlb.XmlSerializerUtil; +import org.jetbrains.annotations.Nullable; + +import java.util.HashMap; + +/** + * Created with IntelliJ IDEA. + * User: Lumbendil + * Date: 7/04/13 + * Time: 20:02 + * To change this template use File | Settings | File Templates. + */ +@State( + name = "Settings", + storages = { + @Storage(id = "default", file="$PROJECT_CONFIG_DIR$/symfony2.xml", scheme = StorageScheme.DIRECTORY_BASED) + } +) +public class Settings implements PersistentStateComponent<Settings> { + public String pathToProjectContainer = "app/cache/dev/appDevDebugProjectContainer.xml"; + protected Project project; + + public static Settings getInstance(Project project) + { + Settings settings = ServiceManager.getService(project, Settings.class); + + settings.project = project; + + return settings; + } + + @Nullable + @Override + public Settings getState() { + return this; + } + + @Override + public void loadState(Settings settings) { + XmlSerializerUtil.copyBean(settings, this); + } +} diff --git a/src/fr/adrienbrault/idea/symfony2plugin/SettingsForm.java b/src/fr/adrienbrault/idea/symfony2plugin/SettingsForm.java new file mode 100644 index 000000000..22cbba795 --- /dev/null +++ b/src/fr/adrienbrault/idea/symfony2plugin/SettingsForm.java @@ -0,0 +1,80 @@ +package fr.adrienbrault.idea.symfony2plugin; + +import com.intellij.openapi.options.Configurable; +import com.intellij.openapi.options.ConfigurationException; +import com.intellij.openapi.project.Project; +import org.jetbrains.annotations.Nls; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import javax.swing.*; + +/** + * Created with IntelliJ IDEA. + * User: Lumbendil + * Date: 7/04/13 + * Time: 20:11 + * To change this template use File | Settings | File Templates. + */ +public class SettingsForm implements Configurable { + private Project project; + private JTextField pathToProjectPanel; + + public SettingsForm(@NotNull final Project project) + { + this.project = project; + } + + @Nls + @Override + public String getDisplayName() { + return "Symfony2"; + } + + @Nullable + @Override + public String getHelpTopic() { + return null; + } + + @Nullable + @Override + public JComponent createComponent() { + JLabel label = new JLabel("Path to appDevDebugProjectContainer.xml: "); + pathToProjectPanel = new JTextField(getSettings().pathToProjectContainer, 35); + + label.setLabelFor(pathToProjectPanel); + + JPanel panel = new JPanel(); + + panel.add(label); + panel.add(pathToProjectPanel); + + return panel; + } + + @Override + public boolean isModified() { + return true; + } + + @Override + public void apply() throws ConfigurationException { + getSettings().pathToProjectContainer = pathToProjectPanel.getText(); + } + + @Override + public void reset() { + //To change body of implemented methods use File | Settings | File Templates. + } + + @Override + public void disposeUIResources() { + //To change body of implemented methods use File | Settings | File Templates. + } + + private Settings getSettings() + { + return Settings.getInstance(project); + } +} diff --git a/src/fr/adrienbrault/idea/symfony2plugin/SymfonyContainerTypeProvider.java b/src/fr/adrienbrault/idea/symfony2plugin/SymfonyContainerTypeProvider.java index 3a580e474..6715a0867 100644 --- a/src/fr/adrienbrault/idea/symfony2plugin/SymfonyContainerTypeProvider.java +++ b/src/fr/adrienbrault/idea/symfony2plugin/SymfonyContainerTypeProvider.java @@ -91,7 +91,7 @@ private String getServiceId(MethodReferenceImpl e) { private Map<String, String>getServicesMap(Project project) { Map<String, String> map = new HashMap<String, String>(); - String defaultServiceMapFilePath = project.getBasePath() + "/app/cache/dev/appDevDebugProjectContainer.xml"; + String defaultServiceMapFilePath = project.getBasePath() + Settings.getInstance(project).pathToProjectContainer; File xmlFile = new File(defaultServiceMapFilePath); if (!xmlFile.exists()) { return map;