Skip to content

Commit 731b667

Browse files
Added indexer for product types
1 parent 1ea811d commit 731b667

File tree

7 files changed

+193
-21
lines changed

7 files changed

+193
-21
lines changed

resources/META-INF/plugin.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@
141141
<fileBasedIndex implementation="com.magento.idea.magento2plugin.stubs.indexes.xml.MenuIndex" />
142142
<fileBasedIndex implementation="com.magento.idea.magento2plugin.stubs.indexes.xml.DeclarativeSchemaElementsIndex" />
143143
<fileBasedIndex implementation="com.magento.idea.magento2plugin.stubs.indexes.xml.UIComponentIndex" />
144+
<fileBasedIndex implementation="com.magento.idea.magento2plugin.stubs.indexes.xml.ProductTypeIndex" />
144145

145146
<codeInsight.lineMarkerProvider language="PHP" implementationClass="com.magento.idea.magento2plugin.linemarker.php.PluginLineMarkerProvider"/>
146147
<codeInsight.lineMarkerProvider language="PHP" implementationClass="com.magento.idea.magento2plugin.linemarker.php.PluginTargetLineMarkerProvider"/>

src/com/magento/idea/magento2plugin/actions/generation/dialog/NewEavAttributeDialog.form

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@
331331
<text value="Apply to all products types"/>
332332
</properties>
333333
</component>
334-
<grid id="27880" binding="applyToPanel" layout-manager="GridLayoutManager" row-count="2" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
334+
<grid id="27880" binding="applyToPanel" layout-manager="GridLayoutManager" row-count="1" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
335335
<margin top="0" left="0" bottom="0" right="0"/>
336336
<constraints>
337337
<grid row="16" column="0" row-span="1" col-span="3" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
@@ -352,25 +352,21 @@
352352
<toolTipText value=""/>
353353
</properties>
354354
</component>
355-
<component id="fbc8d" class="javax.swing.JTextPane" binding="applyToRecommendationTextPanel">
355+
<scrollpane id="f0efd">
356356
<constraints>
357-
<grid row="1" column="1" row-span="1" col-span="1" vsize-policy="6" hsize-policy="6" anchor="0" fill="3" indent="0" use-parent-layout="false">
358-
<preferred-size width="150" height="-1"/>
359-
</grid>
360-
</constraints>
361-
<properties>
362-
<text value="Enter comma separated product types for which attribute will available, for example: simple,configurable,bundle,virtual,downloadable,category. Or leave this property blank if you want apply attribute for all product types."/>
363-
<toolTipText value=""/>
364-
</properties>
365-
</component>
366-
<component id="fffe8" class="javax.swing.JTextField" binding="applyToTextField">
367-
<constraints>
368-
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false">
369-
<preferred-size width="150" height="-1"/>
370-
</grid>
357+
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="7" hsize-policy="7" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
371358
</constraints>
372359
<properties/>
373-
</component>
360+
<border type="none"/>
361+
<children>
362+
<component id="9e8b9" class="javax.swing.JList" binding="productsTypesList">
363+
<constraints/>
364+
<properties>
365+
<enabled value="true"/>
366+
</properties>
367+
</component>
368+
</children>
369+
</scrollpane>
374370
</children>
375371
</grid>
376372
</children>

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

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,18 +28,21 @@
2828
import com.magento.idea.magento2plugin.magento.packages.eav.AttributeType;
2929
import com.magento.idea.magento2plugin.magento.packages.eav.EavEntity;
3030
import com.magento.idea.magento2plugin.util.magento.GetModuleNameByDirectoryUtil;
31+
import com.magento.idea.magento2plugin.util.magento.GetProductTypesListUtil;
3132
import java.awt.event.ItemEvent;
3233
import java.awt.event.ItemListener;
3334
import java.awt.event.KeyEvent;
3435
import java.awt.event.WindowAdapter;
3536
import java.awt.event.WindowEvent;
37+
import java.util.List;
38+
import javax.swing.DefaultListModel;
3639
import javax.swing.JButton;
3740
import javax.swing.JCheckBox;
3841
import javax.swing.JComboBox;
3942
import javax.swing.JComponent;
43+
import javax.swing.JList;
4044
import javax.swing.JPanel;
4145
import javax.swing.JTextField;
42-
import javax.swing.JTextPane;
4346
import javax.swing.KeyStroke;
4447
import javax.swing.event.DocumentEvent;
4548
import org.codehaus.plexus.util.StringUtils;
@@ -100,7 +103,7 @@ public class NewEavAttributeDialog extends AbstractDialog {
100103
private JTextField applyToTextField;
101104
private JCheckBox applyToAllProductsCheckBox;
102105
private JPanel applyToPanel;
103-
private JTextPane applyToRecommendationTextPanel;
106+
private JList productsTypesList;
104107
private final Project project;
105108
private final SourceModelData sourceModelData;
106109

@@ -124,10 +127,20 @@ public NewEavAttributeDialog(final Project project, final PsiDirectory directory
124127
addApplyToVisibilityAction();
125128
setAutocompleteListenerForAttributeCodeField();
126129
fillEntityComboBoxes();
130+
fillProductsTypesList();
127131
addDependBetweenInputAndSourceModel();
128132
setDefaultSources();
129133
}
130134

135+
private void fillProductsTypesList() {
136+
final List<String> productTypes = GetProductTypesListUtil.execute(project);
137+
138+
final DefaultListModel<String> listModel = new DefaultListModel<>();
139+
listModel.addAll(productTypes);
140+
productsTypesList.setModel(listModel);
141+
productsTypesList.setSelectedIndex(0);
142+
}
143+
131144
private void addApplyToVisibilityAction() {
132145
applyToAllProductsCheckBox.addChangeListener(new ApplyToVisibleListener(applyToPanel));
133146
}
@@ -351,7 +364,9 @@ private ProductEntityData populateProductEntityData(final ProductEntityData prod
351364
productEntityData.setSource(getAttributeSource());
352365

353366
if (!applyToAllProductsCheckBox.isSelected()) {
354-
productEntityData.setApplyTo(applyToTextField.getText().trim());
367+
productEntityData.setApplyTo(
368+
String.join(",", productsTypesList.getSelectedValuesList())
369+
);
355370
}
356371

357372
return productEntityData;

src/com/magento/idea/magento2plugin/indexes/IndexManager.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import com.magento.idea.magento2plugin.stubs.indexes.xml.DeclarativeSchemaElementsIndex;
2929
import com.magento.idea.magento2plugin.stubs.indexes.xml.MenuIndex;
3030
import com.magento.idea.magento2plugin.stubs.indexes.xml.PhpClassNameIndex;
31+
import com.magento.idea.magento2plugin.stubs.indexes.xml.ProductTypeIndex;
3132
import com.magento.idea.magento2plugin.stubs.indexes.xml.UIComponentIndex;
3233

3334
@SuppressWarnings({"PMD.ClassNamingConventions", "PMD.UseUtilityClass"})
@@ -69,7 +70,9 @@ public static void manualReindex() {
6970
SectionIndex.KEY,
7071
TestNameIndex.KEY,
7172
//graphql
72-
GraphQlResolverIndex.KEY
73+
GraphQlResolverIndex.KEY,
74+
//product types
75+
ProductTypeIndex.KEY
7376
};
7477

7578
for (final ID<?, ?> id: indexIds) {
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
6+
package com.magento.idea.magento2plugin.magento.files;
7+
8+
import com.intellij.lang.Language;
9+
import com.intellij.lang.xml.XMLLanguage;
10+
11+
public class ProductTypeXml implements ModuleFileInterface {
12+
public static final String FILE_NAME = "product_types.xml";
13+
public static final String TEMPLATE = "Magento Product Types";
14+
15+
//attributes
16+
public static final String XML_TAG_TYPE = "type";
17+
public static final String XML_ATTRIBUTE_NAME = "name";
18+
19+
@Override
20+
public String getFileName() {
21+
return FILE_NAME;
22+
}
23+
24+
@Override
25+
public String getTemplate() {
26+
return TEMPLATE;
27+
}
28+
29+
@Override
30+
public Language getLanguage() {
31+
return XMLLanguage.INSTANCE;
32+
}
33+
}
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
/*
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
6+
package com.magento.idea.magento2plugin.stubs.indexes.xml;
7+
8+
import com.intellij.ide.highlighter.XmlFileType;
9+
import com.intellij.psi.PsiFile;
10+
import com.intellij.psi.xml.XmlDocument;
11+
import com.intellij.psi.xml.XmlFile;
12+
import com.intellij.psi.xml.XmlTag;
13+
import com.intellij.util.indexing.*;
14+
import com.intellij.util.io.EnumeratorStringDescriptor;
15+
import com.intellij.util.io.KeyDescriptor;
16+
import com.magento.idea.magento2plugin.magento.files.ProductTypeXml;
17+
import com.magento.idea.magento2plugin.project.Settings;
18+
import gnu.trove.THashMap;
19+
import java.util.Map;
20+
import org.jetbrains.annotations.NotNull;
21+
22+
public class ProductTypeIndex extends ScalarIndexExtension<String> {
23+
private final static String TEST_DIRECTORY_PATTERN = ".*\\/[Tt]ests?\\/?.*";
24+
private final KeyDescriptor<String> myKeyDescriptor = new EnumeratorStringDescriptor();
25+
public static final ID<String, Void> KEY = ID.create(
26+
"com.magento.idea.magento2plugin.stubs.indexes.product_types");
27+
28+
@Override
29+
public @NotNull
30+
ID<String, Void> getName() {
31+
return KEY;
32+
}
33+
34+
@Override
35+
public @NotNull
36+
DataIndexer<String, Void, FileContent> getIndexer() {
37+
return inputData -> {
38+
final Map<String, Void> map = new THashMap<>();
39+
final String filePath = inputData.getFile().getPath();
40+
41+
if (filePath.matches(TEST_DIRECTORY_PATTERN)) {
42+
return map;
43+
}
44+
45+
final PsiFile psiFile = inputData.getPsiFile();
46+
if (!Settings.isEnabled(psiFile.getProject())) {
47+
return map;
48+
}
49+
50+
if (!(psiFile instanceof XmlFile)) {
51+
return map;
52+
}
53+
54+
final XmlDocument xmlDocument = ((XmlFile) psiFile).getDocument();
55+
56+
if (xmlDocument == null) {
57+
return map;
58+
}
59+
60+
final XmlTag xmlRootTag = xmlDocument.getRootTag();
61+
62+
if (xmlRootTag != null) {
63+
parseRootTag(map, xmlRootTag);
64+
}
65+
66+
return map;
67+
};
68+
}
69+
70+
private void parseRootTag(final Map<String, Void> map, final XmlTag xmlRootTag) {
71+
for (final XmlTag productTypeTag : xmlRootTag.findSubTags(ProductTypeXml.XML_TAG_TYPE)) {
72+
final String productTypeName = productTypeTag.getAttributeValue(ProductTypeXml.XML_ATTRIBUTE_NAME);
73+
map.put(productTypeName, null);
74+
}
75+
}
76+
77+
@Override
78+
public @NotNull
79+
KeyDescriptor<String> getKeyDescriptor() {
80+
return this.myKeyDescriptor;
81+
}
82+
83+
@Override
84+
public int getVersion() {
85+
return 0;
86+
}
87+
88+
@Override
89+
public FileBasedIndex.InputFilter getInputFilter() {
90+
return file ->
91+
file.getFileType() == XmlFileType.INSTANCE
92+
&& file.getName().equalsIgnoreCase(ProductTypeXml.FILE_NAME);
93+
}
94+
95+
@Override
96+
public boolean dependsOnFileContent() {
97+
return true;
98+
}
99+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/*
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
6+
package com.magento.idea.magento2plugin.util.magento;
7+
8+
import com.intellij.openapi.project.Project;
9+
import com.intellij.util.indexing.FileBasedIndex;
10+
import com.magento.idea.magento2plugin.stubs.indexes.xml.ProductTypeIndex;
11+
import java.util.Collection;
12+
import java.util.List;
13+
import java.util.stream.Collectors;
14+
15+
public final class GetProductTypesListUtil
16+
{
17+
private GetProductTypesListUtil() {}
18+
19+
public static List<String> execute(final Project project) {
20+
final Collection<String> productTypesList =
21+
FileBasedIndex.getInstance().getAllKeys(ProductTypeIndex.KEY, project);
22+
23+
return productTypesList.stream().sorted().collect(Collectors.toList());
24+
}
25+
}

0 commit comments

Comments
 (0)