package at.bestsolution.persistence.emap.ecoregenerator.generator;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EReference;
public class EMapHelper {
public static String getTableName( EClass ec ) {
return upperCaseUnderscore( ec.getName() );
}
private static String upperCaseUnderscore( String name ) {
if ( "FROM".equalsIgnoreCase( name ) ) {
return "FROM_";
}
StringBuilder sb = new StringBuilder();
for ( int i = 0; i < name.length(); i++ ) {
char ch = name.charAt( i );
if ( Character.isUpperCase( ch ) && i > 0 ) {
sb.append( '_' );
}
sb.append( Character.toUpperCase( ch ) );
}
return sb.toString();
}
public static String getTableColumnName( EAttribute a ) {
return upperCaseUnderscore( a.getName() );
}
public static String getReferenceQueryCall( EReference r ) {
if ( r.isMany() ) {
return r.getEReferenceType().getName() + "."+ getReferenceQuerySignature( r ) + "( SID )";
}
else {
return r.getEReferenceType().getName() + ".selectById(" + getFKName( r ) + ")";
}
}
public static String getFKName( EReference r ) {
return "FK_" + upperCaseUnderscore( r.getName() );
}
public static String getReferenceQuerySignature( EReference r ) {
EClass eClass = (EClass)r.eContainer();
String name = eClass.getName();
EClass tecl = r.getEReferenceType();
for ( EReference ref : eClass.getEAllReferences() ) {
if ( r != ref && tecl == ref.getEReferenceType()) {
return "selectAllFor"+name+r.getName();
}
}
return "selectAllFor"+name;
}
}