You could keep the FreenetURI *as well as* the String. Just make the String a
cache of the FreenetURI, no?
You are storing the URI without the edition number etc? So effectively you are
just storing the SSK ... you could strip it down further by only storing the
unique part of the SSK (from @ to /), slightly fewer characters to store .. I
dunno if it would help much.
On Wednesday 13 August 2008 10:57, batosai at freenetproject.org wrote:
> Author: batosai
> Date: 2008-08-13 09:57:52 +0000 (Wed, 13 Aug 2008)
> New Revision: 21783
>
> Added:
> trunk/apps/WoT/src/plugins/WoT/InvalidParameterException.java
> trunk/apps/WoT/src/plugins/WoT/UnknownIdentityException.java
> Modified:
> trunk/apps/WoT/src/plugins/WoT/Identity.java
> trunk/apps/WoT/src/plugins/WoT/IdentityFetcher.java
> trunk/apps/WoT/src/plugins/WoT/IdentityInserter.java
> trunk/apps/WoT/src/plugins/WoT/IdentityParser.java
> trunk/apps/WoT/src/plugins/WoT/OwnIdentity.java
> trunk/apps/WoT/src/plugins/WoT/Trust.java
> trunk/apps/WoT/src/plugins/WoT/WoT.java
> trunk/apps/WoT/src/plugins/WoT/WoTplugin.java
> Log:
> Big refactoring. Most objects have been modified !
> Basically, it consists in switching from FreenetURIs to Strings in
Identities. This makes database searches more efficient and the code cleaner.
> I also added controls on user's entries.
>
> Modified: trunk/apps/WoT/src/plugins/WoT/Identity.java
> ===================================================================
> --- trunk/apps/WoT/src/plugins/WoT/Identity.java 2008-08-13 08:02:19 UTC
(rev 21782)
> +++ trunk/apps/WoT/src/plugins/WoT/Identity.java 2008-08-13 09:57:52 UTC
(rev 21783)
> @@ -5,6 +5,7 @@
> */
> package plugins.WoT;
>
> +import java.net.MalformedURLException;
> import java.util.ArrayList;
> import java.util.Date;
> import java.util.HashMap;
> @@ -22,42 +23,24 @@
> */
> public class Identity {
>
> - FreenetURI requestURI;
> + String requestURI;
> + long edition;
> Date lastChange;
> + String nickName;
> + boolean publishTrustList;
> HashMap<String, String> props;
> ArrayList<String> contexts;
>
> - /**
> - * Create an identity with the given parameters
> - *
> - * @param requestURI EequestURI where the identity can be fetched
> - * @param lastChange Last time the Identity has been updated
> - * @param publishTrustList Whether the identity publishes its trustList
> or
not
> - */
> - public Identity (FreenetURI requestURI, Date lastChange) {
> + public Identity (String requestURI, Date lastChange, String nickName,
String publishTrustList) throws InvalidParameterException {
>
> setRequestURI(requestURI);
> setLastChange(lastChange);
> + setNickName(nickName);
> + setPublishTrustList(publishTrustList);
> props = new HashMap<String, String>();
> contexts = new ArrayList<String>();
> }
>
> - /**
> - * Create a new trust relationship for this identity
> - *
> - * @param db Connection to the database
> - * @param trustee Identity that receives the trust
> - * @param value Numeric value of the trust granted [-100;+100]
> - */
> - public void addTrust (ObjectContainer db, Identity trustee, int value) {
> - Trust trust = new Trust(this,trustee,value);
> - db.store(trust);
> - }
> -
> - public String toString() {
> - return getRequestURI().toString();
> - }
> -
> public Score getScore(OwnIdentity treeOwner, ObjectContainer db) {
>
> ObjectSet<Score> score = db.queryByExample(new Score(treeOwner,
> this, 0,
0, 0));
> @@ -66,20 +49,57 @@
> }
>
> /**
> - * @return requestURI
> + * @return A FreenetURI
> + * @throws MalformedURLException
> */
> public FreenetURI getRequestURI() {
> - return requestURI;
> +
> + FreenetURI key;
> + try {
> + key = new FreenetURI(requestURI+"/WoT/"+edition);
> + } catch (MalformedURLException e) {
> + // TODO Remove this as soon as the creation is checked
> + e.printStackTrace();
> + return null;
> + // Can't happen, the key is tested on creation
> + }
> + return key.setMetaString(new String [] {"identity.xml"});
> }
>
> /**
> * @param requestURI The RequestURI of the Identity
> + * @throws MalformedURLException
> + * @throws InvalidParameterException
> */
> - public void setRequestURI(FreenetURI requestURI) {
> + public void setRequestURI(String requestURI) throws
InvalidParameterException {
> +
> + FreenetURI key;
> + try {
> + key = new FreenetURI(requestURI).setDocName("WoT");
> + } catch (MalformedURLException e) {
> + throw new InvalidParameterException("Invalid key :
> "+e.getMessage());
> + }
> + setRequestURI(key);
> + }
>
> - this.requestURI =
> requestURI.setDocName("WoT").setKeyType("USK");
> + public void setRequestURI(FreenetURI key) throws
> InvalidParameterException
{
> +
> + if(key.getKeyType().equals("SSK")) key = key.setKeyType("USK");
> + if(!key.getKeyType().equals("USK")) throw new
InvalidParameterException("Key type not supported");
> +
> + setEdition(key.getSuggestedEdition());
> +
> + this.requestURI = key.toString().substring(0,
key.toString().indexOf("/"));
> }
>
> + public long getEdition() {
> + return edition;
> + }
> +
> + public void setEdition(long edition) {
> + this.edition = edition;
> + }
> +
> /**
> * @return lastChange
> */
> @@ -92,9 +112,32 @@
> */
> public void setLastChange(Date lastChange) {
> this.lastChange = lastChange;
> +
> }
> + public String getNickName() {
> + return nickName;
> + }
> +
> + public void setNickName(String nickName) throws
> InvalidParameterException
{
> + if(nickName.length() == 0) throw new
> InvalidParameterException("Blank
nickName");
> + if(nickName.length() > 50) throw new
> InvalidParameterException("NickName
is too long (50 chars max)");
> + this.nickName = nickName;
> + }
> +
> + public boolean doesPublishTrustList() {
> + return publishTrustList;
> + }
> +
> + public void setPublishTrustList(String publishTrustList) {
> + setPublishTrustList(publishTrustList.equals("true"));
> + }
>
> - public void setProp(String key, String value, ObjectContainer db) {
> + public void setPublishTrustList(boolean publishTrustList) {
> + this.publishTrustList = publishTrustList;
> + }
> +
> + public void setProp(String key, String value, ObjectContainer db)
> throws
InvalidParameterException {
> + if(key.length() == 0 || value.length() == 0) throw new
InvalidParameterException("Blank key or value in this property");
> props.put(key, value);
> db.store(props);
> }
> @@ -108,7 +151,8 @@
> db.store(props);
> }
>
> - public void addContext(String context, ObjectContainer db) {
> + public void addContext(String context, ObjectContainer db) throws
InvalidParameterException {
> + if(context.length() == 0) throw new
> InvalidParameterException("Blank
context");
> if(!contexts.contains(context)) contexts.add(context);
> db.store(contexts);
> }
>
> Modified: trunk/apps/WoT/src/plugins/WoT/IdentityFetcher.java
> ===================================================================
> --- trunk/apps/WoT/src/plugins/WoT/IdentityFetcher.java 2008-08-13
> 08:02:19
UTC (rev 21782)
> +++ trunk/apps/WoT/src/plugins/WoT/IdentityFetcher.java 2008-08-13
> 09:57:52
UTC (rev 21783)
> @@ -6,10 +6,7 @@
>
> package plugins.WoT;
>
> -import java.io.InputStream;
> -
> import com.db4o.ObjectContainer;
> -import com.db4o.ObjectSet;
>
> import freenet.client.FetchContext;
> import freenet.client.FetchException;
> @@ -39,19 +36,12 @@
> }
>
> public void fetch(Identity identity) throws FetchException {
> - fetch(identity, false);
> - }
> -
> - public void fetch(Identity identity, boolean nextEdition) throws
FetchException {
>
> - FreenetURI uri = identity.getRequestURI().setMetaString(new
> String []
{"identity.xml"});
> - if(nextEdition) uri =
> uri.setSuggestedEdition(uri.getSuggestedEdition() +
1);
> -
> - fetch(uri);
> + fetch(identity.getRequestURI());
> }
>
> - private void fetch(FreenetURI uri) throws FetchException {
> -
> + public void fetch(FreenetURI uri) throws FetchException {
> +
> FetchContext fetchContext = client.getFetchContext();
> fetchContext.maxSplitfileBlockRetries = -1; // retry forever
> fetchContext.maxNonSplitfileRetries = -1; // retry forever
> @@ -63,80 +53,50 @@
>
> if(e.newURI != null) { // Handle redirection to a new edition
> try {
> - Identity identity =
> wot.getIdentityByURI(state.getURI());
> - // We just take the redirection number to avoid
> a nasty redirect loop
by an attacker
> -
identity.setRequestURI(identity.getRequestURI().setSuggestedEdition(e.newURI.getSuggestedEdition()));
> - db.store(identity);
> -
> - fetch(identity);
> - } catch (Exception e2) {
> - System.out.print(e2.getLocalizedMessage());
> + fetch(e.newURI);
> + } catch (FetchException e1) {
> + // TODO Log this properly
> + e1.printStackTrace();
> }
> }
> }
>
> @Override
> public void onFailure(InsertException e, BaseClientPutter state) {
> - System.out.println("CALL: onFailure(InsertException e,
> BaseClientPutter
state)");
>
> }
>
> @Override
> public void onFetchable(BaseClientPutter state) {
> - System.out.println("CALL: onFetchable(BaseClientPutter state)");
>
> }
>
> @Override
> public void onGeneratedURI(FreenetURI uri, BaseClientPutter state) {
> - System.out.println("CALL: onGeneratedURI(FreenetURI uri,
> BaseClientPutter
state)");
>
> }
>
> @Override
> public void onMajorProgress() {
> - System.out.println("CALL: onMajorProgress()");
>
> }
>
> @Override
> public void onSuccess(FetchResult result, ClientGetter state) {
> -
> - // Find the identity we just fetched
> - Identity identity;
> +
> try {
> - identity = wot.getIdentityByURI(state.getURI());
> + new IdentityParser(db, wot,
client).parse(result.asBucket().getInputStream(), state.getURI());
> + db.commit();
> +
fetch(state.getURI().setSuggestedEdition(state.getURI().getSuggestedEdition()
+ 1));
> } catch (Exception e) {
> + // TODO Log this properly
> e.printStackTrace();
> - return;
> }
> -
> - // Parse it
> - try {
> - IdentityParser parser = new IdentityParser(db, wot,
> this);
> - parser.parse(result.asBucket().getInputStream(),
> identity);
> - } catch (Exception e) {
> - System.out.println(e.getLocalizedMessage());
> - }
>
> - // Update the edition number and commit the changes
> -
identity.setRequestURI(identity.getRequestURI().setSuggestedEdition(state.getURI().getSuggestedEdition()));
> - db.store(identity);
> - db.commit();
> -
> - // Try to fetch next edition
> - try {
> - fetch(identity, true);
> - } catch (FetchException e) {
> - System.out.println(e.getLocalizedMessage());
> - }
> -
> -
> }
>
> @Override
> public void onSuccess(BaseClientPutter state) {
> - System.out.println("CALL: onSuccess(BaseClientPutter state)");
>
> }
> }
>
> Modified: trunk/apps/WoT/src/plugins/WoT/IdentityInserter.java
> ===================================================================
> --- trunk/apps/WoT/src/plugins/WoT/IdentityInserter.java 2008-08-13
> 08:02:19
UTC (rev 21782)
> +++ trunk/apps/WoT/src/plugins/WoT/IdentityInserter.java 2008-08-13
> 09:57:52
UTC (rev 21783)
> @@ -47,7 +47,7 @@
> }
>
> public void insert(OwnIdentity identity) throws
TransformerConfigurationException, FileNotFoundException,
ParserConfigurationException, TransformerException, IOException,
InsertException {
> -
> +
> this.identity = identity;
>
> // Create XML file to insert
> @@ -97,11 +97,8 @@
>
> @Override
> public void onSuccess(BaseClientPutter state) {
> -
> - long edition = state.getURI().getSuggestedEdition();
> -
> -
> identity.setInsertURI(identity.getInsertURI().setSuggestedEdition(edition
+ 1));
> -
identity.setRequestURI(identity.getRequestURI().setSuggestedEdition(edition));
> +
> + identity.setEdition(state.getURI().getSuggestedEdition());
> identity.setLastInsert(new Date());
>
> db.store(identity);
>
> Modified: trunk/apps/WoT/src/plugins/WoT/IdentityParser.java
> ===================================================================
> --- trunk/apps/WoT/src/plugins/WoT/IdentityParser.java 2008-08-13
> 08:02:19
UTC (rev 21782)
> +++ trunk/apps/WoT/src/plugins/WoT/IdentityParser.java 2008-08-13
> 09:57:52
UTC (rev 21783)
> @@ -6,8 +6,8 @@
>
> package plugins.WoT;
>
> +import java.io.IOException;
> import java.io.InputStream;
> -import java.net.MalformedURLException;
> import java.util.Date;
>
> import javax.xml.parsers.ParserConfigurationException;
> @@ -19,9 +19,8 @@
> import org.xml.sax.helpers.DefaultHandler;
>
> import com.db4o.ObjectContainer;
> -import com.db4o.ObjectSet;
>
> -import freenet.client.FetchException;
> +import freenet.client.HighLevelSimpleClient;
> import freenet.keys.FreenetURI;
>
> /**
> @@ -32,31 +31,24 @@
>
> ObjectContainer db;
> WoT wot;
> - IdentityFetcher fetcher;
> + HighLevelSimpleClient client;
> SAXParser saxParser;
> Identity identity;
> +
> + public IdentityParser(ObjectContainer db, WoT wot,
> HighLevelSimpleClient
client) throws ParserConfigurationException, SAXException {
>
> - public IdentityParser(ObjectContainer db, WoT wot, IdentityFetcher
fetcher) throws ParserConfigurationException, SAXException {
> -
> this.db = db;
> this.wot = wot;
> - this.fetcher = fetcher;
> - SAXParserFactory factory = SAXParserFactory.newInstance();
> - saxParser = factory.newSAXParser();
> + this.client = client;
> + saxParser = SAXParserFactory.newInstance().newSAXParser();
> }
>
> - public void parse (InputStream is, Identity id) throws Exception {
> + public void parse (InputStream is, FreenetURI uri) throws
InvalidParameterException, SAXException, IOException,
UnknownIdentityException {
>
> - this.identity = id;
> + identity = wot.getIdentityByURI(uri.toString());
> identity.setLastChange(new Date());
> -
> - try {
> - saxParser.parse(is, new IdentityHandler() );
> - is.close();
> - } catch (Throwable err) {
> - err.printStackTrace ();
> - throw new Exception("Could not parse XML:
> "+err.toString());
> - }
> + saxParser.parse(is, new IdentityHandler() );
> + db.store(identity);
> }
>
> public class IdentityHandler extends DefaultHandler {
> @@ -70,28 +62,34 @@
> String elt_name;
> if (rawName == null) elt_name = localName;
> else elt_name = rawName;
> -
> - if (elt_name.equals("prop")) {
> - identity.setProp(attrs.getValue("key"),
> attrs.getValue("value"), db);
> - }
> - else if(elt_name.equals("context")) {
> - identity.addContext(attrs.getValue("value"),
> db);
> - }
> - else if (elt_name.equals("trust")) {
> - try {
> - Identity trustee =
> wot.getIdentityByURI(new
FreenetURI(attrs.getValue("uri")));
> - if (trustee == null) {
> - trustee = new Identity(new
> FreenetURI(attrs.getValue("uri")), new
Date(0));
> - db.store(trustee);
> - fetcher.fetch(trustee);
> - }
> +
> + try {
> + if (elt_name.equals("nickName")) {
> +
> identity.setNickName(attrs.getValue("value"));
> + }
> + if (elt_name.equals("publishTrustList")) {
> +
> identity.setPublishTrustList(attrs.getValue("value"));
> + }
> + else if (elt_name.equals("prop")) {
> + identity.setProp(attrs.getValue("key"),
> attrs.getValue("value"), db);
> + }
> + else if(elt_name.equals("context")) {
> +
> identity.addContext(attrs.getValue("value"), db);
> + }
> + else if (elt_name.equals("trust")) {
> +
> + Identity trustee = new
> Identity(attrs.getValue("uri"), new
Date(0), "Not found yet...", "false");
> + db.store(trustee);
> + new IdentityFetcher(db, wot,
> client).fetch(trustee);
> +
> int value =
> Integer.parseInt(attrs.getValue("value"));
> String comment =
> attrs.getValue("comment");
>
> wot.setTrust(new Trust(identity,
> trustee, value, comment));
> - } catch (Exception e) {
> -
> System.out.println(e.getLocalizedMessage());
> - }
> + }
> + } catch (Exception e1) {
> + // TODO Log this properly
> + e1.printStackTrace();
> }
> }
> }
>
> Added: trunk/apps/WoT/src/plugins/WoT/InvalidParameterException.java
> ===================================================================
> --- trunk/apps/WoT/src/plugins/WoT/InvalidParameterException.java
>
(rev 0)
> +++ trunk/apps/WoT/src/plugins/WoT/InvalidParameterException.java
> 2008-08-13
09:57:52 UTC (rev 21783)
> @@ -0,0 +1,19 @@
> +/**
> + * This code is part of WoT, a plugin for Freenet. It is distributed
> + * under the GNU General Public License, version 2 (or at your option
> + * any later version). See http://www.gnu.org/ for details of the GPL.
> + */
> +package plugins.WoT;
> +
> +/**
> + * @author Julien Cornuwel (batosai at freenetproject.org)
> + *
> + */
> +public class InvalidParameterException extends Exception {
> +
> + private static final long serialVersionUID = -1;
> +
> + public InvalidParameterException(String message) {
> + super(message);
> + }
> +}
>
> Modified: trunk/apps/WoT/src/plugins/WoT/OwnIdentity.java
> ===================================================================
> --- trunk/apps/WoT/src/plugins/WoT/OwnIdentity.java 2008-08-13 08:02:19 UTC
(rev 21782)
> +++ trunk/apps/WoT/src/plugins/WoT/OwnIdentity.java 2008-08-13 09:57:52 UTC
(rev 21783)
> @@ -10,6 +10,7 @@
> import java.io.FileNotFoundException;
> import java.io.FileOutputStream;
> import java.io.IOException;
> +import java.net.MalformedURLException;
> import java.util.Date;
> import java.util.Iterator;
> import java.util.Map;
> @@ -42,22 +43,14 @@
> */
> public class OwnIdentity extends Identity {
>
> - private FreenetURI insertURI;
> + private String insertURI;
> private Date lastInsert;
>
>
> - /**
> - * Creates a local identity with the given parameters
> - *
> - * @param insertURI Insert URI of the Identity
> - * @param requestURI Request URI of the Identity
> - * @param lastInsert Last time the Identity has been inserted in Freenet
> - * @param lastChange Last time the identity (or its trustList) has been
updated
> - * @param publishTrustList Whether the Identity publishes its trustList
> or
not
> - */
> - public OwnIdentity(FreenetURI insertURI, FreenetURI requestURI, Date
lastInsert, Date lastChange) {
> +
> + public OwnIdentity(String insertURI, String requestURI, Date
> lastInsert,
Date lastChange, String nickName, String publishTrustList) throws
InvalidParameterException {
>
> - super(requestURI, lastChange);
> + super(requestURI, lastChange, nickName, publishTrustList);
> setInsertURI(insertURI);
> setLastInsert(lastInsert);
> }
> @@ -73,22 +66,32 @@
> * @throws IOException
> */
> public File exportToXML(ObjectContainer db, File dir ) throws
ParserConfigurationException, TransformerConfigurationException,
TransformerException, FileNotFoundException, IOException {
> -
> +
> // Create the output file
> - File outputFile = new File(dir, getInsertURI().getDocName() +
> ".xml");
> + File outputFile = new File(dir, getNickName());
> BufferedOutputStream fos = new BufferedOutputStream(new
FileOutputStream(outputFile));
> StreamResult resultStream = new StreamResult(fos);
> -
> +
> // Create the XML document
> DocumentBuilderFactory xmlFactory =
> DocumentBuilderFactory.newInstance();
> DocumentBuilder xmlBuilder = xmlFactory.newDocumentBuilder();
> DOMImplementation impl = xmlBuilder.getDOMImplementation();
> Document xmlDoc = impl.createDocument(null, "WoT", null);
> Element rootElement = xmlDoc.getDocumentElement();
> -
> +
> // Create the content
> Element identity = xmlDoc.createElement("identity");
> -
> +
> + // NickName
> + Element nickNameTag = xmlDoc.createElement("nickName");
> + nickNameTag.setAttribute("value", nickName);
> + identity.appendChild(nickNameTag);
> +
> + // PublishTrustList
> + Element publishTrustListTag =
> xmlDoc.createElement("publishTrustList");
> + publishTrustListTag.setAttribute("value",
publishTrustList ? "true" : "false");
> + identity.appendChild(publishTrustListTag);
> +
> // Properties
> Set set = props.entrySet();
> Iterator i = set.iterator();
> @@ -99,7 +102,7 @@
> propTag.setAttribute("value", prop.getValue());
> identity.appendChild(propTag);
> }
> -
> +
> // Contexts
> Iterator i2 = contexts.iterator();
> while(i2.hasNext()) {
> @@ -108,10 +111,10 @@
> contextTag.setAttribute("value", context);
> identity.appendChild(contextTag);
> }
> -
> +
> rootElement.appendChild(identity);
>
> - if(getProp("publishTrustList").equals("true")) {
> + if(doesPublishTrustList()) {
> Trustlist trustList = new Trustlist(db, this);
> rootElement.appendChild(trustList.toXML(xmlDoc));
> }
> @@ -142,17 +145,41 @@
> * @return insertURI
> */
> public FreenetURI getInsertURI() {
> - return insertURI;
> +
> + FreenetURI key;
> + try {
> + key = new FreenetURI(insertURI+"/WoT/"+edition);
> + } catch (MalformedURLException e) {
> + // TODO Remove this as soon as the creation is checked
> + e.printStackTrace();
> + return null;
> + // Can't happen, the key is tested on creation
> + }
> + return key;
> }
>
> /**
> * @param insertURI InsertURI of the Identity
> + * @throws InvalidParameterException
> */
> - public void setInsertURI(FreenetURI insertURI) {
> - if(insertURI == null) this.insertURI = null;
> - else this.insertURI =
> insertURI.setDocName("WoT").setKeyType("USK");
> + public void setInsertURI(String insertURI) throws
InvalidParameterException {
> +
> + FreenetURI key;
> + try {
> + key = new FreenetURI(insertURI).setDocName("WoT");
> + } catch (MalformedURLException e) {
> + throw new InvalidParameterException("Invalid key :
> "+e.getMessage());
> + }
> + setInsertURI(key);
> }
> +
> + public void setInsertURI(FreenetURI key) throws
> InvalidParameterException
{
> + if(key.getKeyType().equals("SSK")) key = key.setKeyType("USK");
> + if(!key.getKeyType().equals("USK")) throw new
InvalidParameterException("Key type not supported");
>
> + this.insertURI = key.toString().substring(0,
key.toString().indexOf("/"));
> + }
> +
> /**
> * @return lastInsert
> */
>
> Modified: trunk/apps/WoT/src/plugins/WoT/Trust.java
> ===================================================================
> --- trunk/apps/WoT/src/plugins/WoT/Trust.java 2008-08-13 08:02:19 UTC (rev
21782)
> +++ trunk/apps/WoT/src/plugins/WoT/Trust.java 2008-08-13 09:57:52 UTC (rev
21783)
> @@ -53,9 +53,9 @@
> */
> public Element toXML(Document xmlDoc) {
> Element elem = xmlDoc.createElement("trust");
> + elem.setAttribute("uri", trustee.getRequestURI().toString());
> elem.setAttribute("value", String.valueOf(value));
> elem.setAttribute("comment", comment);
> - elem.setAttribute("uri", trustee.getRequestURI().toString());
>
> return elem;
> }
>
> Added: trunk/apps/WoT/src/plugins/WoT/UnknownIdentityException.java
> ===================================================================
> --- trunk/apps/WoT/src/plugins/WoT/UnknownIdentityException.java
>
(rev 0)
> +++ trunk/apps/WoT/src/plugins/WoT/UnknownIdentityException.java
> 2008-08-13
09:57:52 UTC (rev 21783)
> @@ -0,0 +1,20 @@
> +/**
> + * This code is part of WoT, a plugin for Freenet. It is distributed
> + * under the GNU General Public License, version 2 (or at your option
> + * any later version). See http://www.gnu.org/ for details of the GPL.
> + */
> +package plugins.WoT;
> +
> +/**
> + * @author Julien Cornuwel (batosai at freenetproject.org)
> + *
> + */
> +public class UnknownIdentityException extends Exception {
> +
> + private static final long serialVersionUID = -1;
> +
> + public UnknownIdentityException(String message) {
> + super(message);
> + }
> +
> +}
>
> Modified: trunk/apps/WoT/src/plugins/WoT/WoT.java
> ===================================================================
> --- trunk/apps/WoT/src/plugins/WoT/WoT.java 2008-08-13 08:02:19 UTC (rev
21782)
> +++ trunk/apps/WoT/src/plugins/WoT/WoT.java 2008-08-13 09:57:52 UTC (rev
21783)
> @@ -5,8 +5,11 @@
> */
> package plugins.WoT;
>
> +import java.net.MalformedURLException;
> +
> import com.db4o.ObjectContainer;
> import com.db4o.ObjectSet;
> +import com.db4o.query.Query;
>
> import freenet.keys.FreenetURI;
>
> @@ -169,24 +172,23 @@
> return identities.size() - getNbOwnIdentities();
> }
>
> - public Identity getIdentityByURI(FreenetURI uri) throws Exception {
> + public Identity getIdentityByURI(String uri) throws
InvalidParameterException, MalformedURLException, UnknownIdentityException {
>
> - String searched = uri.toString().substring(0,
uri.toString().indexOf("/"));
> - Identity identity = null;
> + FreenetURI key = new FreenetURI(uri);
> + if(!key.getKeyType().equals("USK")) throw new
InvalidParameterException("Not an USK");
>
> - // This is ugly, I could not find a request able to find the
> good
identity
> - ObjectSet<Identity> search = db.queryByExample(Identity.class);
> - while (search.hasNext()) {
> - Identity id = search.next();
> - String found =
> id.getRequestURI().toString().substring(0,
id.getRequestURI().toString().indexOf("/"));
> - if(found.equals(searched)) {
> - identity = id;
> - break;
> - }
> - }
> - if(identity==null) throw new Exception("Identity doesn't
exist : "+uri.toString());
> + return getIdentityByURI(key);
> + }
> +
> + private Identity getIdentityByURI(FreenetURI uri) throws
InvalidParameterException, UnknownIdentityException {
>
> - return identity;
> + Query query = db.query();
> + query.constrain(Identity.class);
> +
> query.descend("requestURI").constrain(uri.toString().substring(0,
uri.toString().indexOf("/")));
> + ObjectSet<Identity> result = query.execute();
> +
> + if(result.size() == 0) throw new UnknownIdentityException("No
> identity
has this request URI ("+uri.toString()+")");
> + return result.next();
> }
> }
>
>
> Modified: trunk/apps/WoT/src/plugins/WoT/WoTplugin.java
> ===================================================================
> --- trunk/apps/WoT/src/plugins/WoT/WoTplugin.java 2008-08-13 08:02:19 UTC
(rev 21782)
> +++ trunk/apps/WoT/src/plugins/WoT/WoTplugin.java 2008-08-13 09:57:52 UTC
(rev 21783)
> @@ -125,7 +125,7 @@
>
> ObjectSet<OwnIdentity> ownIdentities =
db.queryByExample(OwnIdentity.class);
> if(ownIdentities.size() == 0) {
> - boxContent.addChild("p", "You have no own identities
> yet, you should
create one...");
> + boxContent.addChild("p", "You have no own identity yet,
> you should
create one...");
> }
> else {
> HTMLNode identitiesTable = boxContent.addChild("table",
> "border", "0");
> @@ -138,16 +138,16 @@
> while(ownIdentities.hasNext()) {
> OwnIdentity id = ownIdentities.next();
> row=identitiesTable.addChild("tr");
> - row.addChild("td", new String[] {"title",
> "style"}, new String[]
{id.getRequestURI().toString(), "cursor: help;"}, id.getProp("nickName"));
> + row.addChild("td", new String[] {"title",
> "style"}, new String[]
{id.getRequestURI().toString(), "cursor: help;"}, id.getNickName());
>
> row.addChild("td",id.getLastChange().toString());
> HTMLNode cell = row.addChild("td");
> - if(id.getLastInsert() == null) {
> - cell.addChild("p", "In progress...");
> + if(id.getLastInsert().equals(new Date(0))) {
> + cell.addChild("p", "Never");
> }
> else {
> - cell.addChild(new HTMLNode("a", "href",
> "http://127.0.0.1:8888/" +
id.getRequestURI() + "/identity.xml", id.getLastInsert().toString()));
> + cell.addChild(new
HTMLNode("a", "href", "/"+id.getRequestURI().toString(),
id.getLastInsert().toString()));
> }
> - row.addChild("td",
id.getProp("publishTrustList").equals("true") ? "Yes" : "No");
> + row.addChild("td", id.doesPublishTrustList() ?
> "Yes" : "No");
> }
> }
>
> @@ -202,11 +202,10 @@
> }
> else {
> try {
> - treeOwner = wot.getIdentityByURI(new
> FreenetURI(owner));
> - if(treeOwner == null) return "Unknown
> URI";
> + treeOwner = wot.getIdentityByURI(owner);
> } catch (Exception e) {
> - return e.getLocalizedMessage();
> - }
> + return e.getMessage();
> + }
> }
>
> // Display a form to select the tree owner
> @@ -245,15 +244,14 @@
> row=identitiesTable.addChild("tr");
>
> // NickName
> - row.addChild("td", new String[] {"title", "style"}, new
> String[]
{id.getRequestURI().toString(), "cursor: help;"}, id.getProp("nickName"));
> + row.addChild("td", new String[] {"title", "style"}, new
> String[]
{id.getRequestURI().toString(), "cursor: help;"}, id.getNickName());
>
> // Last Change
> if (id.getLastChange().equals(new Date(0)))
row.addChild("td", "Fetching...");
> else row.addChild("td", id.getLastChange().toString());
>
> // Publish TrustList
> - boolean publishTrustList =
> id.getProp("publishTrustList") != null &&
id.getProp("publishTrustList").equals("true");
> - row.addChild("td", publishTrustList ? "Yes" : "No");
> + row.addChild("td", id.doesPublishTrustList() ? "Yes" :
> "No");
>
> //Score
> row.addChild("td",
> String.valueOf(id.getScore((OwnIdentity)treeOwner,
db).getScore())+" ("+id.getScore((OwnIdentity)treeOwner, db).getRank()+")");
> @@ -343,7 +341,7 @@
> }
> }
>
> - private void setTrust(HTTPRequest request) throws Exception {
> + private void setTrust(HTTPRequest request) throws
> NumberFormatException,
TransformerConfigurationException, FileNotFoundException,
InvalidParameterException, UnknownIdentityException,
ParserConfigurationException, TransformerException, IOException,
InsertException {
>
> setTrust( request.getPartAsString("truster", 1024),
> request.getPartAsString("trustee",
> 1024),
> @@ -351,19 +349,17 @@
> request.getPartAsString("comment",
> 1024));
> }
>
> - private void setTrust(String truster, String trustee, String value,
> String
comment) throws Exception {
> + private void setTrust(String truster, String trustee, String value,
> String
comment) throws InvalidParameterException, UnknownIdentityException,
NumberFormatException, TransformerConfigurationException,
FileNotFoundException, ParserConfigurationException, TransformerException,
IOException, InsertException {
>
> - Identity trusterId = wot.getIdentityByURI(new
> FreenetURI(truster));
> - Identity trusteeId = wot.getIdentityByURI(new
> FreenetURI(trustee));
> + Identity trusterId = wot.getIdentityByURI(truster);
> + Identity trusteeId = wot.getIdentityByURI(trustee);
>
> - if(!(trusterId instanceof OwnIdentity)) throw new Exception
> ("Truster
isn't an OwnIdentity");
> - if(trusterId == null) throw new Exception ("Truster doesn't
> exist");
> - if(trusteeId == null) throw new Exception ("Trustee doesn't
> exist");
> + if(!(trusterId instanceof OwnIdentity)) throw new
InvalidParameterException ("Truster isn't an OwnIdentity");
>
> setTrust((OwnIdentity)trusterId, trusteeId,
> Integer.parseInt(value),
comment);
> }
>
> - private void setTrust(OwnIdentity truster, Identity trustee, int value,
String comment) throws Exception {
> + private void setTrust(OwnIdentity truster, Identity trustee, int value,
String comment) throws TransformerConfigurationException,
FileNotFoundException, ParserConfigurationException, TransformerException,
IOException, InsertException {
>
> wot.setTrust(new Trust(truster, trustee, value, comment));
>
> @@ -378,65 +374,58 @@
>
> private String addIdentity(HTTPRequest request) {
>
> + Identity identity;
> try {
> - FreenetURI uri = new
> FreenetURI(request.getPartAsString("identityURI",
1024));
> - Identity identity = wot.getIdentityByURI(uri);
> -
> - if(identity == null) {
> - identity = new Identity(uri, new Date(0));
> + identity =
> wot.getIdentityByURI(request.getPartAsString("identityURI",
1024));
> + return "We already know that identity !";
> + }
> + catch (UnknownIdentityException e) {
> + try {
> + identity = new
> Identity(request.getPartAsString("identityURI", 1024),
new Date(0), "Not found yet...", "false");
> db.store(identity);
> db.commit();
> fetcher.fetch(identity);
> }
> - else return "We already know that identity !";
> -
> - } catch (Exception e) {
> - return e.getLocalizedMessage();
> + catch(Exception e2) {
> + return e2.getMessage();
> + }
> + } catch (MalformedURLException e) {
> + return e.getMessage();
> + } catch (InvalidParameterException e) {
> + return e.getMessage();
> }
>
> return makeKnownIdentitiesPage();
> }
>
> - private OwnIdentity createIdentity(HTTPRequest request) throws
> Exception {
> + private OwnIdentity createIdentity(HTTPRequest request) throws
TransformerConfigurationException, FileNotFoundException,
InvalidParameterException, ParserConfigurationException,
TransformerException, IOException, InsertException {
> +
> return createIdentity(
> request.getPartAsString("insertURI",1024),
>
> request.getPartAsString("requestURI",1024),
>
> request.getPartAsString("nickName", 1024),
> -
> request.getPartAsString("publishTrustList", 1024));
> +
> request.getPartAsString("publishTrustList", 1024));
> }
>
> - private OwnIdentity createIdentity(String nickName, String
publishTrustList) throws Exception {
> + private OwnIdentity createIdentity(String nickName, String
publishTrustList) throws TransformerConfigurationException,
FileNotFoundException, InvalidParameterException,
ParserConfigurationException, TransformerException, IOException,
InsertException {
>
> +
> FreenetURI[] keypair = client.generateKeyPair("WoT");
> - return createIdentity( keypair[0], keypair[1], nickName,
publishTrustList);
> + return createIdentity(keypair[0].toString(),
> keypair[1].toString(),
nickName, publishTrustList);
> }
> -
> - private OwnIdentity createIdentity(String insertURI, String requestURI,
String nickName, String publishTrustList) throws Exception {
> -
> - return createIdentity(new FreenetURI(insertURI), new
FreenetURI(requestURI), nickName, publishTrustList);
> - }
>
> -
> - private OwnIdentity createIdentity(FreenetURI insertURI, FreenetURI
requestURI, String nickName, String publishTrustList) throws Exception {
> -
> - if(nickName==null || nickName.equals("")) throw new
> Exception("Missing
parameter (NickName)");
> + private OwnIdentity createIdentity(String insertURI, String requestURI,
String nickName, String publishTrustList) throws InvalidParameterException,
TransformerConfigurationException, FileNotFoundException,
ParserConfigurationException, TransformerException, IOException,
InsertException {
>
> - OwnIdentity identity = new OwnIdentity(
> insertURI.setKeyType("USK"),
requestURI.setKeyType("USK"), null, new Date());
> - identity.setProp("nickName", nickName, db);
> -
> - if(!publishTrustList.equals("true")) publishTrustList = "false";
> - identity.setProp("publishTrustList", publishTrustList, db);
> -
> + OwnIdentity identity = new OwnIdentity(insertURI, requestURI,
> new
Date(0), new Date(), nickName, publishTrustList);
> db.store(identity);
>
> Score score = new Score(identity, identity, 100, 0, 100); // We
> need to
initialize the trust tree
> db.store(score);
> -
> +
> //TODO Make the new identity trust the seed identity
>
> db.commit();
>
> - new IdentityInserter(db, client).insert(identity);
> -
> + new IdentityInserter(db, client).insert(identity);
> return identity;
> }
>
> @@ -472,11 +461,13 @@
> }
> }
>
> - private SimpleFieldSet handleCreateIdentity(SimpleFieldSet params)
> throws
Exception {
> + private SimpleFieldSet handleCreateIdentity(SimpleFieldSet params)
> throws
TransformerConfigurationException, FileNotFoundException,
InvalidParameterException, ParserConfigurationException,
TransformerException, IOException, InsertException {
>
> SimpleFieldSet sfs = new SimpleFieldSet(false);
> OwnIdentity identity;
>
> + if(params.get("NickName")==null ||
> params.get("PublishTrustList")==null)
throw new InvalidParameterException("Missing mandatory parameter");
> +
> if(params.get("RequestURI")==null ||
> params.get("InsertURI")==null) {
> identity = createIdentity(params.get("NickName"),
params.get("PublishTrustList"));
> sfs.putAppend("Message", "IdentityCreated");
> @@ -484,8 +475,8 @@
> sfs.putAppend("RequestURI",
> identity.getRequestURI().toString());
> }
> else {
> - identity = createIdentity( new
> FreenetURI(params.get("InsertURI")),
> -
> new FreenetURI(params.get("RequestURI")),
> + identity = createIdentity( params.get("InsertURI"),
> +
> params.get("RequestURI"),
>
> params.get("NickName"),
>
> params.get("PublishTrustList"));
> sfs.putAppend("Message", "IdentityCreated");
> @@ -496,11 +487,11 @@
> return sfs;
> }
>
> - private SimpleFieldSet handleSetTrust(SimpleFieldSet params) throws
Exception {
> + private SimpleFieldSet handleSetTrust(SimpleFieldSet params) throws
NumberFormatException, TransformerConfigurationException,
FileNotFoundException, InvalidParameterException,
ParserConfigurationException, TransformerException, IOException,
InsertException, UnknownIdentityException {
>
> SimpleFieldSet sfs = new SimpleFieldSet(false);
>
> - if(params.get("truster") == null || params.get("trustee") ==
> null ||
params.get("value") == null || params.get("comment") == null) throw new
Exception("Missing parameter");
> + if(params.get("truster") == null || params.get("trustee") ==
> null ||
params.get("value") == null || params.get("comment") == null) throw new
InvalidParameterException("Missing mandatory parameter");
>
> setTrust(params.get("truster"), params.get("trustee"),
params.get("value"), params.get("comment"));
>
>
> _______________________________________________
> cvs mailing list
> cvs at freenetproject.org
> http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs
>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL:
<https://emu.freenetproject.org/pipermail/devl/attachments/20080821/d2da7e10/attachment.pgp>