TermUpdater_312_313
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / database / update / MapTableCreator.java
1 /**
2 *
3 */
4 package eu.etaxonomy.cdm.database.update;
5
6 import java.util.ArrayList;
7 import java.util.List;
8
9 import org.apache.commons.lang.StringUtils;
10
11 /**
12 * @author a.mueller
13 *
14 */
15 public class MapTableCreator extends TableCreator {
16
17 private String firstTableName;
18 private String firstTableAlias;
19 private String secondTableAlias;
20 private String secondTableName;
21 private String mapKeyTableName;
22
23 public static MapTableCreator NewMapTableInstance(String stepName, String firstTableName, String firstTableAlias, String secondTableName, String secondTableAlias, String mapKeyTableName, boolean includeAudTable){
24 MapTableCreator result = new MapTableCreator(stepName, firstTableName, firstTableAlias, secondTableName, secondTableAlias, mapKeyTableName, includeAudTable);
25 return result;
26 }
27
28
29 protected MapTableCreator(String stepName, String firstTableName, String firstTableAlias, String secondTableName, String secondTableAlias, String mapKeyTableName, boolean includeAudTable) {
30 super(stepName, firstTableName + "_" + secondTableName, new ArrayList<String>(), new ArrayList<String>(), new ArrayList<Object>(), new ArrayList<Boolean>(), new ArrayList<String>(), includeAudTable, false, false);
31 this.firstTableName = firstTableName;
32 this.secondTableName = secondTableName;
33 this.firstTableAlias = (firstTableAlias != null )? firstTableAlias : firstTableName ;
34 this.secondTableAlias = (secondTableAlias != null)? secondTableAlias : secondTableName ;
35 this.mapKeyTableName = mapKeyTableName;
36 addMyColumns();
37 }
38
39
40 protected void addMyColumns(){
41 this.columnAdders.add(ColumnAdder.NewIntegerInstance(stepName, tableName, getFirstIdColumn(), false, true, firstTableName));
42 this.columnAdders.add(ColumnAdder.NewIntegerInstance(stepName, tableName, getSecondIdColumn(), false, true, secondTableName));
43 this.columnAdders.add(ColumnAdder.NewIntegerInstance(stepName, tableName, getMapKeyColumn(), false, true, mapKeyTableName));
44 }
45
46 protected String primaryKey(boolean isAudit){
47 String result = "";
48 if (! isAudit){
49 result = getFirstIdColumn() + ",";
50 result += getMapKeyColumn() + ",";
51 }else{
52 result = "REV, " + primaryKey(false) + ",";
53 result += getSecondIdColumn() + ",";
54 }
55 result = StringUtils.chomp(result.trim(), ",");
56 return result;
57 }
58
59 protected String unique(boolean isAudit){
60 if (! isAudit){
61 return getSecondIdColumn();
62 }else{
63 return null;
64 }
65 }
66
67 private String getFirstIdColumn(){
68 return this.firstTableAlias + "_id";
69 }
70
71 private String getSecondIdColumn(){
72 String result = this.secondTableAlias.toLowerCase();
73
74 if (this.secondTableAlias.equalsIgnoreCase(this.secondTableName) ){
75 if (! result.endsWith("s")){
76 result += "s";
77 }
78 }
79 result += "_id";
80 return result;
81 }
82
83 private String getMapKeyColumn(){
84 String result = getSecondIdColumn();
85 result = result.replace("_id", "_mapkey_id");
86 return result;
87 }
88 }