Skip to content

Commit 2df520d

Browse files
committed
add mongodb document namespace parser #205
1 parent bf68414 commit 2df520d

File tree

3 files changed

+78
-0
lines changed

3 files changed

+78
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package fr.adrienbrault.idea.symfony2plugin.doctrine.component;
2+
3+
import fr.adrienbrault.idea.symfony2plugin.util.service.AbstractServiceParser;
4+
import org.w3c.dom.Element;
5+
import org.w3c.dom.NodeList;
6+
7+
import java.io.File;
8+
import java.util.Map;
9+
import java.util.concurrent.ConcurrentHashMap;
10+
11+
public class DocumentNamespacesParser extends AbstractServiceParser {
12+
13+
14+
protected Map<String, String> entityNameMap = new ConcurrentHashMap<String, String>();
15+
16+
@Override
17+
public String getXPathFilter() {
18+
return "/container/services/service[@id[starts-with(.,'doctrine_mongodb.odm.')]]//call[@method='setDocumentNamespaces']//argument[@key]";
19+
}
20+
21+
public void parser(File file) {
22+
NodeList nodeList = this.parserer(file);
23+
24+
if(nodeList == null) {
25+
return;
26+
}
27+
28+
for (int i = 0; i < nodeList.getLength(); i++) {
29+
Element node = (Element) nodeList.item(i);
30+
this.entityNameMap.put(node.getAttribute("key"), "\\" + node.getTextContent());
31+
}
32+
33+
}
34+
35+
public Map<String, String> getNamespaceMap() {
36+
return entityNameMap;
37+
}
38+
39+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package fr.adrienbrault.idea.symfony2plugin.tests.doctrine.component;
2+
3+
import fr.adrienbrault.idea.symfony2plugin.doctrine.component.DocumentNamespacesParser;
4+
import fr.adrienbrault.idea.symfony2plugin.doctrine.component.EntityNamesServiceParser;
5+
import org.junit.Assert;
6+
import org.junit.Test;
7+
8+
import java.io.File;
9+
import java.util.Map;
10+
11+
/**
12+
* @author Daniel Espendiller <daniel@espendiller.net>
13+
*/
14+
public class DocumentNamespacesParserTest extends Assert {
15+
16+
@Test
17+
public void testParse() throws Exception {
18+
19+
File testFile = new File(this.getClass().getResource("appDevDebugProjectContainer.xml").getFile());
20+
DocumentNamespacesParser entityNamesServiceParser = new DocumentNamespacesParser();
21+
entityNamesServiceParser.parser(testFile);
22+
Map<String, String> map = entityNamesServiceParser.getNamespaceMap();
23+
24+
assertEquals("\\AcmeProject\\FrontendBundle\\Document", map.get("AcmeProjectFrontendBundle"));
25+
assertEquals("\\AcmeProject\\ApiBundle\\Document", map.get("AcmeProjectApiBundle"));
26+
assertEquals("\\AcmeProject\\CoreBundle\\Document", map.get("AcmeProjectCoreBundle"));
27+
}
28+
29+
}
30+

tests/fr/adrienbrault/idea/symfony2plugin/tests/doctrine/component/appDevDebugProjectContainer.xml

+9
Original file line numberDiff line numberDiff line change
@@ -39,5 +39,14 @@
3939
</argument>
4040
<argument type="service" id="service_container"/>
4141
</service>
42+
<service id="doctrine_mongodb.odm.default_configuration" class="Doctrine\ODM\MongoDB\Configuration">
43+
<call method="setDocumentNamespaces">
44+
<argument type="collection">
45+
<argument key="AcmeProjectFrontendBundle">AcmeProject\FrontendBundle\Document</argument>
46+
<argument key="AcmeProjectApiBundle">AcmeProject\ApiBundle\Document</argument>
47+
<argument key="AcmeProjectCoreBundle">AcmeProject\CoreBundle\Document</argument>
48+
</argument>
49+
</call>
50+
</service>
4251
</services>
4352
</container>

0 commit comments

Comments
 (0)