[Mulgara-svn] r1758 - trunk/src/jar/content-rlog/java/org/mulgara/krule/rlog/ast

pag at mulgara.org pag at mulgara.org
Fri Jul 10 16:31:21 UTC 2009


Author: pag
Date: 2009-07-10 09:31:20 -0700 (Fri, 10 Jul 2009)
New Revision: 1758

Modified:
   trunk/src/jar/content-rlog/java/org/mulgara/krule/rlog/ast/StringLiteral.java
Log:
Added support for typed and language coded literals

Modified: trunk/src/jar/content-rlog/java/org/mulgara/krule/rlog/ast/StringLiteral.java
===================================================================
--- trunk/src/jar/content-rlog/java/org/mulgara/krule/rlog/ast/StringLiteral.java	2009-07-10 16:29:09 UTC (rev 1757)
+++ trunk/src/jar/content-rlog/java/org/mulgara/krule/rlog/ast/StringLiteral.java	2009-07-10 16:31:20 UTC (rev 1758)
@@ -17,8 +17,10 @@
 package org.mulgara.krule.rlog.ast;
 
 import org.mulgara.krule.rlog.ParseContext;
+import org.mulgara.krule.rlog.parser.URIParseException;
 import org.mulgara.krule.rlog.rdf.Literal;
 import org.mulgara.krule.rlog.rdf.RDFNode;
+import org.mulgara.krule.rlog.rdf.URIReference;
 
 /**
  * A quoted string in the AST.
@@ -32,6 +34,12 @@
   /** The string value. */
   public final String value;
 
+  /** The language code for the string. */
+  public String lang = null;
+
+  /** The datatype for the literal. */
+  public PredicateLiteral type = null;
+
   /**
    * A new string literal.
    * @param value The contents of the quoted string.
@@ -43,6 +51,14 @@
     this.value = value;
   }
 
+  public void setLang(String lang) {
+    this.lang = lang;
+  }
+
+  public void setType(PredicateLiteral type) {
+    this.type = type;
+  }
+
   // inheritdoc
   public void accept(TreeWalker walker) {
     walker.visit(this);
@@ -55,7 +71,11 @@
 
   //inheritdoc
   public boolean equals(Object o) {
-    return o instanceof StringLiteral && value.equals(((StringLiteral)o).value);
+    if (o instanceof StringLiteral) {
+      StringLiteral ol = (StringLiteral)o;
+      return value.equals(ol.value) && nullEq(lang, ol.lang) && nullEq(type, ol.type);
+    }
+    return false;
   }
 
   // inheritdoc
@@ -64,7 +84,9 @@
   }
 
   /** {@inheritDoc} */
-  public RDFNode getRDFNode() {
+  public RDFNode getRDFNode() throws URIParseException {
+    if (lang != null) return new Literal(value, lang);
+    if (type != null) return new Literal(value, (URIReference)type.getRDFNode());
     return new Literal(value.toString());
   }
 
@@ -86,5 +108,14 @@
     return STRING_LITERAL_ID;
   }
 
+  /**
+   * Convenience method for equality testing on objects that might be null.
+   * @param a The first object to compare.
+   * @param b The second object to compare.
+   * @return <code>true</code> if both objects are null, or equal by value.
+   */
+  static final boolean nullEq(Object a, Object b) {
+    return (a == null) ? b == null : a.equals(b);
+  }
 }
 




More information about the Mulgara-svn mailing list