I found the Solution. !!!! :-)

I hope it help other people with the same issues, this worked out for
me. I read clojure code on github and java code as well after some
time struggling with the objects and functions I found this solution:

package com.github.diegopacheco.sandbox.java.clojure;

import clojure.lang.RT;
import clojure.lang.Var;

/**
 *
 * @author Diego Pacheco
 *
 */
public class JavaCallsClojureInterpreted {

        private static final Var seq        =  RT.var("clojure.core",
"seq");
        private static final Var type       =  RT.var("clojure.core",
"type");
        private static final Var keyword    =  RT.var("clojure.core",
"keyword");
        private static final Var hashMap    =  RT.var("clojure.core", "hash-
map");
        private static final Var structMap  =  RT.var("clojure.core",
"struct-map");

        public static void loadClojureScript(String script){
                try {
                         RT.loadResourceScript(script);
                } catch (Exception e) {
                        throw new RuntimeException(e);
                }
        }

        public static Object buildKeyword(String k){
                try {
                        return keyword.invoke(k);
                } catch (Exception e) {
                        throw new RuntimeException(e);
                }
        }

        public static Object buildSeq(Object o){
                try {
                        return seq.invoke(o);
                } catch (Exception e) {
                        throw new RuntimeException(e);
                }
        }

        public static Object buildUserTypeDef(String ns,String structDefName)
{
                try {
                        Var userType = RT.var(ns, structDefName);
                        return userType.get();
                } catch (Exception e) {
                        throw new RuntimeException(e);
                }
        }

        public static Var buildUserFunction(String ns,String func){
                try {
                        return RT.var(ns, func);
                } catch (Exception e) {
                        throw new RuntimeException(e);
                }
        }

        public static Object infoType(Object o){
                try {
                        return type.invoke(o);
                } catch (Exception e) {
                        throw new RuntimeException(e);
                }
        }

        public static Object buildHashMap(Object... mapArgs){
                try {
                        Object userSeq  = buildSeq(mapArgs);
                        return hashMap.applyTo((clojure.lang.ISeq)userSeq);
                } catch (Exception e) {
                        throw new RuntimeException(e);
                }
        }

        public static void main(String args[]) throws Throwable{
                try{

                        loadClojureScript("company.clj");

                        Object employeeStructDef = 
buildUserTypeDef("user","employee");
                        System.out.println(infoType(employeeStructDef));

                        Object oEmployee =
structMap.invoke(employeeStructDef,buildKeyword("name"),"Diego",buildKeyword("age"),
26,
        
buildKeyword("role"),"Coach",buildKeyword("salary"),1000);
                    System.out.println(oEmployee);

                    Var hire = buildUserFunction("user", "hire");
                    Object r = hire.invoke(oEmployee);
                    System.out.println(r);

                    Var printee = buildUserFunction("user", "print-employee");
                    Object r2 = printee.invoke(oEmployee);
                    System.out.println(r2);

                    Var print = buildUserFunction("user", "print-employees");
                    Object result = print.invoke();
                    System.out.println(result);

                }catch(Exception e){
                        e.printStackTrace();
                }
        }

}

Cheers,
@diego_pacheco

On Oct 17, 2:23 am, Diego Pacheco <dmetall...@gmail.com> wrote:
> You Right! BUT still does not work.
>
> I tried:
>
>                     Var type       =  RT.var("clojure.core","type");
>                     Object oType   = type.invoke("employee");
>
>                     Var struct     =  RT.var("clojure.core", "struct-map");
>                     Object oStruct =  
> struct.invoke(oType,"Diego",26,"Coach",1000);
>
>                     Var hire = RT.var("user", "hire");
>                     Object r = hire.invoke(oStruct);
>                     System.out.println(r);
>
> ......
>
> I got the exception:
>
> java.lang.ClassCastException: java.lang.Class cannot be cast to
> clojure.lang.PersistentStructMap$Def
>         at clojure.core$struct_map.doInvoke(core.clj:3128)
>         at clojure.lang.RestFn.invoke(RestFn.java:486)
>         at clojure.lang.Var.invoke(Var.java:381)
>         at
> com.github.diegopacheco.sandbox.java.clojure.JavaCallsClojureInterpreted.ma 
> in(JavaCallsClojureInterpreted.java:
> 42)
>
> .............
>
> When I do:
>
>                     Var struct =  RT.var("clojure.core", "create-
> struct");
>                     Object oStruct =  
> struct.invoke("employee","Diego",26,"Coach",
> 1000);
>
>                     Var hire = RT.var("user", "hire");
>                     Object r = hire.invoke(oStruct);
>                     System.out.println(r);
>
>                     Var printee = RT.var("user", "print-employee");
>                     Object r2 = printee.invoke(oStruct);
>                     System.out.println(r2);
>
>                     Var print = RT.var("user", "print-employees");
>                     Object result = print.invoke();
>                     System.out.println(result);
>
> ............
>
> I GOT:
>
> [#<Def clojure.lang.PersistentStructMap$Def@6b6ac8>]
> "Name:  - Age:  - Role:  - Salary:"
> null
> "Name:  - Age:  - Role:  - Salary:"
> clojure.lang.LazySeq@1f
>
> ...........
>
> When I DO:
>
>     Var struct     =  RT.var("clojure.core", "create-struct");
>                     Object oStruct =  
> struct.invoke("employee","Diego",26,"Coach",
> 1000);
>
>                     Var employee     =  RT.var("clojure.core", "struct");
>                     Object oEmployee =  employee.invoke(oStruct);
>
>                     Var hire = RT.var("user", "hire");
>                     Object r = hire.invoke(oEmployee);
>                     System.out.println(r);
>
>                     Var printee = RT.var("user", "print-employee");
>                     Object r2 = printee.invoke(oEmployee);
>                     System.out.println(r2);
>
>                     Var print = RT.var("user", "print-employees");
>                     Object result = print.invoke();
>                     System.out.println(result);
>
> .......
>
> I Got:
>
> [{"employee" nil, "Diego" nil, 26 nil, "Coach" nil, 1000 nil}]
> "Name:  - Age:  - Role:  - Salary:"
> null
> "Name:  - Age:  - Role:  - Salary:"
> clojure.lang.LazySeq@1f
>
> I'm loosing my hope, does anybody used this feature before ? Any idea
> what I'm doing wrong ?
>
> Cheers,
> @diego_pacheco
>
> On Oct 14, 3:58 am, Alexander Taggart <m...@ataggart.ca> wrote:
>
>
>
>
>
>
>
> > I suspect this...
>
> > Var struct = RT.var("clojure.core", "struct","employee :diego 10 :coach
> > 1000");
>
> > isn't doing what you think it will.  That will set the root binding of
> > clojure.core/struct to the string you gave it.  you probably want to get the
> > var for the struct function, and then invoke it with the arguments to create
> > an employee struct instance.

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to