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>