)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"0e916af7d7595c79f761124d9106a07e21e5f82b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Angelo Mendonca \u003cangelomendonca@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-02-04 01:43:38 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Reverted the order of imports and added single sql instead of three"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I314bc746cf25152db018e27c5a7f64ee7a0d3055"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"da86d52c_d5e2092e","line":7,"updated":"2015-02-04 15:12:12.000000000","message":"Change this to your original message about what this patch is doing.\n\nUse git commit --amend","commit_id":"42c13ee57bac6b32b2bdebb3a3139f294d73a124"}],"java/src/main/java/monasca/api/infrastructure/persistence/mysql/AlarmDefinitionMySqlRepositoryImpl.java":[{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"d8be4120cf767008817259fc8e2dcfe8d0fd1056","unresolved":false,"context_lines":[{"line_number":28,"context_line":"import org.skife.jdbi.v2.DBI;"},{"line_number":29,"context_line":"import org.skife.jdbi.v2.Handle;"},{"line_number":30,"context_line":"import org.skife.jdbi.v2.Query;"},{"line_number":31,"context_line":"import org.skife.jdbi.v2.util.StringMapper;"},{"line_number":32,"context_line":"import org.skife.jdbi.v2.tweak.ResultSetMapper;"},{"line_number":33,"context_line":"import org.skife.jdbi.v2.StatementContext;"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-java","patch_set":15,"id":"da86d52c_6e095030","line":31,"updated":"2015-02-12 15:34:09.000000000","message":"StringMapper is no longer used. Remove this import","commit_id":"f4047d2fed9799b956f883d7d2410a39956132b6"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"d8be4120cf767008817259fc8e2dcfe8d0fd1056","unresolved":false,"context_lines":[{"line_number":46,"context_line":"import monasca.api.domain.model.alarmdefinition.AlarmDefinitionRepository;"},{"line_number":47,"context_line":"import monasca.api.infrastructure.persistence.DimensionQueries;"},{"line_number":48,"context_line":"import monasca.api.infrastructure.persistence.SubAlarmQueries;"},{"line_number":49,"context_line":"import monasca.common.persistence.BeanMapper;"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"import com.google.common.base.Splitter;"},{"line_number":52,"context_line":"import com.google.common.collect.Lists;"}],"source_content_type":"text/x-java","patch_set":15,"id":"da86d52c_1108f926","line":49,"updated":"2015-02-12 15:34:09.000000000","message":"BeanMapper is no longer used. Remove this import","commit_id":"f4047d2fed9799b956f883d7d2410a39956132b6"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"d8be4120cf767008817259fc8e2dcfe8d0fd1056","unresolved":false,"context_lines":[{"line_number":135,"context_line":"      String query \u003d \"select T1.*, \""},{"line_number":136,"context_line":"          + \"group_concat(alarm_action.alarm_state) as states, group_concat(alarm_action.action_id) as notificationIds from  (select distinct alarm_definition.id,tenant_id,\""},{"line_number":137,"context_line":"          + \"name,description, severity, expression, match_by, actions_enabled, alarm_definition.created_at, alarm_definition.updated_at,\""},{"line_number":138,"context_line":"          + \" alarm_definition.deleted_at from alarm_definition inner join sub_alarm_definition sub on alarm_definition.id \u003d sub.alarm_definition_id\""},{"line_number":139,"context_line":"          + \" left outer join sub_alarm_definition_dimension dim on sub.id \u003d dim.sub_alarm_definition_id%s where tenant_id \u003d :tenantId\""},{"line_number":140,"context_line":"          + \" and deleted_at is NULL %s order by %s alarm_definition.created_at %s) AS T1 INNER JOIN alarm_action ON T1.id\u003dalarm_action.alarm_definition_id\""},{"line_number":141,"context_line":"          + \" group by T1.id\";"}],"source_content_type":"text/x-java","patch_set":15,"id":"da86d52c_fbbb44c1","line":138,"updated":"2015-02-12 15:34:09.000000000","message":"The inner join prevents Alarm Definitions from being found that don\u0027t have any Notifications","commit_id":"f4047d2fed9799b956f883d7d2410a39956132b6"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"d8be4120cf767008817259fc8e2dcfe8d0fd1056","unresolved":false,"context_lines":[{"line_number":180,"context_line":"    try (Handle h \u003d db.open()) {"},{"line_number":181,"context_line":"      String query \u003d \"select alarm_definition.*,\""},{"line_number":182,"context_line":"          + \"group_concat(alarm_action.action_id) as notificationIds,group_concat(alarm_action.alarm_state) as states \""},{"line_number":183,"context_line":"          + \"from alarm_definition, alarm_action where alarm_definition.id\u003dalarm_action.alarm_definition_id \""},{"line_number":184,"context_line":"          + \"and alarm_definition.tenant_id\u003d:tenantId and alarm_definition.id\u003d:alarmDefId and alarm_definition.deleted_at is NULL group by alarm_definition.id\";"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"      Query\u003c?\u003e q \u003d h.createQuery(query);"}],"source_content_type":"text/x-java","patch_set":15,"id":"da86d52c_1bfd786e","line":183,"updated":"2015-02-12 15:34:09.000000000","message":"The lack of a join on alarm_action prevents an AlarmDefinition from being found that doesn\u0027t have any Notifications","commit_id":"f4047d2fed9799b956f883d7d2410a39956132b6"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"d8be4120cf767008817259fc8e2dcfe8d0fd1056","unresolved":false,"context_lines":[{"line_number":298,"context_line":"          alarmState.name());"},{"line_number":299,"context_line":"  }"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"  private void persistActions(Handle handle, String id, AlarmState alarmState, List\u003cString\u003e actions) {"},{"line_number":303,"context_line":"    if (actions !\u003d null)"},{"line_number":304,"context_line":"      for (String action : actions)"}],"source_content_type":"text/x-java","patch_set":15,"id":"da86d52c_b1164d47","line":301,"updated":"2015-02-12 15:34:09.000000000","message":"Remove extra blank line","commit_id":"f4047d2fed9799b956f883d7d2410a39956132b6"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"d8be4120cf767008817259fc8e2dcfe8d0fd1056","unresolved":false,"context_lines":[{"line_number":305,"context_line":"        handle.insert(\"insert into alarm_action values (?, ?, ?)\", id, alarmState.name(), action);"},{"line_number":306,"context_line":"  }"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"  private void createSubExpressions(Handle handle, String id,"},{"line_number":310,"context_line":"      Map\u003cString, AlarmSubExpression\u003e alarmSubExpressions) {"},{"line_number":311,"context_line":"    if (alarmSubExpressions !\u003d null) {"}],"source_content_type":"text/x-java","patch_set":15,"id":"da86d52c_d1282188","line":308,"updated":"2015-02-12 15:34:09.000000000","message":"Remove extra blank line","commit_id":"f4047d2fed9799b956f883d7d2410a39956132b6"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"d8be4120cf767008817259fc8e2dcfe8d0fd1056","unresolved":false,"context_lines":[{"line_number":329,"context_line":"                dimEntry.getKey(), dimEntry.getValue());"},{"line_number":330,"context_line":"      }"},{"line_number":331,"context_line":"    }"},{"line_number":332,"context_line":"  }"},{"line_number":333,"context_line":"  private static class AlarmDefinitionMapper implements ResultSetMapper\u003cAlarmDefinition\u003e {"},{"line_number":334,"context_line":"    private static final Splitter COMMA_SPLITTER \u003d Splitter.on(\u0027,\u0027)"},{"line_number":335,"context_line":"        .omitEmptyStrings().trimResults();"}],"source_content_type":"text/x-java","patch_set":15,"id":"da86d52c_111f195c","line":332,"updated":"2015-02-12 15:34:09.000000000","message":"Add a blank line","commit_id":"f4047d2fed9799b956f883d7d2410a39956132b6"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"bb11b42b84ab334b543da56caa78e96b6167d493","unresolved":false,"context_lines":[{"line_number":136,"context_line":"          + \" alarm_definition.deleted_at FROM alarm_definition LEFT OUTER JOIN sub_alarm_definition sub ON alarm_definition.id \u003d sub.alarm_definition_id\""},{"line_number":137,"context_line":"          + \" LEFT OUTER JOIN sub_alarm_definition_dimension dim ON sub.id \u003d dim.sub_alarm_definition_id%s WHERE tenant_id \u003d :tenantId\""},{"line_number":138,"context_line":"          + \" AND deleted_at IS NULL %s ORDER BY %s alarm_definition.created_at %s) AS T1 LEFT OUTER JOIN alarm_action ON T1.id\u003dalarm_action.alarm_definition_id\""},{"line_number":139,"context_line":"          + \" GROUP BY T1.id\";"},{"line_number":140,"context_line":"      StringBuilder sbWhere \u003d new StringBuilder();"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"      if (name !\u003d null) {"}],"source_content_type":"text/x-java","patch_set":18,"id":"da86d52c_788fa8cd","line":139,"updated":"2015-02-17 23:13:03.000000000","message":"can we format this so it\u0027s readable?\n\nI liked jonathan\u0027s convention for nameing tables. can we stick with that? alarm_definition.foo -\u003e ad.foo \n\nselecting * is probably not a good idea. If the table changes, then a different set of columns could be returned.","commit_id":"1571cbeea721d70038a72e89d42fcfbc6029684f"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"bb11b42b84ab334b543da56caa78e96b6167d493","unresolved":false,"context_lines":[{"line_number":176,"context_line":"  public AlarmDefinition findById(String tenantId, String alarmDefId) {"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    try (Handle h \u003d db.open()) {"},{"line_number":179,"context_line":"      String query \u003d \"SELECT alarm_definition.*,\""},{"line_number":180,"context_line":"          + \"GROUP_CONCAT(alarm_action.action_id) AS notificationIds,group_concat(alarm_action.alarm_state) AS states \""},{"line_number":181,"context_line":"          + \"FROM alarm_definition LEFT OUTER JOIN alarm_action ON alarm_definition.id\u003dalarm_action.alarm_definition_id \""},{"line_number":182,"context_line":"          + \" WHERE alarm_definition.tenant_id\u003d:tenantId AND alarm_definition.id\u003d:alarmDefId AND alarm_definition.deleted_at IS NULL GROUP BY alarm_definition.id\";"}],"source_content_type":"text/x-java","patch_set":18,"id":"da86d52c_fb1c7268","line":179,"updated":"2015-02-17 23:13:03.000000000","message":"selecting * is not a good idea.","commit_id":"1571cbeea721d70038a72e89d42fcfbc6029684f"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"bb11b42b84ab334b543da56caa78e96b6167d493","unresolved":false,"context_lines":[{"line_number":180,"context_line":"          + \"GROUP_CONCAT(alarm_action.action_id) AS notificationIds,group_concat(alarm_action.alarm_state) AS states \""},{"line_number":181,"context_line":"          + \"FROM alarm_definition LEFT OUTER JOIN alarm_action ON alarm_definition.id\u003dalarm_action.alarm_definition_id \""},{"line_number":182,"context_line":"          + \" WHERE alarm_definition.tenant_id\u003d:tenantId AND alarm_definition.id\u003d:alarmDefId AND alarm_definition.deleted_at IS NULL GROUP BY alarm_definition.id\";"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"      Query\u003c?\u003e q \u003d h.createQuery(query);"},{"line_number":185,"context_line":"      q.bind(\"tenantId\", tenantId);"},{"line_number":186,"context_line":"      q.bind(\"alarmDefId\", alarmDefId);"}],"source_content_type":"text/x-java","patch_set":18,"id":"da86d52c_1b594635","line":183,"updated":"2015-02-17 23:13:03.000000000","message":"can we try to format this a bit better?","commit_id":"1571cbeea721d70038a72e89d42fcfbc6029684f"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"bb11b42b84ab334b543da56caa78e96b6167d493","unresolved":false,"context_lines":[{"line_number":188,"context_line":"      q.registerMapper(new AlarmDefinitionMapper());"},{"line_number":189,"context_line":"      q \u003d q.mapTo(AlarmDefinition.class);"},{"line_number":190,"context_line":"      AlarmDefinition alarmDefinition \u003d (AlarmDefinition) q.first();"},{"line_number":191,"context_line":"     if(alarmDefinition \u003d\u003d null)"},{"line_number":192,"context_line":"       throw new EntityNotFoundException(\"No alarm definition exists for %s\", alarmDefId);"},{"line_number":193,"context_line":"      return alarmDefinition;"},{"line_number":194,"context_line":"    }"}],"source_content_type":"text/x-java","patch_set":18,"id":"da86d52c_98a37c42","line":191,"updated":"2015-02-17 23:13:03.000000000","message":"can we use braces?","commit_id":"1571cbeea721d70038a72e89d42fcfbc6029684f"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"bb11b42b84ab334b543da56caa78e96b6167d493","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        {"},{"line_number":351,"context_line":"          undeterminedActionIds.add(notifications.get(stateAndActionIndex));"},{"line_number":352,"context_line":"        }"},{"line_number":353,"context_line":"        if (singleState.equals(AlarmState.OK.name()))"},{"line_number":354,"context_line":"          okActionIds.add(notifications.get(stateAndActionIndex));"},{"line_number":355,"context_line":"        if (singleState.equals(AlarmState.ALARM.name()))"},{"line_number":356,"context_line":"          alarmActionIds.add(notifications.get(stateAndActionIndex));"}],"source_content_type":"text/x-java","patch_set":18,"id":"da86d52c_bba11aab","line":353,"updated":"2015-02-17 23:13:03.000000000","message":"braces?","commit_id":"1571cbeea721d70038a72e89d42fcfbc6029684f"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"bb11b42b84ab334b543da56caa78e96b6167d493","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        if (singleState.equals(AlarmState.OK.name()))"},{"line_number":354,"context_line":"          okActionIds.add(notifications.get(stateAndActionIndex));"},{"line_number":355,"context_line":"        if (singleState.equals(AlarmState.ALARM.name()))"},{"line_number":356,"context_line":"          alarmActionIds.add(notifications.get(stateAndActionIndex));"},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"        stateAndActionIndex++;"},{"line_number":359,"context_line":"      }"}],"source_content_type":"text/x-java","patch_set":18,"id":"da86d52c_3b952a40","line":356,"updated":"2015-02-17 23:13:03.000000000","message":"braces?","commit_id":"1571cbeea721d70038a72e89d42fcfbc6029684f"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"bb11b42b84ab334b543da56caa78e96b6167d493","unresolved":false,"context_lines":[{"line_number":364,"context_line":"          alarmActionIds, okActionIds, undeterminedActionIds);"},{"line_number":365,"context_line":"      }"},{"line_number":366,"context_line":"    private List\u003cString\u003e splitStringIntoList(String commaDelimitedString) {"},{"line_number":367,"context_line":"      if(commaDelimitedString\u003d\u003dnull)"},{"line_number":368,"context_line":"        return new ArrayList\u003cString\u003e();"},{"line_number":369,"context_line":"      Iterable\u003cString\u003e split \u003d COMMA_SPLITTER.split(commaDelimitedString);"},{"line_number":370,"context_line":"      return Lists.newArrayList(split);"}],"source_content_type":"text/x-java","patch_set":18,"id":"da86d52c_b8c76011","line":367,"updated":"2015-02-17 23:13:03.000000000","message":"can we put ws around operators? i.e., x \u003d\u003d null\n\ncan we make sure we use braces?","commit_id":"1571cbeea721d70038a72e89d42fcfbc6029684f"}],"src/main/java/monasca/api/infrastructure/persistence/mysql/AlarmDefinitionMySqlRepositoryImpl.java":[{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"0e916af7d7595c79f761124d9106a07e21e5f82b","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import java.sql.ResultSet;"},{"line_number":17,"context_line":"import java.sql.SQLException;"},{"line_number":18,"context_line":"import java.util.ArrayList;"},{"line_number":19,"context_line":"import java.util.Collection; "},{"line_number":20,"context_line":"import java.util.Collections;"},{"line_number":21,"context_line":"import java.util.HashMap;"},{"line_number":22,"context_line":"import java.util.List;"}],"source_content_type":"text/x-java","patch_set":2,"id":"da86d52c_b5bcb507","line":19,"updated":"2015-02-04 15:12:12.000000000","message":"Space at end of line","commit_id":"42c13ee57bac6b32b2bdebb3a3139f294d73a124"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"0e916af7d7595c79f761124d9106a07e21e5f82b","unresolved":false,"context_lines":[{"line_number":54,"context_line":" * Alarm repository implementation."},{"line_number":55,"context_line":" */"},{"line_number":56,"context_line":"public class AlarmDefinitionMySqlRepositoryImpl implements"},{"line_number":57,"context_line":"    AlarmDefinitionRepository {"},{"line_number":58,"context_line":"  private static final Joiner COMMA_JOINER \u003d Joiner.on(\u0027,\u0027);"},{"line_number":59,"context_line":"  private static final String SUB_ALARM_SQL \u003d \"select sa.*, sad.dimensions from sub_alarm_definition as sa \""},{"line_number":60,"context_line":"      + \"left join (select sub_alarm_definition_id, group_concat(dimension_name, \u0027\u003d\u0027, value) as dimensions from sub_alarm_definition_dimension group by sub_alarm_definition_id ) as sad \""}],"source_content_type":"text/x-java","patch_set":2,"id":"da86d52c_754ddd3d","line":57,"updated":"2015-02-04 15:12:12.000000000","message":"Don\u0027t reformat things you didn\u0027t change","commit_id":"42c13ee57bac6b32b2bdebb3a3139f294d73a124"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"0e916af7d7595c79f761124d9106a07e21e5f82b","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"  @Override"},{"line_number":71,"context_line":"  public AlarmDefinition create(String tenantId, String id, String name,"},{"line_number":72,"context_line":"      String description, String severity, String expression,"},{"line_number":73,"context_line":"      Map\u003cString, AlarmSubExpression\u003e subExpressions, List\u003cString\u003e matchBy,"},{"line_number":74,"context_line":"      List\u003cString\u003e alarmActions, List\u003cString\u003e okActions,"},{"line_number":75,"context_line":"      List\u003cString\u003e undeterminedActions) {"}],"source_content_type":"text/x-java","patch_set":2,"id":"da86d52c_954a5124","line":72,"updated":"2015-02-04 15:12:12.000000000","message":"And here. Etc.","commit_id":"42c13ee57bac6b32b2bdebb3a3139f294d73a124"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"0e916af7d7595c79f761124d9106a07e21e5f82b","unresolved":false,"context_lines":[{"line_number":152,"context_line":"      StringBuilder sbWhere \u003d new StringBuilder();"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"      if (name !\u003d null) {"},{"line_number":155,"context_line":"        sbWhere.append(\" and alarm_definition.name \u003d :name\");"},{"line_number":156,"context_line":"      }"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"      if (offset !\u003d null) {"}],"source_content_type":"text/x-java","patch_set":2,"id":"da86d52c_b56af57e","line":155,"updated":"2015-02-04 15:12:12.000000000","message":"The full name is good","commit_id":"42c13ee57bac6b32b2bdebb3a3139f294d73a124"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"0e916af7d7595c79f761124d9106a07e21e5f82b","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    }"},{"line_number":185,"context_line":"  }"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"  public AlarmDefinition findById(String tenantId, String alarmDefId) {"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    try (Handle h \u003d db.open()) {"},{"line_number":190,"context_line":"      String query \u003d \"select alarm_definition.*, group_concat(notification_method.name)as alarmNames,\""}],"source_content_type":"text/x-java","patch_set":2,"id":"da86d52c_d515a9e5","line":187,"updated":"2015-02-04 15:12:12.000000000","message":"The @Override was lost","commit_id":"42c13ee57bac6b32b2bdebb3a3139f294d73a124"}]}
