IDEMPIERE-308 Performance: Replace use of StringBuffer and String concatenation with StringBuilder / replace String.concat used in loops - cases detected using findbugs / thanks to Richard Morales and David Peñuela
This commit is contained in:
parent
340acefdf6
commit
fa5b24e7e2
|
@ -151,14 +151,22 @@ public class UUIDGenerator extends SvrProcess {
|
||||||
}
|
}
|
||||||
sql.append(" FROM ").append(table.getTableName());
|
sql.append(" FROM ").append(table.getTableName());
|
||||||
sql.append(" WHERE ").append(column.getColumnName()).append(" IS NULL ");
|
sql.append(" WHERE ").append(column.getColumnName()).append(" IS NULL ");
|
||||||
String updateSQL = "UPDATE "+table.getTableName()+" SET "+column.getColumnName()+"=? WHERE ";
|
StringBuffer updateSQL = new StringBuffer();
|
||||||
|
updateSQL.append("UPDATE ");
|
||||||
|
updateSQL.append(table.getTableName());
|
||||||
|
updateSQL.append(" SET ");
|
||||||
|
updateSQL.append(column.getColumnName());
|
||||||
|
updateSQL.append("=? WHERE ");
|
||||||
if (AD_Column_ID > 0) {
|
if (AD_Column_ID > 0) {
|
||||||
updateSQL = updateSQL + keyColumn + "=?";
|
updateSQL.append(keyColumn);
|
||||||
|
updateSQL.append("=?");
|
||||||
} else {
|
} else {
|
||||||
for(String s : compositeKeys) {
|
for(String s : compositeKeys) {
|
||||||
updateSQL = updateSQL + s + "=? AND ";
|
updateSQL.append(s);
|
||||||
|
updateSQL.append("=? AND ");
|
||||||
}
|
}
|
||||||
updateSQL = updateSQL.substring(0, updateSQL.length() - " AND ".length());
|
int length = updateSQL.length();
|
||||||
|
updateSQL.delete(length-5, length); // delete last AND
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean localTrx = false;
|
boolean localTrx = false;
|
||||||
|
@ -180,7 +188,7 @@ public class UUIDGenerator extends SvrProcess {
|
||||||
int recordId = rs.getInt(1);
|
int recordId = rs.getInt(1);
|
||||||
if (recordId > MTable.MAX_OFFICIAL_ID) {
|
if (recordId > MTable.MAX_OFFICIAL_ID) {
|
||||||
UUID uuid = UUID.randomUUID();
|
UUID uuid = UUID.randomUUID();
|
||||||
DB.executeUpdateEx(updateSQL,new Object[]{uuid.toString(), recordId}, trx.getTrxName());
|
DB.executeUpdateEx(updateSQL.toString(),new Object[]{uuid.toString(), recordId}, trx.getTrxName());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
UUID uuid = UUID.randomUUID();
|
UUID uuid = UUID.randomUUID();
|
||||||
|
@ -189,7 +197,7 @@ public class UUIDGenerator extends SvrProcess {
|
||||||
for (String s : compositeKeys) {
|
for (String s : compositeKeys) {
|
||||||
params.add(rs.getObject(s));
|
params.add(rs.getObject(s));
|
||||||
}
|
}
|
||||||
DB.executeUpdateEx(updateSQL,params.toArray(),trx.getTrxName());
|
DB.executeUpdateEx(updateSQL.toString(),params.toArray(),trx.getTrxName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (localTrx) {
|
if (localTrx) {
|
||||||
|
|
|
@ -45,6 +45,7 @@ import org.compiere.model.MTable;
|
||||||
import org.compiere.util.CLogger;
|
import org.compiere.util.CLogger;
|
||||||
import org.compiere.util.DB;
|
import org.compiere.util.DB;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
|
import org.compiere.util.Util;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Executes search and opens windows for defined transaction codes
|
* Executes search and opens windows for defined transaction codes
|
||||||
|
@ -67,12 +68,12 @@ public abstract class AbstractDocumentSearch {
|
||||||
log.fine("Search started with String: " + searchString);
|
log.fine("Search started with String: " + searchString);
|
||||||
|
|
||||||
// Check if / how many transaction-codes are used
|
// Check if / how many transaction-codes are used
|
||||||
if (searchString != null && !"".equals(searchString)) {
|
if (! Util.isEmpty(searchString)) {
|
||||||
String[] codes = searchString.trim().replaceAll(" ", " ").split(" ");
|
String[] codes = searchString.trim().replaceAll(" ", " ").split(" ");
|
||||||
|
|
||||||
List<String> codeList = new ArrayList<String>();
|
List<String> codeList = new ArrayList<String>();
|
||||||
boolean codeSearch = true;
|
boolean codeSearch = true;
|
||||||
searchString = "";
|
StringBuffer search = new StringBuffer();
|
||||||
|
|
||||||
// Analyze String to separate transactionCodes from searchString
|
// Analyze String to separate transactionCodes from searchString
|
||||||
for (int i = 0; i < codes.length; i++) {
|
for (int i = 0; i < codes.length; i++) {
|
||||||
|
@ -84,9 +85,9 @@ public abstract class AbstractDocumentSearch {
|
||||||
// Build the searchString with eventually appearing
|
// Build the searchString with eventually appearing
|
||||||
// whitespaces
|
// whitespaces
|
||||||
codeSearch = false;
|
codeSearch = false;
|
||||||
searchString += s;
|
search.append(s);
|
||||||
if (i != (codes.length - 1)) {
|
if (i != (codes.length - 1)) {
|
||||||
searchString += " ";
|
search.append(" ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
|
@ -99,12 +100,12 @@ public abstract class AbstractDocumentSearch {
|
||||||
if (codeList.size() > 0) {
|
if (codeList.size() > 0) {
|
||||||
for (int i = 0; i < codeList.size(); i++) {
|
for (int i = 0; i < codeList.size(); i++) {
|
||||||
log.fine("Search with Transaction: '" + codeList.get(i) + "' for: '"
|
log.fine("Search with Transaction: '" + codeList.get(i) + "' for: '"
|
||||||
+ searchString + "'");
|
+ search.toString() + "'");
|
||||||
getID(codeList.get(i), searchString);
|
getID(codeList.get(i), search.toString());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
log.fine("Search without Transaction: " + searchString);
|
log.fine("Search without Transaction: " + search.toString());
|
||||||
getID(null, searchString);
|
getID(null, search.toString());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
log.fine("Search String is invalid");
|
log.fine("Search String is invalid");
|
||||||
|
@ -252,32 +253,35 @@ public abstract class AbstractDocumentSearch {
|
||||||
if (ids == null || ids.size() == 0) {
|
if (ids == null || ids.size() == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String whereString = " " + tableName + "_ID";
|
StringBuffer whereString = new StringBuffer();
|
||||||
|
whereString.append(" ");
|
||||||
|
whereString.append(tableName);
|
||||||
|
whereString.append("_ID");
|
||||||
// create query string
|
// create query string
|
||||||
if (ids.size() == 1) {
|
if (ids.size() == 1) {
|
||||||
if (ids.get(0).intValue() == 0) {
|
if (ids.get(0).intValue() == 0) {
|
||||||
whereString = null;
|
whereString = null;
|
||||||
} else {
|
} else {
|
||||||
whereString += "=" + ids.get(0).intValue();
|
whereString.append("=");
|
||||||
|
whereString.append(ids.get(0).intValue());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
whereString += " IN (";
|
whereString.append(" IN (");
|
||||||
for (int i = 0; i < ids.size(); i++) {
|
for (int i = 0; i < ids.size(); i++) {
|
||||||
whereString += ids.get(i).intValue();
|
whereString.append(ids.get(i).intValue());
|
||||||
if (i < ids.size() - 1) {
|
if (i < ids.size() - 1) {
|
||||||
whereString += ",";
|
whereString.append(",");
|
||||||
} else {
|
} else {
|
||||||
whereString += ") ";
|
whereString.append(") ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
log.fine(whereString);
|
|
||||||
|
|
||||||
final MQuery query = new MQuery(tableName);
|
final MQuery query = new MQuery(tableName);
|
||||||
query.addRestriction(whereString);
|
query.addRestriction(whereString.toString());
|
||||||
final boolean ok = openWindow(windowId, query);
|
final boolean ok = openWindow(windowId, query);
|
||||||
if (!ok) {
|
if (!ok) {
|
||||||
log.severe("Unable to open window: " + whereString);
|
log.severe("Unable to open window: " + whereString.toString());
|
||||||
}
|
}
|
||||||
if (!windowOpened && ok)
|
if (!windowOpened && ok)
|
||||||
windowOpened = true;
|
windowOpened = true;
|
||||||
|
|
|
@ -839,10 +839,10 @@ public class ModelClassGenerator
|
||||||
if (!tableLike.startsWith("'") || !tableLike.endsWith("'"))
|
if (!tableLike.startsWith("'") || !tableLike.endsWith("'"))
|
||||||
tableLike = "'" + tableLike + "'";
|
tableLike = "'" + tableLike + "'";
|
||||||
|
|
||||||
String entityTypeFilter = null;
|
StringBuffer entityTypeFilter = new StringBuffer();
|
||||||
if (entityType != null && entityType.trim().length() > 0)
|
if (entityType != null && entityType.trim().length() > 0)
|
||||||
{
|
{
|
||||||
entityTypeFilter = "EntityType IN (";
|
entityTypeFilter.append("EntityType IN (");
|
||||||
StringTokenizer tokenizer = new StringTokenizer(entityType, ",");
|
StringTokenizer tokenizer = new StringTokenizer(entityType, ",");
|
||||||
int i = 0;
|
int i = 0;
|
||||||
while(tokenizer.hasMoreTokens()) {
|
while(tokenizer.hasMoreTokens()) {
|
||||||
|
@ -850,15 +850,15 @@ public class ModelClassGenerator
|
||||||
if (!token.startsWith("'") || !token.endsWith("'"))
|
if (!token.startsWith("'") || !token.endsWith("'"))
|
||||||
token = "'" + token + "'";
|
token = "'" + token + "'";
|
||||||
if (i > 0)
|
if (i > 0)
|
||||||
entityTypeFilter = entityTypeFilter + ",";
|
entityTypeFilter.append(",");
|
||||||
entityTypeFilter = entityTypeFilter + token;
|
entityTypeFilter.append(token);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
entityTypeFilter = entityTypeFilter+")";
|
entityTypeFilter.append(")");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
entityTypeFilter = "EntityType IN ('U','A')";
|
entityTypeFilter.append("EntityType IN ('U','A')");
|
||||||
}
|
}
|
||||||
|
|
||||||
String directory = sourceFolder.trim();
|
String directory = sourceFolder.trim();
|
||||||
|
@ -884,7 +884,7 @@ public class ModelClassGenerator
|
||||||
.append(" OR IsView='N')")
|
.append(" OR IsView='N')")
|
||||||
.append(" AND IsActive = 'Y' AND TableName NOT LIKE '%_Trl' ");
|
.append(" AND IsActive = 'Y' AND TableName NOT LIKE '%_Trl' ");
|
||||||
sql.append(" AND TableName LIKE ").append(tableLike);
|
sql.append(" AND TableName LIKE ").append(tableLike);
|
||||||
sql.append(" AND ").append(entityTypeFilter);
|
sql.append(" AND ").append(entityTypeFilter.toString());
|
||||||
sql.append(" ORDER BY TableName");
|
sql.append(" ORDER BY TableName");
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -774,10 +774,10 @@ public class ModelInterfaceGenerator
|
||||||
if (!tableLike.startsWith("'") || !tableLike.endsWith("'"))
|
if (!tableLike.startsWith("'") || !tableLike.endsWith("'"))
|
||||||
tableLike = "'" + tableLike + "'";
|
tableLike = "'" + tableLike + "'";
|
||||||
|
|
||||||
String entityTypeFilter = null;
|
StringBuffer entityTypeFilter = new StringBuffer();
|
||||||
if (entityType != null && entityType.trim().length() > 0)
|
if (entityType != null && entityType.trim().length() > 0)
|
||||||
{
|
{
|
||||||
entityTypeFilter = "EntityType IN (";
|
entityTypeFilter.append("EntityType IN (");
|
||||||
StringTokenizer tokenizer = new StringTokenizer(entityType, ",");
|
StringTokenizer tokenizer = new StringTokenizer(entityType, ",");
|
||||||
int i = 0;
|
int i = 0;
|
||||||
while(tokenizer.hasMoreTokens()) {
|
while(tokenizer.hasMoreTokens()) {
|
||||||
|
@ -785,15 +785,15 @@ public class ModelInterfaceGenerator
|
||||||
if (!token.startsWith("'") || !token.endsWith("'"))
|
if (!token.startsWith("'") || !token.endsWith("'"))
|
||||||
token = "'" + token + "'";
|
token = "'" + token + "'";
|
||||||
if (i > 0)
|
if (i > 0)
|
||||||
entityTypeFilter = entityTypeFilter + ",";
|
entityTypeFilter.append(",");
|
||||||
entityTypeFilter = entityTypeFilter + token;
|
entityTypeFilter.append(token);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
entityTypeFilter = entityTypeFilter+")";
|
entityTypeFilter.append(")");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
entityTypeFilter = "EntityType IN ('U','A')";
|
entityTypeFilter.append("EntityType IN ('U','A')");
|
||||||
}
|
}
|
||||||
|
|
||||||
String directory = sourceFolder.trim();
|
String directory = sourceFolder.trim();
|
||||||
|
@ -819,7 +819,7 @@ public class ModelInterfaceGenerator
|
||||||
.append(" OR IsView='N')")
|
.append(" OR IsView='N')")
|
||||||
.append(" AND IsActive = 'Y' AND TableName NOT LIKE '%_Trl' ");
|
.append(" AND IsActive = 'Y' AND TableName NOT LIKE '%_Trl' ");
|
||||||
sql.append(" AND TableName LIKE ").append(tableLike);
|
sql.append(" AND TableName LIKE ").append(tableLike);
|
||||||
sql.append(" AND ").append(entityTypeFilter);
|
sql.append(" AND ").append(entityTypeFilter.toString());
|
||||||
sql.append(" ORDER BY TableName");
|
sql.append(" ORDER BY TableName");
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -217,10 +217,10 @@ public abstract class OFXBankStatementHandler extends DefaultHandler
|
||||||
{
|
{
|
||||||
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
|
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
|
||||||
reader.mark(HEADER_SIZE + 100);
|
reader.mark(HEADER_SIZE + 100);
|
||||||
String header = "";
|
StringBuffer header = new StringBuffer("");
|
||||||
for (int i = 0; i < HEADER_SIZE; i++)
|
for (int i = 0; i < HEADER_SIZE; i++)
|
||||||
{
|
{
|
||||||
header = header + reader.readLine();
|
header.append(reader.readLine());
|
||||||
}
|
}
|
||||||
if ((header.indexOf("<?OFX") != -1) || (header.indexOf("<?ofx") != -1))
|
if ((header.indexOf("<?OFX") != -1) || (header.indexOf("<?ofx") != -1))
|
||||||
{
|
{
|
||||||
|
|
|
@ -214,18 +214,18 @@ public class MLanguage extends X_AD_Language
|
||||||
// some short formats have only one M and d (e.g. ths US)
|
// some short formats have only one M and d (e.g. ths US)
|
||||||
if (sFormat.indexOf("MM") == -1 && sFormat.indexOf("dd") == -1)
|
if (sFormat.indexOf("MM") == -1 && sFormat.indexOf("dd") == -1)
|
||||||
{
|
{
|
||||||
String nFormat = "";
|
StringBuffer nFormat = new StringBuffer("");
|
||||||
for (int i = 0; i < sFormat.length(); i++)
|
for (int i = 0; i < sFormat.length(); i++)
|
||||||
{
|
{
|
||||||
if (sFormat.charAt(i) == 'M')
|
if (sFormat.charAt(i) == 'M')
|
||||||
nFormat += "MM";
|
nFormat.append("MM");
|
||||||
else if (sFormat.charAt(i) == 'd')
|
else if (sFormat.charAt(i) == 'd')
|
||||||
nFormat += "dd";
|
nFormat.append("dd");
|
||||||
else
|
else
|
||||||
nFormat += sFormat.charAt(i);
|
nFormat.append(sFormat.charAt(i));
|
||||||
}
|
}
|
||||||
// System.out.println(sFormat + " => " + nFormat);
|
// System.out.println(sFormat + " => " + nFormat);
|
||||||
m_dateFormat.applyPattern(nFormat);
|
m_dateFormat.applyPattern(nFormat.toString());
|
||||||
}
|
}
|
||||||
// Unknown short format => use JDBC
|
// Unknown short format => use JDBC
|
||||||
if (m_dateFormat.toPattern().length() != 8)
|
if (m_dateFormat.toPattern().length() != 8)
|
||||||
|
@ -235,15 +235,15 @@ public class MLanguage extends X_AD_Language
|
||||||
if (m_dateFormat.toPattern().indexOf("yyyy") == -1)
|
if (m_dateFormat.toPattern().indexOf("yyyy") == -1)
|
||||||
{
|
{
|
||||||
sFormat = m_dateFormat.toPattern();
|
sFormat = m_dateFormat.toPattern();
|
||||||
String nFormat = "";
|
StringBuffer nFormat = new StringBuffer("");
|
||||||
for (int i = 0; i < sFormat.length(); i++)
|
for (int i = 0; i < sFormat.length(); i++)
|
||||||
{
|
{
|
||||||
if (sFormat.charAt(i) == 'y')
|
if (sFormat.charAt(i) == 'y')
|
||||||
nFormat += "yy";
|
nFormat.append("yy");
|
||||||
else
|
else
|
||||||
nFormat += sFormat.charAt(i);
|
nFormat.append(sFormat.charAt(i));
|
||||||
}
|
}
|
||||||
m_dateFormat.applyPattern(nFormat);
|
m_dateFormat.applyPattern(nFormat.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
|
|
|
@ -197,12 +197,14 @@ public class MPasswordRule extends X_AD_PasswordRule {
|
||||||
passwordData.setUsername(username);
|
passwordData.setUsername(username);
|
||||||
RuleResult result = validator.validate(passwordData);
|
RuleResult result = validator.validate(passwordData);
|
||||||
if (!result.isValid()) {
|
if (!result.isValid()) {
|
||||||
String error = Msg.getMsg(getCtx(), "PasswordErrors") + ": [";
|
StringBuffer error = new StringBuffer(Msg.getMsg(getCtx(), "PasswordErrors"));
|
||||||
|
error.append(": [");
|
||||||
for (String msg : validator.getMessages(result)) {
|
for (String msg : validator.getMessages(result)) {
|
||||||
error = error + " " + msg;
|
error.append(" ");
|
||||||
|
error.append(msg);
|
||||||
}
|
}
|
||||||
error = error + " ]";
|
error.append(" ]");
|
||||||
throw new AdempiereException(error);
|
throw new AdempiereException(error.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -626,15 +626,15 @@ public class Language implements Serializable
|
||||||
if (m_dateFormat.toPattern().indexOf("yyyy") == -1)
|
if (m_dateFormat.toPattern().indexOf("yyyy") == -1)
|
||||||
{
|
{
|
||||||
sFormat = m_dateFormat.toPattern();
|
sFormat = m_dateFormat.toPattern();
|
||||||
String nFormat = "";
|
StringBuffer nFormat = new StringBuffer("");
|
||||||
for (int i = 0; i < sFormat.length(); i++)
|
for (int i = 0; i < sFormat.length(); i++)
|
||||||
{
|
{
|
||||||
if (sFormat.charAt(i) == 'y')
|
if (sFormat.charAt(i) == 'y')
|
||||||
nFormat += "yy";
|
nFormat.append("yy");
|
||||||
else
|
else
|
||||||
nFormat += sFormat.charAt(i);
|
nFormat.append(sFormat.charAt(i));
|
||||||
}
|
}
|
||||||
m_dateFormat.applyPattern(nFormat);
|
m_dateFormat.applyPattern(nFormat.toString());
|
||||||
}
|
}
|
||||||
m_dateFormat.setLenient(true);
|
m_dateFormat.setLenient(true);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue