Merge branch 'release/5.45.0'
[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.lang3.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 secondTableName;
20 private String secondTableAlias;
21 private String mapKeyTableName;
22
23 public static MapTableCreator NewMapTableInstance(List<ISchemaUpdaterStep> stepList, String stepName, String firstTableName, String firstTableAlias, String secondTableName, String secondTableAlias, String mapKeyTableName, boolean includeAudTable){
24 MapTableCreator result = new MapTableCreator(stepList, stepName, firstTableName, firstTableAlias, secondTableName, secondTableAlias, mapKeyTableName, includeAudTable);
25 return result;
26 }
27
28
29 protected MapTableCreator(List<ISchemaUpdaterStep> stepList, String stepName, String firstTableName, String firstTableAlias, String secondTableName, String secondTableAlias, String mapKeyTableName, boolean includeAudTable) {
30 this(stepList, stepName, firstTableName + "_" + StringUtils.capitalize(secondTableAlias), firstTableName, firstTableAlias, secondTableName, secondTableAlias, mapKeyTableName, includeAudTable);
31 }
32
33 protected MapTableCreator(List<ISchemaUpdaterStep> stepList, String stepName, String MN_tableName, String firstTableName, String firstTableAlias, String secondTableName, String secondTableAlias, String mapKeyTableName, boolean includeAudTable) {
34 super(stepList, stepName, MN_tableName, new ArrayList<>(), new ArrayList<>(), new ArrayList<Object>(), new ArrayList<Boolean>(), new ArrayList<String>(), includeAudTable, false, false, false, false, false);
35 this.firstTableName = firstTableName;
36 this.secondTableName = secondTableName;
37 this.firstTableAlias = (firstTableAlias != null )? firstTableAlias : firstTableName ;
38 this.secondTableAlias = (secondTableAlias != null)? secondTableAlias : secondTableName ;
39 this.mapKeyTableName = mapKeyTableName;
40 addMyColumns();
41 }
42
43
44 protected void addMyColumns(){
45 ColumnAdder.NewIntegerInstance(columnAdders, stepName, tableName, getFirstIdColumn(), false, true, firstTableName);
46 ColumnAdder.NewIntegerInstance(columnAdders, stepName, tableName, getSecondIdColumn(), false, true, secondTableName);
47 ColumnAdder.NewIntegerInstance(columnAdders, stepName, tableName, getMapKeyColumn(), false, true, mapKeyTableName);
48 }
49
50 @Override
51 protected String primaryKey(boolean isAudit){
52 String result = "";
53 if (! isAudit){
54 result = getFirstIdColumn() + ",";
55 result += getMapKeyColumn() + ",";
56 }else{
57 result = "REV, " + primaryKey(false) + ",";
58 result += getSecondIdColumn() + ",";
59 }
60 result = StringUtils.chomp(result.trim(), ",");
61 return result;
62 }
63
64 @Override
65 protected String unique(boolean isAudit){
66 if (! isAudit){
67 return getSecondIdColumn();
68 }else{
69 return null;
70 }
71 }
72
73 private String getFirstIdColumn(){
74 return this.firstTableAlias + "_id";
75 }
76
77 private String getSecondIdColumn(){
78 String result = this.secondTableAlias.toLowerCase();
79
80 if (this.secondTableAlias.equalsIgnoreCase(this.secondTableName) ){
81 if (! result.endsWith("s")){
82 result += "s";
83 }
84 }
85 result += "_id";
86 return result;
87 }
88
89 private String getMapKeyColumn(){
90 String result = getSecondIdColumn();
91 result = result.replace("_id", "_mapkey_id");
92 return result;
93 }
94 }