   (. input-model getData)
   (. input-model getMetadata)
 
-  (def 
-   view
-   (select
-    input-model
-    "org.dada.core.tmp.OutputItem"
-    "OutputModel"
-    (Integer/TYPE) "key"
-    (Integer/TYPE) "version"
-    (list
-     ["id" :name "key"]
-     ["version"]
-     ["amount" :name "money"])))
+  (def view
+       (select
+	input-model
+	"org.dada.core.tmp.OutputItem"
+	"OutputModel"
+	"key"
+	"version"
+	(list ["id" :name "key"] ["version"] ["amount" :name "money"])
+	))
   (insert metamodel view)
 
   (def item5 (make-instance input-class 3 2 2 6.0))

;; TODO :default not a good idea - would replace nulls
;; TODO what about type hints on lambdas ?
(defn expand-property [src-class src-type src-name & pvec]
  (let [pmap (apply hash-map pvec)
	tgt-type (or (pmap :type) src-type)
	tgt-name (or (pmap :name) src-name)
	convert (or (pmap :convert) identity)

  	output-class (apply make-class class-factory output-class-name output-properties)
	dummy (print "output-class: ")
	dummy (println output-class)
   	output-getters (apply
			conj
			(array-map)
			(map
			 (fn [property]
			     (let [type (nth property 0)
				   name (nth property 1)]
			       [name (make-proxy-getter output-class type name)]))
			 expanded-properties))
   	key-getter (output-getters key-name)
   	version-getter (output-getters version-name)
	dummy (print "version-getter: ")
	dummy (println version-getter)
	dummy (print "output-getters: ")
	dummy (println output-getters)
	output-metadata (new GetterMetadata output-class output-types output-names (vals output-getters))
	dummy (print "output-metadata: ")
	dummy (println output-metadata)
	view (new VersionedModelView output-model-name output-metadata key-getter version-getter)
