Skip to content

Commit a8666aa

Browse files
committed
replace the webdeployment project component to allow the plugin be dynamic
1 parent be3a3ca commit a8666aa

File tree

2 files changed

+42
-32
lines changed

2 files changed

+42
-32
lines changed

src/main/java/fr/adrienbrault/idea/symfony2plugin/webDeployment/WebDeploymentProjectComponent.java

+37-27
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package fr.adrienbrault.idea.symfony2plugin.webDeployment;
22

3-
import com.intellij.openapi.components.ProjectComponent;
3+
import com.intellij.openapi.Disposable;
44
import com.intellij.openapi.progress.ProgressIndicator;
55
import com.intellij.openapi.progress.Task;
66
import com.intellij.openapi.project.DumbService;
@@ -16,45 +16,55 @@
1616
/**
1717
* @author Daniel Espendiller <[email protected]>
1818
*/
19-
public class WebDeploymentProjectComponent implements ProjectComponent {
20-
21-
private Project project;
22-
23-
public WebDeploymentProjectComponent(Project project) {
24-
this.project = project;
25-
}
19+
public class WebDeploymentProjectComponent {
20+
public static class PostStartupActivity implements com.intellij.openapi.startup.StartupActivity {
21+
@Override
22+
public void runActivity(@NotNull Project project) {
23+
if(!WebDeploymentUtil.isEnabled(project)) {
24+
return;
25+
}
2626

27-
public void initComponent() {
27+
project.getService(ProjectService.class).start();
28+
}
2829
}
2930

30-
public void disposeComponent() {
31-
}
31+
public static class ProjectService implements Disposable {
32+
private final Project project;
33+
private Timer timer1;
3234

33-
@NotNull
34-
public String getComponentName() {
35-
return "WebDeploymentProjectComponent";
36-
}
37-
38-
public void projectOpened() {
39-
if(!WebDeploymentUtil.isEnabled(project)) {
40-
return;
35+
public ProjectService(@NotNull Project project) {
36+
this.project = project;
4137
}
4238

43-
// remote file downloader
44-
if(Settings.getInstance(project).remoteDevFileScheduler) {
45-
Symfony2ProjectComponent.getLogger().info("Starting Symfony webDeployment background scheduler");
39+
public void start() {
40+
// remote file downloader
41+
if(Settings.getInstance(project).remoteDevFileScheduler) {
42+
Symfony2ProjectComponent.getLogger().info("Starting Symfony webDeployment background scheduler");
4643

47-
DumbService.getInstance(project).smartInvokeLater(() -> new Timer().schedule(new MyTimerTask(), 1000, 300000));
44+
this.timer1 = new Timer();
45+
DumbService.getInstance(this.project).smartInvokeLater(() -> timer1.schedule(new MyTimerTask(project), 1000, 300000));
46+
}
4847
}
49-
}
5048

51-
public void projectClosed() {
52-
if(RemoteWebServerUtil.STORAGE_INSTANCES.containsKey(project)) {
49+
@Override
50+
public void dispose() {
5351
RemoteWebServerUtil.STORAGE_INSTANCES.remove(project);
52+
53+
if (this.timer1 != null) {
54+
this.timer1.cancel();
55+
this.timer1.purge();
56+
this.timer1 = null;
57+
}
5458
}
5559
}
5660

57-
private class MyTimerTask extends TimerTask {
61+
private static class MyTimerTask extends TimerTask {
62+
@NotNull
63+
private final Project project;
64+
65+
public MyTimerTask(@NotNull Project project) {
66+
this.project = project;
67+
}
5868

5969
@Override
6070
public void run() {

src/main/resources/META-INF/deployment-aware.xml

+5-5
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@
1515
<CompiledServiceBuilderFactory implementation="fr.adrienbrault.idea.symfony2plugin.webDeployment.container.RemoteCompiledServiceContainerLoader"/>
1616
</extensions>
1717

18-
<project-components>
19-
<component>
20-
<implementation-class>fr.adrienbrault.idea.symfony2plugin.webDeployment.WebDeploymentProjectComponent</implementation-class>
21-
</component>
22-
</project-components>
18+
19+
<extensions defaultExtensionNs="com.intellij">
20+
<postStartupActivity implementation="fr.adrienbrault.idea.symfony2plugin.webDeployment.WebDeploymentProjectComponent$PostStartupActivity"/>
21+
<projectService serviceImplementation="fr.adrienbrault.idea.symfony2plugin.webDeployment.WebDeploymentProjectComponent$ProjectService"/>
22+
</extensions>
2323

2424
</idea-plugin>

0 commit comments

Comments
 (0)