Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: openmrs/openmrs-core
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: d271606bf51d
Choose a base ref
...
head repository: openmrs/openmrs-core
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 21ff56164e66
Choose a head ref
  • 2 commits
  • 41 files changed
  • 2 contributors

Commits on Jan 27, 2014

  1. TRUNK-4226: Performance - Method concatenates strings using + in a loop

    Przemyslaw Gierszewski committed Jan 27, 2014
    Copy the full SHA
    3cd29ba View commit details
  2. Merge pull request #586 from tadeitto/TRUNK-4226

    TRUNK-4226: Performance - Method concatenates strings using + in a loop
    dkayiwa committed Jan 27, 2014
    Copy the full SHA
    21ff561 View commit details
Showing with 427 additions and 490 deletions.
  1. +4 −3 api/src/main/java/org/openmrs/Person.java
  2. +4 −5 api/src/main/java/org/openmrs/api/db/hibernate/HibernatePatientSetDAO.java
  3. +58 −113 api/src/main/java/org/openmrs/api/db/hibernate/HibernatePersonDAO.java
  4. +8 −8 api/src/main/java/org/openmrs/api/db/hibernate/HibernateUserDAO.java
  5. +3 −3 api/src/main/java/org/openmrs/api/db/hibernate/PatientSearchCriteria.java
  6. +3 −4 api/src/main/java/org/openmrs/api/impl/UserServiceImpl.java
  7. +108 −105 api/src/main/java/org/openmrs/arden/ArdenBaseTreeParser.java
  8. +11 −12 api/src/main/java/org/openmrs/arden/Comparison.java
  9. +9 −8 api/src/main/java/org/openmrs/arden/compiled/HiRiskLeadScreen.java
  10. +4 −3 api/src/main/java/org/openmrs/module/OpenmrsCoreModuleException.java
  11. +4 −4 api/src/main/java/org/openmrs/propertyeditor/LocationEditor.java
  12. +41 −53 api/src/main/java/org/openmrs/reporting/export/ConceptColumn.java
  13. +4 −5 api/src/main/java/org/openmrs/reporting/export/RowPerObsColumn.java
  14. +6 −6 api/src/main/java/org/openmrs/scheduler/SchedulerUtil.java
  15. +8 −7 api/src/main/java/org/openmrs/util/FormUtil.java
  16. +3 −3 api/src/main/java/org/openmrs/util/OpenmrsUtil.java
  17. +11 −12 api/src/main/java/org/openmrs/validator/EncounterValidator.java
  18. +4 −4 tools/src/main/java/org/openmrs/tools/doclet/ShouldTaglet.java
  19. +3 −3 web/src/main/java/org/openmrs/web/controller/ConceptFormController.java
  20. +4 −4 web/src/main/java/org/openmrs/web/controller/ForgotPasswordFormController.java
  21. +5 −5 web/src/main/java/org/openmrs/web/controller/OptionsFormController.java
  22. +4 −4 web/src/main/java/org/openmrs/web/controller/concept/ConceptClassListController.java
  23. +10 −10 web/src/main/java/org/openmrs/web/controller/concept/ConceptDatatypeListController.java
  24. +4 −4 web/src/main/java/org/openmrs/web/controller/encounter/LocationListController.java
  25. +9 −9 web/src/main/java/org/openmrs/web/controller/form/FormListController.java
  26. +6 −6 web/src/main/java/org/openmrs/web/controller/order/OrderDrugListController.java
  27. +10 −10 web/src/main/java/org/openmrs/web/controller/order/OrderListByPatientController.java
  28. +8 −8 web/src/main/java/org/openmrs/web/controller/order/OrderListController.java
  29. +4 −4 web/src/main/java/org/openmrs/web/controller/patient/MergePatientsFormController.java
  30. +11 −11 web/src/main/java/org/openmrs/web/controller/program/ProgramListController.java
  31. +10 −10 web/src/main/java/org/openmrs/web/controller/program/StateConversionListController.java
  32. +4 −4 web/src/main/java/org/openmrs/web/controller/user/PrivilegeListController.java
  33. +4 −4 web/src/main/java/org/openmrs/web/controller/user/RoleListController.java
  34. +4 −4 web/src/main/java/org/openmrs/web/controller/visit/ConfigureVisitsFormController.java
  35. +4 −4 web/src/main/java/org/openmrs/web/dwr/DWRFormService.java
  36. +7 −8 web/src/main/java/org/openmrs/web/dwr/DWRPatientService.java
  37. +3 −1 web/src/main/java/org/openmrs/web/filter/initialization/InitializationFilter.java
  38. +10 −10 web/src/main/java/org/openmrs/web/servlet/DownloadDictionaryServlet.java
  39. +4 −4 web/src/main/java/org/openmrs/web/servlet/MRNGeneratorServlet.java
  40. +1 −1 web/src/main/java/org/openmrs/web/servlet/QuickReportServlet.java
  41. +5 −4 web/src/main/java/org/openmrs/web/taglib/FieldGenTag.java
7 changes: 4 additions & 3 deletions api/src/main/java/org/openmrs/Person.java
Original file line number Diff line number Diff line change
@@ -584,13 +584,14 @@ public Map<String, PersonAttribute> getAttributeMap() {
* @return Returns a string with all the attributes
*/
public String printAttributes() {
String s = "";
StringBuilder s = new StringBuilder("");

for (PersonAttribute attribute : getAttributes()) {
s += attribute.getAttributeType() + " : " + attribute.getValue() + " : voided? " + attribute.isVoided() + "\n";
s.append(attribute.getAttributeType()).append(" : ").append(attribute.getValue()).append(" : voided? ").append(
attribute.isVoided()).append("\n");
}

return s;
return s.toString();
}

/**
Original file line number Diff line number Diff line change
@@ -1719,17 +1719,16 @@ public Map<Integer, Collection<Integer>> getActiveDrugIds(Collection<Integer> pa
whereClauses.add("(o.discontinued_date is null or o.discontinued_date > :fromDate)");
}

String sql = "select o.patient_id, d.drug_inventory_id " + "from orders o "
StringBuilder sql = new StringBuilder("select o.patient_id, d.drug_inventory_id " + "from orders o "
+ " inner join patient p on o.patient_id = p.patient_id and p.voided = false "
+ " inner join drug_order d on o.order_id = d.order_id ";
+ " inner join drug_order d on o.order_id = d.order_id ");
for (ListIterator<String> i = whereClauses.listIterator(); i.hasNext();) {
sql += (i.nextIndex() == 0 ? " where " : " and ");
sql += i.next();
sql.append((i.nextIndex() == 0 ? " where " : " and ")).append(i.next());
}

log.debug("sql= " + sql);

Query query = sessionFactory.getCurrentSession().createSQLQuery(sql);
Query query = sessionFactory.getCurrentSession().createSQLQuery(sql.toString());
query.setCacheMode(CacheMode.IGNORE);

if (toDate != null)
171 changes: 58 additions & 113 deletions api/src/main/java/org/openmrs/api/db/hibernate/HibernatePersonDAO.java
Original file line number Diff line number Diff line change
@@ -89,129 +89,75 @@ public Set<Person> getSimilarPeople(String name, Integer birthyear, String gende
name = name.replace(", ", " ");
String[] names = name.split(" ");

String q = "select p from Person p left join p.names as pname where p.personVoided = false and pname.voided = false and ";
StringBuilder q = new StringBuilder(
"select p from Person p left join p.names as pname where p.personVoided = false and pname.voided = false and ");

if (names.length == 1) {
q += "(";
q += " soundex(pname.givenName) = soundex(:n1)";
q += " or soundex(pname.middleName) = soundex(:n1)";
q += " or soundex(pname.familyName) = soundex(:n1) ";
q += " or soundex(pname.familyName2) = soundex(:n1) ";
q += ")";
q.append("(").append(" soundex(pname.givenName) = soundex(:n1)").append(
" or soundex(pname.middleName) = soundex(:n1)").append(" or soundex(pname.familyName) = soundex(:n1) ")
.append(" or soundex(pname.familyName2) = soundex(:n1) ").append(")");
} else if (names.length == 2) {
q += "(";
q += " case";
q += " when pname.givenName is null then 1";
q += " when pname.givenName = '' then 1";
q += " when soundex(pname.givenName) = soundex(:n1) then 4";
q += " when soundex(pname.givenName) = soundex(:n2) then 3";
q += " else 0 ";
q += " end";
q += " + ";
q += " case";
q += " when pname.middleName is null then 1";
q += " when pname.middleName = '' then 1";
q += " when soundex(pname.middleName) = soundex(:n1) then 3";
q += " when soundex(pname.middleName) = soundex(:n2) then 4";
q += " else 0 ";
q += " end";
q += " + ";
q += " case";
q += " when pname.familyName is null then 1";
q += " when pname.familyName = '' then 1";
q += " when soundex(pname.familyName) = soundex(:n1) then 3";
q += " when soundex(pname.familyName) = soundex(:n2) then 4";
q += " else 0 ";
q += " end";
q += " +";
q += " case";
q += " when pname.familyName2 is null then 1";
q += " when pname.familyName2 = '' then 1";
q += " when soundex(pname.familyName2) = soundex(:n1) then 3";
q += " when soundex(pname.familyName2) = soundex(:n2) then 4";
q += " else 0 ";
q += " end";
q += ") > 6";
q.append("(").append(" case").append(" when pname.givenName is null then 1").append(
" when pname.givenName = '' then 1").append(" when soundex(pname.givenName) = soundex(:n1) then 4")
.append(" when soundex(pname.givenName) = soundex(:n2) then 3").append(" else 0 ").append(" end")
.append(" + ").append(" case").append(" when pname.middleName is null then 1").append(
" when pname.middleName = '' then 1").append(
" when soundex(pname.middleName) = soundex(:n1) then 3").append(
" when soundex(pname.middleName) = soundex(:n2) then 4").append(" else 0 ").append(" end").append(
" + ").append(" case").append(" when pname.familyName is null then 1").append(
" when pname.familyName = '' then 1").append(
" when soundex(pname.familyName) = soundex(:n1) then 3").append(
" when soundex(pname.familyName) = soundex(:n2) then 4").append(" else 0 ").append(" end").append(
" +").append(" case").append(" when pname.familyName2 is null then 1").append(
" when pname.familyName2 = '' then 1").append(
" when soundex(pname.familyName2) = soundex(:n1) then 3").append(
" when soundex(pname.familyName2) = soundex(:n2) then 4").append(" else 0 ").append(" end")
.append(") > 6");
} else if (names.length == 3) {
q += "(";
q += " case";
q += " when pname.givenName is null then 0";
q += " when soundex(pname.givenName) = soundex(:n1) then 3";
q += " when soundex(pname.givenName) = soundex(:n2) then 2";
q += " when soundex(pname.givenName) = soundex(:n3) then 1";
q += " else 0 ";
q += " end";
q += " + ";
q += " case";
q += " when pname.middleName is null then 0";
q += " when soundex(pname.middleName) = soundex(:n1) then 2";
q += " when soundex(pname.middleName) = soundex(:n2) then 3";
q += " when soundex(pname.middleName) = soundex(:n3) then 1";
q += " else 0";
q += " end";
q += " + ";
q += " case";
q += " when pname.familyName is null then 0";
q += " when soundex(pname.familyName) = soundex(:n1) then 1";
q += " when soundex(pname.familyName) = soundex(:n2) then 2";
q += " when soundex(pname.familyName) = soundex(:n3) then 3";
q += " else 0";
q += " end";
q += " +";
q += " case";
q += " when pname.familyName2 is null then 0";
q += " when soundex(pname.familyName2) = soundex(:n1) then 1";
q += " when soundex(pname.familyName2) = soundex(:n2) then 2";
q += " when soundex(pname.familyName2) = soundex(:n3) then 3";
q += " else 0";
q += " end";
q += ") >= 5";
q.append("(").append(" case").append(" when pname.givenName is null then 0").append(
" when soundex(pname.givenName) = soundex(:n1) then 3").append(
" when soundex(pname.givenName) = soundex(:n2) then 2").append(
" when soundex(pname.givenName) = soundex(:n3) then 1").append(" else 0 ").append(" end").append(" + ")
.append(" case").append(" when pname.middleName is null then 0").append(
" when soundex(pname.middleName) = soundex(:n1) then 2").append(
" when soundex(pname.middleName) = soundex(:n2) then 3").append(
" when soundex(pname.middleName) = soundex(:n3) then 1").append(" else 0").append(" end").append(
" + ").append(" case").append(" when pname.familyName is null then 0").append(
" when soundex(pname.familyName) = soundex(:n1) then 1").append(
" when soundex(pname.familyName) = soundex(:n2) then 2").append(
" when soundex(pname.familyName) = soundex(:n3) then 3").append(" else 0").append(" end").append(
" +").append(" case").append(" when pname.familyName2 is null then 0").append(
" when soundex(pname.familyName2) = soundex(:n1) then 1").append(
" when soundex(pname.familyName2) = soundex(:n2) then 2").append(
" when soundex(pname.familyName2) = soundex(:n3) then 3").append(" else 0").append(" end").append(
") >= 5");
} else {

// This is simply an alternative method of name matching which scales better
// for large names, although it is hard to imagine getting names with more than
// six or so tokens. This can be easily updated to attain more desirable
// results; it is just a working alternative to throwing an exception.

q += "(";
q += " case";
q += " when pname.givenName is null then 0";
q.append("(").append(" case").append(" when pname.givenName is null then 0");
for (int i = 0; i < names.length; i++) {
q += " when soundex(pname.givenName) = soundex(:n" + (i + 1) + ") then 1";
q.append(" when soundex(pname.givenName) = soundex(:n").append(i + 1).append(") then 1");
}
q += " else 0";
q += " end";
q += ")";
q += "+";
q += "(";
q += " case";
q += " when pname.middleName is null then 0";
q.append(" else 0").append(" end").append(")").append("+").append("(").append(" case").append(
" when pname.middleName is null then 0");
for (int i = 0; i < names.length; i++) {
q += " when soundex(pname.middleName) = soundex(:n" + (i + 1) + ") then 1";
q.append(" when soundex(pname.middleName) = soundex(:n").append(i + 1).append(") then 1");
}
q += " else 0";
q += " end";
q += ")";
q += "+";
q += "(";
q += " case";
q += " when pname.familyName is null then 0";
q.append(" else 0").append(" end").append(")").append("+").append("(").append(" case").append(
" when pname.familyName is null then 0");
for (int i = 0; i < names.length; i++) {
q += " when soundex(pname.familyName) = soundex(:n" + (i + 1) + ") then 1";
q.append(" when soundex(pname.familyName) = soundex(:n").append(i + 1).append(") then 1");
}
q += " else 0";
q += " end";
q += ")";
q += "+";
q += "(";
q += " case";
q += " when pname.familyName2 is null then 0";
q.append(" else 0").append(" end").append(")").append("+").append("(").append(" case").append(
" when pname.familyName2 is null then 0");
for (int i = 0; i < names.length; i++) {
q += " when soundex(pname.familyName2) = soundex(:n" + (i + 1) + ") then 1";
q.append(" when soundex(pname.familyName2) = soundex(:n").append(i + 1).append(") then 1");
}
q += " else 0";
q += " end";
q += ") >= " + (int) (names.length * .75); // if most of the names have at least a hit somewhere
q.append(" else 0").append(" end").append(") >= ").append((int) (names.length * .75)); // if most of the names have at least a hit somewhere
}

String birthdayMatch = " (year(p.birthdate) between " + (birthyear - 1) + " and " + (birthyear + 1)
@@ -220,25 +166,24 @@ public Set<Person> getSimilarPeople(String name, Integer birthyear, String gende
String genderMatch = " (p.gender = :gender or p.gender = '') ";

if (birthyear != 0 && gender != null) {
q += " and (" + birthdayMatch + "and " + genderMatch + ") ";
q.append(" and (" + birthdayMatch + "and " + genderMatch + ") ");
} else if (birthyear != 0) {
q += " and " + birthdayMatch;
q.append(" and " + birthdayMatch);
} else if (gender != null) {
q += " and " + genderMatch;
q.append(" and " + genderMatch);
}

q += " order by pname.givenName asc,";
q += " pname.middleName asc,";
q += " pname.familyName asc";
q += " pname.familyName2 asc";
q.append(" order by pname.givenName asc,").append(" pname.middleName asc,").append(" pname.familyName asc").append(
" pname.familyName2 asc");

Query query = sessionFactory.getCurrentSession().createQuery(q);
String qStr = q.toString();
Query query = sessionFactory.getCurrentSession().createQuery(qStr);

for (int nameIndex = 0; nameIndex < names.length; nameIndex++) {
query.setString("n" + (nameIndex + 1), names[nameIndex]);
}

if (q.contains(":gender"))
if (qStr.contains(":gender"))
query.setString("gender", gender);

people.addAll(query.list());
Original file line number Diff line number Diff line change
@@ -550,31 +550,31 @@ private Query createUserSearchQuery(String name, List<Role> roles, boolean inclu
criteria.add("user.retired = false");

// build the hql query
String hql = hqlSelectStart;
StringBuilder hql = new StringBuilder(hqlSelectStart);
boolean searchOnRoles = false;

if (CollectionUtils.isNotEmpty(roles)) {
hql += "inner join user.roles as role ";
hql.append("inner join user.roles as role ");
searchOnRoles = true;
}

if (criteria.size() > 0 || searchOnRoles)
hql += "where ";
hql.append("where ");
for (Iterator<String> i = criteria.iterator(); i.hasNext();) {
hql += i.next() + " ";
hql.append(i.next()).append(" ");
if (i.hasNext())
hql += "and ";
hql.append("and ");
}

//Match against the specified roles
if (searchOnRoles) {
if (criteria.size() > 0) {
hql += " and ";
hql.append(" and ");
}
hql += " role in (:roleList)";
hql.append(" role in (:roleList)");
}

Query query = sessionFactory.getCurrentSession().createQuery(hql);
Query query = sessionFactory.getCurrentSession().createQuery(hql.toString());

for (Map.Entry<String, String> e : namesMap.entrySet())
query.setString(e.getKey(), e.getValue());
Original file line number Diff line number Diff line change
@@ -315,7 +315,7 @@ private Criterion prepareCriterionForName(String name) {
Conjunction conjunction = Restrictions.conjunction();
String[] nameParts = getQueryParts(name);
if (nameParts.length > 0) {
String multiName = nameParts[0];
StringBuilder multiName = new StringBuilder(nameParts[0]);

for (int i = 0; i < nameParts.length; i++) {
String singleName = nameParts[i];
@@ -325,8 +325,8 @@ private Criterion prepareCriterionForName(String name) {
Criterion criterion = singleNameCriterion;

if (i > 0) {
multiName += " " + singleName;
Criterion multiNameCriterion = getCriterionForName(multiName);
multiName.append(" " + singleName);
Criterion multiNameCriterion = getCriterionForName(multiName.toString());
criterion = Restrictions.or(singleNameCriterion, multiNameCriterion);
}

7 changes: 3 additions & 4 deletions api/src/main/java/org/openmrs/api/impl/UserServiceImpl.java
Original file line number Diff line number Diff line change
@@ -460,11 +460,10 @@ private void checkPrivileges(User user) {
if (requiredPrivs.size() == 1) {
throw new APIException("You must have privilege '" + requiredPrivs.get(0) + "' in order to assign it.");
} else if (requiredPrivs.size() > 1) {
String txt = "You must have the following privileges in order to assign them: ";
StringBuilder txt = new StringBuilder("You must have the following privileges in order to assign them: ");
for (String s : requiredPrivs)
txt += s + ", ";
txt = txt.substring(0, txt.length() - 2);
throw new APIException(txt);
txt.append(s).append(", ");
throw new APIException(txt.substring(0, txt.length() - 2));
}
}

Loading