001 package org.apache.ojb.broker.metadata.torque;
002
003 /* Copyright 2002-2005 The Apache Software Foundation
004 *
005 * Licensed under the Apache License, Version 2.0 (the "License");
006 * you may not use this file except in compliance with the License.
007 * You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017
018 import org.apache.ojb.broker.metadata.FieldDescriptor;
019
020 import java.sql.Types;
021
022 public class TorqueFieldGenerator {
023
024 private boolean ignoreAutoIncrement;
025
026 public TorqueFieldGenerator(boolean ignoreAutoIncrement) {
027 this.ignoreAutoIncrement = ignoreAutoIncrement;
028 }
029
030 public void generateFieldDescriptors(FieldDescriptor[] descriptors, StringBuffer buffer) {
031 if (descriptors != null) {
032 for (int i = 0; i < descriptors.length; i++) {
033 FieldDescriptor descriptor = descriptors[i];
034 generateFieldDescriptor(descriptor, descriptor.getColumnName(), descriptor.isRequired(), descriptor.isAutoIncrement(), descriptor.isPrimaryKey(), buffer);
035 }
036 }
037 }
038
039 public void generateMappingFieldDescriptors(FieldDescriptor[] descriptors, StringBuffer buffer) {
040 if (descriptors != null) {
041 for (int i = 0; i < descriptors.length; i++) {
042 FieldDescriptor descriptor = descriptors[i];
043 StringBuffer fieldBuffer = new StringBuffer();
044 generateFieldDescriptor(descriptor, descriptor.getColumnName(), true, false, true, fieldBuffer);
045 buffer.append(fieldBuffer);
046 }
047 }
048 }
049
050 private void generateFieldDescriptor(FieldDescriptor descriptor, String fieldName, boolean isRequired, boolean isAutoIncrement, boolean isPrimaryKey, StringBuffer buffer) {
051 buffer.append(" <column name=\"");
052 buffer.append(fieldName);
053 buffer.append("\" required=\"");
054 buffer.append(isRequired || isPrimaryKey);
055 if (!this.ignoreAutoIncrement) {
056 buffer.append("\" autoIncrement=\"");
057 buffer.append(isAutoIncrement);
058 }
059 buffer.append("\" primaryKey=\"");
060 buffer.append(isPrimaryKey);
061 buffer.append("\" type=\"");
062 buffer.append(descriptor.getColumnType());
063
064 generateConstraints(descriptor, buffer);
065
066 buffer.append("\"/>\n");
067 }
068
069 private void generateConstraints(FieldDescriptor descriptor, StringBuffer buffer) {
070 int jdbcType = descriptor.getJdbcType().getType();
071
072 switch (jdbcType) {
073 case Types.BIGINT:
074 case Types.DECIMAL:
075 case Types.DOUBLE:
076 case Types.FLOAT:
077 // case Types.INTEGER:
078 case Types.NUMERIC:
079 case Types.REAL:
080 case Types.SMALLINT:
081 case Types.TINYINT:
082 if (descriptor.isPrecisionSpecified()) {
083 buffer.append("\" precision=\"");
084 buffer.append(descriptor.getPrecision());
085 }
086 if (descriptor.isScaleSpecified()) {
087 buffer.append("\" scale=\"");
088 buffer.append(descriptor.getScale());
089 }
090 break;
091 default:
092 if (descriptor.isLengthSpecified()) {
093 buffer.append("\" size=\"");
094 buffer.append(descriptor.getLength());
095 }
096 }
097 }
098
099 }