On Thursday 06 November 2008 18:24, xor at freenetproject.org wrote:
> Author: xor
> Date: 2008-11-06 18:24:32 +0000 (Thu, 06 Nov 2008)
> New Revision: 23358
> 
> Modified:
>    trunk/plugins/WoT/Score.java
>    trunk/plugins/WoT/WoT.java
> Log:
> Provide a getIdentitiesByScore() function, needed for Freetalk.
> 
> Modified: trunk/plugins/WoT/Score.java
> ===================================================================
> --- trunk/plugins/WoT/Score.java      2008-11-06 18:17:47 UTC (rev 23357)
> +++ trunk/plugins/WoT/Score.java      2008-11-06 18:24:32 UTC (rev 23358)
> @@ -13,6 +13,7 @@
>  
>  import com.db4o.ObjectContainer;
>  import com.db4o.ObjectSet;
> +import com.db4o.query.Constraint;
>  import com.db4o.query.Query;
>  
>  /**
> @@ -70,34 +71,29 @@
>       /**
>        * Gets Identities matching a specified score criteria.
>        * 
> +      * @param db A reference to the database
>        * @param owner requestURI of the owner of the trust tree
>        * @param select Score criteria, can be '+', '0' or '-'
> -      * @param db A reference to the database
>        * @return an {@link ObjectSet} containing Identities that match the 
criteria
>        * @throws InvalidParameterException if the criteria is not recognised
> -      * @throws MalformedURLException if the supplied requestURI of the 
treeOwner is not a valid {@link FreenetURI}
> -      * @throws UnknownIdentityException if the supplied treeOwner is not in 
the database
> -      * @throws DuplicateIdentityException if the supplied treeOwner exists 
more than once in the database (should never happen)
>        */
>       @SuppressWarnings("unchecked")
> -     public static ObjectSet<Score> getIdentitiesByScore (String owner, 
> String 
select, ObjectContainer db) throws InvalidParameterException, 
MalformedURLException, UnknownIdentityException, DuplicateIdentityException {
> +     public static ObjectSet<Score> getIdentitiesByScore (ObjectContainer 
> db, 
OwnIdentity treeOwner, int select) throws InvalidParameterException {
> +             if(treeOwner == null)
> +                     throw new IllegalArgumentException();
>               
> -             OwnIdentity treeOwner = OwnIdentity.getByURI(db, owner);
> -             
>               Query query = db.query();
>               query.constrain(Score.class);
>               query.descend("treeOwner").constrain(treeOwner);
> +     
> +             // TODO: we should decide whether identities with score 0 
> should be 
returned if select>0
>               
> -             if(select.equals("+")) {
> +             if(select > 0)
>                       query.descend("score").constrain(new 
> Integer(0)).greater();
> -             }
> -             else if(select.equals("0")) {
> -                     query.descend("score").constrain(new Integer(0));
> -             }
> -             else if(select.equals("-")) {
> +             else if(select < 0 )
>                       query.descend("score").constrain(new 
> Integer(0)).smaller();
> -             }
> -             else throw new InvalidParameterException("Unhandled select 
> value 
("+select+")");
> +             else 
> +                     query.descend("score").constrain(new Integer(0));
>  
>               return query.execute();
>       }
> 
> Modified: trunk/plugins/WoT/WoT.java
> ===================================================================
> --- trunk/plugins/WoT/WoT.java        2008-11-06 18:17:47 UTC (rev 23357)
> +++ trunk/plugins/WoT/WoT.java        2008-11-06 18:24:32 UTC (rev 23358)
> @@ -9,7 +9,10 @@
>  import java.io.FileNotFoundException;
>  import java.io.IOException;
>  import java.net.MalformedURLException;
> +import java.util.ArrayList;
>  import java.util.Iterator;
> +import java.util.LinkedList;
> +import java.util.List;
>  import java.util.Map.Entry;
>  
>  import javax.xml.parsers.ParserConfigurationException;
> @@ -531,7 +534,25 @@
>               return sfs;
>       }
>       
> -     // TODO refactor this in order to make it available not only from FCP
> +     // TODO: javadoc
> +     public List<Identity> getIdentitiesByScore(OwnIdentity treeOwner, int 
select, String context) throws InvalidParameterException
> +     {
> +             ObjectSet<Score> result = Score.getIdentitiesByScore(db, 
> treeOwner, 
select);
> +             // TODO: decide whether the tradeoff of using too much memory 
> for the 
ArrayList is worth the speedup of not having a linked
> +             // list which allocates lots of pieces of memory for its nodes.

So call trimToSize() before returning it?

> +             ArrayList<Identity> identities = new 
> ArrayList<Identity>(result.size()); 
> +             boolean getAll = context.equals("all");
> +             
> +             while(result.hasNext()) {
> +                     Identity identity = result.next().getTarget();
> +                     // TODO: Maybe there is a way to do this through SODA
> +                     if(getAll || identity.hasContext(context))
> +                             identities.add(identity);
> +             }
> +             
> +             return identities;
> +     }
> +
>       private SimpleFieldSet handleGetIdentitiesByScore(SimpleFieldSet 
> params) 
throws InvalidParameterException, MalformedURLException, 
UnknownIdentityException, DuplicateIdentityException {
>               
>               SimpleFieldSet sfs = new SimpleFieldSet(false);
> @@ -539,12 +560,25 @@
>               if(params.get("TreeOwner") == null || params.get("Select") == 
> null || 
params.get("Context") == null) throw new InvalidParameterException("Missing 
mandatory parameter");
>  
>               sfs.putAppend("Message", "Identities");
> +             
> +             OwnIdentity treeOwner = OwnIdentity.getByURI(db, 
params.get("TreeOwner"));
> +             
> +             String selectString = params.get("Select").trim();
> +             int select = 0; // TODO: decide about the default value
> +             
> +             if(selectString.equals("+")) select = 1;
> +             else if(selectString.equals("-")) select = -1;
> +             else if(selectString.equals("0")) select = 0;
> +             else throw new InvalidParameterException("Unhandled select 
> value 
("+select+")");
> +             
> +             ObjectSet<Score> result = Score.getIdentitiesByScore(db, 
> treeOwner, 
select);
> +             String context = params.get("Context");
> +             boolean getAll = context.equals("all");
>  
> -             ObjectSet<Score> result = 
Score.getIdentitiesByScore(params.get("TreeOwner"), 
params.get("Select").trim(), db);
>               for(int i = 1 ; result.hasNext() ; i++) {
>                       Score score = result.next();
> -                     // Maybe there is a way to do this through SODA
> -                     if(score.getTarget().hasContext(params.get("Context")) 
> || 
params.get("Context").equals("all"))
> +                     // TODO: Maybe there is a way to do this through SODA
> +                     if(getAll || score.getTarget().hasContext(context))
>                               sfs.putAppend("Identity"+i, 
score.getTarget().getRequestURI().toString());

Only by having a tag object for each identity:context pair afaics.

>               }
>               return sfs;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 827 bytes
Desc: not available
URL: 
<https://emu.freenetproject.org/pipermail/devl/attachments/20081111/c998c4ee/attachment.pgp>

Reply via email to