
com.devonfw.cobigen.templates.oasp4j.utils.Connectors Maven / Gradle / Ivy
The newest version!
package com.devonfw.cobigen.templates.oasp4j.utils;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.text.WordUtils;
/**
* Class that contains every connector found for one class and generates the resultant text for the template.
*/
public class Connectors {
private List connectors;
/**
* The constructor.
*/
public Connectors() {
this.connectors = new ArrayList();
}
/**
* @param connector class storing connected information
*/
public void addConnector(Connector connector) {
this.connectors.add(connector);
}
/**
* @param isImpl true if we are the Implementation
* @param isOverride true if we are Entity
* @param className name of the class
* @return Generated text
*/
public String generateText(boolean isImpl, boolean isOverride, String className) {
String content = "";
if (isImpl) {
for (Connector connector : this.connectors) {
String connectedClassName = connector.getCounterpartName();
String multiplicity = connector.getCounterpartMultiplicity();
if (multiplicity == null || multiplicity.equals("1")) {
content += "\n\n\tprivate " + connectedClassName + "Entity " + connectedClassName.toLowerCase() + ";";
} else if (multiplicity != null && multiplicity.equals("*")) {
content += "\n\n\tprivate List<" + connectedClassName + "Entity> "
+ removePlural(connectedClassName.toLowerCase()) + "s;";
}
}
}
for (Connector connector : this.connectors) {
String connectedClassName = connector.getCounterpartName();
String multiplicity = connector.getCounterpartMultiplicity();
if (multiplicity == null || multiplicity.equals("1")) {
content += "\n\n\t";
if (isOverride) {
content += "@Override\n\t";
}
if (isImpl) {
content += getRelationshipAnnotations(connector) + "\n\t";
content += "public " + connectedClassName + "Entity get" + connectedClassName + "()";
} else {
content += "public Long get" + connectedClassName + "Id()";
}
if (isImpl) {
content += "{" + "\n\t\treturn this." + connectedClassName.toLowerCase() + ";" + "\n\t}";
} else {
content += ";";
}
content += "\n\n\t";
if (isOverride) {
content += "@Override\n\t";
}
if (isImpl) {
content += "public void set" + connectedClassName + "(" + connectedClassName + "Entity "
+ connectedClassName.toLowerCase() + ")";
} else {
content += "public void set" + connectedClassName + "Id(Long " + connectedClassName.toLowerCase() + "Id)";
}
if (isImpl) {
content += "{" + "\n\t\tthis." + connectedClassName.toLowerCase() + " = " + connectedClassName.toLowerCase()
+ ";" + "\n\t}";
} else {
content += ";";
}
// Now w generate the get and set IDs methods for the implementation
if (isImpl) {
// getter
content += "\n\n\t";
content += "@Override\n\t";
content += "public Long get" + connectedClassName + "Id()";
content += "{" + "\n\t\tif(this." + connectedClassName.toLowerCase() + " == null){";
content += "\n\t\treturn null;\n\t}";
content += "\n\t\treturn this." + connectedClassName.toLowerCase() + ".getId();" + "\n\t}";
// setter
content += "\n\n\t";
content += "@Override\n\t";
content += "public void set" + connectedClassName + "Id(Long " + connectedClassName.toLowerCase() + "Id)";
content += "{" + "\n\t\tif(" + connectedClassName.toLowerCase() + "Id == null){";
content += "\n\t\tthis." + connectedClassName.toLowerCase() + " = null;\n\t}";
content += "else {\n\t";
content += connectedClassName + "Entity " + connectedClassName.toLowerCase() + "Entity = new "
+ connectedClassName + "Entity();\n\n\t";
content += connectedClassName.toLowerCase() + ".setId(" + connectedClassName.toLowerCase() + "Id);\n\n\t";
content += "this." + connectedClassName.toLowerCase() + " " + "= " + connectedClassName.toLowerCase()
+ "Entity;\n\n\t}";
content += "\n\n\t}";
}
} else if (multiplicity != null && multiplicity.equals("*") && isImpl) {
content += "\n\n\t";
if (isOverride) {
content += "@Override\n\t";
}
content += getRelationshipAnnotations(connector) + "\n\t";
content += "public List<" + connectedClassName + "Entity> get" + removePlural(connectedClassName) + "s()";
content += "{" + "\n\t\treturn this." + removePlural(connectedClassName.toLowerCase()) + "s;" + "\n\t}";
content += "\n\n\t";
if (isOverride) {
content += "@Override\n\t";
}
content += "public void set" + removePlural(connectedClassName) + "s(List<" + connectedClassName + "Entity> "
+ removePlural(connectedClassName.toLowerCase()) + "s)";
content += "{" + "\n\t\tthis." + removePlural(connectedClassName.toLowerCase()) + "s = "
+ removePlural(connectedClassName.toLowerCase()) + "s;" + "\n\t}";
}
}
return content;
}
/**
* Generates the annotations of all the connected classes
*
* @return relationship string with all the annotations for the connected classes
*/
private String getRelationshipAnnotations(Connector source) {
String relationship = "";
if (source.ISSOURCE) {
if (source.getMultiplicity() == null || source.getMultiplicity().equals("1")) {
if (source.getCounterpartMultiplicity() == null || source.getCounterpartMultiplicity().equals("1")) {
relationship = "@OneToOne()" + "\n\t@JoinColumn(name = \"" + source.getCounterpartName() + "Id\")";
} else if (source.getCounterpartMultiplicity().equals("*")) {
relationship = "@OneToMany(fetch = FetchType.LAZY)\n\t@JoinColumn(name = \""
+ WordUtils.capitalize(source.getCounterpartName()) + "id\")";
}
} else if (source.getMultiplicity().equals("*")) {
if (source.getCounterpartMultiplicity().equals("*")) {
relationship += "@ManyToMany()";
relationship += "\n\t@JoinTable(name = \"" + WordUtils.capitalize(source.getCounterpartName())
+ WordUtils.capitalize(source.getClassName()) + "\", joinColumns = @JoinColumn(name = \""
+ source.getClassName() + "Id\"), inverseJoinColumns = @JoinColumn(name = \""
+ source.getCounterpartName() + "Id\"))";
} else if (source.getCounterpartMultiplicity().equals("1")) {
relationship += "@ManyToOne(fetch = FetchType.LAZY)\n\t@JoinColumn(name = \"" + source.getCounterpartName()
+ "Id\")";
}
}
} else if (source.ISTARGET) {
if (source.getCounterpartMultiplicity() == null || source.getCounterpartMultiplicity().equals("1")) {
if (source.getMultiplicity() == null || source.getMultiplicity().equals("1")) {
relationship = "@OneToOne()" + "\n\t@JoinColumn(name = \"" + source.getCounterpartName() + "Id\")";
} else if (source.getMultiplicity().equals("*")) {
relationship += "@ManyToOne(fetch = FetchType.LAZY)\n\t@JoinColumn(name = \"" + source.getCounterpartName()
+ "Id\")";
}
} else if (source.getCounterpartMultiplicity().equals("*")) {
if (source.getMultiplicity().equals("*")) {
relationship += "@ManyToMany(mappedBy = \"" + removePlural(source.getClassName()).toLowerCase() + "s\")";
} else if (source.getMultiplicity().equals("1")) {
relationship = "@OneToMany(fetch = FetchType.LAZY, mappedBy = \"" + source.getCounterpartName().toLowerCase()
+ "\")";
}
}
}
return relationship;
}
/**
* Stores all the connected classes
*
* @return connectedClasses array with connected classes
*/
public ArrayList getConnectedClasses() {
ArrayList connectedClasses = new ArrayList();
for (Connector connector : this.connectors) {
connectedClasses.add(connector.getClassName());
}
return connectedClasses;
}
/**
* If the string last character is an 's', then it gets removed
*
* @param targetClassName
* @return the string with plural removed
*/
private String removePlural(String targetClassName) {
// Remove last 's' for Many multiplicity
if (targetClassName.charAt(targetClassName.length() - 1) == 's') {
targetClassName = targetClassName.substring(0, targetClassName.length() - 1);
}
return targetClassName;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy