)]}'
{"java/pom.xml":[{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"cd5a458f7e8192880fbbb9bdac5ffda924d6560c","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            \u003cartifactId\u003emonasca-common-hibernate\u003c/artifactId\u003e"},{"line_number":75,"context_line":"            \u003cversion\u003e${mon.common.version}\u003c/version\u003e"},{"line_number":76,"context_line":"        \u003c/dependency\u003e"},{"line_number":77,"context_line":"\t\u003cdependency\u003e"},{"line_number":78,"context_line":"\t    \u003cgroupId\u003ecommons-validator\u003c/groupId\u003e"},{"line_number":79,"context_line":"\t    \u003cartifactId\u003ecommons-validator\u003c/artifactId\u003e"},{"line_number":80,"context_line":"\t    \u003cversion\u003e1.4.0\u003c/version\u003e"}],"source_content_type":"application/xml","patch_set":7,"id":"da20952f_b6aca1ee","line":77,"updated":"2015-08-26 19:55:57.000000000","message":"Can we get rid of these tabs while we are editing this file?","commit_id":"13f4a6753fe5c661410489969821431d8216e7bd"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"a8f6abfbd82d53137d6fd7b13019ba6563ae0774","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            \u003cartifactId\u003emonasca-common-hibernate\u003c/artifactId\u003e"},{"line_number":75,"context_line":"            \u003cversion\u003e${mon.common.version}\u003c/version\u003e"},{"line_number":76,"context_line":"        \u003c/dependency\u003e"},{"line_number":77,"context_line":"\t\u003cdependency\u003e"},{"line_number":78,"context_line":"\t    \u003cgroupId\u003ecommons-validator\u003c/groupId\u003e"},{"line_number":79,"context_line":"\t    \u003cartifactId\u003ecommons-validator\u003c/artifactId\u003e"},{"line_number":80,"context_line":"\t    \u003cversion\u003e1.4.0\u003c/version\u003e"}],"source_content_type":"application/xml","patch_set":7,"id":"da20952f_a2d03220","line":77,"in_reply_to":"da20952f_b6aca1ee","updated":"2015-08-31 09:36:00.000000000","message":"Done","commit_id":"13f4a6753fe5c661410489969821431d8216e7bd"}],"java/src/main/java/monasca/api/ApiConfig.java":[{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"80700672f7af7073fe8f63eed388baeb493140f9","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"import org.hibernate.validator.constraints.NotEmpty;"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"import com.fasterxml.jackson.annotation.JsonProperty;"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"public class ApiConfig extends Configuration {"}],"source_content_type":"text/x-java","patch_set":1,"id":"9a41bdd9_6341e337","line":30,"updated":"2015-07-15 04:26:31.000000000","message":"Was just wondering why the order of imports changed here.","commit_id":"747151138b1cb96c9b6940e9c7c6b5939cab7a74"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"b553947a03f23d11c807893f0e387af44985397b","unresolved":false,"context_lines":[{"line_number":61,"context_line":"  @JsonProperty"},{"line_number":62,"context_line":"  public DatabaseConfiguration databaseConfiguration;"},{"line_number":63,"context_line":"  @Valid"},{"line_number":64,"context_line":"  @NotNull"},{"line_number":65,"context_line":"  public HibernateDbConfiguration hibernate;"},{"line_number":66,"context_line":"}"}],"source_content_type":"text/x-java","patch_set":4,"id":"1a4dcd0f_5de2b702","line":64,"updated":"2015-08-16 22:29:40.000000000","message":"This would break backwards compatibility since it is requiring a Hibernate config","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"673db695591536e2744f712b85da2c7bceaedd6a","unresolved":false,"context_lines":[{"line_number":61,"context_line":"  @JsonProperty"},{"line_number":62,"context_line":"  public DatabaseConfiguration databaseConfiguration;"},{"line_number":63,"context_line":"  @Valid"},{"line_number":64,"context_line":"  @NotNull"},{"line_number":65,"context_line":"  public HibernateDbConfiguration hibernate;"},{"line_number":66,"context_line":"}"}],"source_content_type":"text/x-java","patch_set":4,"id":"fa1b9901_cf5bbd2d","line":64,"in_reply_to":"1a4dcd0f_5de2b702","updated":"2015-08-17 12:53:40.000000000","message":"Correct, it\u0027ll be fixed.","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"}],"java/src/main/java/monasca/api/MonApiModule.java":[{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"b553947a03f23d11c807893f0e387af44985397b","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"import kafka.javaapi.producer.Producer;"},{"line_number":26,"context_line":"import kafka.producer.ProducerConfig;"},{"line_number":27,"context_line":"import monasca.api.app.ApplicationModule;"},{"line_number":28,"context_line":"import monasca.api.domain.DomainModule;"},{"line_number":29,"context_line":"import monasca.api.infrastructure.InfrastructureModule;"},{"line_number":30,"context_line":"import monasca.common.hibernate.db.AlarmActionDb;"}],"source_content_type":"text/x-java","patch_set":4,"id":"1a4dcd0f_ddbc87dd","line":27,"updated":"2015-08-16 22:29:40.000000000","message":"The monasca imports should be the last set of imports and separated from the previous set by a blank line","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"e9eb65c35cbe66b8cd86ec293d7d7889794725d7","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"import kafka.javaapi.producer.Producer;"},{"line_number":26,"context_line":"import kafka.producer.ProducerConfig;"},{"line_number":27,"context_line":"import monasca.api.app.ApplicationModule;"},{"line_number":28,"context_line":"import monasca.api.domain.DomainModule;"},{"line_number":29,"context_line":"import monasca.api.infrastructure.InfrastructureModule;"},{"line_number":30,"context_line":"import monasca.common.hibernate.db.AlarmActionDb;"}],"source_content_type":"text/x-java","patch_set":4,"id":"fa1b9901_e709de96","line":27,"in_reply_to":"1a4dcd0f_ddbc87dd","updated":"2015-08-18 09:03:20.000000000","message":"Done","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"b553947a03f23d11c807893f0e387af44985397b","unresolved":false,"context_lines":[{"line_number":70,"context_line":"  protected void configure() {"},{"line_number":71,"context_line":"    bind(ApiConfig.class).toInstance(config);"},{"line_number":72,"context_line":"    bind(MetricRegistry.class).toInstance(environment.metrics());"},{"line_number":73,"context_line":"    if(!config.hibernate.getSupportEnabled()) {"},{"line_number":74,"context_line":"      bind(DataSourceFactory.class).annotatedWith(Names.named(\"mysql\")).toInstance(config.mysql);"},{"line_number":75,"context_line":"    }"},{"line_number":76,"context_line":"    bind(DataSourceFactory.class).annotatedWith(Names.named(\"vertica\")).toInstance(config.vertica);"}],"source_content_type":"text/x-java","patch_set":4,"id":"1a4dcd0f_5dc95778","line":73,"updated":"2015-08-16 22:29:40.000000000","message":"Need to check if config.hibernate is null?","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"e9eb65c35cbe66b8cd86ec293d7d7889794725d7","unresolved":false,"context_lines":[{"line_number":70,"context_line":"  protected void configure() {"},{"line_number":71,"context_line":"    bind(ApiConfig.class).toInstance(config);"},{"line_number":72,"context_line":"    bind(MetricRegistry.class).toInstance(environment.metrics());"},{"line_number":73,"context_line":"    if(!config.hibernate.getSupportEnabled()) {"},{"line_number":74,"context_line":"      bind(DataSourceFactory.class).annotatedWith(Names.named(\"mysql\")).toInstance(config.mysql);"},{"line_number":75,"context_line":"    }"},{"line_number":76,"context_line":"    bind(DataSourceFactory.class).annotatedWith(Names.named(\"vertica\")).toInstance(config.vertica);"}],"source_content_type":"text/x-java","patch_set":4,"id":"fa1b9901_e7a3219d","line":73,"in_reply_to":"1a4dcd0f_5dc95778","updated":"2015-08-18 09:03:20.000000000","message":"Done","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"b553947a03f23d11c807893f0e387af44985397b","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        break;"},{"line_number":163,"context_line":"      case \"com.mysql.jdbc.jdbc2.optional.MysqlDataSource\":"},{"line_number":164,"context_line":"        properties.put(\"hibernate.hikari.dataSource.url\", config.hibernate.getDataSourceUrl());"},{"line_number":165,"context_line":"        break;"},{"line_number":166,"context_line":"    }"},{"line_number":167,"context_line":"    // different drivers requires different sets of properties"},{"line_number":168,"context_line":""}],"source_content_type":"text/x-java","patch_set":4,"id":"1a4dcd0f_1dc3cf58","line":165,"updated":"2015-08-16 22:29:40.000000000","message":"You should probably throw an exception if it is not one of the above values for dataSourceClassName in case the user did something simple like misspell the name. Otherwise it will be difficult for the user to find errors like that","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"673db695591536e2744f712b85da2c7bceaedd6a","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        break;"},{"line_number":163,"context_line":"      case \"com.mysql.jdbc.jdbc2.optional.MysqlDataSource\":"},{"line_number":164,"context_line":"        properties.put(\"hibernate.hikari.dataSource.url\", config.hibernate.getDataSourceUrl());"},{"line_number":165,"context_line":"        break;"},{"line_number":166,"context_line":"    }"},{"line_number":167,"context_line":"    // different drivers requires different sets of properties"},{"line_number":168,"context_line":""}],"source_content_type":"text/x-java","patch_set":4,"id":"fa1b9901_0f79b593","line":165,"in_reply_to":"1a4dcd0f_1dc3cf58","updated":"2015-08-17 12:53:40.000000000","message":"Good point, I did not think about that. I am just not sure if that would be difficult to find in logs in case of any error. I think I will try to reproduce the possibility you described and see how errors looks like. Perhaps here, in particular, that would be doing check that is already done somewhere else.","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"96ae96f1f87dfa719ff59b5abd33ee77da124f48","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        break;"},{"line_number":163,"context_line":"      case \"com.mysql.jdbc.jdbc2.optional.MysqlDataSource\":"},{"line_number":164,"context_line":"        properties.put(\"hibernate.hikari.dataSource.url\", config.hibernate.getDataSourceUrl());"},{"line_number":165,"context_line":"        break;"},{"line_number":166,"context_line":"    }"},{"line_number":167,"context_line":"    // different drivers requires different sets of properties"},{"line_number":168,"context_line":""}],"source_content_type":"text/x-java","patch_set":4,"id":"fa1b9901_d4352df7","line":165,"in_reply_to":"fa1b9901_0f79b593","updated":"2015-08-19 09:19:22.000000000","message":"Craig, I checked how error looks like if the data source entry in configuration file would be invalid. It says: {data source class name as defined in api-config.yml} unsupported data source. Do you think it is acceptable ?","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"545334060f3a3a0d2e238b63e4417c8aa280e20e","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        break;"},{"line_number":163,"context_line":"      case \"com.mysql.jdbc.jdbc2.optional.MysqlDataSource\":"},{"line_number":164,"context_line":"        properties.put(\"hibernate.hikari.dataSource.url\", config.hibernate.getDataSourceUrl());"},{"line_number":165,"context_line":"        break;"},{"line_number":166,"context_line":"    }"},{"line_number":167,"context_line":"    // different drivers requires different sets of properties"},{"line_number":168,"context_line":""}],"source_content_type":"text/x-java","patch_set":4,"id":"fa1b9901_8c2457c5","line":165,"in_reply_to":"fa1b9901_829f65b3","updated":"2015-08-20 06:21:40.000000000","message":"Done.\n\nPlease check newest patch sets. Your comments were implemented there.","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"73db48cebe9cc343cc7c0461696427297ef4adb0","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        break;"},{"line_number":163,"context_line":"      case \"com.mysql.jdbc.jdbc2.optional.MysqlDataSource\":"},{"line_number":164,"context_line":"        properties.put(\"hibernate.hikari.dataSource.url\", config.hibernate.getDataSourceUrl());"},{"line_number":165,"context_line":"        break;"},{"line_number":166,"context_line":"    }"},{"line_number":167,"context_line":"    // different drivers requires different sets of properties"},{"line_number":168,"context_line":""}],"source_content_type":"text/x-java","patch_set":4,"id":"fa1b9901_829f65b3","line":165,"in_reply_to":"fa1b9901_d4352df7","updated":"2015-08-19 14:25:26.000000000","message":"I\u0027d like it to say what the valid values are but if that is too hard, then it will be OK","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"}],"java/src/main/java/monasca/api/domain/model/alarm/Alarm.java":[{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"686a44cfcf937c4c7196d2b79beddc05dc82f4c9","unresolved":false,"context_lines":[{"line_number":177,"context_line":"      if (other.metrics !\u003d null)"},{"line_number":178,"context_line":"        return false;"},{"line_number":179,"context_line":"    } else if (!CollectionUtils.isEqualCollection(metrics, other.metrics))"},{"line_number":180,"context_line":"      // order agnostic collection equality check"},{"line_number":181,"context_line":"      return false;"},{"line_number":182,"context_line":"    if (state !\u003d other.state)"},{"line_number":183,"context_line":"      return false;"}],"source_content_type":"text/x-java","patch_set":4,"id":"1a4dcd0f_3cbb4877","line":180,"updated":"2015-08-14 22:38:13.000000000","message":"Hmm, I guess you fixed a bug here.","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"917751f358e95c5d9dc4797011fa879e42760481","unresolved":false,"context_lines":[{"line_number":177,"context_line":"      if (other.metrics !\u003d null)"},{"line_number":178,"context_line":"        return false;"},{"line_number":179,"context_line":"    } else if (!CollectionUtils.isEqualCollection(metrics, other.metrics))"},{"line_number":180,"context_line":"      // order agnostic collection equality check"},{"line_number":181,"context_line":"      return false;"},{"line_number":182,"context_line":"    if (state !\u003d other.state)"},{"line_number":183,"context_line":"      return false;"}],"source_content_type":"text/x-java","patch_set":4,"id":"1a4dcd0f_738809c7","line":180,"in_reply_to":"1a4dcd0f_3cbb4877","updated":"2015-08-16 16:22:28.000000000","message":"Hmm...that would be great indeed.","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"cd5a458f7e8192880fbbb9bdac5ffda924d6560c","unresolved":false,"context_lines":[{"line_number":177,"context_line":"      if (other.metrics !\u003d null)"},{"line_number":178,"context_line":"        return false;"},{"line_number":179,"context_line":"    } else if (!CollectionUtils.isEqualCollection(metrics, other.metrics))"},{"line_number":180,"context_line":"      // order agnostic collection equality check"},{"line_number":181,"context_line":"      return false;"},{"line_number":182,"context_line":"    if (state !\u003d other.state)"},{"line_number":183,"context_line":"      return false;"}],"source_content_type":"text/x-java","patch_set":7,"id":"da20952f_d67b557a","line":180,"updated":"2015-08-26 19:55:57.000000000","message":"Good catch.","commit_id":"13f4a6753fe5c661410489969821431d8216e7bd"}],"java/src/main/java/monasca/api/infrastructure/InfrastructureModule.java":[{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"b553947a03f23d11c807893f0e387af44985397b","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"  @Override"},{"line_number":66,"context_line":"  protected void configure() {"},{"line_number":67,"context_line":"    final boolean hibernateEnabled \u003d config.hibernate.getSupportEnabled();"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    this.bindUtils(hibernateEnabled);"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-java","patch_set":4,"id":"1a4dcd0f_fd9e2362","line":67,"updated":"2015-08-16 22:29:40.000000000","message":"Once again check if config.hibernate is null","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"cd5a458f7e8192880fbbb9bdac5ffda924d6560c","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    } else if (config.databaseConfiguration.getDatabaseType().trim().equalsIgnoreCase(INFLUXDB)) {"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"      if (config.influxDB.getVersion() !\u003d null \u0026\u0026 !config.influxDB.getVersion().equalsIgnoreCase(INFLUXDB_V9)) {"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        System.err.println(\"Found unsupported Influxdb version: \" + config.influxDB.getVersion());"},{"line_number":96,"context_line":"        System.err.println(\"Supported Influxdb versions are \u0027v9\u0027\");"}],"source_content_type":"text/x-java","patch_set":7,"id":"da20952f_9bce6659","line":93,"updated":"2015-08-26 19:55:57.000000000","message":"Let\u0027s try not to reformat existing code. It makes it difficult to see what has changed in the patch set.","commit_id":"13f4a6753fe5c661410489969821431d8216e7bd"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"a8f6abfbd82d53137d6fd7b13019ba6563ae0774","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    } else if (config.databaseConfiguration.getDatabaseType().trim().equalsIgnoreCase(INFLUXDB)) {"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"      if (config.influxDB.getVersion() !\u003d null \u0026\u0026 !config.influxDB.getVersion().equalsIgnoreCase(INFLUXDB_V9)) {"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        System.err.println(\"Found unsupported Influxdb version: \" + config.influxDB.getVersion());"},{"line_number":96,"context_line":"        System.err.println(\"Supported Influxdb versions are \u0027v9\u0027\");"}],"source_content_type":"text/x-java","patch_set":7,"id":"da20952f_82716e46","line":93,"in_reply_to":"da20952f_9bce6659","updated":"2015-08-31 09:36:00.000000000","message":"Done","commit_id":"13f4a6753fe5c661410489969821431d8216e7bd"}],"java/src/main/java/monasca/api/infrastructure/persistence/influxdb/InfluxV9AlarmStateHistoryRepo.java":[{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"b553947a03f23d11c807893f0e387af44985397b","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import javax.annotation.Nullable;"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"import monasca.api.domain.model.alarmstatehistory.AlarmStateHistory;"},{"line_number":27,"context_line":"import monasca.api.domain.model.alarmstatehistory.AlarmStateHistoryRepo;"},{"line_number":28,"context_line":"import monasca.api.infrastructure.persistence.PersistUtils;"},{"line_number":29,"context_line":"import monasca.api.infrastructure.persistence.Utils;"}],"source_content_type":"text/x-java","patch_set":4,"id":"1a4dcd0f_fdace38d","line":26,"updated":"2015-08-16 22:29:40.000000000","message":"Put the monasca imports at the bottom of the imports","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"e9eb65c35cbe66b8cd86ec293d7d7889794725d7","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import javax.annotation.Nullable;"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"import monasca.api.domain.model.alarmstatehistory.AlarmStateHistory;"},{"line_number":27,"context_line":"import monasca.api.domain.model.alarmstatehistory.AlarmStateHistoryRepo;"},{"line_number":28,"context_line":"import monasca.api.infrastructure.persistence.PersistUtils;"},{"line_number":29,"context_line":"import monasca.api.infrastructure.persistence.Utils;"}],"source_content_type":"text/x-java","patch_set":4,"id":"fa1b9901_a7a44657","line":26,"in_reply_to":"1a4dcd0f_fdace38d","updated":"2015-08-18 09:03:20.000000000","message":"Done","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"cd5a458f7e8192880fbbb9bdac5ffda924d6560c","unresolved":false,"context_lines":[{"line_number":40,"context_line":"import monasca.common.model.alarm.AlarmState;"},{"line_number":41,"context_line":"import monasca.common.model.alarm.AlarmTransitionSubAlarm;"},{"line_number":42,"context_line":"import monasca.common.model.metric.MetricDefinition;"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"public class InfluxV9AlarmStateHistoryRepo implements AlarmStateHistoryRepo {"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"  private static final Logger logger \u003d LoggerFactory"}],"source_content_type":"text/x-java","patch_set":7,"id":"da20952f_131d6473","line":43,"updated":"2015-08-26 19:55:57.000000000","message":"We need to retain the original order of the import statements.","commit_id":"13f4a6753fe5c661410489969821431d8216e7bd"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"a8f6abfbd82d53137d6fd7b13019ba6563ae0774","unresolved":false,"context_lines":[{"line_number":40,"context_line":"import monasca.common.model.alarm.AlarmState;"},{"line_number":41,"context_line":"import monasca.common.model.alarm.AlarmTransitionSubAlarm;"},{"line_number":42,"context_line":"import monasca.common.model.metric.MetricDefinition;"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"public class InfluxV9AlarmStateHistoryRepo implements AlarmStateHistoryRepo {"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"  private static final Logger logger \u003d LoggerFactory"}],"source_content_type":"text/x-java","patch_set":7,"id":"da20952f_e2e4eae0","line":43,"in_reply_to":"da20952f_131d6473","updated":"2015-08-31 09:36:00.000000000","message":"Done","commit_id":"13f4a6753fe5c661410489969821431d8216e7bd"}],"java/src/main/java/monasca/api/infrastructure/persistence/mysql/MySQLUtils.java":[{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"cd5a458f7e8192880fbbb9bdac5ffda924d6560c","unresolved":false,"context_lines":[{"line_number":13,"context_line":" */"},{"line_number":14,"context_line":"package monasca.api.infrastructure.persistence.mysql;"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import com.google.inject.Inject;"},{"line_number":17,"context_line":"import monasca.api.infrastructure.persistence.Utils;"},{"line_number":18,"context_line":"import monasca.api.infrastructure.persistence.DimensionQueries;"},{"line_number":19,"context_line":"import org.skife.jdbi.v2.DBI;"}],"source_content_type":"text/x-java","patch_set":7,"id":"da20952f_2e4b5b5b","line":16,"updated":"2015-08-26 19:55:57.000000000","message":"Need blank line here.","commit_id":"13f4a6753fe5c661410489969821431d8216e7bd"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"cd5a458f7e8192880fbbb9bdac5ffda924d6560c","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import com.google.inject.Inject;"},{"line_number":17,"context_line":"import monasca.api.infrastructure.persistence.Utils;"},{"line_number":18,"context_line":"import monasca.api.infrastructure.persistence.DimensionQueries;"},{"line_number":19,"context_line":"import org.skife.jdbi.v2.DBI;"},{"line_number":20,"context_line":"import org.skife.jdbi.v2.Handle;"},{"line_number":21,"context_line":"import org.skife.jdbi.v2.Query;"}],"source_content_type":"text/x-java","patch_set":7,"id":"da20952f_6e415339","line":18,"updated":"2015-08-26 19:55:57.000000000","message":"Need blank line here.","commit_id":"13f4a6753fe5c661410489969821431d8216e7bd"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"cd5a458f7e8192880fbbb9bdac5ffda924d6560c","unresolved":false,"context_lines":[{"line_number":26,"context_line":"import javax.inject.Named;"},{"line_number":27,"context_line":"import java.util.List;"},{"line_number":28,"context_line":"import java.util.Map;"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"public class MySQLUtils"},{"line_number":31,"context_line":"    extends Utils {"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-java","patch_set":7,"id":"da20952f_6e3ab3cf","line":29,"updated":"2015-08-26 19:55:57.000000000","message":"Need to preserve the original order of the imports.","commit_id":"13f4a6753fe5c661410489969821431d8216e7bd"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"a8f6abfbd82d53137d6fd7b13019ba6563ae0774","unresolved":false,"context_lines":[{"line_number":26,"context_line":"import javax.inject.Named;"},{"line_number":27,"context_line":"import java.util.List;"},{"line_number":28,"context_line":"import java.util.Map;"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"public class MySQLUtils"},{"line_number":31,"context_line":"    extends Utils {"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-java","patch_set":7,"id":"da20952f_88c3cd56","line":29,"in_reply_to":"da20952f_6e3ab3cf","updated":"2015-08-31 09:36:00.000000000","message":"Done","commit_id":"13f4a6753fe5c661410489969821431d8216e7bd"}],"java/src/main/java/monasca/api/infrastructure/persistence/sql/AlarmDefinitionSqlRepoImpl.java":[{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"b553947a03f23d11c807893f0e387af44985397b","unresolved":false,"context_lines":[{"line_number":129,"context_line":"          expression,"},{"line_number":130,"context_line":"          matchBy,"},{"line_number":131,"context_line":"          true,"},{"line_number":132,"context_line":"          alarmActions,"},{"line_number":133,"context_line":"          okActions \u003d\u003d null ? Collections.\u003cString\u003eemptyList() : okActions,"},{"line_number":134,"context_line":"          undeterminedActions \u003d\u003d null ? Collections.\u003cString\u003eemptyList() : undeterminedActions"},{"line_number":135,"context_line":"      );"}],"source_content_type":"text/x-java","patch_set":4,"id":"1a4dcd0f_3dca4b50","line":132,"updated":"2015-08-16 22:29:40.000000000","message":"Why are alarmActions treated differently than okActions? There don\u0027t have to be any alarmActions","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"673db695591536e2744f712b85da2c7bceaedd6a","unresolved":false,"context_lines":[{"line_number":129,"context_line":"          expression,"},{"line_number":130,"context_line":"          matchBy,"},{"line_number":131,"context_line":"          true,"},{"line_number":132,"context_line":"          alarmActions,"},{"line_number":133,"context_line":"          okActions \u003d\u003d null ? Collections.\u003cString\u003eemptyList() : okActions,"},{"line_number":134,"context_line":"          undeterminedActions \u003d\u003d null ? Collections.\u003cString\u003eemptyList() : undeterminedActions"},{"line_number":135,"context_line":"      );"}],"source_content_type":"text/x-java","patch_set":4,"id":"fa1b9901_7495a83e","line":132,"in_reply_to":"1a4dcd0f_3dca4b50","updated":"2015-08-17 12:53:40.000000000","message":"It looks that we just missed that part of the code, it will be taken care of in the next patch set. I think that we should be consistent in this piece of code.","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"e9eb65c35cbe66b8cd86ec293d7d7889794725d7","unresolved":false,"context_lines":[{"line_number":129,"context_line":"          expression,"},{"line_number":130,"context_line":"          matchBy,"},{"line_number":131,"context_line":"          true,"},{"line_number":132,"context_line":"          alarmActions,"},{"line_number":133,"context_line":"          okActions \u003d\u003d null ? Collections.\u003cString\u003eemptyList() : okActions,"},{"line_number":134,"context_line":"          undeterminedActions \u003d\u003d null ? Collections.\u003cString\u003eemptyList() : undeterminedActions"},{"line_number":135,"context_line":"      );"}],"source_content_type":"text/x-java","patch_set":4,"id":"fa1b9901_e74f9e90","line":132,"in_reply_to":"fa1b9901_7495a83e","updated":"2015-08-18 09:03:20.000000000","message":"Done","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"b553947a03f23d11c807893f0e387af44985397b","unresolved":false,"context_lines":[{"line_number":262,"context_line":"          this.createAlarmDefinitions(alarmDefinitionDbList);"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"    } catch (Exception e){"},{"line_number":265,"context_line":"      logger.error(e.toString());"},{"line_number":266,"context_line":"    }"},{"line_number":267,"context_line":"    finally {"},{"line_number":268,"context_line":"      if (session !\u003d null) {"}],"source_content_type":"text/x-java","patch_set":4,"id":"1a4dcd0f_1dd66ff1","line":265,"updated":"2015-08-16 22:29:40.000000000","message":"I don\u0027t think that this exception should be swallowed. It should be rethrown so the caller knows the query failed. It will result in a 500 from the API but that is better than silently failing","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"673db695591536e2744f712b85da2c7bceaedd6a","unresolved":false,"context_lines":[{"line_number":262,"context_line":"          this.createAlarmDefinitions(alarmDefinitionDbList);"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"    } catch (Exception e){"},{"line_number":265,"context_line":"      logger.error(e.toString());"},{"line_number":266,"context_line":"    }"},{"line_number":267,"context_line":"    finally {"},{"line_number":268,"context_line":"      if (session !\u003d null) {"}],"source_content_type":"text/x-java","patch_set":4,"id":"fa1b9901_148d4c31","line":265,"in_reply_to":"1a4dcd0f_1dd66ff1","updated":"2015-08-17 12:53:40.000000000","message":"I agree with that, we will fix that asap.","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"b553947a03f23d11c807893f0e387af44985397b","unresolved":false,"context_lines":[{"line_number":319,"context_line":"      );"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    } catch (RuntimeException e) {"},{"line_number":322,"context_line":"      throw new EntityNotFoundException(\"No alarm definition exists for %s\", alarmDefId);"},{"line_number":323,"context_line":"    } finally {"},{"line_number":324,"context_line":"      if (session !\u003d null) {"},{"line_number":325,"context_line":"        session.close();"}],"source_content_type":"text/x-java","patch_set":4,"id":"1a4dcd0f_1ded0fb7","line":322,"updated":"2015-08-16 22:29:40.000000000","message":"EntityNotFoundException should only be thrown if alarmDefinitionDb is null.  There are other reasons that could occur like the connection to the database failing and once again this would be misleading data passed back to the caller","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"673db695591536e2744f712b85da2c7bceaedd6a","unresolved":false,"context_lines":[{"line_number":319,"context_line":"      );"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    } catch (RuntimeException e) {"},{"line_number":322,"context_line":"      throw new EntityNotFoundException(\"No alarm definition exists for %s\", alarmDefId);"},{"line_number":323,"context_line":"    } finally {"},{"line_number":324,"context_line":"      if (session !\u003d null) {"},{"line_number":325,"context_line":"        session.close();"}],"source_content_type":"text/x-java","patch_set":4,"id":"fa1b9901_5473c44d","line":322,"in_reply_to":"1a4dcd0f_1ded0fb7","updated":"2015-08-17 12:53:40.000000000","message":"I agree with that, we will fix that asap.","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"b553947a03f23d11c807893f0e387af44985397b","unresolved":false,"context_lines":[{"line_number":479,"context_line":"    }"},{"line_number":480,"context_line":"  }"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"  private void updateChangedAlarms(final Map\u003cString, AlarmSubExpression\u003e changedSubAlarms,"},{"line_number":483,"context_line":"                                   final Session session) {"},{"line_number":484,"context_line":"    if (!MapUtils.isEmpty(changedSubAlarms))"},{"line_number":485,"context_line":"      for (Map.Entry\u003cString, AlarmSubExpression\u003e entry : changedSubAlarms.entrySet()) {"}],"source_content_type":"text/x-java","patch_set":4,"id":"1a4dcd0f_bd117bb1","line":482,"updated":"2015-08-16 22:29:40.000000000","message":"The method should be called updateChangedSubAlarms","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"673db695591536e2744f712b85da2c7bceaedd6a","unresolved":false,"context_lines":[{"line_number":479,"context_line":"    }"},{"line_number":480,"context_line":"  }"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"  private void updateChangedAlarms(final Map\u003cString, AlarmSubExpression\u003e changedSubAlarms,"},{"line_number":483,"context_line":"                                   final Session session) {"},{"line_number":484,"context_line":"    if (!MapUtils.isEmpty(changedSubAlarms))"},{"line_number":485,"context_line":"      for (Map.Entry\u003cString, AlarmSubExpression\u003e entry : changedSubAlarms.entrySet()) {"}],"source_content_type":"text/x-java","patch_set":4,"id":"fa1b9901_94a07c92","line":482,"in_reply_to":"1a4dcd0f_bd117bb1","updated":"2015-08-17 12:53:40.000000000","message":"I agree with that, we will fix that asap.","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"e9eb65c35cbe66b8cd86ec293d7d7889794725d7","unresolved":false,"context_lines":[{"line_number":479,"context_line":"    }"},{"line_number":480,"context_line":"  }"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"  private void updateChangedAlarms(final Map\u003cString, AlarmSubExpression\u003e changedSubAlarms,"},{"line_number":483,"context_line":"                                   final Session session) {"},{"line_number":484,"context_line":"    if (!MapUtils.isEmpty(changedSubAlarms))"},{"line_number":485,"context_line":"      for (Map.Entry\u003cString, AlarmSubExpression\u003e entry : changedSubAlarms.entrySet()) {"}],"source_content_type":"text/x-java","patch_set":4,"id":"fa1b9901_0ddc3311","line":482,"in_reply_to":"fa1b9901_94a07c92","updated":"2015-08-18 09:03:20.000000000","message":"Done","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"cd5a458f7e8192880fbbb9bdac5ffda924d6560c","unresolved":false,"context_lines":[{"line_number":11,"context_line":" * or implied. See the License for the specific language governing permissions and limitations under"},{"line_number":12,"context_line":" * the License."},{"line_number":13,"context_line":" */"},{"line_number":14,"context_line":"package monasca.api.infrastructure.persistence.sql;"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import java.util.ArrayList;"},{"line_number":17,"context_line":"import java.util.Collection;"}],"source_content_type":"text/x-java","patch_set":7,"id":"da20952f_36e2d1d6","line":14,"updated":"2015-08-26 19:55:57.000000000","message":"Would this be a better name?\n\n \u0027monasca.api.infrastructure.persister.hibernate\u0027?","commit_id":"13f4a6753fe5c661410489969821431d8216e7bd"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"a8f6abfbd82d53137d6fd7b13019ba6563ae0774","unresolved":false,"context_lines":[{"line_number":11,"context_line":" * or implied. See the License for the specific language governing permissions and limitations under"},{"line_number":12,"context_line":" * the License."},{"line_number":13,"context_line":" */"},{"line_number":14,"context_line":"package monasca.api.infrastructure.persistence.sql;"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import java.util.ArrayList;"},{"line_number":17,"context_line":"import java.util.Collection;"}],"source_content_type":"text/x-java","patch_set":7,"id":"da20952f_282de1fd","line":14,"in_reply_to":"da20952f_36e2d1d6","updated":"2015-08-31 09:36:00.000000000","message":"Done","commit_id":"13f4a6753fe5c661410489969821431d8216e7bd"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"cd5a458f7e8192880fbbb9bdac5ffda924d6560c","unresolved":false,"context_lines":[{"line_number":81,"context_line":"  private static final Joiner COMMA_JOINER \u003d Joiner.on(\u0027,\u0027);"},{"line_number":82,"context_line":"  private static final Splitter COMMA_SPLITTER \u003d Splitter.on(\u0027,\u0027).omitEmptyStrings().trimResults();"},{"line_number":83,"context_line":"  private static final Logger logger \u003d LoggerFactory.getLogger(AlarmDefinitionSqlRepoImpl.class);"},{"line_number":84,"context_line":"  private ResultTransformer alarmDefResultTransformer \u003d null;"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"  @Inject"},{"line_number":87,"context_line":"  public AlarmDefinitionSqlRepoImpl(@Named(\"orm\") SessionFactory sessionFactory) {"}],"source_content_type":"text/x-java","patch_set":7,"id":"da20952f_4ef9ef4c","line":84,"updated":"2015-08-26 19:55:57.000000000","message":"Can instantiate the alarmDefResultTransformer here in place and can eliminate the \u0027lazy\u0027 instantiation code. Also makes more thread-safe if needed in the future.","commit_id":"13f4a6753fe5c661410489969821431d8216e7bd"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"a8f6abfbd82d53137d6fd7b13019ba6563ae0774","unresolved":false,"context_lines":[{"line_number":81,"context_line":"  private static final Joiner COMMA_JOINER \u003d Joiner.on(\u0027,\u0027);"},{"line_number":82,"context_line":"  private static final Splitter COMMA_SPLITTER \u003d Splitter.on(\u0027,\u0027).omitEmptyStrings().trimResults();"},{"line_number":83,"context_line":"  private static final Logger logger \u003d LoggerFactory.getLogger(AlarmDefinitionSqlRepoImpl.class);"},{"line_number":84,"context_line":"  private ResultTransformer alarmDefResultTransformer \u003d null;"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"  @Inject"},{"line_number":87,"context_line":"  public AlarmDefinitionSqlRepoImpl(@Named(\"orm\") SessionFactory sessionFactory) {"}],"source_content_type":"text/x-java","patch_set":7,"id":"da20952f_2865e11c","line":84,"in_reply_to":"da20952f_4ef9ef4c","updated":"2015-08-31 09:36:00.000000000","message":"Thread-safety is good point. Will make it instantiable right after class is loaded.","commit_id":"13f4a6753fe5c661410489969821431d8216e7bd"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"cd5a458f7e8192880fbbb9bdac5ffda924d6560c","unresolved":false,"context_lines":[{"line_number":231,"context_line":"    Session session \u003d null;"},{"line_number":232,"context_line":"    List\u003cAlarmDefinition\u003e resultSet \u003d Lists.newArrayList();"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    // TODO introduce criteria here, will make code significantly better"},{"line_number":235,"context_line":"    String query \u003d"},{"line_number":236,"context_line":"        \"  SELECT t.id, t.tenant_id, t.name, t.description, t.expression, t.severity, t.match_by, \""},{"line_number":237,"context_line":"            + \"t.actions_enabled, aa.alarm_state AS states, aa.action_id AS notificationIds \""}],"source_content_type":"text/x-java","patch_set":7,"id":"da20952f_6e6dd331","line":234,"updated":"2015-08-26 19:55:57.000000000","message":"Need to actually do the \u0027TODO\u0027.","commit_id":"13f4a6753fe5c661410489969821431d8216e7bd"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"a8f6abfbd82d53137d6fd7b13019ba6563ae0774","unresolved":false,"context_lines":[{"line_number":231,"context_line":"    Session session \u003d null;"},{"line_number":232,"context_line":"    List\u003cAlarmDefinition\u003e resultSet \u003d Lists.newArrayList();"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    // TODO introduce criteria here, will make code significantly better"},{"line_number":235,"context_line":"    String query \u003d"},{"line_number":236,"context_line":"        \"  SELECT t.id, t.tenant_id, t.name, t.description, t.expression, t.severity, t.match_by, \""},{"line_number":237,"context_line":"            + \"t.actions_enabled, aa.alarm_state AS states, aa.action_id AS notificationIds \""}],"source_content_type":"text/x-java","patch_set":7,"id":"da20952f_9f98e4c1","line":234,"in_reply_to":"da20952f_6e6dd331","updated":"2015-08-31 09:36:00.000000000","message":"For now it is not possible, following query includes one association not mapped in hibernate model therefore using criteria here is not feasible at the moment. We would like to have it instead raw-string based queries but having that would lead to another major schema change where adding a column would be trifle but writing a migration, well...it wouldn\u0027t be so obvious. The table/entity we are talking about is metric_dimension. This particular one has no primary key while it has unique index for two of its columns. That is not a problem in hibernate model, because we can easily understand unique key as primary key and there is no difference. What is important is that based on queries in project metric_dimension is being associated with metric_definiton_dimension. Now, in order to understand it a proper entity association we would have to alter either metric_definition_dimension by adding new column \u003e metric_definiton_set_name \u003c correlated with metric_definition_set_id and thus creating composite foreign key pointing at metric_dimension (where unique key would be changed to primary key). Alternative would be adding primary key to metric_dimension and calculating it in a way that would be agnostic to any ORM tool we can think of, meaning to say leave that job to database itself. But again that would mean going into trigger to do that. In brief all that comes down to schema modification to make it mappable in ORM tool Hibernate is.","commit_id":"13f4a6753fe5c661410489969821431d8216e7bd"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"cd5a458f7e8192880fbbb9bdac5ffda924d6560c","unresolved":false,"context_lines":[{"line_number":296,"context_line":"    return resultSet;"},{"line_number":297,"context_line":"  }"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"  private ResultTransformer getAlarmDefResultTransformerLazy() {"},{"line_number":300,"context_line":"    if (this.alarmDefResultTransformer \u003d\u003d null) {"},{"line_number":301,"context_line":"      this.alarmDefResultTransformer \u003d new ResultTransformer() {"},{"line_number":302,"context_line":"        private static final long serialVersionUID \u003d -3052468375925339521L;"}],"source_content_type":"text/x-java","patch_set":7,"id":"da20952f_8e094734","line":299,"updated":"2015-08-26 19:55:57.000000000","message":"Would this class be better as a static class?","commit_id":"13f4a6753fe5c661410489969821431d8216e7bd"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"a8f6abfbd82d53137d6fd7b13019ba6563ae0774","unresolved":false,"context_lines":[{"line_number":296,"context_line":"    return resultSet;"},{"line_number":297,"context_line":"  }"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"  private ResultTransformer getAlarmDefResultTransformerLazy() {"},{"line_number":300,"context_line":"    if (this.alarmDefResultTransformer \u003d\u003d null) {"},{"line_number":301,"context_line":"      this.alarmDefResultTransformer \u003d new ResultTransformer() {"},{"line_number":302,"context_line":"        private static final long serialVersionUID \u003d -3052468375925339521L;"}],"source_content_type":"text/x-java","patch_set":7,"id":"da20952f_bf95a887","line":299,"in_reply_to":"da20952f_8e094734","updated":"2015-08-31 09:36:00.000000000","message":"It will be.","commit_id":"13f4a6753fe5c661410489969821431d8216e7bd"}],"java/src/main/java/monasca/api/infrastructure/persistence/sql/AlarmHibernateUtils.java":[{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"cd5a458f7e8192880fbbb9bdac5ffda924d6560c","unresolved":false,"context_lines":[{"line_number":32,"context_line":"public class AlarmHibernateUtils"},{"line_number":33,"context_line":"    extends Utils {"},{"line_number":34,"context_line":"  private static final Logger logger \u003d LoggerFactory.getLogger(AlarmHibernateUtils.class);"},{"line_number":35,"context_line":"  private static final String FIND_ALARM_IDS_SQL \u003d"},{"line_number":36,"context_line":"      \"select distinct a.id, ad.created_at \" +"},{"line_number":37,"context_line":"      \"from alarm as a \" +"},{"line_number":38,"context_line":"      \"join alarm_definition as ad on a.alarm_definition_id \u003d ad.id \" +"}],"source_content_type":"text/x-java","patch_set":7,"id":"da20952f_d8a3844e","line":35,"updated":"2015-08-26 19:55:57.000000000","message":"So far, I\u0027ve seen 3 different types of formatting for sql strings. Would it be possible to pick one and be consistent?","commit_id":"13f4a6753fe5c661410489969821431d8216e7bd"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"a8f6abfbd82d53137d6fd7b13019ba6563ae0774","unresolved":false,"context_lines":[{"line_number":32,"context_line":"public class AlarmHibernateUtils"},{"line_number":33,"context_line":"    extends Utils {"},{"line_number":34,"context_line":"  private static final Logger logger \u003d LoggerFactory.getLogger(AlarmHibernateUtils.class);"},{"line_number":35,"context_line":"  private static final String FIND_ALARM_IDS_SQL \u003d"},{"line_number":36,"context_line":"      \"select distinct a.id, ad.created_at \" +"},{"line_number":37,"context_line":"      \"from alarm as a \" +"},{"line_number":38,"context_line":"      \"join alarm_definition as ad on a.alarm_definition_id \u003d ad.id \" +"}],"source_content_type":"text/x-java","patch_set":7,"id":"da20952f_1fd2945c","line":35,"in_reply_to":"da20952f_d8a3844e","updated":"2015-08-31 09:36:00.000000000","message":"That\u0027s because there were few people working on it. But we are making it consistent right now and next patch set is going to have string concatenation and format will be kept same for all cases.","commit_id":"13f4a6753fe5c661410489969821431d8216e7bd"}],"java/src/main/java/monasca/api/infrastructure/persistence/sql/AlarmSqlRepoImpl.java":[{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"b553947a03f23d11c807893f0e387af44985397b","unresolved":false,"context_lines":[{"line_number":25,"context_line":"import javax.inject.Named;"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"import com.google.common.collect.Maps;"},{"line_number":28,"context_line":"import monasca.api.domain.exception.EntityNotFoundException;"},{"line_number":29,"context_line":"import monasca.api.domain.model.alarm.Alarm;"},{"line_number":30,"context_line":"import monasca.api.domain.model.alarm.AlarmRepo;"},{"line_number":31,"context_line":"import monasca.common.hibernate.db.AlarmDb;"}],"source_content_type":"text/x-java","patch_set":4,"id":"1a4dcd0f_7d59b38d","line":28,"updated":"2015-08-16 22:29:40.000000000","message":"Monasca imports should be at the bottom of the imports","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"e9eb65c35cbe66b8cd86ec293d7d7889794725d7","unresolved":false,"context_lines":[{"line_number":25,"context_line":"import javax.inject.Named;"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"import com.google.common.collect.Maps;"},{"line_number":28,"context_line":"import monasca.api.domain.exception.EntityNotFoundException;"},{"line_number":29,"context_line":"import monasca.api.domain.model.alarm.Alarm;"},{"line_number":30,"context_line":"import monasca.api.domain.model.alarm.AlarmRepo;"},{"line_number":31,"context_line":"import monasca.common.hibernate.db.AlarmDb;"}],"source_content_type":"text/x-java","patch_set":4,"id":"fa1b9901_2d47b7bc","line":28,"in_reply_to":"1a4dcd0f_7d59b38d","updated":"2015-08-18 09:03:20.000000000","message":"Done","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"cd5a458f7e8192880fbbb9bdac5ffda924d6560c","unresolved":false,"context_lines":[{"line_number":80,"context_line":"          + \" %s \""},{"line_number":81,"context_line":"          + \" and ad.deletedAt is null order by a.id, mdg.id.dimensionSetId %s\";"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"  private static final String ALARM_SQL \u003d"},{"line_number":84,"context_line":"      \"select distinct ad.id as alarm_definition_id, ad.severity, ad.name as alarm_definition_name, \""},{"line_number":85,"context_line":"      + \"a.id, a.state, a.updated_at, a.created_at as created_timestamp, \""},{"line_number":86,"context_line":"      + \"md.name as metric_name, mdg.name, mdg.value, a.lifecycle_state, a.link, a.state_updated_at, \""}],"source_content_type":"text/x-java","patch_set":7,"id":"da20952f_582c54ab","line":83,"updated":"2015-08-26 19:55:57.000000000","message":"Would it be possible to be consistent with the sql formatting?","commit_id":"13f4a6753fe5c661410489969821431d8216e7bd"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"a8f6abfbd82d53137d6fd7b13019ba6563ae0774","unresolved":false,"context_lines":[{"line_number":80,"context_line":"          + \" %s \""},{"line_number":81,"context_line":"          + \" and ad.deletedAt is null order by a.id, mdg.id.dimensionSetId %s\";"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"  private static final String ALARM_SQL \u003d"},{"line_number":84,"context_line":"      \"select distinct ad.id as alarm_definition_id, ad.severity, ad.name as alarm_definition_name, \""},{"line_number":85,"context_line":"      + \"a.id, a.state, a.updated_at, a.created_at as created_timestamp, \""},{"line_number":86,"context_line":"      + \"md.name as metric_name, mdg.name, mdg.value, a.lifecycle_state, a.link, a.state_updated_at, \""}],"source_content_type":"text/x-java","patch_set":7,"id":"da20952f_12760ba4","line":83,"in_reply_to":"da20952f_582c54ab","updated":"2015-08-31 09:36:00.000000000","message":"Done","commit_id":"13f4a6753fe5c661410489969821431d8216e7bd"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"cd5a458f7e8192880fbbb9bdac5ffda924d6560c","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    List\u003cAlarm\u003e alarms;"},{"line_number":156,"context_line":"    alarms \u003d"},{"line_number":157,"context_line":"        findInternal(tenantId, alarmDefId, metricName, metricDimensions, state, lifecycleState, link, stateUpdatedStart, offset, (3 * limit / 2),"},{"line_number":158,"context_line":"            enforceLimit);"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    if (limit \u003d\u003d 0 || !enforceLimit)"}],"source_content_type":"text/x-java","patch_set":7,"id":"da20952f_9bac26ef","line":157,"updated":"2015-08-26 19:55:57.000000000","message":"Why is (3* limit / 2) necessary? What is that doing?","commit_id":"13f4a6753fe5c661410489969821431d8216e7bd"},{"author":{"_account_id":16170,"name":"Michal Zielonka","email":"michal.zielonka@ts.fujitsu.com","username":"michal.zielonka"},"change_message_id":"ddf8693d37962af5f7fe4bbdbca71c91932a7210","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    List\u003cAlarm\u003e alarms;"},{"line_number":156,"context_line":"    alarms \u003d"},{"line_number":157,"context_line":"        findInternal(tenantId, alarmDefId, metricName, metricDimensions, state, lifecycleState, link, stateUpdatedStart, offset, (3 * limit / 2),"},{"line_number":158,"context_line":"            enforceLimit);"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    if (limit \u003d\u003d 0 || !enforceLimit)"}],"source_content_type":"text/x-java","patch_set":7,"id":"da20952f_f57ee168","line":157,"in_reply_to":"da20952f_9bac26ef","updated":"2015-08-31 10:07:08.000000000","message":"It was fix for fetching with limit.\nThere was a bug a some time ago. The problem occurs when monasca-ui send request for list alarms with specified limit.\nThere was functionality which merged records what caused that list had less elemnts than limit. For example in db was 53 matching records, limit was set to 20, after merging we received 16 what caused that pagination in monasca-ui wasn\u0027t working properly.","commit_id":"13f4a6753fe5c661410489969821431d8216e7bd"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"cd5a458f7e8192880fbbb9bdac5ffda924d6560c","unresolved":false,"context_lines":[{"line_number":306,"context_line":"      BinaryId dimension_set_id \u003d null;"},{"line_number":307,"context_line":"      DateTime state_updated_timestamp \u003d null;"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"      if (alarmRow[1] instanceof String) {"},{"line_number":310,"context_line":"        severity \u003d AlarmSeverity.valueOf((String) alarmRow[1]);"},{"line_number":311,"context_line":"      } else {"},{"line_number":312,"context_line":"        severity \u003d (AlarmSeverity) alarmRow[1];"}],"source_content_type":"text/x-java","patch_set":7,"id":"da20952f_fbcf62b1","line":309,"updated":"2015-08-26 19:55:57.000000000","message":"Why are these type checks necessary?","commit_id":"13f4a6753fe5c661410489969821431d8216e7bd"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"a8f6abfbd82d53137d6fd7b13019ba6563ae0774","unresolved":false,"context_lines":[{"line_number":306,"context_line":"      BinaryId dimension_set_id \u003d null;"},{"line_number":307,"context_line":"      DateTime state_updated_timestamp \u003d null;"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"      if (alarmRow[1] instanceof String) {"},{"line_number":310,"context_line":"        severity \u003d AlarmSeverity.valueOf((String) alarmRow[1]);"},{"line_number":311,"context_line":"      } else {"},{"line_number":312,"context_line":"        severity \u003d (AlarmSeverity) alarmRow[1];"}],"source_content_type":"text/x-java","patch_set":7,"id":"da20952f_df9c1c10","line":309,"in_reply_to":"da20952f_fbcf62b1","updated":"2015-08-31 09:36:00.000000000","message":"Method createAlarms contains common code but it used in two places. In one place we retrieve raw values (i.e. String instead Enums and so on) whereas second place has all possible values already converted. Reason for that is in one place we were able to use HQL and in another one we had to stick with plain SQL.","commit_id":"13f4a6753fe5c661410489969821431d8216e7bd"}],"java/src/main/java/monasca/api/infrastructure/persistence/sql/BaseSQLRepo.java":[{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"cd5a458f7e8192880fbbb9bdac5ffda924d6560c","unresolved":false,"context_lines":[{"line_number":25,"context_line":"/**"},{"line_number":26,"context_line":" * Abstract foundation for ORM repositories."},{"line_number":27,"context_line":" */"},{"line_number":28,"context_line":"abstract class BaseSQLRepo {"},{"line_number":29,"context_line":"  protected static final Marker ORM_LOG_MARKER \u003d MarkerFactory.getMarker(\"ORM\");"},{"line_number":30,"context_line":"  private static final Logger LOG \u003d LoggerFactory.getLogger(BaseSQLRepo.class);"},{"line_number":31,"context_line":"  protected final SessionFactory sessionFactory;"}],"source_content_type":"text/x-java","patch_set":7,"id":"da20952f_f6af7992","line":28,"updated":"2015-08-26 19:55:57.000000000","message":"Need to be consistent with the naming of classes. \u0027SQL\u0027 vs \u0027Sql\u0027.","commit_id":"13f4a6753fe5c661410489969821431d8216e7bd"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"a8f6abfbd82d53137d6fd7b13019ba6563ae0774","unresolved":false,"context_lines":[{"line_number":25,"context_line":"/**"},{"line_number":26,"context_line":" * Abstract foundation for ORM repositories."},{"line_number":27,"context_line":" */"},{"line_number":28,"context_line":"abstract class BaseSQLRepo {"},{"line_number":29,"context_line":"  protected static final Marker ORM_LOG_MARKER \u003d MarkerFactory.getMarker(\"ORM\");"},{"line_number":30,"context_line":"  private static final Logger LOG \u003d LoggerFactory.getLogger(BaseSQLRepo.class);"},{"line_number":31,"context_line":"  protected final SessionFactory sessionFactory;"}],"source_content_type":"text/x-java","patch_set":7,"id":"da20952f_7f8e30d1","line":28,"in_reply_to":"da20952f_f6af7992","updated":"2015-08-31 09:36:00.000000000","message":"Done","commit_id":"13f4a6753fe5c661410489969821431d8216e7bd"}],"java/src/main/java/monasca/api/infrastructure/persistence/sql/ClobAwareSQLResultTransformer.java":[{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"b553947a03f23d11c807893f0e387af44985397b","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"  private Object convertFromClob(final Clob c) throws IOException, SQLException {"},{"line_number":59,"context_line":"    final ByteArrayOutputStream bos \u003d new ByteArrayOutputStream();"},{"line_number":60,"context_line":"    IOUtils.copy(c.getAsciiStream(), bos);"},{"line_number":61,"context_line":"    return new String(bos.toByteArray());"},{"line_number":62,"context_line":"  }"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-java","patch_set":4,"id":"1a4dcd0f_dd97a7e9","line":60,"updated":"2015-08-16 22:29:40.000000000","message":"I\u0027m not familiar with this method, but it seems that ascii would not be correct. Some of the data like description should be able to be internationalized characters. Ascii wouldn\u0027t cover that.","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"673db695591536e2744f712b85da2c7bceaedd6a","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"  private Object convertFromClob(final Clob c) throws IOException, SQLException {"},{"line_number":59,"context_line":"    final ByteArrayOutputStream bos \u003d new ByteArrayOutputStream();"},{"line_number":60,"context_line":"    IOUtils.copy(c.getAsciiStream(), bos);"},{"line_number":61,"context_line":"    return new String(bos.toByteArray());"},{"line_number":62,"context_line":"  }"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-java","patch_set":4,"id":"fa1b9901_94f5dc84","line":60,"in_reply_to":"1a4dcd0f_dd97a7e9","updated":"2015-08-17 12:53:40.000000000","message":"We will check if it is needed at all. Perhaps we may skip it and let Hibernate do the work but I won\u0027t say it for sure. If it\u0027s be needed then we will have to give it a closer look.","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"9c48b944a1642042cd3c9181c8920285b8e5267f","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"  private Object convertFromClob(final Clob c) throws IOException, SQLException {"},{"line_number":59,"context_line":"    final ByteArrayOutputStream bos \u003d new ByteArrayOutputStream();"},{"line_number":60,"context_line":"    IOUtils.copy(c.getAsciiStream(), bos);"},{"line_number":61,"context_line":"    return new String(bos.toByteArray());"},{"line_number":62,"context_line":"  }"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-java","patch_set":4,"id":"fa1b9901_4b521069","line":60,"in_reply_to":"fa1b9901_94f5dc84","updated":"2015-08-18 10:39:08.000000000","message":"Done","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"}],"java/src/main/java/monasca/api/infrastructure/persistence/sql/HibernateUtils.java":[{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"b553947a03f23d11c807893f0e387af44985397b","unresolved":false,"context_lines":[{"line_number":27,"context_line":"import java.util.List;"},{"line_number":28,"context_line":"import java.util.Map;"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"public class HibernateUtils"},{"line_number":31,"context_line":"    extends Utils {"},{"line_number":32,"context_line":"  private static final Logger logger \u003d LoggerFactory.getLogger(HibernateUtils.class);"},{"line_number":33,"context_line":"  private static final String FIND_ALARM_IDS_SQL \u003d new StringBuilder()"}],"source_content_type":"text/x-java","patch_set":4,"id":"1a4dcd0f_7db5337c","line":30,"updated":"2015-08-16 22:29:40.000000000","message":"This looks like AlarmUtils not HibernateUtils","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"673db695591536e2744f712b85da2c7bceaedd6a","unresolved":false,"context_lines":[{"line_number":27,"context_line":"import java.util.List;"},{"line_number":28,"context_line":"import java.util.Map;"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"public class HibernateUtils"},{"line_number":31,"context_line":"    extends Utils {"},{"line_number":32,"context_line":"  private static final Logger logger \u003d LoggerFactory.getLogger(HibernateUtils.class);"},{"line_number":33,"context_line":"  private static final String FIND_ALARM_IDS_SQL \u003d new StringBuilder()"}],"source_content_type":"text/x-java","patch_set":4,"id":"fa1b9901_d4a914e1","line":30,"in_reply_to":"1a4dcd0f_7db5337c","updated":"2015-08-17 12:53:40.000000000","message":"The name comes rather from the data source being used here, not from it actually does., so I am quite sure how to proceed with that. We can of course change it if you want.","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"545334060f3a3a0d2e238b63e4417c8aa280e20e","unresolved":false,"context_lines":[{"line_number":27,"context_line":"import java.util.List;"},{"line_number":28,"context_line":"import java.util.Map;"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"public class HibernateUtils"},{"line_number":31,"context_line":"    extends Utils {"},{"line_number":32,"context_line":"  private static final Logger logger \u003d LoggerFactory.getLogger(HibernateUtils.class);"},{"line_number":33,"context_line":"  private static final String FIND_ALARM_IDS_SQL \u003d new StringBuilder()"}],"source_content_type":"text/x-java","patch_set":4,"id":"fa1b9901_cf7ec169","line":30,"in_reply_to":"fa1b9901_42eb8db0","updated":"2015-08-20 06:21:40.000000000","message":"Done","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"9c48b944a1642042cd3c9181c8920285b8e5267f","unresolved":false,"context_lines":[{"line_number":27,"context_line":"import java.util.List;"},{"line_number":28,"context_line":"import java.util.Map;"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"public class HibernateUtils"},{"line_number":31,"context_line":"    extends Utils {"},{"line_number":32,"context_line":"  private static final Logger logger \u003d LoggerFactory.getLogger(HibernateUtils.class);"},{"line_number":33,"context_line":"  private static final String FIND_ALARM_IDS_SQL \u003d new StringBuilder()"}],"source_content_type":"text/x-java","patch_set":4,"id":"fa1b9901_eb93e4f8","line":30,"in_reply_to":"fa1b9901_d4a914e1","updated":"2015-08-18 10:39:08.000000000","message":"Should be \u0027I am not quite sure...\u0027","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"73db48cebe9cc343cc7c0461696427297ef4adb0","unresolved":false,"context_lines":[{"line_number":27,"context_line":"import java.util.List;"},{"line_number":28,"context_line":"import java.util.Map;"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"public class HibernateUtils"},{"line_number":31,"context_line":"    extends Utils {"},{"line_number":32,"context_line":"  private static final Logger logger \u003d LoggerFactory.getLogger(HibernateUtils.class);"},{"line_number":33,"context_line":"  private static final String FIND_ALARM_IDS_SQL \u003d new StringBuilder()"}],"source_content_type":"text/x-java","patch_set":4,"id":"fa1b9901_42eb8db0","line":30,"in_reply_to":"fa1b9901_eb93e4f8","updated":"2015-08-19 14:25:26.000000000","message":"Maybe AlarmHibernateUtils? It just seems like there could be an equivalent class for AlarmDefintions, etc.","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"b553947a03f23d11c807893f0e387af44985397b","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    extends Utils {"},{"line_number":32,"context_line":"  private static final Logger logger \u003d LoggerFactory.getLogger(HibernateUtils.class);"},{"line_number":33,"context_line":"  private static final String FIND_ALARM_IDS_SQL \u003d new StringBuilder()"},{"line_number":34,"context_line":"      .append(\"select distinct a.id, ad.created_at \")"},{"line_number":35,"context_line":"      .append(\"from alarm as a \")"},{"line_number":36,"context_line":"      .append(\"join alarm_definition as ad on a.alarm_definition_id \u003d ad.id \")"},{"line_number":37,"context_line":"      .append(\"%s \")"}],"source_content_type":"text/x-java","patch_set":4,"id":"1a4dcd0f_9da11f49","line":34,"updated":"2015-08-16 22:29:40.000000000","message":"Why do you use a StringBuilder instead of just +? This seems more complicated than needed for a final static String","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"673db695591536e2744f712b85da2c7bceaedd6a","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    extends Utils {"},{"line_number":32,"context_line":"  private static final Logger logger \u003d LoggerFactory.getLogger(HibernateUtils.class);"},{"line_number":33,"context_line":"  private static final String FIND_ALARM_IDS_SQL \u003d new StringBuilder()"},{"line_number":34,"context_line":"      .append(\"select distinct a.id, ad.created_at \")"},{"line_number":35,"context_line":"      .append(\"from alarm as a \")"},{"line_number":36,"context_line":"      .append(\"join alarm_definition as ad on a.alarm_definition_id \u003d ad.id \")"},{"line_number":37,"context_line":"      .append(\"%s \")"}],"source_content_type":"text/x-java","patch_set":4,"id":"fa1b9901_14046c13","line":34,"in_reply_to":"1a4dcd0f_9da11f49","updated":"2015-08-17 12:53:40.000000000","message":"StringBuilder is faster then ordinary string concatenation. As far as I aware, concatenation that should be replaced with StringBuilder on compiler, so I guess that I used StringBuilder here just because I did not want to rely on compiler to do that for me. Another reason is that I simply don\u0027t like using \u0027+\u0027 when it comes to String.","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"e9eb65c35cbe66b8cd86ec293d7d7889794725d7","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    extends Utils {"},{"line_number":32,"context_line":"  private static final Logger logger \u003d LoggerFactory.getLogger(HibernateUtils.class);"},{"line_number":33,"context_line":"  private static final String FIND_ALARM_IDS_SQL \u003d new StringBuilder()"},{"line_number":34,"context_line":"      .append(\"select distinct a.id, ad.created_at \")"},{"line_number":35,"context_line":"      .append(\"from alarm as a \")"},{"line_number":36,"context_line":"      .append(\"join alarm_definition as ad on a.alarm_definition_id \u003d ad.id \")"},{"line_number":37,"context_line":"      .append(\"%s \")"}],"source_content_type":"text/x-java","patch_set":4,"id":"fa1b9901_4d26abcf","line":34,"in_reply_to":"fa1b9901_14046c13","updated":"2015-08-18 09:03:20.000000000","message":"Done","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"}],"java/src/main/java/monasca/api/infrastructure/persistence/vertica/AlarmStateHistoryVerticaRepoImpl.java":[{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"b553947a03f23d11c807893f0e387af44985397b","unresolved":false,"context_lines":[{"line_number":226,"context_line":"      }"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"      DimensionQueries.bindDimensionsToQuery(verticaQuery, dimensions);"},{"line_number":229,"context_line":"      alarmStateHistoryList \u003d verticaQuery.map(new BeanMapper\u003c\u003e(AlarmStateHistory.class)).list();"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    }"},{"line_number":232,"context_line":""}],"source_content_type":"text/x-java","patch_set":4,"id":"1a4dcd0f_1d2aef90","line":229,"updated":"2015-08-16 22:29:40.000000000","message":"Have you actually tried this with Vertica? The SubAlarms and Metrics are stored as a JSON String and this doesn\u0027t look like it would handle that","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"673db695591536e2744f712b85da2c7bceaedd6a","unresolved":false,"context_lines":[{"line_number":226,"context_line":"      }"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"      DimensionQueries.bindDimensionsToQuery(verticaQuery, dimensions);"},{"line_number":229,"context_line":"      alarmStateHistoryList \u003d verticaQuery.map(new BeanMapper\u003c\u003e(AlarmStateHistory.class)).list();"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    }"},{"line_number":232,"context_line":""}],"source_content_type":"text/x-java","patch_set":4,"id":"fa1b9901_ef2561ae","line":229,"in_reply_to":"1a4dcd0f_1d2aef90","updated":"2015-08-17 12:53:40.000000000","message":"Actually not, but that shouldn\u0027t be here if I can be honest. We did change that part of code, some sort of...too quick. Some time after we realized that we are unable to say \u0027This code is 100% ok\u0027 and it was removed. \n\nI am afraid that fact we are now talking about it comes from the amount of changes we\u0027ve made in more than one repository and it simply got lost somewhere. All I can say is that this part will reverted to the state it used to be in.","commit_id":"8e88ea471cf6e50ffb0312c77852babfaa40f545"}],"java/src/test/java/monasca/api/infrastructure/persistence/hibernate/AlarmSqlRepositoryImplTest.java":[{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"cf19716d835df95b5a20f3ce8eb37173144a69e4","unresolved":false,"context_lines":[{"line_number":375,"context_line":"    checkList(repo.find(TENANT_ID, null, null, null, null, null, null, DateTime.now(UTC_TIMEZONE), null, 0, false));"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"    checkList(repo.find(TENANT_ID, null, null, null, null, null, null, ISO_8601_FORMATTER.parseDateTime(\"2015-03-15T00:00:00Z\"), null, 0, false),"},{"line_number":378,"context_line":"        compoundAlarm);"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    checkList(repo.find(TENANT_ID, null, null, null, null, null, null, ISO_8601_FORMATTER.parseDateTime(\"2015-03-14T00:00:00Z\"), null, 1, false),"},{"line_number":381,"context_line":"        alarm1, alarm2, alarm3, compoundAlarm);"}],"source_content_type":"text/x-java","patch_set":8,"id":"da20952f_4d2b3995","line":378,"updated":"2015-09-01 15:08:06.000000000","message":"Need to change this to include alarm1, alarm2, alarm3 as arguments.","commit_id":"d924e8b1e3fbdc58f0a5229161d0658a67e37604"}]}
