~ refactor cellmap to make obvious all the subcases cases for one cell
authorAlexandre Bertails <alexandre@bertails.org>
Sat, 05 Jun 2010 12:01:56 -0400
changeset 15 edc6c17a664d
parent 14 fdc36e0b0a87
child 17 5653130b620a
~ refactor cellmap to make obvious all the subcases cases for one cell
src/main/scala/Main.scala
--- a/src/main/scala/Main.scala	Fri Jun 04 18:21:49 2010 -0400
+++ b/src/main/scala/Main.scala	Sat Jun 05 12:01:56 2010 -0400
@@ -127,20 +127,22 @@
   }
 
   def cellmap (u:StemIRI, rn:RelName, h:Header, a:AttrName, s:IRI, t:Tuple) : Option[Triple] = {
-    if (h.pk.find(x => x == a) != None)
-      None
-    else
-      lexvalue(h, t, a) match {
-	case ☹() => None
-	case l:LexicalValue => {
-	  val p = predicatemap (u, rn, a)
-	  val o = h.fks.get(a) match {
-  	    case Some(target:Target) => ObjectIRI(nodemap(u, target.rel, target.attr, l))
-	    case None => ObjectLiteral(literalmap(l, sqlDatatype(h, a)))
-	  }
-	  Some(Triple(s, p, o))
-	}
+    def hasForeignKeys(a:AttrName):Boolean = h.fks.get(a).isDefined
+    lexvalue(h, t, a) match {
+      case _ if h.pk contains a => None
+      case ☹()                  => None
+      case l:LexicalValue if hasForeignKeys(a) => {
+	val target = h.fks(a)
+	val p = predicatemap (u, rn, a)
+	val o = ObjectIRI(nodemap(u, target.rel, target.attr, l))
+	Some(Triple(s, p, o))
       }
+      case l:LexicalValue => {
+	val p = predicatemap (u, rn, a)
+	val o = ObjectLiteral(literalmap(l, sqlDatatype(h, a)))
+	Some(Triple(s, p, o))
+      }
+    }
   }
 
   def nodemap (u:StemIRI, rn:RelName, a:AttrName, l:LexicalValue) : IRI =