[Ooc-checkins] libpobj/src/PObj MetaData.Mod, 1.131, 1.132 CodeGenJava.Mod, 1.107, 1.108
Brought to you by:
mva
|
From: Michael v. A. <mv...@us...> - 2007-03-07 10:49:12
|
Update of /cvsroot/ooc/libpobj/src/PObj In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv14641/src/PObj Modified Files: MetaData.Mod CodeGenJava.Mod Log Message: add join columns to output of Java code generator Index: MetaData.Mod =================================================================== RCS file: /cvsroot/ooc/libpobj/src/PObj/MetaData.Mod,v retrieving revision 1.131 retrieving revision 1.132 diff -u -d -r1.131 -r1.132 --- MetaData.Mod 3 Feb 2007 15:47:29 -0000 1.131 +++ MetaData.Mod 7 Mar 2007 10:49:09 -0000 1.132 @@ -2269,6 +2269,8 @@ CASE variant OF | columnJavaGetMethod: RETURN "get"+Upcase(j.name); + | columnJavaMemberAttrType: + RETURN "join"+Upcase(j.name); END; END Name; @@ -2301,18 +2303,24 @@ baseType := "PObjStack"; | t: DictionaryJoin DO baseType := "PObjDictionary"; + | t: ReferenceJoin DO + RETURN t.targetClass.module.javaPackage+"."+t.targetClass.name+"[]" END; RETURN (baseType+"<"+t.targetClass.module.javaPackage+"."+ t.targetClass.name+">"); | typeClassJava, typeClassJavaNoMap: - WITH t: SetJoin DO - baseType := "SetJoin"; - | t: StackJoin DO - baseType := "StackJoin"; - | t: DictionaryJoin DO - baseType := "DictionaryJoin"; - END; IF (t.javaTypeName = NIL) THEN + WITH t: SetJoin DO + baseType := "SetJoin"; + | t: StackJoin DO + baseType := "StackJoin"; + | t: DictionaryJoin DO + baseType := "DictionaryJoin"; + | t: DetailJoin DO + baseType := "DetailJoin"; + | t: ReferenceJoin DO + baseType := "ReferenceJoin"; + END; RETURN "pe.base.pobjects."+baseType; ELSE RETURN t.javaTypeName; Index: CodeGenJava.Mod =================================================================== RCS file: /cvsroot/ooc/libpobj/src/PObj/CodeGenJava.Mod,v retrieving revision 1.107 retrieving revision 1.108 diff -u -d -r1.107 -r1.108 --- CodeGenJava.Mod 15 Jan 2007 15:08:37 -0000 1.107 +++ CodeGenJava.Mod 7 Mar 2007 10:49:09 -0000 1.108 @@ -1,7 +1,7 @@ (* $Id$ *) MODULE PObj:CodeGenJava; (* Java code generator. - Copyright (C) 2004-2006 Michael van Acken + Copyright (C) 2004-2007 Michael van Acken This module is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License @@ -326,6 +326,19 @@ sb.Append(";"); END FieldMembers; + PROCEDURE JoinMembers(join: MetaData.Join); + BEGIN + Ln; + Ln; + sb.Append("// join: "); + sb.Append(join.name); + + Ln; + sb.Append("public static Join "); + sb.Append(join.Name(MetaData.columnJavaMemberAttrType)); + sb.Append(";"); + END JoinMembers; + PROCEDURE PseudoFieldMembers(field: MetaData.Field); BEGIN Ln; @@ -498,34 +511,59 @@ BEGIN typeName := join.joinType.Name(class.module, MetaData.typeNameJava); type := join.joinType; - + Ln; Ln; sb.Append("/**"); Ln; - sb.Append(" * <p>Returns the wrapper object of join `"+join.name+"'.</p>"); - IF (join.description # NIL) THEN + WITH type: MetaData.ReferenceJoin DO + sb.Append(" * <p>Returns the object(s) of the join `"+join.name+"'.</p>"); + IF (join.description # NIL) THEN + Ln; + sb.Append(" * "+join.description.ToXml()); + END; Ln; - sb.Append(" * "+join.description.ToXml()); + sb.Append(" */"); + Ln; + sb.Append("public "); + sb.Append(typeName); + sb.Append(" "); + sb.Append(join.Name(MetaData.columnJavaGetMethod)); + sb.Append("()"); + Ln; + sb.Append("{"); + INC(indent); + Ln; + sb.Append("return ("); + sb.Append(typeName); + sb.Append(")findJoin("); + sb.Append(join.Name(MetaData.columnJavaMemberAttrType)); + sb.Append(");"); + ELSE (* hash, set, or stack join *) + sb.Append(" * <p>Returns the wrapper object of join `"+join.name+"'.</p>"); + IF (join.description # NIL) THEN + Ln; + sb.Append(" * "+join.description.ToXml()); + END; + Ln; + sb.Append(" */"); + Ln; + sb.Append("public "); + sb.Append(typeName); + sb.Append(" "); + sb.Append(join.Name(MetaData.columnJavaGetMethod)); + sb.Append("()"); + Ln; + sb.Append("{"); + INC(indent); + Ln; + sb.Append("return new "); + sb.Append(typeName); + sb.Append("(this, "); + sb.Append(type.targetClass.Name(class.module, + MetaData.tableExprPointerType)); + sb.Append(".class);"); END; - Ln; - sb.Append(" */"); - Ln; - sb.Append("public "); - sb.Append(typeName); - sb.Append(" "); - sb.Append(join.Name(MetaData.columnJavaGetMethod)); - sb.Append("()"); - Ln; - sb.Append("{"); - INC(indent); - Ln; - sb.Append("return new "); - sb.Append(typeName); - sb.Append("(this, "); - sb.Append(type.targetClass.Name(class.module, - MetaData.tableExprPointerType)); - sb.Append(".class);"); DEC(indent); Ln; sb.Append("}"); @@ -1009,6 +1047,13 @@ FOR i := 0 TO LEN(fields^)-1 DO FieldMembers(fields[i]); END; + FOR col IN class.columns^ DO + WITH col: MetaData.Join DO + JoinMembers(col); + ELSE + (* ignore *) + END; + END; pseudoFields := SortedPseudoFields(class); FOR i := 0 TO LEN(pseudoFields^)-1 DO PseudoFieldMembers(pseudoFields[i]); @@ -2636,6 +2681,8 @@ Ln; sb.Append("private static Attribute a;"); Ln; + sb.Append("private static Join j;"); + Ln; sb.Append("private static PseudoAttribute pa;"); Ln; sb.Append("private static Parameter p;"); @@ -2817,6 +2864,75 @@ ng[genType].next := 1; (* reset name generator for types *) END AddField; + PROCEDURE AddJoin(j: MetaData.Join); + VAR + type: MetaData.JoinType; + varName, joinType: STRING; + fix: StringBuffer.StringBuffer; + i: LONGINT; + BEGIN + Ln; + sb.Append("// "+j.name); + INC(indent); + + type := j.joinType; + joinType := "new "+ + type.Name(class.module, MetaData.typeClassJava)+"("+ + QuotedString(type.targetModule)+", "+ + QuotedString(type.targetName)+", null)"; + + Ln; + sb.Append('j = new Join('+ + QuotedString(j.name)+", "+ + QuotedString(j.label)+", "+ + QuotedString(j.shortLabel)+", "+ + joinType+");"); + Ln; + sb.Append("t.addColumn(j);"); + Ln; + varName := (te.Name(class.module, + MetaData.tableExprJavaGeneratedClassName)+"."+ + j.Name(MetaData.columnJavaMemberAttrType)); + sb.Append(varName+" = j;"); + + fixupStatm.Append(varName+".getJoinType().setTarget("+ + TableOfClass(type.targetClass)+");"); + WITH type: MetaData.ReferenceJoin DO + fix := NEW(StringBuffer.StringBuffer, 512); + fix.Append("((ReferenceJoin)"); + fix.Append(varName); + fix.Append(".getJoinType()).fixupReference("); + fix.Append(QuotedString(type.masterReference.name)); + fix.Append(", "); + IF (type.sortFields = NIL) THEN + fix.Append("null"); + ELSE + fix.Append("new String[] {"); + FOR i := 0 TO LEN(type.sortFields^)-1 DO + IF (i # 0) THEN + fix.Append(", "); + END; + fix.Append(QuotedString(type.sortFields[i].name)); + END; + fix.Append("}"); + END; + fix.Append(");"); + fixupStatm.Append(fix.ToString()); + ELSE + (* ignore *) + END; + + IF (j.description # NIL) THEN + Ln; + sb.Append("j.setDescriptionHtml("+ + QuotedString(j.description.ToXml())+");"); + END; + + DEC(indent); + Ln; + sb.Append("//"); + END AddJoin; + PROCEDURE AddConstraint(class: MetaData.Class; c: MetaData.Constraint); VAR name, fct: STRING; @@ -2899,7 +3015,7 @@ WITH col: MetaData.Field DO AddField(col); | col: MetaData.Join DO - (* ... FIXME, need to add this data to Java run-time as well *) + AddJoin(col); END; END; |