
org.tentackle.persist.wurblet.MethodsImpl Maven / Gradle / Ivy
// wurblet generated by Wurbelizer 21.6.0.0, see https://wurbelizer.org
package org.tentackle.persist.wurblet;
import org.tentackle.wurblet.*;
import org.tentackle.buildsupport.*;
import java.util.*;
import java.io.*;
import org.tentackle.common.*;
import org.wurbelizer.wurbel.*;
import org.tentackle.sql.*;
import org.tentackle.model.*;
import org.wurbelizer.wurblet.*;
/**
* ({@code @wurblet}) Generate getters, setters and other methods for an entity.
*
* usage:
* @wurblet <tag> MethodsImpl [--noif] [--noudk] [--noisroot] [--mock]
*
* arguments:
*
* - --noif: there is no interface (don't generate @Override).
* - --noudk: don't generate selectByUniqueDomainKey wurblet anchor.
* - --noisroot: don't generate isRootEntity() method.
* - --mock: generate code for mock object.
*
* For more options, see {@link DbModelWurblet}.
*/
public class MethodsImpl extends DbModelWurblet {
@Override
public void run() throws WurbelException {
super.run();
try {
wurbel();
}
catch (Throwable t) {
if (t instanceof WurbelException) {
throw (WurbelException) t;
}
throw new WurbelException("wurblet " + this + " failed", t);
}
}
// ----------------- begin wurblet code -----------------
private void wurbel() throws WurbelException, ModelException {
// main class
String mainClass = getClassName();
String pdoClass = null;
boolean isPdo;
try {
pdoClass = getPdoClassName();
isPdo = true;
}
catch (WurbelException we) {
isPdo = false;
}
boolean noif = false;
boolean generateSnapshot = false;
boolean generateSelectByUDK = true;
boolean generateIsRoot = true;
boolean generateMock = false;
int argcount = 0;
for (String arg: getOptionArgs()) {
if ("noif".equals(arg)) {
noif = true;
}
else if ("noudk".equals(arg)) {
generateSelectByUDK = false;
}
else if ("noisroot".equals(arg)) {
generateIsRoot = false;
}
else if ("mock".equals(arg)) {
generateMock = true;
}
}
boolean generateCreateNormText = false;
boolean generatePresetVirgin = false;
for (Attribute attr: getEntity().getAttributes()) {
if (attr.getOptions().isPartOfNormText()) {
generateCreateNormText = true;
}
if (attr.getOptions().getNewValue() != null) {
generatePresetVirgin = true;
}
}
if (!generateCreateNormText) {
for (Attribute attr: getEntity().getEmbeddedAttributes()) {
if (attr.getOptions().isPartOfNormText()) {
generateCreateNormText = true;
break;
}
}
}
if (!generateMock) {
if (isRemote()) {
new RemoteIncludes(this); // create RMI-files if they don't exist yet
String delegateType = (isPdo() ? pdoClass : mainClass) + "RemoteDelegate";
if (getEntity().isAbstract()) {
delegateType += "";
}
out.print(source[0]); // 80:2 = " @Override public "
out.print(delegateType);
out.print(source[1]); // 83:25 = " getRemoteDelegate() { return ("
out.print(delegateType);
out.print(source[2]); // 84:28 = ") super.getRemoteDelegate(); }"
}
if (getEntity().isAbstract()) {
if (getEntity().getInheritanceType() == InheritanceType.MULTI) {
out.print(source[3]); // 91:2 = " @Override public boolean isExplicit..."
}
}
if (getEntity().getSuperEntity() != null &&
(getEntity().getHierarchyInheritanceType() == InheritanceType.SINGLE || getEntity().getHierarchyInheritanceType() == InheritanceType.MULTI)) {
List leafs = getEntity().getLeafEntities();
if (!leafs.isEmpty()) {
int[] classIds = new int[leafs.size()];
int ndx = 0;
for (Entity leaf : leafs) {
classIds[ndx++] = leaf.getClassId();
}
Arrays.sort(classIds); // predictable order
StringBuilder buf = new StringBuilder();
boolean needComma = false;
for (int classId : classIds) {
if (needComma) {
buf.append(", ");
}
else {
needComma = true;
}
buf.append(classId);
}
out.print(source[4]); // 122:2 = " private static final List VA..."
out.print(buf);
out.print(source[5]); // 124:70 = "); @Override public List g..."
}
}
boolean multiInheritance = getEntity().getHierarchyInheritanceType() == InheritanceType.MULTI;
boolean readOnly = getEntity().getOptions().isReadOnly();
if (readOnly) {
out.print(source[6]); // 138:2 = " @Override public boolean isImmutabl..."
}
if (getEntity().getSuperEntity() == null) {
if (generateIsRoot && getEntity().getOptions().isRoot()) {
out.print(source[7]); // 155:2 = " @Override public boolean isRootEnti..."
}
if (getEntity().isEmbedded()) {
out.print(source[8]); // 165:2 = " @Override public boolean isEmbedded..."
}
if (getEntity().getOptions().isTableSerialProvided()) {
out.print(source[9]); // 175:2 = " @Override public boolean isTableSer..."
}
if (getEntity().getOptions().isTokenLockProvided()) {
out.print(source[10]); // 185:2 = " @Override public boolean isTokenLoc..."
}
if (getEntity().getOptions().isNormTextProvided()) {
out.print(source[11]); // 195:2 = " @Override public boolean isNormText..."
}
if (getEntity().getOptions().isRootIdProvided()) {
out.print(source[12]); // 205:2 = " @Override public boolean isRootIdPr..."
}
else if (!getEntity().isEmbedded()) {
Attribute rootAttribute = getEntity().getRootAttribute();
if (rootAttribute != null) {
out.print(source[13]); // 217:2 = " @Override public long getRootId() {..."
out.print(rootAttribute.getName());
out.print(source[14]); // 221:38 = "; }"
}
}
if (getEntity().getOptions().isRootClassIdProvided()) {
out.print(source[15]); // 228:2 = " @Override public boolean isRootClas..."
}
else if (!getEntity().isEmbedded()) {
Entity rootEntity = getEntity().getRootEntity();
if (rootEntity != null) {
out.print(source[16]); // 239:2 = " @Override public int getRootClassId..."
out.print(rootEntity.getClassId());
out.print(source[17]); // 243:38 = "; }"
}
}
if (isTracked()) {
out.print(source[18]); // 250:2 = " @Override public boolean isTracked(..."
}
}
if (isAttracked()) {
out.print(source[19]); // 261:2 = " @Override public void setModified(b..."
for (Attribute attr: getEntity().getAttributes()) {
if (!attr.getOptions().isFromSuper() && !attr.getOptions().isMute()) {
if (isFullTracked()) {
out.print(source[20]); // 271:2 = " "
out.print(attr.getName());
out.print(source[21]); // 272:24 = "Persisted = "
out.print(attr.getName());
out.print(source[22]); // 272:54 = ";"
}
else {
out.print(source[23]); // 276:2 = " "
out.print(attr.getName());
out.print(source[24]); // 277:24 = "Modified = false;"
}
}
}
out.print(source[25]); // 282:2 = " } }"
}
if (isFullTracked()) {
out.print(source[26]); // 290:2 = " @Override public boolean differsPer..."
for (Attribute attr: getEntity().getAttributes()) {
if (!attr.getOptions().isFromSuper() && !attr.getOptions().isMute() &&
!attr.getOptions().isReadOnly() && !isIdOrSerialAttribute(attr)) {
if (attr.getDataType().isPrimitive()) {
out.print(source[27]); // 300:2 = " || "
out.print(attr.getName());
out.print(source[28]); // 301:32 = "Persisted != "
out.print(attr.getName());
out.print(source[29]); // 301:63 = ""
}
else {
out.print(source[30]); // 305:2 = " || !Objects.equals("
out.print(attr.getName());
out.print(source[31]); // 306:48 = "Persisted, "
out.print(attr.getName());
out.print(source[32]); // 306:77 = ")"
}
}
}
out.print(source[33]); // 311:2 = " ; } @Override public b..."
}
if (!getEntity().getInheritanceType().isMappingToNoTable() || getEntity().isEmbedded()) {
if (getEntity().isEmbedded()) {
out.print(source[34]); // 324:2 = " @Override public void configureEmbe..."
for (Relation rel: getEntity().getRelations()) {
if (rel.isEmbedding()) {
out.print(source[35]); // 331:2 = " ((AbstractPersistentObject,?>) "
out.print(rel.getGetterName());
out.print(source[36]); // 332:60 = "().getPersistenceDelegate()).configureEm..."
}
}
for (Attribute attr: getEntity().getMappedAttributes()) {
if (!attr.getOptions().isMute()) {
DataType> effectiveType = getEffectiveDataType(attr);
if (effectiveType.isColumnCountBackendSpecific()) {
out.print(source[37]); // 341:2 = " rs.configureColumns("
out.print(effectiveType.getDataTypeConstant());
out.print(source[38]); // 342:63 = ", getColumnPrefix() + "
out.print(getColumnNameConstant(attr, -1));
out.print(source[39]); // 342:120 = ");"
}
else {
for (int columnIndex = 0; columnIndex < effectiveType.getColumnCount(null); columnIndex++) {
out.print(source[40]); // 347:2 = " rs.configureColumn(getColumnPrefix()..."
out.print(getColumnNameConstant(attr, columnIndex));
out.print(source[41]); // 348:87 = ");"
}
}
}
}
out.print(source[42]); // 354:2 = " }"
}
else {
String orderBy = getEntity().getSorting() != null ? createOrderBy(getDefaultSortKeys()) : null;
if (orderBy != null) {
out.print(source[43]); // 361:2 = " @Override public String orderBy() {..."
out.print(orderBy);
out.print(source[44]); // 366:18 = "; return sql.toString(); }"
}
}
out.print(source[45]); // 372:2 = " @Override public void getFields(Res..."
boolean needConfig = false;
if (!getEntity().isEmbedded()) {
out.print(source[46]); // 381:2 = " super.getFields(rs);"
for (Attribute attr: getEntity().getMappedAttributes()) {
if (!attr.getOptions().isMute()) {
needConfig = true;
break;
}
}
for (Relation rel: getEntity().getRelations()) {
if (rel.isEmbedding()) {
needConfig = true;
break;
}
}
}
if (needConfig) {
out.print(source[47]); // 399:2 = " if (rs.configureSection(CLASSVARIABL..."
for (Relation rel: getEntity().getRelations()) {
if (rel.isEmbedding()) {
out.print(source[48]); // 404:2 = " ((AbstractPersistentObject,?>) "
out.print(rel.getGetterName());
out.print(source[49]); // 405:62 = "().getPersistenceDelegate()).configureEm..."
}
}
for (Attribute attr: getEntity().getMappedAttributes()) {
if (!attr.getOptions().isMute()) {
DataType> effectiveType = getEffectiveDataType(attr);
if (effectiveType.isColumnCountBackendSpecific()) {
out.print(source[50]); // 414:2 = " rs.configureColumns("
out.print(effectiveType.getDataTypeConstant());
out.print(source[51]); // 415:65 = ", "
out.print(getColumnNameConstant(attr, -1));
out.print(source[52]); // 415:102 = ");"
}
else {
for (int columnIndex = 0; columnIndex < effectiveType.getColumnCount(null); columnIndex++) {
out.print(source[53]); // 420:2 = " rs.configureColumn("
out.print(getColumnNameConstant(attr, columnIndex));
out.print(source[54]); // 421:69 = ");"
}
}
}
}
out.print(source[55]); // 427:2 = " }"
}
else if (!getEntity().isEmbedded()) {
out.print(source[56]); // 432:2 = " rs.configureSection(CLASSVARIABLES);..."
for (Relation rel: getEntity().getRelations()) {
if (rel.isEmbedding()) {
out.print(source[57]); // 437:2 = " ((AbstractPersistentObject,?>) "
out.print(rel.getGetterName());
out.print(source[58]); // 438:60 = "().getPersistenceDelegate()).configureEm..."
}
}
}
for (Relation rel: getEntity().getRelations()) {
if (rel.isEmbedding()) {
out.print(source[59]); // 446:2 = " ((AbstractPersistentObject,?>) "
out.print(rel.getGetterName());
out.print(source[60]); // 447:60 = "().getPersistenceDelegate()).getFields(r..."
}
}
for (Attribute attr: getEntity().getMappedAttributes()) {
if (!attr.getOptions().isMute()) {
String name = attr.getName().toUpperCase(Locale.ROOT);
boolean useSetter = isAttributeDerived(attr);
DataType> dataType = getEffectiveDataType(attr);
if (dataType.isPredefined()) {
String getterMethod = createJdbcGetterName(attr);
if ("Binary".equals(attr.getDataType().getJavaType())) {
// Binary getter takes additional buffer size argument
int bufsize = attr.getSize() == null ? 0 : attr.getSize();
if (useSetter) {
out.print(source[61]); // 463:2 = " "
out.print(attr.getSetterName());
out.print(source[62]); // 464:28 = "(rs."
out.print(getterMethod);
out.print(source[63]); // 464:48 = "("
out.print(bufsize);
out.print(source[64]); // 464:60 = "));"
}
else {
out.print(source[65]); // 468:2 = " "
out.print(attr.getName());
out.print(source[66]); // 469:22 = " = rs."
out.print(getterMethod);
out.print(source[67]); // 469:44 = "("
out.print(bufsize);
out.print(source[68]); // 469:56 = ");"
}
}
else {
String rsGetter = "rs." + getterMethod + "(";
boolean needComma = false;
if (attr.getOptions().isWithTimezone()) {
rsGetter += "get" + attr.getMethodNameSuffix() + "TimezoneConfig()";
needComma = true;
}
if (attr.getOptions().isMapNull()) {
if (needComma) {
rsGetter += ", ";
}
rsGetter += "true";
needComma = true;
}
rsGetter += ")";
String modelCode = getModelCode(attr, rsGetter);
if (attr.getOptions().isTrimRead() && attr.getSize() != null) {
modelCode = "StringHelper.trim(" + modelCode + ", " + attr.getSize() + ")";
}
if (useSetter) {
modelCode = attr.getSetterName() + "(" + modelCode + ")";
}
else {
modelCode = attr.getName() + " = " + modelCode;
}
out.print(source[69]); // 501:2 = " "
out.print(modelCode);
out.print(source[70]); // 502:17 = ";"
if (attr.getOptions().isUTC()) {
if (useSetter) {
modelCode = attr.getGetterName() + "()";
}
else {
modelCode = attr.getName();
}
out.print(source[71]); // 511:2 = " if ("
out.print(modelCode);
out.print(source[72]); // 512:21 = " != null) { "
out.print(modelCode);
out.print(source[73]); // 513:19 = ".setUTC(true); }"
}
}
}
else { // application specific type
String rsGetter = "rs.get(" + dataType.getDataTypeConstant() + ", " + attr.getOptions().isMapNull() + ", " + attr.getSize() + ")";
String modelCode = getModelCode(attr, rsGetter);
if (useSetter) {
modelCode = attr.getSetterName() + "(" + modelCode + ")";
}
else {
modelCode = attr.getName() + " = " + modelCode;
}
out.print(source[74]); // 528:2 = " "
out.print(modelCode);
out.print(source[75]); // 529:17 = ";"
}
}
}
out.print(source[76]); // 534:2 = " }"
if (!readOnly) {
if (multiInheritance) {
out.print(source[77]); // 539:2 = " /** * Sets the values of all "
out.print(pdoClass);
out.print(source[78]); // 542:40 = "-columns in the given statement. * ..."
out.print(pdoClass);
out.print(source[79]); // 547:34 = "(PreparedStatementWrapper st) { int ..."
}
else {
if (getEntity().isEmbedded()) {
out.print(source[80]); // 553:2 = " @Override public int setEmbeddedFie..."
}
else {
out.print(source[81]); // 560:2 = " @Override public int setFields(Prep..."
}
}
for (Relation rel: getEntity().getRelations()) {
if (rel.isEmbedding()) {
out.print(source[82]); // 571:2 = " ndx = ((AbstractPersistentObject,?..."
out.print(rel.getGetterName());
out.print(source[83]); // 572:66 = "().getPersistenceDelegate()).setEmbedded..."
}
}
for (Attribute attr: getEntity().getMappedAttributes()) {
if (!attr.getOptions().isMute() && !attr.getOptions().isReadOnly()) {
boolean useGetter = isAttributeDerived(attr);
DataType> dataType = getEffectiveDataType(attr);
if (dataType.isPredefined()) {
String setterName = createJdbcSetterName(dataType);
String modelCode;
if (useGetter) {
modelCode = attr.getGetterName() + "()";
}
else {
modelCode = attr.getName();
}
String jdbcCode = getJdbcCode(attr, modelCode);
if (attr.getOptions().isTrimWrite() && attr.getSize() != null) {
jdbcCode = "StringHelper.trim(" + jdbcCode + ", " + attr.getSize() + ")";
}
jdbcCode = "st." + setterName + "(++ndx, " + jdbcCode;
if (attr.getOptions().isWithTimezone()) {
jdbcCode += ", get" + attr.getMethodNameSuffix() + "TimezoneConfig()";
}
if (attr.getOptions().isMapNull()) {
jdbcCode += ", true)";
}
else {
jdbcCode += ")";
}
out.print(source[84]); // 608:2 = " "
out.print(jdbcCode);
out.print(source[85]); // 609:16 = ";"
// for multi column types, such as BMoney or application specific types
int diff = getEffectiveDataType(attr).getColumnCount(null) - 1;
if (diff == 1) {
out.print(source[86]); // 615:2 = " ndx++;"
}
else if (diff > 1) {
out.print(source[87]); // 620:2 = " ndx += "
out.print(diff);
out.print(source[88]); // 621:19 = ";"
}
}
else { // application specific type
String modelCode;
if (useGetter) {
modelCode = attr.getGetterName() + "()";
}
else {
modelCode = attr.getName();
}
String jdbcCode = "ndx += st.set(" + dataType.getDataTypeConstant() + ", ndx + 1, " +
getJdbcCode(attr, modelCode) + ", " +
attr.getOptions().isMapNull() + ", " + attr.getSize() + ")";
out.print(source[89]); // 636:2 = " "
out.print(jdbcCode);
out.print(source[90]); // 637:16 = ";"
}
}
}
if (multiInheritance && getEntity().getSuperEntity() != null) {
out.print(source[91]); // 644:2 = " st.setLong(++ndx, getId());"
}
out.print(source[92]); // 648:2 = " return ndx; }"
}
}
if (getEntity().getInheritanceType().isMappingToOwnTable() || getEntity().isEmbedded()) {
List attributes = multiInheritance ? getEntity().getTableAttributes().stream().filter(a -> !a.isEmbedded()).toList() :
getEntity().getAttributesIncludingInherited();
List names = new ArrayList<>(); // column name constants CN_...
Map> bsAttrs = new LinkedHashMap<>(); // backend-specific attributes requires special handling
if (!readOnly) {
for (Attribute attr: attributes) {
DataType> effectiveType = getEffectiveDataType(attr);
if (!attr.getOptions().isMute() && !attr.getOptions().isReadOnly()) {
if (effectiveType.isColumnCountBackendSpecific()) {
bsAttrs.put(attr, effectiveType); // remember for later below...
names.add(effectiveType.getDataTypeConstant() + ".createColumnNamesAsString(backend, " + getColumnNameConstant(attr, -1) + ", Backend.SQL_COMMA)");
}
else {
for (int columnIndex = 0; columnIndex < effectiveType.getColumnCount(null); columnIndex++) {
names.add(getColumnNameConstant(attr, columnIndex));
}
}
}
}
if (multiInheritance) {
out.print(source[93]); // 678:2 = " /** * Creates the SQL code for the..."
out.print(pdoClass);
out.print(source[94]); // 681:46 = " insert statement. * * @return the..."
out.print(pdoClass);
out.print(source[95]); // 685:43 = "(Backend backend) {"
}
else {
out.print(source[96]); // 689:2 = " @Override public String createInser..."
}
if (getEntity().isEmbedded()) {
out.print(source[97]); // 697:2 = " return"
}
else {
out.print(source[98]); // 702:2 = " return Backend.SQL_INSERT_INTO + "
out.print(multiInheritance ? "CLASSVARIABLES." : "");
out.print(source[99]); // 703:82 = "getTableName() + Backend.SQL_LEFT_PARENT..."
}
for (Relation rel: getEntity().getRelations()) {
if (rel.isEmbedding()) {
out.print(source[100]); // 709:2 = " ((AbstractPersistentObject,..."
out.print(rel.getGetterName());
out.print(source[101]); // 710:67 = "().getPersistenceDelegate()).createInser..."
}
}
int count = 0;
String prefix = getEntity().isEmbedded() ? "getColumnPrefix() + " : "";
for (String name: names) {
String lineSep = count == names.size() - 1 ? (getEntity().isEmbedded() ? " + Backend.SQL_COMMA;" : " +") : " + Backend.SQL_COMMA +";
out.print(source[102]); // 720:2 = " "
out.print(prefix);
out.print(name);
out.print(lineSep);
out.print(source[103]); // 721:40 = ""
count++;
}
if (!getEntity().isEmbedded()) {
out.print(source[104]); // 727:2 = " Backend.SQL_INSERT_VALUES +"
count = names.size() - bsAttrs.size() - 1 + getEmbeddedTableAttributes().size();
if (count == 1) {
out.print(source[105]); // 732:2 = " Backend.SQL_PAR_COMMA +"
}
else if (count > 1) {
out.print(source[106]); // 737:2 = " Backend.SQL_PAR_COMMA.repeat(..."
out.print(count);
out.print(source[107]); // 738:49 = ") +"
}
boolean onlyBsAttrs = count < 0; // only backend-specific datatypes -> subtract 1 from last bs entry
Map, Integer> typeCountMap = new HashMap<>();
for (Map.Entry> entry : bsAttrs.entrySet()) {
DataType> dataType = entry.getValue();
Integer typeCount = typeCountMap.get(dataType);
if (typeCount == null) {
typeCountMap.put(dataType, 1);
}
else {
typeCountMap.put(dataType, typeCount + 1);
}
}
count = 0;
for (Map.Entry, Integer> entry : typeCountMap.entrySet()) {
count++;
DataType> dataType = entry.getKey();
int typeCount = entry.getValue();
String factor = typeCount > 1 ? " * " + typeCount : "";
if (onlyBsAttrs && count >= typeCountMap.size()) {
factor += " - 1";
}
out.print(source[108]); // 764:2 = " Backend.SQL_PAR_COMMA.repeat(..."
out.print(dataType.getDataTypeConstant());
out.print(source[109]); // 765:74 = ".getColumnCount(backend)"
out.print(factor);
out.print(source[110]); // 765:108 = ") +"
}
out.print(source[111]); // 768:2 = " Backend.SQL_PAR + Backend.SQL..."
}
out.print(source[112]); // 772:2 = " }"
names.clear();
for (Attribute attr: attributes) {
DataType> effectiveType = getEffectiveDataType(attr);
if (!attr.getOptions().isMute() && !attr.getOptions().isReadOnly() && !isIdOrSerialAttribute(attr)) {
if (effectiveType.isColumnCountBackendSpecific()) {
names.add(effectiveType.getDataTypeConstant() + ".createColumnNamesAsString(backend, " + getColumnNameConstant(attr, -1) + ", Backend.SQL_EQUAL_PAR_COMMA)");
}
else {
for (int columnIndex = 0; columnIndex < effectiveType.getColumnCount(null); columnIndex++) {
names.add(getColumnNameConstant(attr, columnIndex));
}
}
}
}
if (multiInheritance) {
out.print(source[113]); // 792:2 = " /** * Creates the SQL code for the..."
out.print(pdoClass);
out.print(source[114]); // 795:46 = " update statement. * * @return the..."
out.print(pdoClass);
out.print(source[115]); // 799:43 = "(Backend backend) {"
}
else {
out.print(source[116]); // 803:2 = " @Override public String createUpdat..."
}
if (getEntity().isEmbedded()) {
out.print(source[117]); // 811:2 = " return"
}
else {
out.print(source[118]); // 816:2 = " return Backend.SQL_UPDATE + "
out.print(multiInheritance ? "CLASSVARIABLES." : "");
out.print(source[119]); // 817:77 = "getTableName() + Backend.SQL_SET +"
}
for (Relation rel: getEntity().getRelations()) {
if (rel.isEmbedding()) {
out.print(source[120]); // 823:2 = " ((AbstractPersistentObject,..."
out.print(rel.getGetterName());
out.print(source[121]); // 824:67 = "().getPersistenceDelegate()).createUpdat..."
}
}
boolean checkSerial = !multiInheritance || getEntity().getSuperEntity() == null;
int ncnt = 0;
for (String name: names) {
ncnt++;
if (!checkSerial && ncnt == names.size()) {
out.print(source[122]); // 834:2 = " "
out.print(prefix);
out.print(name);
out.print(source[123]); // 835:29 = " + Backend.SQL_EQUAL_PAR +"
}
else {
String tailStr = getEntity().isEmbedded() && ncnt == names.size() ? ";" : " +";
out.print(source[124]); // 840:2 = " "
out.print(prefix);
out.print(name);
out.print(source[125]); // 841:29 = " + Backend.SQL_EQUAL_PAR_COMMA"
out.print(tailStr);
out.print(source[126]); // 841:70 = ""
}
}
if (!getEntity().isEmbedded()) {
if (ncnt == 0 && !checkSerial) {
// special case: no attributes and no checkserial
out.print(source[127]); // 849:2 = " CN_ID + Backend.SQL_EQUAL + C..."
}
if (checkSerial) {
out.print(source[128]); // 855:2 = " CN_SERIAL + Backend.SQL_EQUAL..."
}
else {
out.print(source[129]); // 862:2 = " Backend.SQL_WHERE + CN_ID + B..."
}
}
out.print(source[130]); // 867:2 = " }"
}
}
if (getEntity().getHierarchyInheritanceType() == InheritanceType.SINGLE && getEntity().getSuperEntity() != null) {
// for all single table inherited subclasses (not the top one)
out.print(source[131]); // 875:2 = " @Override public StringBuilder crea..."
// part 1: all entities starting from topmost to me
Entity topEntity = getEntity().getTopSuperEntity();
List superEntities = topEntity.getInheritanceChain(getEntity());
for (Entity superEntity : superEntities) {
out.print(source[132]); // 887:2 = " names.addAll("
out.print(deriveClassNameForEntity(superEntity));
out.print(source[133]); // 888:63 = ".mappedColumns(backend));"
}
// part 2: all sub entities of me
List subEntities = getEntity().getAllSubEntities();
for (Entity subEntity : subEntities) {
out.print(source[134]); // 894:2 = " names.addAll("
out.print(deriveClassNameForEntity(subEntity));
out.print(source[135]); // 895:61 = ".mappedColumns(backend));"
}
out.print(source[136]); // 898:2 = " return names; })) ..."
}
else if (multiInheritance) {
// create joinable sql selects with table aliases
Entity topEntity = getEntity().getTopSuperEntity();
List chain = topEntity.getInheritanceChain(getEntity());
List subs = orderByInheritanceLevelAndClassId(getEntity().getAllSubEntities());
String topImplClass = deriveClassNameForEntity(topEntity);
if (!readOnly) {
out.print(source[137]); // 917:2 = " /** * Creates the SQL code for the..."
out.print(pdoClass);
out.print(source[138]); // 920:46 = " delete statement. * * @return the..."
out.print(pdoClass);
out.print(source[139]); // 924:43 = "() {"
if (getEntity().isRootOfInheritanceHierarchy()) {
out.print(source[140]); // 927:2 = " return Backend.SQL_DELETE + Backend...."
}
else {
out.print(source[141]); // 934:2 = " return Backend.SQL_DELETE + Backend...."
}
out.print(source[142]); // 939:2 = " }"
}
out.print(source[143]); // 943:2 = " @Override public StringBuilder crea..."
boolean needComma = false;
for (Entity entity: chain) {
String implClass = deriveClassNameForEntity(entity);
if (isMuteOptionSet(entity)) {
out.print(source[144]); // 953:2 = " sql."
out.print(needComma ? "append(Backend.SQL_COMMA)." : "");
out.print(source[145]); // 954:57 = "append("
out.print(implClass);
out.print(source[146]); // 954:77 = ".CLASSVARIABLES.getColumnNames("
out.print(implClass);
out.print(source[147]); // 954:121 = ".mappedColumns(backend)));"
}
else {
out.print(source[148]); // 958:2 = " sql."
out.print(needComma ? "append(Backend.SQL_COMMA)." : "");
out.print(source[149]); // 959:57 = "append("
out.print(implClass);
out.print(source[150]); // 959:77 = ".CLASSVARIABLES.getColumnName(Backend.SQ..."
}
needComma = true;
if (entity == topEntity) {
for (Entity sub: subs) {
implClass = deriveClassNameForEntity(sub);
if (isMuteOptionSet(sub)) {
out.print(source[151]); // 967:2 = " sql.append(Backend.SQL_COMMA).append..."
out.print(implClass);
out.print(source[152]); // 968:54 = ".CLASSVARIABLES.getColumnNames("
out.print(implClass);
out.print(source[153]); // 968:98 = ".mappedColumns(backend)));"
}
else {
out.print(source[154]); // 972:2 = " sql.append(Backend.SQL_COMMA).append..."
out.print(implClass);
out.print(source[155]); // 973:54 = ".CLASSVARIABLES.getColumnName(Backend.SQ..."
}
}
}
}
out.print(source[156]); // 979:2 = " sql.append(Backend.SQL_FROM); sq..."
out.print(topImplClass);
out.print(source[157]); // 981:31 = ".CLASSVARIABLES.getTableName()). ..."
out.print(topImplClass);
out.print(source[158]); // 982:71 = ".CLASSVARIABLES.getTableAlias());"
if (chain.size() > 1) {
for (Entity entity: chain.subList(1, chain.size())) {
String implClass = deriveClassNameForEntity(entity);
out.print(source[159]); // 987:2 = " sql.append(backend.sqlJoin(JoinType...."
out.print(implClass);
out.print(source[160]); // 989:28 = ".CLASSVARIABLES.getTableName(), "
out.print(implClass);
out.print(source[161]); // 989:73 = ".CLASSVARIABLES.getTableAlias(), ..."
out.print(topImplClass);
out.print(source[162]); // 990:31 = ".CLASSVARIABLES.getColumnName(CN_ID) + B..."
out.print(implClass);
out.print(source[163]); // 991:28 = ".CLASSVARIABLES.getColumnName(CN_ID)));..."
}
}
for (Entity sub: subs) {
String implClass = deriveClassNameForEntity(sub);
out.print(source[164]); // 998:2 = " sql.append(backend.sqlJoin(JoinType...."
out.print(implClass);
out.print(source[165]); // 1000:28 = ".CLASSVARIABLES.getTableName(), "
out.print(implClass);
out.print(source[166]); // 1000:73 = ".CLASSVARIABLES.getTableAlias(), ..."
out.print(topImplClass);
out.print(source[167]); // 1001:31 = ".CLASSVARIABLES.getColumnName(CN_ID) + B..."
out.print(implClass);
out.print(source[168]); // 1002:28 = ".CLASSVARIABLES.getColumnName(CN_ID)));..."
}
out.print(source[169]); // 1005:2 = " sql.append(Backend.SQL_WHEREALL); ..."
String implClass = deriveClassNameForEntity(topEntity);
out.print(source[170]); // 1011:2 = " @Override public StringBuilder crea..."
out.print(implClass);
out.print(source[171]); // 1017:28 = ".CLASSVARIABLES.getColumnName(CN_ID)). ..."
if (getEntity().isRootOfInheritanceHierarchy()) {
out.print(source[172]); // 1024:2 = " @Override protected void updateImpl..."
out.print(pdoClass);
out.print(source[173]); // 1028:158 = "); setFields"
out.print(pdoClass);
out.print(source[174]); // 1029:25 = "(st); assertThisRowAffected(st.execu..."
out.print(pdoClass);
out.print(source[175]); // 1035:158 = "); setFields"
out.print(pdoClass);
out.print(source[176]); // 1036:25 = "(st); assertThisRowAffected(st.execu..."
out.print(pdoClass);
out.print(source[177]); // 1042:157 = "()); st.setLong(1, getId()); st...."
}
else {
out.print(source[178]); // 1050:2 = " @Override protected void updateImpl..."
out.print(getEntity().isAbstract()?"P":mainClass);
out.print(source[179]); // 1053:93 = "> classVariables, ..."
out.print(pdoClass);
out.print(source[180]); // 1056:158 = "); setFields"
out.print(pdoClass);
out.print(source[181]); // 1057:25 = "(st); assertThisRowAffected(st.execu..."
out.print(getEntity().isAbstract()?"P":mainClass);
out.print(source[182]); // 1062:93 = "> classVariables, ..."
out.print(pdoClass);
out.print(source[183]); // 1065:158 = "); setFields"
out.print(pdoClass);
out.print(source[184]); // 1066:25 = "(st); assertThisRowAffected(st.execu..."
out.print(getEntity().isAbstract()?"P":mainClass);
out.print(source[185]); // 1071:93 = "> classVariables, ..."
out.print(pdoClass);
out.print(source[186]); // 1073:157 = "()); st.setLong(1, getId()); ass..."
}
} // end multiinheritance
else if (isMuteOptionSet(getEntity()) && !getEntity().isEmbedded()) {
out.print(source[187]); // 1083:2 = " @Override public StringBuilder crea..."
}
} // end !mock
for (Attribute attr: getEntity().getAttributes()) {
if (attr.getOptions().isMute()) {
continue; // skip
}
if (!attr.getOptions().isNoDeclare() && !isAttributeDerived(attr)) {
generateSnapshot = true;
}
if (attr.getOptions().isNoMethod()) {
if (!attr.getOptions().isFromSuper()) {
out.print(source[188]); // 1108:2 = " /* * no accessor methods for "
out.print(attr);
out.print(source[189]); // 1111:37 = ". * "
out.print(attr.getOptions().getComment());
out.print(source[190]); // 1112:39 = " */"
}
}
else {
String protection = attr.getOptions().getAccessScope().toString();
String type = attr.getJavaType();
String methodSuffix = attr.getMethodNameSuffix();
String getter = attr.getGetterName();
String setter = attr.getSetterName();
if (attr.getOptions().isWriteOnly()) {
out.print(source[191]); // 1124:2 = " // "
out.print(attr);
out.print(source[192]); // 1126:13 = " is writeonly, no getter."
}
else {
if (noif || attr.isHidden()) {
out.print(source[193]); // 1131:2 = " /** * Gets the attribute "
out.print(attr.getName());
out.print(source[194]); // 1134:42 = ". * * @return "
out.print(attr.getOptions().getComment());
out.print(source[195]); // 1136:48 = " */ @Persistent(ordinal="
out.print(attr.getOrdinal());
out.print(source[196]); // 1138:44 = ", comment="
out.print(StringHelper.toDoubleQuotes(attr.getOptions().getComment()));
out.print(source[197]); // 1138:117 = ")"
}
else {
out.print(source[198]); // 1142:2 = " @Override"
}
for (String annotation: attr.getOptions().getAnnotations()) {
AnnotationOption anno = new AnnotationOption(annotation);
if (anno.isHidden() && !anno.isSetterOnly()) {
out.print(source[199]); // 1150:2 = " "
out.print(anno.getAnnotation());
out.print(source[200]); // 1151:26 = ""
}
}
out.print(source[201]); // 1155:2 = " "
out.print(protection);
out.print(source[202]); // 1156:16 = " "
out.print(type);
out.print(source[203]); // 1156:25 = " "
out.print(getter);
out.print(source[204]); // 1156:36 = "() { return "
out.print(attr.getName());
out.print(source[205]); // 1157:29 = "; }"
}
if (attr.getOptions().isReadOnly()) {
out.print(source[206]); // 1163:2 = " // "
out.print(attr);
out.print(source[207]); // 1165:13 = " is readonly, no setter."
}
else {
String setterProtection = protection;
boolean useOverride = !noif && "public".equals(protection) && !attr.isHidden();
// check to make setter for lazy or eager object relations private
Relation rel = attr.getRelation();
if (rel != null && rel.getSelectionType() != SelectionType.ALWAYS) {
setterProtection = getEntity().isAbstract() ? "protected" : "private";
useOverride = false;
}
if (!useOverride) {
out.print(source[208]); // 1178:2 = " /** * Sets the attribute "
out.print(attr.getName());
out.print(source[209]); // 1181:42 = ". * * @param "
out.print(attr.getName());
out.print(source[210]); // 1183:31 = " "
out.print(attr.getOptions().getComment());
out.print(source[211]); // 1183:66 = " */"
}
else {
out.print(source[212]); // 1188:2 = " @Override"
}
for (String annotation: attr.getOptions().getAnnotations()) {
AnnotationOption anno = new AnnotationOption(annotation);
if (anno.isHidden() && (anno.isSetterOnly() || anno.isSetterAndGetter())) {
out.print(source[213]); // 1196:2 = " "
out.print(anno.getAnnotation());
out.print(source[214]); // 1197:26 = ""
}
}
out.print(source[215]); // 1201:2 = " "
out.print(setterProtection);
out.print(source[216]); // 1202:22 = " void "
out.print(setter);
out.print(source[217]); // 1202:38 = "("
out.print(type);
out.print(source[218]); // 1202:47 = " "
out.print(attr.getName());
out.print(source[219]); // 1202:66 = ") {"
if (type.equals("Timestamp")) {
out.print(source[220]); // 1205:2 = " Timestamp.setUTC("
out.print(attr.getName());
out.print(source[221]); // 1206:39 = ", "
out.print(attr.getOptions().isUTC() ? "true" : "false");
out.print(source[222]); // 1206:89 = ");"
}
if (attr.getDataType().isMutable()) {
out.print(source[223]); // 1210:2 = " Freezable.freeze("
out.print(attr.getName());
out.print(source[224]); // 1211:39 = ");"
}
if (generateMock) {
out.print(source[225]); // 1215:2 = " this."
out.print(attr.getName());
out.print(source[226]); // 1216:27 = " = "
out.print(attr.getName());
out.print(source[227]); // 1216:48 = ";"
}
else {
if (isTracked()) {
if (isFullTracked()) {
if (attr.getDataType().isPrimitive()) {
out.print(source[228]); // 1223:2 = " if (this."
out.print(attr.getName());
out.print(source[229]); // 1224:31 = " != "
out.print(attr.getName());
out.print(source[230]); // 1224:53 = ") { assertMutable(); firePro..."
out.print(attr.getName().toUpperCase(Locale.ROOT));
out.print(source[231]); // 1226:71 = ", this."
out.print(attr.getName());
out.print(source[232]); // 1226:96 = ", "
out.print(attr.getName());
out.print(source[233]); // 1226:116 = "); this."
out.print(attr.getName());
out.print(source[234]); // 1227:29 = " = "
out.print(attr.getName());
out.print(source[235]); // 1227:50 = "; }"
}
else {
out.print(source[236]); // 1232:2 = " if (!Objects.equals(this."
out.print(attr.getName());
out.print(source[237]); // 1233:47 = ", "
out.print(attr.getName());
out.print(source[238]); // 1233:67 = ")) { assertMutable(); firePr..."
out.print(attr.getName().toUpperCase(Locale.ROOT));
out.print(source[239]); // 1235:71 = ", this."
out.print(attr.getName());
out.print(source[240]); // 1235:96 = ", "
out.print(attr.getName());
out.print(source[241]); // 1235:116 = "); this."
out.print(attr.getName());
out.print(source[242]); // 1236:29 = " = "
out.print(attr.getName());
out.print(source[243]); // 1236:50 = "; }"
}
}
else {
if (attr.getDataType().isPrimitive()) {
out.print(source[244]); // 1243:2 = " if (this."
out.print(attr.getName());
out.print(source[245]); // 1244:31 = " != "
out.print(attr.getName());
out.print(source[246]); // 1244:53 = ") { setModified(true); this...."
out.print(attr.getName());
out.print(source[247]); // 1246:29 = " = "
out.print(attr.getName());
out.print(source[248]); // 1246:50 = ";"
if (isAttracked()) {
out.print(source[249]); // 1249:2 = " "
out.print(attr.getName());
out.print(source[250]); // 1250:24 = "Modified = true; firePropertyChang..."
out.print(attr.getName().toUpperCase(Locale.ROOT));
out.print(source[251]); // 1251:71 = ", this."
out.print(attr.getName());
out.print(source[252]); // 1251:96 = ", "
out.print(attr.getName());
out.print(source[253]); // 1251:116 = ");"
}
out.print(source[254]); // 1254:2 = " }"
}
else {
out.print(source[255]); // 1259:2 = " if (!Objects.equals(this."
out.print(attr.getName());
out.print(source[256]); // 1260:47 = ", "
out.print(attr.getName());
out.print(source[257]); // 1260:67 = ")) { setModified(true); this..."
out.print(attr.getName());
out.print(source[258]); // 1262:29 = " = "
out.print(attr.getName());
out.print(source[259]); // 1262:50 = ";"
if (isAttracked()) {
out.print(source[260]); // 1265:2 = " "
out.print(attr.getName());
out.print(source[261]); // 1266:24 = "Modified = true; firePropertyChang..."
out.print(attr.getName().toUpperCase(Locale.ROOT));
out.print(source[262]); // 1267:71 = ", this."
out.print(attr.getName());
out.print(source[263]); // 1267:96 = ", "
out.print(attr.getName());
out.print(source[264]); // 1267:116 = ");"
}
out.print(source[265]); // 1270:2 = " }"
}
}
}
else {
out.print(source[266]); // 1277:2 = " assertMutable(); this."
out.print(attr.getName());
out.print(source[267]); // 1279:27 = " = "
out.print(attr.getName());
out.print(source[268]); // 1279:48 = ";"
}
}
out.print(source[269]); // 1283:2 = " }"
if (isAttracked()) {
if (noif || attr.isHidden()) {
out.print(source[270]); // 1288:2 = " /** * Gets the modification state ..."
out.print(attr.getName());
out.print(source[271]); // 1291:54 = ". * * @return true if "
out.print(attr);
out.print(source[272]); // 1293:30 = " has been modified */"
}
else {
out.print(source[273]); // 1298:2 = " @Override"
}
out.print(source[274]); // 1303:2 = " "
out.print(protection);
out.print(source[275]); // 1304:16 = " boolean is"
out.print(methodSuffix);
out.print(source[276]); // 1304:43 = "Modified() {"
if (isFullTracked()) {
if (attr.getDataType().isPrimitive()) {
out.print(source[277]); // 1308:2 = " return "
out.print(attr.getName());
out.print(source[278]); // 1309:29 = " != "
out.print(attr.getName());
out.print(source[279]); // 1309:51 = "Persisted;"
}
else {
out.print(source[280]); // 1313:2 = " return !Objects.equals("
out.print(attr.getName());
out.print(source[281]); // 1314:45 = ", "
out.print(attr.getName());
out.print(source[282]); // 1314:65 = "Persisted);"
}
}
else {
out.print(source[283]); // 1319:2 = " return "
out.print(attr.getName());
out.print(source[284]); // 1320:29 = "Modified;"
}
out.print(source[285]); // 1323:2 = " }"
}
if (isFullTracked()) {
if (noif || attr.isHidden()) {
out.print(source[286]); // 1330:2 = " /** * Gets the last persisted valu..."
out.print(attr);
out.print(source[287]); // 1333:46 = ". * * @return the last persisted v..."
}
else {
out.print(source[288]); // 1340:2 = " @Override"
}
out.print(source[289]); // 1345:2 = " "
out.print(protection);
out.print(source[290]); // 1346:16 = " "
out.print(attr.getJavaType());
out.print(source[291]); // 1346:39 = " "
out.print(getter);
out.print(source[292]); // 1346:50 = "Persisted() { return "
out.print(attr.getName());
out.print(source[293]); // 1347:29 = "Persisted; }"
}
}
}
}
if (!generateMock) {
if (isPdo && generateSnapshot) {
// createAttributesInSnapshot isnt necessary anymore since 2.2.x, because all attributes are either immutable or frozen
// therefore, modifying an attribute requires changing the object reference
boolean needRevertAttributes = false;
for (Attribute attr: getEntity().getAttributes()) {
if (!attr.getOptions().isMute() && !isAttributeDerived(attr) && !attr.getOptions().isShallow()) {
needRevertAttributes = true;
break;
}
}
if (needRevertAttributes) {
out.print(source[294]); // 1370:2 = " /** * Copies all attributes from a..."
out.print(mainClass);
out.print(getEntity().isAbstract() ? "" : "");
out.print(source[295]); // 1377:100 = " snapshot) { super.revertAttributesT..."
for (Attribute attr: getEntity().getAttributes()) {
if (!attr.getOptions().isNoDeclare() && !isAttributeDerived(attr) && !attr.getOptions().isShallow() && !attr.getOptions().isMute()) {
String name = attr.getName();
out.print(source[296]); // 1383:2 = " "
out.print(name);
out.print(source[297]); // 1384:12 = " = snapshot."
out.print(name);
out.print(source[298]); // 1384:32 = ";"
if (isAttracked()) {
if (isFullTracked()) {
out.print(source[299]); // 1388:2 = " "
out.print(name);
out.print(source[300]); // 1389:12 = "Persisted = snapshot."
out.print(name);
out.print(source[301]); // 1389:41 = "Persisted;"
}
else {
out.print(source[302]); // 1393:2 = " "
out.print(name);
out.print(source[303]); // 1394:12 = "Modified = snapshot."
out.print(name);
out.print(source[304]); // 1394:40 = "Modified;"
}
}
}
}
out.print(source[305]); // 1400:2 = " }"
}
}
if (generateCreateNormText) {
out.print(source[306]); // 1407:2 = " @Override public StringBuilder crea..."
for (Attribute attr: getEntity().getAttributes()) {
if (attr.getOptions().isPartOfNormText()) {
out.print(source[307]); // 1418:2 = " buf.append("
out.print(attr.getGetterName());
out.print(source[308]); // 1419:39 = "()).append(',');"
}
}
for (Relation rel: getEntity().getRelations()) {
if (rel.isEmbedding()) {
boolean hasNormText = false;
for (Attribute attr: rel.getForeignEntity().getAttributes()) {
if (attr.getOptions().isPartOfNormText()) {
hasNormText = true;
break;
}
}
if (!hasNormText) {
for (Attribute attr: rel.getForeignEntity().getEmbeddedAttributes()) {
if (attr.getOptions().isPartOfNormText()) {
hasNormText = true;
break;
}
}
}
if (hasNormText) {
out.print(source[309]); // 1442:2 = " buf.append(Objects.requireNonNullEls..."
out.print(rel.getGetterName());
out.print(source[310]); // 1443:98 = "().getPersistenceDelegate()).createAttri..."
}
}
}
out.print(source[311]); // 1448:2 = " return buf; }"
}
if (generatePresetVirgin) {
out.print(source[312]); // 1455:2 = " @Override protected void presetVirg..."
for (Attribute attr: getEntity().getAttributes()) {
String newValue = attr.getOptions().getNewValue();
if (newValue != null) {
out.print(source[313]); // 1463:2 = " "
out.print(attr.getName());
out.print(source[314]); // 1464:22 = " = "
out.print(newValue);
out.print(source[315]); // 1464:37 = ";"
}
}
out.print(source[316]); // 1468:2 = " }"
}
if (generateSelectByUDK) {
List udk = getEntity().getUniqueDomainKey();
if (!udk.isEmpty()) {
List superUdk = null;
if (getEntity().getSuperEntity() != null) {
superUdk = getEntity().getSuperEntity().getUniqueDomainKey();
}
if (superUdk == null || !udk.equals(superUdk)) {
Set components = getEntity().getAllComponents();
StringBuilder attribs = new StringBuilder();
for (Attribute attribute: udk) {
if (attribs.length() != 0) {
attribs.append(" ");
}
if (components.contains(attribute.getEntity())) {
attribs.append(attribute.getEntity()).append(".");
}
attribs.append(attribute.getName());
}
out.print(source[317]); // 1492:2 = " // selects by unique domain key // ..."
out.print(attribs);
out.print(source[318]); // 1495:66 = ""
}
}
}
}
}
// ----------------- end wurblet code -----------------
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy