Skip to content

Commit 1c2dcb3

Browse files
authored
Merge pull request #625 from bohdan-harniuk/uct-project-run-configuration-feature
The Upgrade Compatibility Tool project Run Configuration feature
2 parents e79f7ab + 7eeb20f commit 1c2dcb3

19 files changed

+2084
-0
lines changed

resources/META-INF/plugin.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@
116116
<projectTemplatesFactory implementation="com.magento.idea.magento2plugin.generation.php.MagentoTemplatesFactory"/>
117117

118118
<projectService serviceImplementation="com.magento.idea.magento2plugin.project.Settings"/>
119+
<projectService serviceImplementation="com.magento.idea.magento2uct.settings.UctSettingsService"/>
119120

120121
<completion.contributor language="XML" implementationClass="com.magento.idea.magento2plugin.completion.xml.XmlCompletionContributor" id="xml" />
121122
<completion.contributor language="PHP" implementationClass="com.magento.idea.magento2plugin.completion.php.PhpCompletionContributor" id="php" />
@@ -285,6 +286,8 @@
285286
<postStartupActivity implementation="com.magento.idea.magento2plugin.project.startup.CheckIfMagentoPathIsValidActivity"/>
286287

287288
<errorHandler implementation="com.magento.idea.magento2plugin.project.diagnostic.DefaultErrorReportSubmitter"/>
289+
290+
<configurationType implementation="com.magento.idea.magento2uct.execution.configurations.UctRunConfigurationType"/>
288291
</extensions>
289292

290293
<extensions defaultExtensionNs="com.jetbrains.php">

resources/icons/pluginIcon16x16.svg

Lines changed: 13 additions & 0 deletions
Loading

resources/icons/pluginIcon64x64.svg

Lines changed: 13 additions & 0 deletions
Loading

src/com/magento/idea/magento2plugin/MagentoIcons.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@
1010

1111
@SuppressWarnings({"PMD.ClassNamingConventions"})
1212
public class MagentoIcons {
13+
1314
public static final Icon WEB_API = IconLoader.getIcon("/icons/webapi.png", MagentoIcons.class);
1415
public static final Icon MODULE = IconLoader.getIcon("/icons/module.png", MagentoIcons.class);
16+
public static final Icon PLUGIN_ICON_SMALL =
17+
IconLoader.getIcon("/icons/pluginIcon16x16.svg", MagentoIcons.class);
18+
public static final Icon PLUGIN_ICON_MEDIUM =
19+
IconLoader.getIcon("/icons/pluginIcon64x64.svg", MagentoIcons.class);
1520
}
Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
/*
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
6+
package com.magento.idea.magento2uct.execution;
7+
8+
import com.intellij.execution.ExecutionException;
9+
import com.intellij.execution.configurations.GeneralCommandLine;
10+
import com.intellij.execution.configurations.PtyCommandLine;
11+
import com.intellij.execution.filters.TextConsoleBuilderFactory;
12+
import com.intellij.execution.process.OSProcessHandler;
13+
import com.intellij.execution.process.ProcessHandlerFactory;
14+
import com.intellij.execution.process.ProcessTerminatedListener;
15+
import com.intellij.execution.ui.ConsoleView;
16+
import com.intellij.icons.AllIcons;
17+
import com.intellij.openapi.project.Project;
18+
import com.intellij.openapi.util.SystemInfo;
19+
import com.intellij.openapi.wm.RegisterToolWindowTask;
20+
import com.intellij.openapi.wm.ToolWindow;
21+
import com.intellij.openapi.wm.ToolWindowAnchor;
22+
import com.intellij.openapi.wm.ToolWindowId;
23+
import com.intellij.openapi.wm.ToolWindowManager;
24+
import com.intellij.ui.content.Content;
25+
import com.magento.idea.magento2plugin.MagentoIcons;
26+
import org.jetbrains.annotations.NotNull;
27+
28+
public final class DownloadUctCommand {
29+
30+
private static final String TAB_TITLE = "Create UCT project";
31+
private final Project project;
32+
33+
/**
34+
* Download UCT command constructor.
35+
*
36+
* @param project Project
37+
*/
38+
public DownloadUctCommand(final @NotNull Project project) {
39+
this.project = project;
40+
}
41+
42+
/**
43+
* Start UCT downloading process.
44+
*/
45+
public void execute() throws ExecutionException {
46+
final ConsoleView consoleView = createConsole();
47+
final OSProcessHandler processHandler = createProcessHandler();
48+
consoleView.attachToProcess(processHandler);
49+
processHandler.startNotify();
50+
}
51+
52+
/**
53+
* Create process handler.
54+
*
55+
* @return OSProcessHandler
56+
*/
57+
private OSProcessHandler createProcessHandler() throws ExecutionException {
58+
final GeneralCommandLine commandLine = createGeneralCommandLine(true);
59+
commandLine.setWorkDirectory(project.getBasePath());
60+
commandLine.setExePath("composer");
61+
commandLine.addParameters(
62+
"create-project",
63+
"magento/upgrade-compatibility-tool",
64+
"uct",
65+
"--repository",
66+
"https://repo.magento.com",
67+
"--ansi"
68+
);
69+
70+
final OSProcessHandler processHandler = ProcessHandlerFactory
71+
.getInstance()
72+
.createColoredProcessHandler(commandLine);
73+
74+
ProcessTerminatedListener.attach(processHandler);
75+
76+
return processHandler;
77+
}
78+
79+
/**
80+
* Create general command line.
81+
*
82+
* @param withPty boolean
83+
*
84+
* @return GeneralCommandLine
85+
*/
86+
private GeneralCommandLine createGeneralCommandLine(final boolean withPty) {
87+
GeneralCommandLine commandLine;
88+
89+
if (withPty) {
90+
if (SystemInfo.isWindows) {
91+
commandLine = new GeneralCommandLine();
92+
commandLine.getEnvironment().putIfAbsent("TERM", "xterm");
93+
} else {
94+
commandLine = new PtyCommandLine().withInitialColumns(2500);
95+
}
96+
} else {
97+
commandLine = new GeneralCommandLine();
98+
}
99+
100+
return commandLine;
101+
}
102+
103+
/**
104+
* Create console view.
105+
*
106+
* @return ConsoleView
107+
*/
108+
private ConsoleView createConsole() {
109+
ToolWindow toolWindow = ToolWindowManager
110+
.getInstance(project)
111+
.getToolWindow(ToolWindowId.RUN);
112+
113+
if (toolWindow == null) {
114+
toolWindow = ToolWindowManager.getInstance(project).registerToolWindow(
115+
new RegisterToolWindowTask(
116+
ToolWindowId.RUN,
117+
ToolWindowAnchor.BOTTOM,
118+
null,
119+
false,
120+
true,
121+
true,
122+
true,
123+
null,
124+
AllIcons.Actions.Execute,
125+
null
126+
)
127+
);
128+
}
129+
final ConsoleView consoleView = TextConsoleBuilderFactory.getInstance()
130+
.createBuilder(project)
131+
.getConsole();
132+
final Content content = toolWindow
133+
.getContentManager()
134+
.getFactory()
135+
.createContent(consoleView.getComponent(), TAB_TITLE, true);
136+
content.putUserData(ToolWindow.SHOW_CONTENT_ICON, Boolean.TRUE);
137+
content.setIcon(MagentoIcons.PLUGIN_ICON_SMALL);
138+
toolWindow.getContentManager().addContent(content);
139+
toolWindow.show();
140+
141+
return consoleView;
142+
}
143+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/*
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
6+
package com.magento.idea.magento2uct.execution.configurations;
7+
8+
import com.intellij.execution.configurations.ConfigurationFactory;
9+
import com.intellij.execution.configurations.ConfigurationType;
10+
import com.intellij.execution.configurations.RunConfiguration;
11+
import com.intellij.openapi.components.BaseState;
12+
import com.intellij.openapi.project.Project;
13+
import org.jetbrains.annotations.NotNull;
14+
import org.jetbrains.annotations.Nullable;
15+
16+
public class UctConfigurationFactory extends ConfigurationFactory {
17+
18+
/**
19+
* UCT configuration factory constructor.
20+
*
21+
* @param type ConfigurationType
22+
*/
23+
protected UctConfigurationFactory(final @NotNull ConfigurationType type) {
24+
super(type);
25+
}
26+
27+
@Override
28+
public @NotNull String getId() {
29+
return UctRunConfigurationType.RUN_CONFIGURATION_TYPE_ID;
30+
}
31+
32+
@Override
33+
public @NotNull RunConfiguration createTemplateConfiguration(final @NotNull Project project) {
34+
return new UctRunConfiguration(project, this, UctRunConfigurationType.TITLE);
35+
}
36+
37+
@Override
38+
public @Nullable Class<? extends BaseState> getOptionsClass() {
39+
return UctRunConfigurationOptions.class;
40+
}
41+
}

0 commit comments

Comments
 (0)