org.eclipse.persistence.tools.schemaframework.TypeDefinition Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of org.eclipse.persistence.core Show documentation
Show all versions of org.eclipse.persistence.core Show documentation
EclipseLink build based upon Git transaction ecdf3c32c4
/*
* Copyright (c) 1998, 2018 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.tools.schemaframework;
import java.util.*;
import java.io.*;
import org.eclipse.persistence.exceptions.*;
import org.eclipse.persistence.internal.sessions.AbstractSession;
/**
*
* Purpose: Allow for Oracle 8 object-relational user defined type to be created.
*
*/
public class TypeDefinition extends DatabaseObjectDefinition {
protected Vector fields;
public TypeDefinition() {
this.fields = new Vector();
}
/**
* PUBLIC:
* Add the field to the type, default sizes are used.
* @param type is the Java class type coresponding to the database type.
*/
public void addField(String fieldName, Class type) {
this.addField(new FieldDefinition(fieldName, type));
}
/**
* PUBLIC:
* Add the field to the type.
* @param type is the Java class type coresponding to the database type.
*/
public void addField(String fieldName, Class type, int fieldSize) {
this.addField(new FieldDefinition(fieldName, type, fieldSize));
}
/**
* PUBLIC:
* Add the field to the type.
* @param type is the Java class type coresponding to the database type.
*/
public void addField(String fieldName, Class type, int fieldSize, int fieldSubSize) {
this.addField(new FieldDefinition(fieldName, type, fieldSize, fieldSubSize));
}
/**
* PUBLIC:
* Add the field to the type to a nested type.
* @param typeName is the name of the nested type.
*/
public void addField(String fieldName, String typeName) {
this.addField(new FieldDefinition(fieldName, typeName));
}
/**
* PUBLIC:
* Add the field to the type.
*/
public void addField(FieldDefinition field) {
this.getFields().addElement(field);
}
/**
* INTERNAL:
* Return the create type statement.
*/
public Writer buildCreationWriter(AbstractSession session, Writer writer) throws ValidationException {
try {
writer.write("CREATE TYPE " + getFullName() + " AS OBJECT (");
for (Enumeration fieldsEnum = getFields().elements(); fieldsEnum.hasMoreElements();) {
FieldDefinition field = (FieldDefinition)fieldsEnum.nextElement();
field.appendTypeString(writer, session);
if (fieldsEnum.hasMoreElements()) {
writer.write(", ");
}
}
writer.write(")");
} catch (IOException ioException) {
throw ValidationException.fileError(ioException);
}
return writer;
}
/**
* INTERNAL:
* Return the drop type statement.
*/
public Writer buildDeletionWriter(AbstractSession session, Writer writer) throws ValidationException {
try {
writer.write("DROP TYPE " + getFullName());
} catch (IOException ioException) {
throw ValidationException.fileError(ioException);
}
return writer;
}
public Vector getFields() {
return fields;
}
public void setFields(Vector fields) {
this.fields = fields;
}
}