Added statics, visit methods, implemented visit for Function and Procedure.

Signed-off-by: minorman <michael.norman@oracle.com>
diff --git a/src/org/eclipse/persistence/tools/oracleddl/metadata/BaseDatabaseTypeVisitor.java b/src/org/eclipse/persistence/tools/oracleddl/metadata/BaseDatabaseTypeVisitor.java
index da3ba35..16ff181 100644
--- a/src/org/eclipse/persistence/tools/oracleddl/metadata/BaseDatabaseTypeVisitor.java
+++ b/src/org/eclipse/persistence/tools/oracleddl/metadata/BaseDatabaseTypeVisitor.java
@@ -17,144 +17,154 @@
 

 public class BaseDatabaseTypeVisitor implements DatabaseTypeVisitor {

 

-	//scalar visit callbacks

-	public void visit(BinaryType databaseType) {

-	}

-	public void visit(BlobType databaseType) {

-	}

-	public void visit(LongRawType databaseType) {

-	}

-	public void visit(RawType databaseType) {

-	}

-	public void visit(CharType databaseType) {

-	}

-	public void visit(ClobType databaseType) {

-	}

-	public void visit(DecimalType databaseType) {

-	}

-	public void visit(DoubleType databaseType) {

-	}

-	public void visit(FloatType databaseType) {

-	}

-	public void visit(IntervalDayToSecond databaseType) {

-	}

-	public void visit(IntervalYearToMonth databaseType) {

-	}

-	public void visit(NClobType databaseType) {

-	}

-	public void visit(NumericType databaseType) {

-	}

-	public void visit(RealType databaseType) {

-	}

-	public void visit(ScalarDatabaseTypeEnum databaseType) {

-	}

-	public void visit(UnresolvedType databaseType) {

-	}

-	public void visit(UnresolvedSizedType databaseType) {

-	}

-	public void visit(URowIdType databaseType) {

-	}

-	public void visit(VarCharType databaseType) {

-	}

-	public void visit(VarChar2Type databaseType) {

-	}

-	public void visit(LongType databaseType) {

-	}

+    //scalar visit callbacks

+    public void visit(BinaryType databaseType) {

+    }

+    public void visit(BlobType databaseType) {

+    }

+    public void visit(LongRawType databaseType) {

+    }

+    public void visit(RawType databaseType) {

+    }

+    public void visit(CharType databaseType) {

+    }

+    public void visit(ClobType databaseType) {

+    }

+    public void visit(DecimalType databaseType) {

+    }

+    public void visit(DoubleType databaseType) {

+    }

+    public void visit(FloatType databaseType) {

+    }

+    public void visit(IntervalDayToSecond databaseType) {

+    }

+    public void visit(IntervalYearToMonth databaseType) {

+    }

+    public void visit(NClobType databaseType) {

+    }

+    public void visit(NumericType databaseType) {

+    }

+    public void visit(RealType databaseType) {

+    }

+    public void visit(ScalarDatabaseTypeEnum databaseType) {

+    }

+    public void visit(UnresolvedType databaseType) {

+    }

+    public void visit(UnresolvedSizedType databaseType) {

+    }

+    public void visit(URowIdType databaseType) {

+    }

+    public void visit(VarCharType databaseType) {

+    }

+    public void visit(VarChar2Type databaseType) {

+    }

+    public void visit(LongType databaseType) {

+    }

 

-	//composite visit callbacks

-	public void beginVisit(ArgumentType databaseType) {

-	}

-	public void visit(ArgumentType databaseType) {

-		beginVisit(databaseType);

-		DatabaseType dt = databaseType.getDataType();

-		if (dt != null) {

-			dt.accept(this);

-		}

-		endVisit(databaseType);

-	}

-	public void endVisit(ArgumentType databaseType) {

-	}

-	

-	public void beginVisit(FieldType databaseType) {

-	}

-	public void visit(FieldType databaseType) {

-		beginVisit(databaseType);

-		DatabaseType dt = databaseType.getDataType();

-		if (dt != null) {

-			dt.accept(this);

-		}

-		endVisit(databaseType);

-	}

-	public void endVisit(FieldType databaseType) {

-	}

+    //composite visit callbacks

+    public void beginVisit(ArgumentType databaseType) {

+    }

+    public void visit(ArgumentType databaseType) {

+        beginVisit(databaseType);

+        DatabaseType dt = databaseType.getDataType();

+        if (dt != null) {

+            dt.accept(this);

+        }

+        endVisit(databaseType);

+    }

+    public void endVisit(ArgumentType databaseType) {

+    }

+    

+    public void beginVisit(FieldType databaseType) {

+    }

+    public void visit(FieldType databaseType) {

+        beginVisit(databaseType);

+        DatabaseType dt = databaseType.getDataType();

+        if (dt != null) {

+            dt.accept(this);

+        }

+        endVisit(databaseType);

+    }

+    public void endVisit(FieldType databaseType) {

+    }

 

-	public void beginVisit(PLSQLCursorType databaseType) {

-	}

-	public void visit(PLSQLCursorType databaseType) {

-		beginVisit(databaseType);

-		DatabaseType dt = databaseType.getDataType();

-		if (dt != null) {

-			dt.accept(this);

-		}

-		endVisit(databaseType);

-	}

-	public void endVisit(PLSQLCursorType databaseType) {

-	}

+    public void beginVisit(PLSQLCursorType databaseType) {

+    }

+    public void visit(PLSQLCursorType databaseType) {

+        beginVisit(databaseType);

+        DatabaseType dt = databaseType.getDataType();

+        if (dt != null) {

+            dt.accept(this);

+        }

+        endVisit(databaseType);

+    }

+    public void endVisit(PLSQLCursorType databaseType) {

+    }

 

-	public void beginVisit(PLSQLPackageType databaseType) {

-	}

-	public void visit(PLSQLPackageType databaseType) {

-		beginVisit(databaseType);

-		//TODO

-		endVisit(databaseType);

-	}

-	public void endVisit(PLSQLPackageType databaseType) {

-	}

+    public void beginVisit(PLSQLPackageType databaseType) {

+    }

+    public void visit(PLSQLPackageType databaseType) {

+        beginVisit(databaseType);

+        //TODO

+        endVisit(databaseType);

+    }

+    public void endVisit(PLSQLPackageType databaseType) {

+    }

 

-	public void beginVisit(PLSQLRecordType databaseType) {

-	}

-	public void visit(PLSQLRecordType databaseType) {

-		//TODO

-	}

-	public void endVisit(PLSQLRecordType databaseType) {

-	}

+    public void beginVisit(PLSQLRecordType databaseType) {

+    }

+    public void visit(PLSQLRecordType databaseType) {

+        //TODO

+    }

+    public void endVisit(PLSQLRecordType databaseType) {

+    }

 

-	public void beginVisit(PLSQLCollectionType databaseType) {

-	}

-	public void visit(PLSQLCollectionType databaseType) {

-		//TODO

-	}

-	public void endVisit(PLSQLCollectionType databaseType) {

-	}

+    public void beginVisit(PLSQLCollectionType databaseType) {

+    }

+    public void visit(PLSQLCollectionType databaseType) {

+        //TODO

+    }

+    public void endVisit(PLSQLCollectionType databaseType) {

+    }

 

-	public void beginVisit(ProcedureType databaseType) {

-	}

-	public void visit(ProcedureType databaseType) {

-		//TODO

-	}

-	public void endVisit(ProcedureType databaseType) {

-	}

+    public void beginVisit(ProcedureType databaseType) {

+    }

+    public void visit(ProcedureType databaseType) {

+        beginVisit(databaseType);

+        List<ArgumentType> arguments = databaseType.getArguments();

+        for (ArgumentType argument : arguments) {

+            argument.accept(this);

+        }

+        endVisit(databaseType);

+    }

+    public void endVisit(ProcedureType databaseType) {

+    }

 

-	public void beginVisit(FunctionType databaseType) {

-	}

-	public void visit(FunctionType databaseType) {

-		//TODO

-	}

-	public void endVisit(FunctionType databaseType) {

-	}

+    public void beginVisit(FunctionType databaseType) {

+    }

+    public void visit(FunctionType databaseType) {

+        beginVisit(databaseType);

+        List<ArgumentType> arguments = databaseType.getArguments();

+        for (ArgumentType argument : arguments) {

+            argument.accept(this);

+        }

+        endVisit(databaseType);

+    }

+    public void endVisit(FunctionType databaseType) {

+    }

 

-	public void beginVisit(TableType databaseType) {

-	}

-	public void visit(TableType databaseType) {

-		beginVisit(databaseType);

-		List<FieldType> columns = databaseType.getColumns();

-		for (FieldType column : columns) {

-			column.accept(this);

-		}

-		endVisit(databaseType);

-	}

-	public void endVisit(TableType databaseType) {

-	}

+    public void beginVisit(TableType databaseType) {

+    }

+    public void visit(TableType databaseType) {

+        beginVisit(databaseType);

+        List<FieldType> columns = databaseType.getColumns();

+        for (FieldType column : columns) {

+            column.accept(this);

+        }

+        endVisit(databaseType);

+    }

+    public void endVisit(TableType databaseType) {

+    }

 

     public void beginVisit(ObjectType databaseType) {

     }

diff --git a/src/org/eclipse/persistence/tools/oracleddl/metadata/BlobType.java b/src/org/eclipse/persistence/tools/oracleddl/metadata/BlobType.java
index 0040164..dacf9fa 100644
--- a/src/org/eclipse/persistence/tools/oracleddl/metadata/BlobType.java
+++ b/src/org/eclipse/persistence/tools/oracleddl/metadata/BlobType.java
@@ -14,13 +14,14 @@
 

 public class BlobType extends SizedType implements DatabaseTypeVisitable {

 

+    static final String TYPENAME = "BLOB";

 	static long DEFAULT_SIZE = 0l;

 	

     public BlobType() {

-        super("BLOB", DEFAULT_SIZE);

+        super(TYPENAME, DEFAULT_SIZE);

     }

     public BlobType(long size) {

-        super("BLOB", size);

+        super(TYPENAME, size);

     }

 	public BlobType(String typeName, long size) {

         super(typeName, size);

diff --git a/src/org/eclipse/persistence/tools/oracleddl/metadata/ClobType.java b/src/org/eclipse/persistence/tools/oracleddl/metadata/ClobType.java
index d7057fb..43d60f0 100644
--- a/src/org/eclipse/persistence/tools/oracleddl/metadata/ClobType.java
+++ b/src/org/eclipse/persistence/tools/oracleddl/metadata/ClobType.java
@@ -14,13 +14,14 @@
 

 public class ClobType extends SizedType implements DatabaseTypeVisitable {

 

+    static final String TYPENAME = "CLOB";

 	static final long DEFAULT_SIZE = 0l;

 	

     public ClobType() {

-        super("CLOB", DEFAULT_SIZE);

+        super(TYPENAME, DEFAULT_SIZE);

     }

     public ClobType(long size) {

-        super("CLOB", size);

+        super(TYPENAME, size);

     }

 	public ClobType(String typeName, long size) {

         super(typeName, size);

diff --git a/src/org/eclipse/persistence/tools/oracleddl/metadata/FunctionType.java b/src/org/eclipse/persistence/tools/oracleddl/metadata/FunctionType.java
index 45427e5..a9cfb27 100644
--- a/src/org/eclipse/persistence/tools/oracleddl/metadata/FunctionType.java
+++ b/src/org/eclipse/persistence/tools/oracleddl/metadata/FunctionType.java
@@ -28,9 +28,37 @@
 		this.returnArgument = returnArgument;

 	}

 

+    @Override

+    public String toString() {

+        StringBuilder sb = new StringBuilder("FUNCTION ");

+        if (schema != null) {

+            sb.append(schema);

+            sb.append(".");

+        }

+        sb.append(procedureName);

+        sb.append(" (");

+        for (int i=0; i<arguments.size();) {

+            ArgumentType arg = arguments.get(i);

+            sb.append(arg.argumentName);

+            if (arg.optional) {

+                sb.append("(opt) ");

+            } else {

+                sb.append(" ");

+            }

+            sb.append(arg.getDirection());

+            sb.append(" ");

+            sb.append(arg.getDataType());

+            if (++i < arguments.size()) {

+                sb.append(", ");

+            }

+        }

+        sb.append(") RETURN ");

+        sb.append(returnArgument.getTypeName());

+        return sb.toString();

+    }

+

 	@Override

 	public void accept(DatabaseTypeVisitor visitor) {

 		visitor.visit(this);

 	}

-

 }

diff --git a/src/org/eclipse/persistence/tools/oracleddl/metadata/LongRawType.java b/src/org/eclipse/persistence/tools/oracleddl/metadata/LongRawType.java
index 1127db8..61084a9 100644
--- a/src/org/eclipse/persistence/tools/oracleddl/metadata/LongRawType.java
+++ b/src/org/eclipse/persistence/tools/oracleddl/metadata/LongRawType.java
@@ -13,12 +13,17 @@
 package org.eclipse.persistence.tools.oracleddl.metadata;

 

 public class LongRawType extends BlobType {

+    

+    static final String TYPENAME = "LONG RAW";

 

     public LongRawType() {

-        super("LONG RAW", BlobType.DEFAULT_SIZE);

+        super(TYPENAME, BlobType.DEFAULT_SIZE);

     }

     public LongRawType(long size) {

-        super("LONG RAW", size);

+        super(TYPENAME, size);

+    }

+    public void accept(DatabaseTypeVisitor visitor) {

+        visitor.visit(this);

     }

 

 }
\ No newline at end of file
diff --git a/src/org/eclipse/persistence/tools/oracleddl/metadata/LongType.java b/src/org/eclipse/persistence/tools/oracleddl/metadata/LongType.java
index 976a201..746bbfa 100644
--- a/src/org/eclipse/persistence/tools/oracleddl/metadata/LongType.java
+++ b/src/org/eclipse/persistence/tools/oracleddl/metadata/LongType.java
@@ -14,11 +14,13 @@
 

 public class LongType extends VarChar2Type {

 

+    static final String TYPENAME = "LONG";

+

     public LongType() {

-        super("LONG", VarCharType.DEFAULT_SIZE);

+        super(TYPENAME, VarCharType.DEFAULT_SIZE);

     }

     public LongType(long size) {

-        super("LONG", size);

+        super(TYPENAME, size);

     }

 	

 	@Override

diff --git a/src/org/eclipse/persistence/tools/oracleddl/metadata/NCharType.java b/src/org/eclipse/persistence/tools/oracleddl/metadata/NCharType.java
index 95c9abd..6e17b3e 100644
--- a/src/org/eclipse/persistence/tools/oracleddl/metadata/NCharType.java
+++ b/src/org/eclipse/persistence/tools/oracleddl/metadata/NCharType.java
@@ -15,7 +15,6 @@
 public class NCharType extends CharType {

 

 	static final String TYPENAME = "NCHAR";

-	static final long DEFAULT_SIZE = 1l;

 	

     public NCharType() {

         super(TYPENAME, DEFAULT_SIZE);

diff --git a/src/org/eclipse/persistence/tools/oracleddl/metadata/NClobType.java b/src/org/eclipse/persistence/tools/oracleddl/metadata/NClobType.java
index 031ac41..b74677e 100644
--- a/src/org/eclipse/persistence/tools/oracleddl/metadata/NClobType.java
+++ b/src/org/eclipse/persistence/tools/oracleddl/metadata/NClobType.java
@@ -14,10 +14,10 @@
 

 public class NClobType extends ClobType {

 

-	static long DEFAULT_SIZE = 0l;

-	

+    static final String TYPENAME = "NCLOB";

+

     public NClobType() {

-        super("NCLOB", DEFAULT_SIZE);

+        super(TYPENAME, DEFAULT_SIZE);

     }

 

 	@Override

diff --git a/src/org/eclipse/persistence/tools/oracleddl/metadata/ProcedureType.java b/src/org/eclipse/persistence/tools/oracleddl/metadata/ProcedureType.java
index 31bcf37..6987bb2 100644
--- a/src/org/eclipse/persistence/tools/oracleddl/metadata/ProcedureType.java
+++ b/src/org/eclipse/persistence/tools/oracleddl/metadata/ProcedureType.java
@@ -49,7 +49,7 @@
 

 	@Override

 	public void addCompositeType(DatabaseType enclosedType) {

-		//TODO

+	    arguments.add((ArgumentType)enclosedType);

 	}

 

     @Override

@@ -60,8 +60,23 @@
             sb.append(".");

         }

         sb.append(procedureName);

-        sb.append(" (\n");

-        

+        sb.append(" (");

+        for (int i=0; i<arguments.size();) {

+            ArgumentType arg = arguments.get(i);

+            sb.append(arg.argumentName);

+            if (arg.optional) {

+                sb.append("(opt) ");

+            } else {

+                sb.append(" ");

+            }

+            sb.append(arg.getDirection());

+            sb.append(" ");

+            sb.append(arg.getDataType());

+            if (++i < arguments.size()) {

+                sb.append(", ");

+            }

+        }

+        sb.append(")");

         return sb.toString();

     }

 

diff --git a/src/org/eclipse/persistence/tools/oracleddl/metadata/RawType.java b/src/org/eclipse/persistence/tools/oracleddl/metadata/RawType.java
index 2bccecf..b7a8641 100644
--- a/src/org/eclipse/persistence/tools/oracleddl/metadata/RawType.java
+++ b/src/org/eclipse/persistence/tools/oracleddl/metadata/RawType.java
@@ -14,11 +14,16 @@
 

 public class RawType extends BlobType {

 

+    static final String TYPENAME = "RAW";

+

     public RawType() {

-        super("RAW", BlobType.DEFAULT_SIZE);

+        super(TYPENAME, BlobType.DEFAULT_SIZE);

     }

     public RawType(long size) {

-        super("RAW", size);

+        super(TYPENAME, size);

+    }

+    public void accept(DatabaseTypeVisitor visitor) {

+        visitor.visit(this);

     }

 	

 }
\ No newline at end of file
diff --git a/src/org/eclipse/persistence/tools/oracleddl/metadata/URowIdType.java b/src/org/eclipse/persistence/tools/oracleddl/metadata/URowIdType.java
index 51df037..44f6f25 100644
--- a/src/org/eclipse/persistence/tools/oracleddl/metadata/URowIdType.java
+++ b/src/org/eclipse/persistence/tools/oracleddl/metadata/URowIdType.java
@@ -14,13 +14,14 @@
 

 public class URowIdType extends SizedType implements DatabaseTypeVisitable {

 	

+    static final String TYPENAME = "UROWID";

 	static long DEFAULT_SIZE = 4000l;

 

     public URowIdType() {

-        super("UROWID", DEFAULT_SIZE);

+        super(TYPENAME, DEFAULT_SIZE);

     }

     public URowIdType(long size) {

-        super("UROWID", size);

+        super(TYPENAME, size);

     }

     

 	@Override

diff --git a/src/org/eclipse/persistence/tools/oracleddl/metadata/VarCharType.java b/src/org/eclipse/persistence/tools/oracleddl/metadata/VarCharType.java
index ce25ca7..887b35f 100644
--- a/src/org/eclipse/persistence/tools/oracleddl/metadata/VarCharType.java
+++ b/src/org/eclipse/persistence/tools/oracleddl/metadata/VarCharType.java
@@ -14,13 +14,14 @@
 

 public class VarCharType extends SizedType implements DatabaseTypeVisitable {

 

+    static final String TYPENAME = "VARCHAR";

 	static long DEFAULT_SIZE = 1l;

 

     public VarCharType() {

-        super("VARCHAR", DEFAULT_SIZE);

+        super(TYPENAME, DEFAULT_SIZE);

     }

     public VarCharType(long size) {

-        super("VARCHAR", size);

+        super(TYPENAME, size);

     }

     

 	@Override