[xwiki-devs] Query for self-defined objects
Hello, i programmed a class /Node/ which is here used as /n/ and a class /NodeType/ which is reference by Node. In the ClassBuilder from Node i use this method to get the NodeType try { List<XWikiDocument> docs = getXWikiContext().getWiki().getStore().searchDocuments(" ", getXWikiContext()); for (XWikiDocument xWikiDocument : docs) { List<BaseObject> objects = xWikiDocument.getXObjects(xWikiDocument.getDocumentReference()); if (objects != null) { for (BaseObject bo : objects) { if (bo.getName().contains("QuarXs.NodeTypeClass")) { DefaultNodeType nt = new DefaultNodeType(); nt.setName(bo.getStringValue("name")); nt.setGuid(bo.getGuid()); n.setType(nt); } } } } } catch (Exception ee) { System.out.println("Error: " + ee); } To test this i defined a class from a wiki-page named "NodeTypeClass" in Space "QuarXs". But now i used /AbstractMandatoryDocumentInitializer/ to initialize everything. The Initialization works fine and looks great, but now my upper method is not working. I can define objects and reference to NodeType, but can't find objects of type "NodeType" with the upper method. Can you give me a hint? I checked it with {{groovy}} import org.rogatio.quarxs.Node; for (Node node : services.component.getComponentManager().getInstanceList(Node.class)) { println("* "+node.getPrettyId() ) println("** "+node.getType()) // gives back null. Reason: No BaseObject of class "QuarXs.NodeTypeClass" found with upper method // println("** "+node.getType().getName()) // worked fine when i made the classes by hand } {{/groovy}} If you like i post my code. Regards, Matthias -- View this message in context: http://xwiki.475771.n2.nabble.com/Query-for-self-defined-objects-tp7587586.h... Sent from the XWiki- Dev mailing list archive at Nabble.com.
Hi Matthias, You should use the Query Module ( http://extensions.xwiki.org/xwiki/bin/view/Extension/Query+Module ) to search for documents having objects of a specified type (e.g. QuarXs.NodeTypeClass). Also, the parameter passed to XWikiDocument#getXObjects(DocumentReference) is the class reference, i.e. the reference to the document that defines the class (e.g. a reference to QuarXs.NodeTypeClass document). You can access the javadoc from http://platform.xwiki.org/xwiki/bin/view/DevGuide/API . Hope this helps, Marius On Mon, Oct 14, 2013 at 9:31 PM, Matthias Wegner <[email protected]> wrote:
Hello,
i programmed a class /Node/ which is here used as /n/ and a class /NodeType/ which is reference by Node. In the ClassBuilder from Node i use this method to get the NodeType
try { List<XWikiDocument> docs = getXWikiContext().getWiki().getStore().searchDocuments(" ", getXWikiContext()); for (XWikiDocument xWikiDocument : docs) { List<BaseObject> objects = xWikiDocument.getXObjects(xWikiDocument.getDocumentReference()); if (objects != null) { for (BaseObject bo : objects) { if (bo.getName().contains("QuarXs.NodeTypeClass")) { DefaultNodeType nt = new DefaultNodeType(); nt.setName(bo.getStringValue("name")); nt.setGuid(bo.getGuid()); n.setType(nt); } } } } } catch (Exception ee) { System.out.println("Error: " + ee); }
To test this i defined a class from a wiki-page named "NodeTypeClass" in Space "QuarXs". But now i used /AbstractMandatoryDocumentInitializer/ to initialize everything. The Initialization works fine and looks great, but now my upper method is not working. I can define objects and reference to NodeType, but can't find objects of type "NodeType" with the upper method. Can you give me a hint?
I checked it with
{{groovy}} import org.rogatio.quarxs.Node; for (Node node : services.component.getComponentManager().getInstanceList(Node.class)) { println("* "+node.getPrettyId() ) println("** "+node.getType()) // gives back null. Reason: No BaseObject of class "QuarXs.NodeTypeClass" found with upper method // println("** "+node.getType().getName()) // worked fine when i made the classes by hand } {{/groovy}}
If you like i post my code.
Regards, Matthias
-- View this message in context: http://xwiki.475771.n2.nabble.com/Query-for-self-defined-objects-tp7587586.h... Sent from the XWiki- Dev mailing list archive at Nabble.com. _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs
Hi Marius, thanks I found it. I used now public String create(String className, String... values) { String select = new String(); String from = new String(); String where = new String(); for (int i = 0; i < values.length; i++) { String prop = "prop" + i; String v = values[i]; select += prop + ".value"; from += "StringProperty as " + prop; where += "and obj.id=" + prop + ".id.id and " + prop + ".id.name='" + v + "'"; if (i + 1 < values.length) { select += ", "; from += ", "; } } return "select " + select + " from BaseObject as obj, " + from + " where obj.className='" + className + "' " + where; } to get whatever i need. Regards, Matthias -- View this message in context: http://xwiki.475771.n2.nabble.com/Query-for-self-defined-objects-tp7587586p7... Sent from the XWiki- Dev mailing list archive at Nabble.com.
participants (2)
-
Marius Dumitru Florea -
Matthias Wegner