|
From: Pelle B. <pe...@us...> - 2004-04-02 17:11:05
|
Update of /cvsroot/neuclear/neuclear-pay/src/java/org/neuclear/asset/contracts In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28155/src/java/org/neuclear/asset/contracts Modified Files: Asset.java AssetGlobals.java Log Message: Updated Asset and Asset Builder with semi fully featured functionality. It now has Issuer, Service etc. Index: AssetGlobals.java =================================================================== RCS file: /cvsroot/neuclear/neuclear-pay/src/java/org/neuclear/asset/contracts/AssetGlobals.java,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** AssetGlobals.java 5 Jan 2004 23:47:09 -0000 1.9 --- AssetGlobals.java 2 Apr 2004 16:58:54 -0000 1.10 *************** *** 1,5 **** package org.neuclear.asset.contracts; ! import org.dom4j.*; import org.neuclear.id.verifier.VerifyingReader; --- 1,8 ---- package org.neuclear.asset.contracts; ! import org.dom4j.DocumentHelper; ! import org.dom4j.Element; ! import org.dom4j.Namespace; ! import org.dom4j.QName; import org.neuclear.id.verifier.VerifyingReader; *************** *** 24,27 **** --- 27,34 ---- $Id$ $Log$ + Revision 1.10 2004/04/02 16:58:54 pelle + Updated Asset and Asset Builder with semi fully featured functionality. + It now has Issuer, Service etc. + Revision 1.9 2004/01/05 23:47:09 pelle Create new Document classification "order", which is really just inherint in the new *************** *** 120,128 **** } ! public static Attribute createAttribute(final Element elem, final String name, final String value) { ! return DocumentHelper.createAttribute(elem, createQName(name), value); } ! public static Element createElement(final String name, final String value) { return DocumentHelper.createElement(createQName(name)); } --- 127,135 ---- } ! public static void addAttribute(final Element elem, final String name, final String value) { ! elem.addAttribute(createQName(name), value); } ! public static Element createElement(final String name) { return DocumentHelper.createElement(createQName(name)); } *************** *** 130,135 **** public static final String ASSET_TAGNAME = "Asset"; public static final String XFER_ASSETS = "http://neuclear.org/neu/assets"; ! public static final String ASSET_NSPREFIX = "asset"; ! public static final Namespace NS_ASSET=createNameSpace(); public static void registerReaders() { VerifyingReader.getInstance().registerReader(AssetGlobals.ASSET_TAGNAME, new Asset.Reader()); --- 137,146 ---- public static final String ASSET_TAGNAME = "Asset"; public static final String XFER_ASSETS = "http://neuclear.org/neu/assets"; ! public static final String ASSET_NSPREFIX = "as"; ! public static final String ISSUER_TAGNAME = "Issuer"; ! public static final String DECIMAL_POINT_TAGNAME = "DecimalPoints"; ! public static final String MINIMUM_TAGNAME = "MinimumTransaction"; ! public static final Namespace NS_ASSET = createNameSpace(); ! public static void registerReaders() { VerifyingReader.getInstance().registerReader(AssetGlobals.ASSET_TAGNAME, new Asset.Reader()); Index: Asset.java =================================================================== RCS file: /cvsroot/neuclear/neuclear-pay/src/java/org/neuclear/asset/contracts/Asset.java,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** Asset.java 1 Apr 2004 23:18:32 -0000 1.15 --- Asset.java 2 Apr 2004 16:58:53 -0000 1.16 *************** *** 5,8 **** --- 5,13 ---- import org.neuclear.id.*; import org.neuclear.id.targets.Targets; + import org.neuclear.xml.xmlsec.KeyInfo; + import org.neuclear.xml.xmlsec.XMLSecTools; + import org.neuclear.xml.xmlsec.XMLSecurityException; + + import java.security.PublicKey; /* *************** *** 26,29 **** --- 31,38 ---- $Id$ $Log$ + Revision 1.16 2004/04/02 16:58:53 pelle + Updated Asset and Asset Builder with semi fully featured functionality. + It now has Issuer, Service etc. + Revision 1.15 2004/04/01 23:18:32 pelle Split Identity into Signatory and Identity class. *************** *** 123,128 **** */ public final class Asset extends Identity { ! protected Asset(final SignedNamedCore core, final Targets targets, final int decimal, final double minimumTransaction) { ! super(core, null, targets); //Web services dont have signing urls this.decimal = decimal; this.multiplier = (int) Math.round(Math.pow(10, -decimal)); --- 132,140 ---- */ public final class Asset extends Identity { ! protected Asset(final SignedNamedCore core, final String serviceUrl, final PublicKey servicekey, final PublicKey issuerKey, final Targets targets, final int decimal, final double minimumTransaction) { ! super(core, null, targets); ! this.serviceUrl = serviceUrl; ! this.issuerKey = issuerKey; ! this.serviceKey = servicekey; this.decimal = decimal; this.multiplier = (int) Math.round(Math.pow(10, -decimal)); *************** *** 165,168 **** --- 177,203 ---- } + public final PublicKey getIssuerKey() { + return issuerKey; + } + + public final PublicKey getServiceKey() { + return serviceKey; + } + + public final String getServiceUrl() { + return serviceUrl; + } + + public int getDecimal() { + return decimal; + } + + public int getMultiplier() { + return multiplier; + } + + public double getMinimumTransaction() { + return minimumTransaction; + } public static final class Reader implements NamedObjectReader { *************** *** 176,186 **** if (!elem.getNamespace().equals(AssetGlobals.NS_ASSET)) throw new InvalidNamedObjectException(core.getName(), "Not in XML NameSpace: " + AssetGlobals.NS_ASSET.getURI()); ! ! final String dec = elem.attributeValue("decimalpoints"); ! final int decimal = (!Utility.isEmpty(dec)) ? Integer.parseInt(dec) : 0; ! final String min = elem.attributeValue("minimumxact"); ! final double minimum = (!Utility.isEmpty(min)) ? Double.parseDouble(min) : 0; ! final Targets targets = Targets.parseList(elem); ! return new Asset(core, targets, decimal, minimum); } --- 211,229 ---- if (!elem.getNamespace().equals(AssetGlobals.NS_ASSET)) throw new InvalidNamedObjectException(core.getName(), "Not in XML NameSpace: " + AssetGlobals.NS_ASSET.getURI()); ! final Element issuerElement = InvalidNamedObjectException.assertContainsElementQName(core, elem, AssetGlobals.createQName("Issuer")); ! final Element serviceElement = InvalidNamedObjectException.assertContainsElementQName(core, elem, AssetGlobals.createQName("Service")); ! final Element serviceKeyElement = InvalidNamedObjectException.assertContainsElementQName(core, serviceElement, XMLSecTools.createQName("KeyInfo")); ! final Element serviceUrlElement = InvalidNamedObjectException.assertContainsElementQName(core, serviceElement, AssetGlobals.createQName("Url")); ! try { ! final PublicKey sPub = extractPublicKey(serviceKeyElement); ! final String serviceurl = serviceUrlElement.getTextTrim(); ! final PublicKey iPub = extractPublicKey(InvalidNamedObjectException.assertContainsElementQName(issuerElement, XMLSecTools.createQName("KeyInfo"))); ! final int decimal = extractDecimalPoints(elem); ! final double minimum = extractMinimumTransactionAmount(elem); ! final Targets targets = Targets.parseList(elem); ! return new Asset(core, serviceurl, sPub, iPub, targets, decimal, minimum); ! } catch (XMLSecurityException e) { ! throw new InvalidNamedObjectException("invalid asset xml"); ! } } *************** *** 188,191 **** --- 231,258 ---- } + private static PublicKey extractPublicKey(Element kiElem) throws XMLSecurityException { + final KeyInfo sKi = new KeyInfo(kiElem); + return sKi.getPublicKey(); + } + + private static double extractMinimumTransactionAmount(Element elem) { + Element melem = elem.element(AssetGlobals.createQName(AssetGlobals.MINIMUM_TAGNAME)); + if (melem == null || Utility.isEmpty(melem.getTextTrim())) + return 0.0; + return Double.parseDouble(melem.getTextTrim()); + + } + + private static int extractDecimalPoints(Element elem) { + Element melem = elem.element(AssetGlobals.createQName(AssetGlobals.DECIMAL_POINT_TAGNAME)); + if (melem == null || Utility.isEmpty(melem.getTextTrim())) + return 0; + return Integer.parseInt(melem.getTextTrim()); + + } + + private final PublicKey issuerKey; + private final String serviceUrl; + private final PublicKey serviceKey; private final int decimal; private final int multiplier; |