01: /*
02: * Copyright 2006 Le Duc Bao, Ralf Joachim
03: *
04: * Licensed under the Apache License, Version 2.0 (the "License"); you may not
05: * use this file except in compliance with the License. You may obtain a copy of
06: * the License at
07: *
08: * http://www.apache.org/licenses/LICENSE-2.0
09: *
10: * Unless required by applicable law or agreed to in writing, software
11: * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12: * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13: * License for the specific language governing permissions and limitations under
14: * the License.
15: */
16: package org.castor.ddlgen.engine.postgresql;
17:
18: import java.text.MessageFormat;
19:
20: import org.castor.ddlgen.DDLGenConfiguration;
21: import org.castor.ddlgen.DDLWriter;
22: import org.castor.ddlgen.keygenerator.SequenceKeyGenerator;
23: import org.castor.ddlgen.keygenerator.SequenceKeyGeneratorFactory;
24: import org.castor.ddlgen.schemaobject.KeyGenerator;
25:
26: /**
27: * Factory class for SEQUENCE key generators for PostgreSQL.
28: *
29: * @author <a href="mailto:leducbao AT gmail DOT com">Le Duc Bao</a>
30: * @author <a href="mailto:ralf DOT joachim AT syscon DOT eu">Ralf Joachim</a>
31: * @version $Revision: 5951 $ $Date: 2006-04-25 16:09:10 -0600 (Tue, 25 Apr 2006) $
32: * @since 1.1
33: */
34: public final class PostgresqlSequenceKeyGeneratorFactory extends
35: SequenceKeyGeneratorFactory {
36: /**
37: * {@inheritDoc}
38: */
39: public void toCreateDDL(final KeyGenerator key,
40: final DDLWriter writer) {
41: SequenceKeyGenerator sequenceKey = (SequenceKeyGenerator) key;
42: String tableName = sequenceKey.getTable().getName();
43: String pkList = toPrimaryKeyList(key.getTable());
44: String pkTypeList = toPrimaryKeyTypeList(key.getTable());
45: String sequenceName = MessageFormat.format(sequenceKey
46: .getSequence(), new Object[] { tableName, pkList });
47:
48: writer.println();
49: writer.println();
50: writer.print("CREATE SEQUENCE ");
51: writer.println(sequenceName);
52: writer.print("INCREMENT 1 MAXVALUE ");
53: writer.print(Integer.MAX_VALUE);
54: writer.print(" START 1");
55: writer.println(DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER);
56:
57: if (sequenceKey.isTrigger()) {
58: String triggerName = null;
59: if (sequenceName.matches(".*SEQ.*")) {
60: triggerName = sequenceName.replaceAll("SEQ", "TRG");
61: } else {
62: triggerName = "TRG" + sequenceName;
63: }
64:
65: DDLGenConfiguration conf = sequenceKey.getConfiguration();
66: String triggerTemp = conf.getStringValue(
67: DDLGenConfiguration.TRIGGER_TEMPLATE_KEY, "");
68:
69: triggerTemp = triggerTemp.replaceAll("<trigger_name>",
70: triggerName);
71: triggerTemp = triggerTemp.replaceAll("<sequence_name>",
72: sequenceName);
73: triggerTemp = triggerTemp.replaceAll("<table_name>",
74: tableName);
75: triggerTemp = triggerTemp.replaceAll("<pk_name>", pkList);
76: triggerTemp = triggerTemp.replaceAll("<pk_type>",
77: pkTypeList);
78:
79: writer.println();
80: writer.println();
81: writer.println(triggerTemp);
82: }
83: }
84:
85: /**
86: * {@inheritDoc}
87: */
88: public void toDropDDL(final KeyGenerator key, final DDLWriter writer) {
89: }
90: }
|