Sergiu Dumitriu a écrit :
> antoine SEILLES wrote:
>
>> I have an AnnotationPluginApi.java class and i have a method to get all
>> the annotations associated to a document:
>> public Vector getAnnotations(Document doc){
>> return doc.getObjects("AnnotationClass");
>> }
>>
>> Now i'd like to have a method to get all the annotations associated to a
>> document having a specific value specified in parameters for one field :
>> public Vector getAnnotations(Document doc, String field, String value)
>> Wich should return all the annotations having the value "value" for the
>> field "field".
>>
>
> There is no 1-call way to do this. We have a method that returns one
> object based on a property=value constraint (see
> com.xpn.xwiki.api.Document#getObject(String, String, String)).
>
> So, there are two ways of doing this. One is to write an HQL query for
> this, and the other is to manually iterate over the objects.
>
> The query approach is much too low level, and depends on the storage
> being based on hibernate, so I'll leave this out of the discussion.
>
> The second method would be like this:
>
> public Vector getAnnotations(Document doc, String field, String value)
> {
> Vector result = new Vector();
> Vector allObjects = doc.getObjects(classname);
> if (allObjects == null || allObjects.size() == 0) {
> return result;
> } else {
> for (Iterator it = allObjects.iterator(); it.hasNext();) {
> BaseObject obj = (BaseObject) it.next();
> if (value.equals(((BaseProperty) obj.get(key)).getValue())) {
> result.add(newObjectApi(obj, getXWikiContext()));
> }
> }
> }
> return result;
> }
>
> You should also add some checks to see if the field, value, and obj.get
> are not null, otherwise you might get some exceptions.
>
> Sergiu
>
Well i have tried this :
public Vector getAnnotations(Document doc, String field, String value)
throws XWikiException
{
Vector result = new Vector();
Vector allObjects = doc.getDocument().getObjects("AnnotationClass");
if (allObjects == null || allObjects.size() == 0) {
return result;
} else {
int limit = allObjects.size();
for (int i=0; i<limit;i++)
{
BaseObject obj = (BaseObject)allObjects.get(i);
if (value.equalsIgnoreCase((String)((BaseProperty)
obj.get(field)).getValue()))
{
result.add(obj);
}
}
}
return result;
}
But when i call getAnnotations(Document doc, String field, String value)
in velocity i have an error: "Error number 4001 in 4: Error while
parsing velocity page Wrapped Exception: Invocation of method
'getRenderedContent' in class com.xpn.xwiki.api.Document threw exception
java.lang.NullPointerException @ [28,44"
And when i try that:
* *public Vector getAnnotations(Document doc, String field, String
value) throws XWikiException
{
Vector result = new Vector();
Vector allObjects = doc.getObjects("AnnotationClass");
if (allObjects == null || allObjects.size() == 0) {
return result;
} else {
int limit = allObjects.size();
for (int i=0; i<limit;i++)
{
BaseObject obj = (BaseObject)allObjects.get(i);
if (value.equalsIgnoreCase((String)((BaseProperty)
obj.get(field)).getValue()))
{
result.add(obj);
}
}
}
return result;
}
I have a cast error : cannot cast Object into BaseObject.
Problem is BaseObject obj = (BaseObject)allObjects.get(i);
Anybody has an idea?
Thank.
*
*
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs