Skip to content

Commit 2968fa8

Browse files
committed
Added generators for queue configuration
1 parent 96b5816 commit 2968fa8

File tree

9 files changed

+275
-37
lines changed

9 files changed

+275
-37
lines changed
Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,4 @@
11
<?xml version="1.0"?>
22
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
33
xsi:noNamespaceSchemaLocation="urn:magento:framework-message-queue:etc/consumer.xsd">
4-
<consumer name="${NAME}"
5-
queue="${QUEUE_NAME}"
6-
connection="${CONNECTION}"
7-
#if(${MAX_MESSAGES})
8-
maxMessages="${MAX_MESSAGES}"
9-
#end
10-
consumerInstance="${INSTANCE}"/>
114
</config>
Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
11
<?xml version="1.0"?>
22
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
33
xsi:noNamespaceSchemaLocation="urn:magento:framework-message-queue:etc/publisher.xsd">
4-
<publisher topic="${TOPIC}">
5-
<connection name="${CONNECTION}" exchange="${EXCHANGE}"/>
6-
</publisher>
74
</config>
Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,4 @@
11
<?xml version="1.0"?>
22
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
33
xsi:noNamespaceSchemaLocation="urn:magento:framework-message-queue:etc/topology.xsd">
4-
<exchange name="${EXCHANGE_NAME}" type="topic" connection="${CONNECTION}">
5-
<binding id="${BINDING_ID}"
6-
topic="${TOPIC}"
7-
destinationType="queue"
8-
destination="${QUEUE}"/>
9-
</exchange>
104
</config>

src/com/magento/idea/magento2plugin/actions/generation/data/QueueTopologyData.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,22 @@
22

33
public class QueueTopologyData {
44
private String exchangeName;
5+
private String connectionName;
56
private String bindingId;
67
private String bindingTopic;
78
private String bindingQueue;
89
private String moduleName;
910

1011
public QueueTopologyData(
1112
String exchangeName,
13+
String connectionName,
1214
String bindingId,
1315
String bindingTopic,
1416
String bindingQueue,
1517
String moduleName
1618
) {
1719
this.exchangeName = exchangeName;
20+
this.connectionName = connectionName;
1821
this.bindingId = bindingId;
1922
this.bindingTopic = bindingTopic;
2023
this.bindingQueue = bindingQueue;
@@ -25,6 +28,10 @@ public String getExchangeName() {
2528
return exchangeName;
2629
}
2730

31+
public String getConnectionName() {
32+
return connectionName;
33+
}
34+
2835
public String getBindingId() {
2936
return bindingId;
3037
}

src/com/magento/idea/magento2plugin/actions/generation/dialog/NewMessageQueueDialog.java

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
import com.magento.idea.magento2plugin.actions.generation.dialog.validator.rule.PhpNamespaceNameRule;
2121
import com.magento.idea.magento2plugin.actions.generation.generator.QueueCommunicationGenerator;
2222
import com.magento.idea.magento2plugin.actions.generation.generator.QueueConsumerGenerator;
23-
import com.magento.idea.magento2plugin.bundles.CommonBundle;
24-
import com.magento.idea.magento2plugin.bundles.ValidatorBundle;
23+
import com.magento.idea.magento2plugin.actions.generation.generator.QueuePublisherGenerator;
24+
import com.magento.idea.magento2plugin.actions.generation.generator.QueueTopologyGenerator;
2525
import com.magento.idea.magento2plugin.util.magento.GetModuleNameByDirectoryUtil;
2626
import java.awt.event.ActionEvent;
2727
import java.awt.event.KeyEvent;
@@ -99,8 +99,6 @@ public class NewMessageQueueDialog extends AbstractDialog {
9999
// TODO: Can this be made a dropdown?
100100
@FieldValidation(rule = RuleRegistry.NOT_EMPTY,
101101
message = {NotEmptyRule.MESSAGE, CONNECTION_NAME})
102-
@FieldValidation(rule = RuleRegistry.PHP_CLASS,
103-
message = {PhpClassRule.MESSAGE, CONNECTION_NAME})
104102
private JTextField connectionName;
105103

106104
@FieldValidation(rule = RuleRegistry.NOT_EMPTY,
@@ -126,8 +124,6 @@ public class NewMessageQueueDialog extends AbstractDialog {
126124

127125
private final Project project;
128126
private final String moduleName;
129-
private final ValidatorBundle validatorBundle;
130-
private final CommonBundle commonBundle;
131127

132128
/**
133129
* Constructor.
@@ -137,8 +133,6 @@ public NewMessageQueueDialog(Project project, PsiDirectory directory) {
137133

138134
this.project = project;
139135
this.moduleName = GetModuleNameByDirectoryUtil.execute(directory, project);
140-
this.validatorBundle = new ValidatorBundle();
141-
this.commonBundle = new CommonBundle();
142136

143137
setContentPane(contentPanel);
144138
setModal(true);
@@ -184,8 +178,8 @@ private void onOK() {
184178
if (validateFormFields()) {
185179
generateCommunication();
186180
generateConsumer();
187-
/*generateTopology();
188-
generatePublisher();*/
181+
generateTopology();
182+
generatePublisher();
189183
this.setVisible(false);
190184
}
191185
}
@@ -206,26 +200,30 @@ private void generateConsumer() {
206200
getQueueName(),
207201
getConsumerType(),
208202
getMaxMessages(),
209-
getConnectionName()
203+
getConnectionName(),
204+
getModuleName()
210205
)).generate(NewMessageQueueAction.ACTION_NAME, true);
211206
}
212207

213-
/*private void generateTopology() {
208+
private void generateTopology() {
214209
new QueueTopologyGenerator(project, new QueueTopologyData(
215210
getExchangeName(),
211+
getConnectionName(),
216212
getBindingId(),
217213
getBindingTopic(),
218-
getQueueName()
214+
getQueueName(),
215+
getModuleName()
219216
)).generate(NewMessageQueueAction.ACTION_NAME, true);
220217
}
221218

222219
private void generatePublisher() {
223220
new QueuePublisherGenerator(project, new QueuePublisherData(
224221
getTopicName(),
225222
getConnectionName(),
226-
getExchangeName()
223+
getExchangeName(),
224+
getModuleName()
227225
)).generate(NewMessageQueueAction.ACTION_NAME, true);
228-
}*/
226+
}
229227

230228
public String getTopicName() {
231229
return topicName.getText().trim();

src/com/magento/idea/magento2plugin/actions/generation/generator/QueueCommunicationGenerator.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,14 @@
1010
import com.intellij.psi.xml.XmlTag;
1111
import com.magento.idea.magento2plugin.actions.generation.data.QueueCommunicationData;
1212
import com.magento.idea.magento2plugin.actions.generation.generator.util.FindOrCreateCommunicationXml;
13-
import com.magento.idea.magento2plugin.actions.generation.generator.util.GetCodeTemplate;
14-
import com.magento.idea.magento2plugin.actions.generation.generator.util.XmlFilePositionUtil;
1513
import java.util.Properties;
1614
import org.jetbrains.annotations.NotNull;
1715
import org.jetbrains.annotations.Nullable;
1816

1917
public class QueueCommunicationGenerator extends FileGenerator {
2018
private final QueueCommunicationData communicationData;
2119
private final Project project;
22-
private final GetCodeTemplate getCodeTemplate;
2320
private final FindOrCreateCommunicationXml findOrCreateCommunicationXml;
24-
private final XmlFilePositionUtil positionUtil;
2521

2622
public QueueCommunicationGenerator(
2723
final Project project,
@@ -31,9 +27,7 @@ public QueueCommunicationGenerator(
3127

3228
this.communicationData = communicationData;
3329
this.project = project;
34-
this.getCodeTemplate = GetCodeTemplate.getInstance(project);
3530
this.findOrCreateCommunicationXml = new FindOrCreateCommunicationXml(project);
36-
this.positionUtil = XmlFilePositionUtil.getInstance();
3731
}
3832

3933
@Override
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package com.magento.idea.magento2plugin.actions.generation.generator;
2+
3+
import com.intellij.openapi.command.WriteCommandAction;
4+
import com.intellij.openapi.editor.Document;
5+
import com.intellij.openapi.project.Project;
6+
import com.intellij.psi.PsiDocumentManager;
7+
import com.intellij.psi.PsiFile;
8+
import com.intellij.psi.xml.XmlFile;
9+
import com.intellij.psi.xml.XmlTag;
10+
import com.magento.idea.magento2plugin.actions.generation.data.QueueConsumerData;
11+
import com.magento.idea.magento2plugin.actions.generation.generator.util.FindOrCreateQueueConsumerXml;
12+
import java.util.Properties;
13+
14+
public class QueueConsumerGenerator extends FileGenerator {
15+
private final QueueConsumerData consumerData;
16+
private final Project project;
17+
private final FindOrCreateQueueConsumerXml findOrCreateQueueConsumerXml;
18+
19+
public QueueConsumerGenerator(Project project, QueueConsumerData consumerData) {
20+
super(project);
21+
22+
this.consumerData = consumerData;
23+
this.project = project;
24+
this.findOrCreateQueueConsumerXml = new FindOrCreateQueueConsumerXml(project);
25+
}
26+
27+
@Override
28+
public PsiFile generate(String actionName) {
29+
final XmlFile consumerXml = (XmlFile) findOrCreateQueueConsumerXml.execute(
30+
actionName,
31+
consumerData.getModuleName()
32+
);
33+
final PsiDocumentManager psiDocumentManager = PsiDocumentManager.getInstance(project);
34+
final Document document = psiDocumentManager.getDocument(consumerXml);
35+
36+
WriteCommandAction.runWriteCommandAction(project, () -> {
37+
final XmlTag rootTag = consumerXml.getRootTag();
38+
if (rootTag == null) {
39+
return;
40+
}
41+
XmlTag[] consumerTags = rootTag.findSubTags("consumer");
42+
boolean tagIsGenerated = true;
43+
for (final XmlTag tag: consumerTags) {
44+
if (consumerData.getConsumerName().equals(tag.getAttribute("name").getValue())) {
45+
tagIsGenerated = false;
46+
break;
47+
}
48+
}
49+
if (tagIsGenerated) {
50+
XmlTag consumerTag = rootTag.createChildTag("consumer", null, null, false);
51+
consumerTag.setAttribute("name", consumerData.getConsumerName());
52+
consumerTag.setAttribute("queue", consumerData.getQueueName());
53+
consumerTag.setAttribute("consumerInstance", consumerData.getConsumerType());
54+
consumerTag.setAttribute("connection", consumerData.getConnectionName());
55+
consumerTag.setAttribute("maxMessages", consumerData.getMaxMessages());
56+
57+
rootTag.addSubTag(consumerTag, false);
58+
}
59+
60+
psiDocumentManager.commitDocument(document);
61+
});
62+
63+
return consumerXml;
64+
}
65+
66+
@Override
67+
protected void fillAttributes(Properties attributes) {}
68+
}
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
package com.magento.idea.magento2plugin.actions.generation.generator;
2+
3+
import com.intellij.openapi.command.WriteCommandAction;
4+
import com.intellij.openapi.editor.Document;
5+
import com.intellij.openapi.project.Project;
6+
import com.intellij.psi.PsiDocumentManager;
7+
import com.intellij.psi.PsiFile;
8+
import com.intellij.psi.xml.XmlAttribute;
9+
import com.intellij.psi.xml.XmlFile;
10+
import com.intellij.psi.xml.XmlTag;
11+
import com.magento.idea.magento2plugin.actions.generation.data.QueuePublisherData;
12+
import com.magento.idea.magento2plugin.actions.generation.generator.util.FindOrCreateQueuePublisherXml;
13+
import java.util.Properties;
14+
import org.jetbrains.annotations.NotNull;
15+
import org.jetbrains.annotations.Nullable;
16+
17+
public class QueuePublisherGenerator extends FileGenerator {
18+
private final QueuePublisherData publisherData;
19+
private final Project project;
20+
private final FindOrCreateQueuePublisherXml findOrCreateQueuePublisherXml;
21+
22+
public QueuePublisherGenerator(
23+
final Project project,
24+
final QueuePublisherData publisherData
25+
) {
26+
super(project);
27+
28+
this.publisherData = publisherData;
29+
this.project = project;
30+
this.findOrCreateQueuePublisherXml = new FindOrCreateQueuePublisherXml(project);
31+
}
32+
33+
@Override
34+
public PsiFile generate(String actionName) {
35+
final XmlFile publisherXml = (XmlFile) findOrCreateQueuePublisherXml.execute(
36+
actionName,
37+
publisherData.getModuleName()
38+
);
39+
final PsiDocumentManager psiDocumentManager = PsiDocumentManager.getInstance(project);
40+
final Document document = psiDocumentManager.getDocument(publisherXml);
41+
42+
WriteCommandAction.runWriteCommandAction(project, () -> {
43+
final XmlTag rootTag = publisherXml.getRootTag();
44+
if (rootTag == null) {
45+
return;
46+
}
47+
XmlTag[] publisherTags = rootTag.findSubTags("publisher");
48+
boolean publisherTagIsGenerated = true;
49+
XmlTag publisherTag = null;
50+
for (final XmlTag tag: publisherTags) {
51+
if (publisherData.getTopicName().equals(tag.getAttribute("topic").getValue())) {
52+
publisherTagIsGenerated = false;
53+
publisherTag = tag;
54+
break;
55+
}
56+
}
57+
if (publisherTagIsGenerated) {
58+
publisherTag = rootTag.createChildTag("publisher", null, "", false);
59+
60+
publisherTag.setAttribute("topic", publisherData.getTopicName());
61+
}
62+
63+
@NotNull final XmlTag[] connectionTags = publisherTag.findSubTags("connection");
64+
boolean isDeclared = false;
65+
for (final XmlTag connectionTag: connectionTags) {
66+
@Nullable final XmlAttribute connectionName = connectionTag.getAttribute("name");
67+
if (publisherData.getConnectionName().equals(connectionName.getValue())) {
68+
isDeclared = true;
69+
}
70+
}
71+
72+
if (!isDeclared) {
73+
final XmlTag connectionTag = publisherTag.createChildTag("connection", null, null, false);
74+
75+
connectionTag.setAttribute("name", publisherData.getConnectionName());
76+
connectionTag.setAttribute("exchange",publisherData.getExchangeName());
77+
78+
publisherTag.addSubTag(connectionTag, false);
79+
80+
if (publisherTagIsGenerated) {
81+
rootTag.addSubTag(publisherTag, false);
82+
}
83+
}
84+
85+
psiDocumentManager.commitDocument(document);
86+
});
87+
88+
return publisherXml;
89+
}
90+
91+
@Override
92+
protected void fillAttributes(Properties attributes) {}
93+
}

0 commit comments

Comments
 (0)