)]}'
{"docs/monasca-api-spec.md":[{"author":{"_account_id":8126,"name":"Bradley Klein","email":"bradley.klein@charter.com","username":"bklei"},"change_message_id":"2205a358dbeec6fdbbe3b8c0da30d8748718dcda","unresolved":false,"context_lines":[{"line_number":95,"context_line":"      - [Response Examples](#response-examples-3)"},{"line_number":96,"context_line":"  - [List dimension names](#list-dimension-names)"},{"line_number":97,"context_line":"      - [GET /v2.0/metrics/dimensions/names](#get-v20metricsdimensionsnames)"},{"line_number":98,"context_line":"      - [Headers](#headers-4)"},{"line_number":99,"context_line":"      - [Path Parameters](#path-parameters-4)"},{"line_number":100,"context_line":"      - [Query Parameters](#query-parameters-4)"},{"line_number":101,"context_line":"      - [Request Body](#request-body-4)"}],"source_content_type":"text/x-markdown","patch_set":12,"id":"9ad45d7e_0f93c450","line":98,"updated":"2016-08-12 20:01:22.000000000","message":"these anchors are the same as above -- need to run doctoc to regenerate...","commit_id":"0304d3ff31cf2b9d5b056e900c543d778ed8d4b3"},{"author":{"_account_id":8126,"name":"Bradley Klein","email":"bradley.klein@charter.com","username":"bklei"},"change_message_id":"2205a358dbeec6fdbbe3b8c0da30d8748718dcda","unresolved":false,"context_lines":[{"line_number":1296,"context_line":"    ],"},{"line_number":1297,"context_line":"    \"elements\": ["},{"line_number":1298,"context_line":"        {"},{"line_number":1299,"context_line":"            \"id\": null,"},{"line_number":1300,"context_line":"            \"dimension_names\": ["},{"line_number":1301,"context_line":"                \"dimensonName1\","},{"line_number":1302,"context_line":"                \"dimensonName2\","}],"source_content_type":"text/x-markdown","patch_set":12,"id":"9ad45d7e_ef48f0ce","line":1299,"updated":"2016-08-12 20:01:22.000000000","message":"Will need some id here for grafana to piece batches together when paginating.","commit_id":"0304d3ff31cf2b9d5b056e900c543d778ed8d4b3"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"f8d4f8cee0ac0502fb0bcaea9e6726677701e0b9","unresolved":false,"context_lines":[{"line_number":1296,"context_line":"    ],"},{"line_number":1297,"context_line":"    \"elements\": ["},{"line_number":1298,"context_line":"        {"},{"line_number":1299,"context_line":"            \"id\": null,"},{"line_number":1300,"context_line":"            \"dimension_names\": ["},{"line_number":1301,"context_line":"                \"dimensonName1\","},{"line_number":1302,"context_line":"                \"dimensonName2\","}],"source_content_type":"text/x-markdown","patch_set":12,"id":"9ad45d7e_823dcbbd","line":1299,"in_reply_to":"9ad45d7e_ef48f0ce","updated":"2016-08-12 20:10:13.000000000","message":"Thank you for explaining this. I didn\u0027t know why we need an ID here that\u0027s why I put null there.","commit_id":"0304d3ff31cf2b9d5b056e900c543d778ed8d4b3"},{"author":{"_account_id":15027,"name":"Michael Hoppal","email":"michael.jam.hoppal@hpe.com","username":"michael-hoppal"},"change_message_id":"40d5bd8f5f2d8265975a674db7dd60cc59adf859","unresolved":false,"context_lines":[{"line_number":1251,"context_line":"None."},{"line_number":1252,"context_line":""},{"line_number":1253,"context_line":"#### Query Parameters"},{"line_number":1254,"context_line":"* tenant_id (string, optional, restricted) - Tenant ID to from which to get dimension names. This parameter can be used to get dimension names from a tenant other than the tenant the request auth token is scoped to. Usage of this query parameter is restricted to users with the the monasca admin role, as defined in the monasca api configuration file, which defaults to `monasca-admin`."},{"line_number":1255,"context_line":"* metric_name (string(255), optional) - A metric name to filter dimension names by."},{"line_number":1256,"context_line":"* offset (string(255), optional) - The dimension names are returned in alphabetic order, and the offset is the dimension name after which to return in the next pagination request."},{"line_number":1257,"context_line":"* limit (integer, optional)"}],"source_content_type":"text/x-markdown","patch_set":22,"id":"1ac06dbe_6fd32560","line":1254,"range":{"start_line":1254,"start_character":55,"end_line":1254,"end_character":57},"updated":"2016-08-25 15:54:04.000000000","message":"take out","commit_id":"a6fae4c94abcb49a4a885171c69af044683df72e"},{"author":{"_account_id":15027,"name":"Michael Hoppal","email":"michael.jam.hoppal@hpe.com","username":"michael-hoppal"},"change_message_id":"40d5bd8f5f2d8265975a674db7dd60cc59adf859","unresolved":false,"context_lines":[{"line_number":1251,"context_line":"None."},{"line_number":1252,"context_line":""},{"line_number":1253,"context_line":"#### Query Parameters"},{"line_number":1254,"context_line":"* tenant_id (string, optional, restricted) - Tenant ID to from which to get dimension names. This parameter can be used to get dimension names from a tenant other than the tenant the request auth token is scoped to. Usage of this query parameter is restricted to users with the the monasca admin role, as defined in the monasca api configuration file, which defaults to `monasca-admin`."},{"line_number":1255,"context_line":"* metric_name (string(255), optional) - A metric name to filter dimension names by."},{"line_number":1256,"context_line":"* offset (string(255), optional) - The dimension names are returned in alphabetic order, and the offset is the dimension name after which to return in the next pagination request."},{"line_number":1257,"context_line":"* limit (integer, optional)"}],"source_content_type":"text/x-markdown","patch_set":22,"id":"1ac06dbe_cff33909","line":1254,"range":{"start_line":1254,"start_character":278,"end_line":1254,"end_character":281},"updated":"2016-08-25 15:54:04.000000000","message":"take out","commit_id":"a6fae4c94abcb49a4a885171c69af044683df72e"},{"author":{"_account_id":15027,"name":"Michael Hoppal","email":"michael.jam.hoppal@hpe.com","username":"michael-hoppal"},"change_message_id":"40d5bd8f5f2d8265975a674db7dd60cc59adf859","unresolved":false,"context_lines":[{"line_number":1253,"context_line":"#### Query Parameters"},{"line_number":1254,"context_line":"* tenant_id (string, optional, restricted) - Tenant ID to from which to get dimension names. This parameter can be used to get dimension names from a tenant other than the tenant the request auth token is scoped to. Usage of this query parameter is restricted to users with the the monasca admin role, as defined in the monasca api configuration file, which defaults to `monasca-admin`."},{"line_number":1255,"context_line":"* metric_name (string(255), optional) - A metric name to filter dimension names by."},{"line_number":1256,"context_line":"* offset (string(255), optional) - The dimension names are returned in alphabetic order, and the offset is the dimension name after which to return in the next pagination request."},{"line_number":1257,"context_line":"* limit (integer, optional)"},{"line_number":1258,"context_line":""},{"line_number":1259,"context_line":"#### Request Body"}],"source_content_type":"text/x-markdown","patch_set":22,"id":"1ac06dbe_0f7d511c","line":1256,"range":{"start_line":1256,"start_character":138,"end_line":1256,"end_character":140},"updated":"2016-08-25 15:54:04.000000000","message":"will","commit_id":"a6fae4c94abcb49a4a885171c69af044683df72e"}],"java/src/main/java/monasca/api/domain/model/dimension/DimensionBase.java":[{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"d7e2e9212deaa80e0163008ad04cb08214b1700d","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    @JsonInclude(JsonInclude.Include.NON_NULL)"},{"line_number":26,"context_line":"    final private String metricName;"},{"line_number":27,"context_line":"    final private String dimensionInfo;"},{"line_number":28,"context_line":"    final private String id;"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    public DimensionBase(String metricName, String dimensionInfo) {"},{"line_number":31,"context_line":"        this.metricName \u003d metricName;"}],"source_content_type":"text/x-java","patch_set":40,"id":"9a89bdaa_601175af","line":28,"updated":"2016-09-09 20:23:17.000000000","message":"Is the ID still used?","commit_id":"529dd7992acb994171d9a2a9c6999ee093b68931"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"d7e2e9212deaa80e0163008ad04cb08214b1700d","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    @JsonIgnore"},{"line_number":45,"context_line":"    public String getId() {"},{"line_number":46,"context_line":"        return id;"},{"line_number":47,"context_line":"    }"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    @Override"},{"line_number":50,"context_line":"    public boolean equals(Object obj) {"}],"source_content_type":"text/x-java","patch_set":40,"id":"9a89bdaa_801679a5","line":47,"updated":"2016-09-09 20:23:17.000000000","message":"Is the ID still used?","commit_id":"529dd7992acb994171d9a2a9c6999ee093b68931"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"f671a8f34b8a32431a81f24cb609746f33ff2d63","unresolved":false,"context_lines":[{"line_number":24,"context_line":"public abstract class DimensionBase extends AbstractEntity {"},{"line_number":25,"context_line":"    @JsonInclude(JsonInclude.Include.NON_NULL)"},{"line_number":26,"context_line":"    final private String metricName;"},{"line_number":27,"context_line":"    final private String dimensionInfo;"},{"line_number":28,"context_line":"    final private String id;"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    public DimensionBase(String metricName, String dimensionInfo) {"}],"source_content_type":"text/x-java","patch_set":45,"id":"7a8ec9b2_b969b627","line":27,"updated":"2016-09-15 16:34:28.000000000","message":"Let\u0027s remove dimensionInfo and put dimensionName and dimensionValue in the subclasses.","commit_id":"7c6858df2500d26df8c48165e7c5984e1a27ca5d"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"a5c20616431fc3e4e36abe68777192a9999948f1","unresolved":false,"context_lines":[{"line_number":24,"context_line":"public abstract class DimensionBase extends AbstractEntity {"},{"line_number":25,"context_line":"    @JsonInclude(JsonInclude.Include.NON_NULL)"},{"line_number":26,"context_line":"    final private String metricName;"},{"line_number":27,"context_line":"    final private String dimensionInfo;"},{"line_number":28,"context_line":"    final private String id;"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    public DimensionBase(String metricName, String dimensionInfo) {"}],"source_content_type":"text/x-java","patch_set":45,"id":"7a8ec9b2_36a2d34b","line":27,"in_reply_to":"7a8ec9b2_b969b627","updated":"2016-09-16 17:55:27.000000000","message":"Done","commit_id":"7c6858df2500d26df8c48165e7c5984e1a27ca5d"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"f671a8f34b8a32431a81f24cb609746f33ff2d63","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    @Override"},{"line_number":72,"context_line":"    public int hashCode() {"},{"line_number":73,"context_line":"        final int prime \u003d 31;"},{"line_number":74,"context_line":"        int result \u003d 1;"},{"line_number":75,"context_line":"        result \u003d prime * result + ((metricName \u003d\u003d null) ? 0 : metricName.hashCode());"},{"line_number":76,"context_line":"        result \u003d prime * result + ((dimensionInfo \u003d\u003d null) ? 0 : dimensionInfo.hashCode());"},{"line_number":77,"context_line":"        return result;"}],"source_content_type":"text/x-java","patch_set":45,"id":"7a8ec9b2_f9edfeef","line":74,"updated":"2016-09-15 16:34:28.000000000","message":"result should be a prime like 17. 1 is not a prime number.","commit_id":"7c6858df2500d26df8c48165e7c5984e1a27ca5d"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"a5c20616431fc3e4e36abe68777192a9999948f1","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    @Override"},{"line_number":72,"context_line":"    public int hashCode() {"},{"line_number":73,"context_line":"        final int prime \u003d 31;"},{"line_number":74,"context_line":"        int result \u003d 1;"},{"line_number":75,"context_line":"        result \u003d prime * result + ((metricName \u003d\u003d null) ? 0 : metricName.hashCode());"},{"line_number":76,"context_line":"        result \u003d prime * result + ((dimensionInfo \u003d\u003d null) ? 0 : dimensionInfo.hashCode());"},{"line_number":77,"context_line":"        return result;"}],"source_content_type":"text/x-java","patch_set":45,"id":"7a8ec9b2_7688dbc5","line":74,"in_reply_to":"7a8ec9b2_f9edfeef","updated":"2016-09-16 17:55:27.000000000","message":"Done","commit_id":"7c6858df2500d26df8c48165e7c5984e1a27ca5d"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"34f6d7c52407864fb975e30fe946312e6d7b04d0","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    @JsonInclude(JsonInclude.Include.NON_NULL)"},{"line_number":26,"context_line":"    final private String metricName;"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    public DimensionBase(String metricName) {"},{"line_number":29,"context_line":"        this.metricName \u003d metricName;"},{"line_number":30,"context_line":"    }"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-java","patch_set":46,"id":"7a8ec9b2_6d02be0b","line":28,"range":{"start_line":28,"start_character":25,"end_line":28,"end_character":42},"updated":"2016-09-16 20:13:15.000000000","message":"This should also take the id","commit_id":"5589119205ba3bd7ea6e537ede135a371c5e9e27"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"2161e5ab7704f72b9ecb3479be882a4c2f052c40","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    @JsonInclude(JsonInclude.Include.NON_NULL)"},{"line_number":26,"context_line":"    final private String metricName;"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    public DimensionBase(String metricName) {"},{"line_number":29,"context_line":"        this.metricName \u003d metricName;"},{"line_number":30,"context_line":"    }"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-java","patch_set":46,"id":"7a8ec9b2_70a455b9","line":28,"range":{"start_line":28,"start_character":25,"end_line":28,"end_character":42},"in_reply_to":"7a8ec9b2_6d02be0b","updated":"2016-09-16 20:50:02.000000000","message":"Actually, we want to change the inheritance of this. DimensionBase is not an Entity, if is a pure value object. Therefore, id should be removed completely. Currently, @JsonIgnore is use to remove the id from the output when returning the http response object. But, the better solution is to not inherit from AbstractEntity.\n\nI gave a waiver on doing that because the pagination code currently depends on AbstractEntity. For code charing, and getting this review done, that change wasn\u0027t made.","commit_id":"5589119205ba3bd7ea6e537ede135a371c5e9e27"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"bbc1981b91f05656d68dbdb190d90b5e5e8ebcd6","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    @JsonInclude(JsonInclude.Include.NON_NULL)"},{"line_number":26,"context_line":"    final private String metricName;"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    public DimensionBase(String metricName) {"},{"line_number":29,"context_line":"        this.metricName \u003d metricName;"},{"line_number":30,"context_line":"    }"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-java","patch_set":46,"id":"7a8ec9b2_b01fbd59","line":28,"range":{"start_line":28,"start_character":25,"end_line":28,"end_character":42},"in_reply_to":"7a8ec9b2_6d02be0b","updated":"2016-09-16 20:46:33.000000000","message":"Done","commit_id":"5589119205ba3bd7ea6e537ede135a371c5e9e27"}],"java/src/main/java/monasca/api/domain/model/dimension/DimensionHelpers.java":[{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"622b46b88c8f3dc86c6f2b0401de53e47d53bb26","unresolved":false,"context_lines":[{"line_number":25,"context_line":"            hashstr \u003d \"metricName\u003d\" + metricName;"},{"line_number":26,"context_line":"        } else {"},{"line_number":27,"context_line":"            hashstr \u003d \"metricName\u003d\" + metricName + \"dimensionName\u003d\" + dimensionName;"},{"line_number":28,"context_line":"        }"},{"line_number":29,"context_line":"        byte[] sha1Hash \u003d DigestUtils.sha(hashstr);"},{"line_number":30,"context_line":"        return Hex.encodeHexString(sha1Hash);"},{"line_number":31,"context_line":"    }"}],"source_content_type":"text/x-java","patch_set":26,"id":"fa7ab95a_700a7927","line":28,"updated":"2016-08-30 16:47:09.000000000","message":"I don\u0027t think I would have coded it this way with both parameters being supplied, metricName and dimensionName, and one ignored if it isn\u0027t provided.\n\nI think what I would have done is just have one parameter and have the caller, in this case a method in either DimensionNames or DimensionValues, supply either \"metricName\u003d\" + metricName or \"metricName\u003d\" + metricName + \"dimensionName\u003d\" + dimensionName.","commit_id":"29efe178689bbbef57eeae3d4e3ef98a96f78bcd"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"622b46b88c8f3dc86c6f2b0401de53e47d53bb26","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        return Hex.encodeHexString(sha1Hash);"},{"line_number":31,"context_line":"    }"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    public static String getId(String id, String metricName, String dimensionName) {"},{"line_number":34,"context_line":"        if (null \u003d\u003d id) {"},{"line_number":35,"context_line":"            id \u003d generateDimensionId(metricName, dimensionName);"},{"line_number":36,"context_line":"        }"}],"source_content_type":"text/x-java","patch_set":26,"id":"fa7ab95a_c3d53d1c","line":33,"updated":"2016-08-30 16:47:09.000000000","message":"I would prefer calling this method createId. In Java is is highly idiomatic that get/set are assoicated with either returning a private variable, or setting it via getter and setter methods. In this method, you aren\u0027t setting or getting a private variable, you are generating a dimension ID.\n\nAlso, do you really need this method at all, since all getId does is call generateDimensionId. Could you just have one static method called createDimensionId?","commit_id":"29efe178689bbbef57eeae3d4e3ef98a96f78bcd"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"622b46b88c8f3dc86c6f2b0401de53e47d53bb26","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        }"},{"line_number":37,"context_line":"        return id;"},{"line_number":38,"context_line":"    }"},{"line_number":39,"context_line":"}"}],"source_content_type":"text/x-java","patch_set":26,"id":"fa7ab95a_a1b8312b","line":39,"updated":"2016-08-30 16:47:09.000000000","message":"Since you\u0027ve introduced the new helpers class that I mentioned, I\u0027m wondering if a better alternative would have been create a base class DimensionsBase that inherits from AbstractEntity, and then derive DimensionsNames and DimensionsValues from DimensionsBase. That would resolve the inheritance of DimensionsValues from DimensionsBase, but I\u0027m not sure if you will end-up with as much code sharing.","commit_id":"29efe178689bbbef57eeae3d4e3ef98a96f78bcd"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"a4d35306558ce1960030293edbe84e27d9076138","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        }"},{"line_number":37,"context_line":"        return id;"},{"line_number":38,"context_line":"    }"},{"line_number":39,"context_line":"}"}],"source_content_type":"text/x-java","patch_set":26,"id":"fa7ab95a_bb2bf680","line":39,"in_reply_to":"fa7ab95a_a1b8312b","updated":"2016-08-30 20:48:14.000000000","message":"I will post two patch sets: one with DimensionBase another one without DimensionBase.","commit_id":"29efe178689bbbef57eeae3d4e3ef98a96f78bcd"}],"java/src/main/java/monasca/api/domain/model/dimension/DimensionName.java":[{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"34f6d7c52407864fb975e30fe946312e6d7b04d0","unresolved":false,"context_lines":[{"line_number":14,"context_line":"package monasca.api.domain.model.dimension;"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"/**"},{"line_number":17,"context_line":" * Encapsulates the list of dimension names for an optional metric name."},{"line_number":18,"context_line":" */"},{"line_number":19,"context_line":"public class DimensionName extends DimensionBase {"},{"line_number":20,"context_line":"    final private String dimensionName;"}],"source_content_type":"text/x-java","patch_set":46,"id":"7a8ec9b2_2d1d1666","line":17,"range":{"start_line":17,"start_character":20,"end_line":17,"end_character":43},"updated":"2016-09-16 20:13:15.000000000","message":"Not anymore :)","commit_id":"5589119205ba3bd7ea6e537ede135a371c5e9e27"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"bbc1981b91f05656d68dbdb190d90b5e5e8ebcd6","unresolved":false,"context_lines":[{"line_number":14,"context_line":"package monasca.api.domain.model.dimension;"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"/**"},{"line_number":17,"context_line":" * Encapsulates the list of dimension names for an optional metric name."},{"line_number":18,"context_line":" */"},{"line_number":19,"context_line":"public class DimensionName extends DimensionBase {"},{"line_number":20,"context_line":"    final private String dimensionName;"}],"source_content_type":"text/x-java","patch_set":46,"id":"7a8ec9b2_7050d50b","line":17,"range":{"start_line":17,"start_character":20,"end_line":17,"end_character":43},"in_reply_to":"7a8ec9b2_2d1d1666","updated":"2016-09-16 20:46:33.000000000","message":"Done","commit_id":"5589119205ba3bd7ea6e537ede135a371c5e9e27"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"34f6d7c52407864fb975e30fe946312e6d7b04d0","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        if (this \u003d\u003d obj)"},{"line_number":35,"context_line":"            return true;"},{"line_number":36,"context_line":"        if (obj \u003d\u003d null)"},{"line_number":37,"context_line":"            return false;"},{"line_number":38,"context_line":"        DimensionName other \u003d (DimensionName) obj;"},{"line_number":39,"context_line":"        if (dimensionName \u003d\u003d null) {"},{"line_number":40,"context_line":"            if (other.dimensionName !\u003d null)"}],"source_content_type":"text/x-java","patch_set":46,"id":"7a8ec9b2_0d393ad7","line":37,"updated":"2016-09-16 20:13:15.000000000","message":"You should add         if (getClass() !\u003d obj.getClass())\n            return false;","commit_id":"5589119205ba3bd7ea6e537ede135a371c5e9e27"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"bbc1981b91f05656d68dbdb190d90b5e5e8ebcd6","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        if (this \u003d\u003d obj)"},{"line_number":35,"context_line":"            return true;"},{"line_number":36,"context_line":"        if (obj \u003d\u003d null)"},{"line_number":37,"context_line":"            return false;"},{"line_number":38,"context_line":"        DimensionName other \u003d (DimensionName) obj;"},{"line_number":39,"context_line":"        if (dimensionName \u003d\u003d null) {"},{"line_number":40,"context_line":"            if (other.dimensionName !\u003d null)"}],"source_content_type":"text/x-java","patch_set":46,"id":"7a8ec9b2_3062cdd8","line":37,"in_reply_to":"7a8ec9b2_0d393ad7","updated":"2016-09-16 20:46:33.000000000","message":"Done","commit_id":"5589119205ba3bd7ea6e537ede135a371c5e9e27"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"34f6d7c52407864fb975e30fe946312e6d7b04d0","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    @Override"},{"line_number":56,"context_line":"    public String toString() {"},{"line_number":57,"context_line":"        return String.format(\"DimensionNames: MetricName\u003d%s DimensionNames [names\u003d%s]\","},{"line_number":58,"context_line":"                getMetricName(), dimensionName);"},{"line_number":59,"context_line":"    }"},{"line_number":60,"context_line":"}"}],"source_content_type":"text/x-java","patch_set":46,"id":"7a8ec9b2_ed16ce4a","line":57,"range":{"start_line":57,"start_character":30,"end_line":57,"end_character":44},"updated":"2016-09-16 20:13:15.000000000","message":"DimensionName","commit_id":"5589119205ba3bd7ea6e537ede135a371c5e9e27"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"bbc1981b91f05656d68dbdb190d90b5e5e8ebcd6","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    @Override"},{"line_number":56,"context_line":"    public String toString() {"},{"line_number":57,"context_line":"        return String.format(\"DimensionNames: MetricName\u003d%s DimensionNames [names\u003d%s]\","},{"line_number":58,"context_line":"                getMetricName(), dimensionName);"},{"line_number":59,"context_line":"    }"},{"line_number":60,"context_line":"}"}],"source_content_type":"text/x-java","patch_set":46,"id":"7a8ec9b2_709e15ba","line":57,"range":{"start_line":57,"start_character":30,"end_line":57,"end_character":44},"in_reply_to":"7a8ec9b2_ed16ce4a","updated":"2016-09-16 20:46:33.000000000","message":"Done","commit_id":"5589119205ba3bd7ea6e537ede135a371c5e9e27"}],"java/src/main/java/monasca/api/domain/model/dimension/DimensionNames.java":[{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"161d0ee6db3054034ae59f54e9f75192eac829e2","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    @JsonInclude(JsonInclude.Include.NON_NULL)"},{"line_number":30,"context_line":"    protected String metricName;"},{"line_number":31,"context_line":"    protected List\u003cString\u003e names;"},{"line_number":32,"context_line":"    protected Map\u003cString, List\u003cString\u003e\u003e dimensionNames;"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    public DimensionNames(String metricName, List\u003cString\u003e names) {"},{"line_number":35,"context_line":"        this.metricName \u003d metricName;"}],"source_content_type":"text/x-java","patch_set":12,"id":"9ad45d7e_78ecc98f","line":32,"range":{"start_line":32,"start_character":0,"end_line":32,"end_character":55},"updated":"2016-08-12 19:37:13.000000000","message":"This is set, but never used","commit_id":"0304d3ff31cf2b9d5b056e900c543d778ed8d4b3"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"161d0ee6db3054034ae59f54e9f75192eac829e2","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        this.dimensionNames.put(metricName, names);"},{"line_number":39,"context_line":"    }"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    public List\u003cString\u003e getDimensionNames() { return names; }"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    public String getMetricName() {"},{"line_number":44,"context_line":"        return metricName;"}],"source_content_type":"text/x-java","patch_set":12,"id":"9ad45d7e_3899b120","line":41,"range":{"start_line":41,"start_character":24,"end_line":41,"end_character":41},"updated":"2016-08-12 19:37:13.000000000","message":"This should be getNames and its format should be consistent with getMetricName()","commit_id":"0304d3ff31cf2b9d5b056e900c543d778ed8d4b3"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"f1604bc9722892986c0eaefbfee7529e486f2fb5","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        this.dimensionNames.put(metricName, names);"},{"line_number":39,"context_line":"    }"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    public List\u003cString\u003e getDimensionNames() { return names; }"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    public String getMetricName() {"},{"line_number":44,"context_line":"        return metricName;"}],"source_content_type":"text/x-java","patch_set":12,"id":"3ac371cc_f95554c6","line":41,"range":{"start_line":41,"start_character":24,"end_line":41,"end_character":41},"in_reply_to":"9ad45d7e_3899b120","updated":"2016-08-15 18:24:01.000000000","message":"I think changing \"return names\" to \"return dimensionNames\" to match getMetricName() might be better here. I want it to show as DimensionsNames in returned json output instead of names.","commit_id":"0304d3ff31cf2b9d5b056e900c543d778ed8d4b3"},{"author":{"_account_id":15027,"name":"Michael Hoppal","email":"michael.jam.hoppal@hpe.com","username":"michael-hoppal"},"change_message_id":"40d5bd8f5f2d8265975a674db7dd60cc59adf859","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import java.util.List;"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import com.fasterxml.jackson.annotation.JsonInclude;"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import com.fasterxml.jackson.annotation.JsonProperty;"},{"line_number":21,"context_line":"import monasca.common.model.domain.common.AbstractEntity;"},{"line_number":22,"context_line":"import org.apache.commons.codec.binary.Hex;"}],"source_content_type":"text/x-java","patch_set":22,"id":"1ac06dbe_0fb1d18f","line":19,"updated":"2016-08-25 15:54:04.000000000","message":"should there be a space between these?","commit_id":"a6fae4c94abcb49a4a885171c69af044683df72e"},{"author":{"_account_id":15027,"name":"Michael Hoppal","email":"michael.jam.hoppal@hpe.com","username":"michael-hoppal"},"change_message_id":"40d5bd8f5f2d8265975a674db7dd60cc59adf859","unresolved":false,"context_lines":[{"line_number":27,"context_line":" */"},{"line_number":28,"context_line":"public class DimensionNames extends AbstractEntity {"},{"line_number":29,"context_line":"    protected String id \u003d null;"},{"line_number":30,"context_line":"    @JsonInclude(JsonInclude.Include.NON_NULL)"},{"line_number":31,"context_line":"    protected String metricName;"},{"line_number":32,"context_line":"    protected List\u003cString\u003e dimensionInfo;"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-java","patch_set":22,"id":"1ac06dbe_6f34c5fa","line":30,"range":{"start_line":30,"start_character":17,"end_line":30,"end_character":28},"updated":"2016-08-25 15:54:04.000000000","message":"just out of curiosity what does this mean? just looking at the code it is confusing to me as this is marked as non null but you say above optional metric name","commit_id":"a6fae4c94abcb49a4a885171c69af044683df72e"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"28d8f1e9148518a0bc9997bface2c63b9dc34865","unresolved":false,"context_lines":[{"line_number":27,"context_line":" */"},{"line_number":28,"context_line":"public class DimensionNames extends AbstractEntity {"},{"line_number":29,"context_line":"    protected String id \u003d null;"},{"line_number":30,"context_line":"    @JsonInclude(JsonInclude.Include.NON_NULL)"},{"line_number":31,"context_line":"    protected String metricName;"},{"line_number":32,"context_line":"    protected List\u003cString\u003e dimensionInfo;"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-java","patch_set":22,"id":"1ac06dbe_e9feed69","line":30,"range":{"start_line":30,"start_character":17,"end_line":30,"end_character":28},"in_reply_to":"1ac06dbe_6f34c5fa","updated":"2016-08-25 16:54:46.000000000","message":"NON_NULL: Value that indicates that only properties with non-null values are to be included. So I think this will make sure to get the metric-name  if we pass in a non-null one.","commit_id":"a6fae4c94abcb49a4a885171c69af044683df72e"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"fd9e668b0b2ad46f668a185dd2ddb7d8bfc7f641","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    protected String id \u003d null;"},{"line_number":30,"context_line":"    @JsonInclude(JsonInclude.Include.NON_NULL)"},{"line_number":31,"context_line":"    protected String metricName;"},{"line_number":32,"context_line":"    protected List\u003cString\u003e dimensionInfo;"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    public DimensionNames(String metricName, List\u003cString\u003e dimensionInfo) {"},{"line_number":35,"context_line":"        this.metricName \u003d metricName;"}],"source_content_type":"text/x-java","patch_set":24,"id":"fa7ab95a_ff3851a2","line":32,"range":{"start_line":32,"start_character":4,"end_line":32,"end_character":13},"updated":"2016-08-29 22:35:27.000000000","message":"Should all the protected members above have been declared as private. This would also apply to the pre-existing DimensionValues class that you in-part derived this code from.\n\nThe metric name and dimensionInfo are only supplied in the constructor, there aren\u0027t any setters, and the id, which I mention down below, I believe could have been assigned in the constructor.\n\nI don\u0027t think this class will ever be inherited.","commit_id":"55cc63ffe2695a9d379efd6e35fcd499fb1990e1"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"2cbdd9fc4963ba763b82583836ac4fa485fa101f","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    protected String id \u003d null;"},{"line_number":30,"context_line":"    @JsonInclude(JsonInclude.Include.NON_NULL)"},{"line_number":31,"context_line":"    protected String metricName;"},{"line_number":32,"context_line":"    protected List\u003cString\u003e dimensionInfo;"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    public DimensionNames(String metricName, List\u003cString\u003e dimensionInfo) {"},{"line_number":35,"context_line":"        this.metricName \u003d metricName;"}],"source_content_type":"text/x-java","patch_set":24,"id":"fa7ab95a_90ae52e4","line":32,"range":{"start_line":32,"start_character":4,"end_line":32,"end_character":13},"in_reply_to":"fa7ab95a_ff3851a2","updated":"2016-08-30 00:09:01.000000000","message":"This class is inherited with protected variables hmmm","commit_id":"55cc63ffe2695a9d379efd6e35fcd499fb1990e1"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"fd9e668b0b2ad46f668a185dd2ddb7d8bfc7f641","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    public String getId() {"},{"line_number":49,"context_line":"        if (null \u003d\u003d this.id) {"},{"line_number":50,"context_line":"            this.id \u003d generateId();"},{"line_number":51,"context_line":"        }"},{"line_number":52,"context_line":"        return this.id;"},{"line_number":53,"context_line":"    }"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-java","patch_set":24,"id":"fa7ab95a_bac25ae7","line":51,"range":{"start_line":51,"start_character":8,"end_line":51,"end_character":9},"updated":"2016-08-29 22:35:27.000000000","message":"I didn\u0027t comment on this in the DimensionValues review, bit why is this assignment being deferred. Could the ID have been assigned in the constructor and if yes, would that have been a better location?","commit_id":"55cc63ffe2695a9d379efd6e35fcd499fb1990e1"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"2cbdd9fc4963ba763b82583836ac4fa485fa101f","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    public String getId() {"},{"line_number":49,"context_line":"        if (null \u003d\u003d this.id) {"},{"line_number":50,"context_line":"            this.id \u003d generateId();"},{"line_number":51,"context_line":"        }"},{"line_number":52,"context_line":"        return this.id;"},{"line_number":53,"context_line":"    }"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-java","patch_set":24,"id":"fa7ab95a_7098eec0","line":51,"range":{"start_line":51,"start_character":8,"end_line":51,"end_character":9},"in_reply_to":"fa7ab95a_bac25ae7","updated":"2016-08-30 00:09:01.000000000","message":"I don\u0027t think we can assign id in constructor because ID is different for dimension values and dimension names. Generating ID also needs metric name and/or dimension name as input.","commit_id":"55cc63ffe2695a9d379efd6e35fcd499fb1990e1"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"fd9e668b0b2ad46f668a185dd2ddb7d8bfc7f641","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        String hashstr \u003d \"metricName\u003d\" + metricName;"},{"line_number":57,"context_line":"        byte[] sha1Hash \u003d DigestUtils.sha(hashstr);"},{"line_number":58,"context_line":"        return Hex.encodeHexString(sha1Hash);"},{"line_number":59,"context_line":"    }"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @Override"},{"line_number":62,"context_line":"    public boolean equals(Object obj) {"}],"source_content_type":"text/x-java","patch_set":24,"id":"fa7ab95a_7a7c52b5","line":59,"updated":"2016-08-29 22:35:27.000000000","message":"Should we make a DimensionHelpers class that has public static generateId in it for both the DimensionNames and DimensionValues. This method is just replicated from that class.","commit_id":"55cc63ffe2695a9d379efd6e35fcd499fb1990e1"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"2cbdd9fc4963ba763b82583836ac4fa485fa101f","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        String hashstr \u003d \"metricName\u003d\" + metricName;"},{"line_number":57,"context_line":"        byte[] sha1Hash \u003d DigestUtils.sha(hashstr);"},{"line_number":58,"context_line":"        return Hex.encodeHexString(sha1Hash);"},{"line_number":59,"context_line":"    }"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @Override"},{"line_number":62,"context_line":"    public boolean equals(Object obj) {"}],"source_content_type":"text/x-java","patch_set":24,"id":"fa7ab95a_a58876c6","line":59,"in_reply_to":"fa7ab95a_7a7c52b5","updated":"2016-08-30 00:09:01.000000000","message":"Done","commit_id":"55cc63ffe2695a9d379efd6e35fcd499fb1990e1"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"622b46b88c8f3dc86c6f2b0401de53e47d53bb26","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    }"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    public String getId() {"},{"line_number":47,"context_line":"        return DimensionHelpers.getId(this.id, metricName, null);"},{"line_number":48,"context_line":"    }"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @Override"}],"source_content_type":"text/x-java","patch_set":26,"id":"fa7ab95a_a352f932","line":47,"range":{"start_line":47,"start_character":15,"end_line":47,"end_character":31},"updated":"2016-08-30 16:47:09.000000000","message":"So, you invoke the helper in DimensionHelpers, which generates the ID if it is null and returns the ID. However, id is never assigned, so it will always be null right?\n\nHow about if the helper just generates the ID. it should depend on whether something passed into it is null or not. That test can be done here.\n\nif this.id \u003d\u003d null {\n    this.id \u003d helper.generateId(\"metricName\u003d\" + metricName)\n}\nreturn this.id\n\nAnd since the only thing that the id depends on is the metricName, and that is known in the constructor, you could easily just assign id there and not test if it is null here.","commit_id":"29efe178689bbbef57eeae3d4e3ef98a96f78bcd"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"f671a8f34b8a32431a81f24cb609746f33ff2d63","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":45,"id":"7a8ec9b2_ae4a4724","updated":"2016-09-15 16:34:28.000000000","message":"If this class is meant to store only one dimensionName then the name of the class should be \u0027dimensionName\u0027 not \u0027dimensionNames\u0027.","commit_id":"7c6858df2500d26df8c48165e7c5984e1a27ca5d"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"a5c20616431fc3e4e36abe68777192a9999948f1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":45,"id":"7a8ec9b2_36b9f379","in_reply_to":"7a8ec9b2_ae4a4724","updated":"2016-09-16 17:55:27.000000000","message":"Done","commit_id":"7c6858df2500d26df8c48165e7c5984e1a27ca5d"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"f671a8f34b8a32431a81f24cb609746f33ff2d63","unresolved":false,"context_lines":[{"line_number":19,"context_line":" * Encapsulates the list of dimension names for an optional metric name."},{"line_number":20,"context_line":" */"},{"line_number":21,"context_line":"public class DimensionNames extends DimensionBase {"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    public DimensionNames(String metricName, String dimensionNames) {"},{"line_number":24,"context_line":"        super(metricName, dimensionNames);"},{"line_number":25,"context_line":"    }"}],"source_content_type":"text/x-java","patch_set":45,"id":"7a8ec9b2_1490af42","line":22,"updated":"2016-09-15 16:34:28.000000000","message":"Let\u0027s put the dimensionNames attribute in this class.\n\nNeed haashCode method. Need equals method.","commit_id":"7c6858df2500d26df8c48165e7c5984e1a27ca5d"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"a5c20616431fc3e4e36abe68777192a9999948f1","unresolved":false,"context_lines":[{"line_number":19,"context_line":" * Encapsulates the list of dimension names for an optional metric name."},{"line_number":20,"context_line":" */"},{"line_number":21,"context_line":"public class DimensionNames extends DimensionBase {"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    public DimensionNames(String metricName, String dimensionNames) {"},{"line_number":24,"context_line":"        super(metricName, dimensionNames);"},{"line_number":25,"context_line":"    }"}],"source_content_type":"text/x-java","patch_set":45,"id":"7a8ec9b2_76affb29","line":22,"in_reply_to":"7a8ec9b2_1490af42","updated":"2016-09-16 17:55:27.000000000","message":"Done","commit_id":"7c6858df2500d26df8c48165e7c5984e1a27ca5d"}],"java/src/main/java/monasca/api/domain/model/dimension/DimensionRepo.java":[{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"161d0ee6db3054034ae59f54e9f75192eac829e2","unresolved":false,"context_lines":[{"line_number":30,"context_line":"                       int limit)"},{"line_number":31,"context_line":"      throws Exception;"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"  DimensionNames findNames(String metricName,"},{"line_number":34,"context_line":"                      String tenantId,"},{"line_number":35,"context_line":"                      @Nullable String offset,"},{"line_number":36,"context_line":"                      int limit)"}],"source_content_type":"text/x-java","patch_set":12,"id":"9ad45d7e_3799c420","line":33,"range":{"start_line":33,"start_character":2,"end_line":33,"end_character":45},"updated":"2016-08-12 19:37:13.000000000","message":"Need a comment for this one","commit_id":"0304d3ff31cf2b9d5b056e900c543d778ed8d4b3"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"f1604bc9722892986c0eaefbfee7529e486f2fb5","unresolved":false,"context_lines":[{"line_number":30,"context_line":"                       int limit)"},{"line_number":31,"context_line":"      throws Exception;"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"  DimensionNames findNames(String metricName,"},{"line_number":34,"context_line":"                      String tenantId,"},{"line_number":35,"context_line":"                      @Nullable String offset,"},{"line_number":36,"context_line":"                      int limit)"}],"source_content_type":"text/x-java","patch_set":12,"id":"3ac371cc_aeec2dc8","line":33,"range":{"start_line":33,"start_character":2,"end_line":33,"end_character":45},"in_reply_to":"9ad45d7e_3799c420","updated":"2016-08-15 18:24:01.000000000","message":"Done","commit_id":"0304d3ff31cf2b9d5b056e900c543d778ed8d4b3"},{"author":{"_account_id":15027,"name":"Michael Hoppal","email":"michael.jam.hoppal@hpe.com","username":"michael-hoppal"},"change_message_id":"40d5bd8f5f2d8265975a674db7dd60cc59adf859","unresolved":false,"context_lines":[{"line_number":31,"context_line":"      throws Exception;"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"  /**"},{"line_number":34,"context_line":"   * Finds dimension names given optional metric name."},{"line_number":35,"context_line":"   */"},{"line_number":36,"context_line":"  DimensionNames findNames(String metricName,"},{"line_number":37,"context_line":"                      String tenantId,"}],"source_content_type":"text/x-java","patch_set":22,"id":"1ac06dbe_8f63011a","line":34,"range":{"start_line":34,"start_character":32,"end_line":34,"end_character":33},"updated":"2016-08-25 15:54:04.000000000","message":"an","commit_id":"a6fae4c94abcb49a4a885171c69af044683df72e"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"fd9e668b0b2ad46f668a185dd2ddb7d8bfc7f641","unresolved":false,"context_lines":[{"line_number":27,"context_line":"                       String tenantId,"},{"line_number":28,"context_line":"                       String dimensionName,"},{"line_number":29,"context_line":"                       @Nullable String offset,"},{"line_number":30,"context_line":"                       int limit)"},{"line_number":31,"context_line":"      throws Exception;"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"  /**"}],"source_content_type":"text/x-java","patch_set":24,"id":"fa7ab95a_3cf1e701","line":30,"range":{"start_line":30,"start_character":23,"end_line":30,"end_character":26},"updated":"2016-08-29 22:35:27.000000000","message":"Is the tabbing off here?","commit_id":"55cc63ffe2695a9d379efd6e35fcd499fb1990e1"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"da94031b2b045d6a76d992778c8fefc224082bc5","unresolved":false,"context_lines":[{"line_number":27,"context_line":"                       String tenantId,"},{"line_number":28,"context_line":"                       String dimensionName,"},{"line_number":29,"context_line":"                       @Nullable String offset,"},{"line_number":30,"context_line":"                       int limit)"},{"line_number":31,"context_line":"      throws Exception;"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"  /**"}],"source_content_type":"text/x-java","patch_set":24,"id":"fa7ab95a_c201f0b0","line":30,"range":{"start_line":30,"start_character":23,"end_line":30,"end_character":26},"in_reply_to":"fa7ab95a_3cf1e701","updated":"2016-08-29 23:45:52.000000000","message":"Done","commit_id":"55cc63ffe2695a9d379efd6e35fcd499fb1990e1"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"fd9e668b0b2ad46f668a185dd2ddb7d8bfc7f641","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                      String tenantId,"},{"line_number":38,"context_line":"                      @Nullable String offset,"},{"line_number":39,"context_line":"                      int limit)"},{"line_number":40,"context_line":"      throws Exception;"},{"line_number":41,"context_line":"}"}],"source_content_type":"text/x-java","patch_set":24,"id":"fa7ab95a_9ff825c5","line":40,"updated":"2016-08-29 22:35:27.000000000","message":"and here too?","commit_id":"55cc63ffe2695a9d379efd6e35fcd499fb1990e1"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"da94031b2b045d6a76d992778c8fefc224082bc5","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                      String tenantId,"},{"line_number":38,"context_line":"                      @Nullable String offset,"},{"line_number":39,"context_line":"                      int limit)"},{"line_number":40,"context_line":"      throws Exception;"},{"line_number":41,"context_line":"}"}],"source_content_type":"text/x-java","patch_set":24,"id":"fa7ab95a_e2fef4ac","line":40,"in_reply_to":"fa7ab95a_9ff825c5","updated":"2016-08-29 23:45:52.000000000","message":"Done","commit_id":"55cc63ffe2695a9d379efd6e35fcd499fb1990e1"}],"java/src/main/java/monasca/api/domain/model/dimension/DimensionValue.java":[{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"34f6d7c52407864fb975e30fe946312e6d7b04d0","unresolved":false,"context_lines":[{"line_number":14,"context_line":"package monasca.api.domain.model.dimension;"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"/**"},{"line_number":17,"context_line":" * Encapsulates the list of dimension values for a given dimension name"},{"line_number":18,"context_line":" * (and optional metric-name)."},{"line_number":19,"context_line":" */"},{"line_number":20,"context_line":"public class DimensionValue extends DimensionBase {"}],"source_content_type":"text/x-java","patch_set":46,"id":"7a8ec9b2_8d88ea72","line":17,"range":{"start_line":17,"start_character":19,"end_line":17,"end_character":44},"updated":"2016-09-16 20:13:15.000000000","message":"Not anymore :)","commit_id":"5589119205ba3bd7ea6e537ede135a371c5e9e27"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"bbc1981b91f05656d68dbdb190d90b5e5e8ebcd6","unresolved":false,"context_lines":[{"line_number":14,"context_line":"package monasca.api.domain.model.dimension;"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"/**"},{"line_number":17,"context_line":" * Encapsulates the list of dimension values for a given dimension name"},{"line_number":18,"context_line":" * (and optional metric-name)."},{"line_number":19,"context_line":" */"},{"line_number":20,"context_line":"public class DimensionValue extends DimensionBase {"}],"source_content_type":"text/x-java","patch_set":46,"id":"7a8ec9b2_f0b2254b","line":17,"range":{"start_line":17,"start_character":19,"end_line":17,"end_character":44},"in_reply_to":"7a8ec9b2_8d88ea72","updated":"2016-09-16 20:46:33.000000000","message":"Done","commit_id":"5589119205ba3bd7ea6e537ede135a371c5e9e27"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"34f6d7c52407864fb975e30fe946312e6d7b04d0","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    if (this \u003d\u003d obj)"},{"line_number":39,"context_line":"      return true;"},{"line_number":40,"context_line":"    if (obj \u003d\u003d null)"},{"line_number":41,"context_line":"      return false;"},{"line_number":42,"context_line":"    DimensionValue other \u003d (DimensionValue) obj;"},{"line_number":43,"context_line":"    if (dimensionName \u003d\u003d null) {"},{"line_number":44,"context_line":"      if (other.dimensionName !\u003d null)"}],"source_content_type":"text/x-java","patch_set":46,"id":"7a8ec9b2_8d7aaa86","line":41,"updated":"2016-09-16 20:13:15.000000000","message":"You should add:\n        if (getClass() !\u003d obj.getClass())\n            return false;","commit_id":"5589119205ba3bd7ea6e537ede135a371c5e9e27"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"bbc1981b91f05656d68dbdb190d90b5e5e8ebcd6","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    if (this \u003d\u003d obj)"},{"line_number":39,"context_line":"      return true;"},{"line_number":40,"context_line":"    if (obj \u003d\u003d null)"},{"line_number":41,"context_line":"      return false;"},{"line_number":42,"context_line":"    DimensionValue other \u003d (DimensionValue) obj;"},{"line_number":43,"context_line":"    if (dimensionName \u003d\u003d null) {"},{"line_number":44,"context_line":"      if (other.dimensionName !\u003d null)"}],"source_content_type":"text/x-java","patch_set":46,"id":"7a8ec9b2_30b9ed2e","line":41,"in_reply_to":"7a8ec9b2_8d7aaa86","updated":"2016-09-16 20:46:33.000000000","message":"Done","commit_id":"5589119205ba3bd7ea6e537ede135a371c5e9e27"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"34f6d7c52407864fb975e30fe946312e6d7b04d0","unresolved":false,"context_lines":[{"line_number":57,"context_line":"  public int hashCode() {"},{"line_number":58,"context_line":"    final int prime \u003d 31;"},{"line_number":59,"context_line":"    int result \u003d super.hashCode();"},{"line_number":60,"context_line":"    result \u003d prime * result + ((dimensionValue \u003d\u003d null) ? 0 : dimensionValue.hashCode());"},{"line_number":61,"context_line":"    return result;"},{"line_number":62,"context_line":"  }"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-java","patch_set":46,"id":"7a8ec9b2_ada4c607","line":60,"range":{"start_line":60,"start_character":4,"end_line":60,"end_character":89},"updated":"2016-09-16 20:13:15.000000000","message":"You need to hash on dimensionName as well","commit_id":"5589119205ba3bd7ea6e537ede135a371c5e9e27"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"bbc1981b91f05656d68dbdb190d90b5e5e8ebcd6","unresolved":false,"context_lines":[{"line_number":57,"context_line":"  public int hashCode() {"},{"line_number":58,"context_line":"    final int prime \u003d 31;"},{"line_number":59,"context_line":"    int result \u003d super.hashCode();"},{"line_number":60,"context_line":"    result \u003d prime * result + ((dimensionValue \u003d\u003d null) ? 0 : dimensionValue.hashCode());"},{"line_number":61,"context_line":"    return result;"},{"line_number":62,"context_line":"  }"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-java","patch_set":46,"id":"7a8ec9b2_d0f529ed","line":60,"range":{"start_line":60,"start_character":4,"end_line":60,"end_character":89},"in_reply_to":"7a8ec9b2_ada4c607","updated":"2016-09-16 20:46:33.000000000","message":"Done","commit_id":"5589119205ba3bd7ea6e537ede135a371c5e9e27"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"34f6d7c52407864fb975e30fe946312e6d7b04d0","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"  @Override"},{"line_number":65,"context_line":"  public String toString() {"},{"line_number":66,"context_line":"    return String.format(\"DimensionValues: MetricName\u003d%s DimensionValues [name\u003d%s, values\u003d%s]\","},{"line_number":67,"context_line":"                         getMetricName(), dimensionName, dimensionValue);"},{"line_number":68,"context_line":"  }"},{"line_number":69,"context_line":"}"}],"source_content_type":"text/x-java","patch_set":46,"id":"7a8ec9b2_2db9962e","line":66,"range":{"start_line":66,"start_character":26,"end_line":66,"end_character":41},"updated":"2016-09-16 20:13:15.000000000","message":"DimensionValue","commit_id":"5589119205ba3bd7ea6e537ede135a371c5e9e27"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"bbc1981b91f05656d68dbdb190d90b5e5e8ebcd6","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"  @Override"},{"line_number":65,"context_line":"  public String toString() {"},{"line_number":66,"context_line":"    return String.format(\"DimensionValues: MetricName\u003d%s DimensionValues [name\u003d%s, values\u003d%s]\","},{"line_number":67,"context_line":"                         getMetricName(), dimensionName, dimensionValue);"},{"line_number":68,"context_line":"  }"},{"line_number":69,"context_line":"}"}],"source_content_type":"text/x-java","patch_set":46,"id":"7a8ec9b2_b0f25d04","line":66,"range":{"start_line":66,"start_character":26,"end_line":66,"end_character":41},"in_reply_to":"7a8ec9b2_2db9962e","updated":"2016-09-16 20:46:33.000000000","message":"Done","commit_id":"5589119205ba3bd7ea6e537ede135a371c5e9e27"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"492ac65c4d73a7f92e165775536a25612af55a33","unresolved":false,"context_lines":[{"line_number":23,"context_line":"  final private String dimensionValue;"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"  public DimensionValue(String metricName, String dimensionName, String dimensionValue) {"},{"line_number":26,"context_line":"    super(metricName, dimensionValue);"},{"line_number":27,"context_line":"    this.dimensionName \u003d dimensionName;"},{"line_number":28,"context_line":"    this.dimensionValue \u003d dimensionValue;"},{"line_number":29,"context_line":"  }"}],"source_content_type":"text/x-java","patch_set":48,"id":"5a8bc5a2_6bbd1b01","line":26,"updated":"2016-09-27 14:47:22.000000000","message":"Does dimensionValue become the id of DimensionBase? Not sure why it would be done that way.","commit_id":"4e006166a3e587a17e3543b366e730c63e083d4a"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"59f3ccad1a61bb7e0ff8ad099ce0ec128624e32a","unresolved":false,"context_lines":[{"line_number":23,"context_line":"  final private String dimensionValue;"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"  public DimensionValue(String metricName, String dimensionName, String dimensionValue) {"},{"line_number":26,"context_line":"    super(metricName, dimensionValue);"},{"line_number":27,"context_line":"    this.dimensionName \u003d dimensionName;"},{"line_number":28,"context_line":"    this.dimensionValue \u003d dimensionValue;"},{"line_number":29,"context_line":"  }"}],"source_content_type":"text/x-java","patch_set":48,"id":"5a8bc5a2_e6a96291","line":26,"in_reply_to":"5a8bc5a2_6bbd1b01","updated":"2016-09-27 14:54:25.000000000","message":"Yes then on the pagination part, we can still use the existing function Links.paginate.","commit_id":"4e006166a3e587a17e3543b366e730c63e083d4a"}],"java/src/main/java/monasca/api/domain/model/dimension/DimensionValues.java":[{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"19fa4d78e5400582e65a923198b8ae2ec6cec171","unresolved":false,"context_lines":[{"line_number":44,"context_line":"  }"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"  @Override"},{"line_number":47,"context_line":"  public String getId() {"},{"line_number":48,"context_line":"    if (null \u003d\u003d this.id) {"},{"line_number":49,"context_line":"      this.id \u003d generateId();"},{"line_number":50,"context_line":"    }"},{"line_number":51,"context_line":"    return this.id;"},{"line_number":52,"context_line":"  }"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"  private String generateId() {"},{"line_number":55,"context_line":"    String hashstr \u003d \"metricName\u003d\" + metricName + \"dimensionName\u003d\" + dimensionName;"}],"source_content_type":"text/x-java","patch_set":19,"id":"1ac06dbe_f4576223","line":52,"range":{"start_line":47,"start_character":0,"end_line":52,"end_character":3},"updated":"2016-08-24 03:01:47.000000000","message":"This is the same as the super class so you can just delete it. Instead make generateId() a protected method so it is overridden in this class.","commit_id":"9ed098136d9bd0eaa147b306fb4f0a6c481d03db"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"30e498d3b8abc79e4d2d6dbcb76996b3a6fc46f3","unresolved":false,"context_lines":[{"line_number":44,"context_line":"  }"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"  @Override"},{"line_number":47,"context_line":"  public String getId() {"},{"line_number":48,"context_line":"    if (null \u003d\u003d this.id) {"},{"line_number":49,"context_line":"      this.id \u003d generateId();"},{"line_number":50,"context_line":"    }"},{"line_number":51,"context_line":"    return this.id;"},{"line_number":52,"context_line":"  }"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"  private String generateId() {"},{"line_number":55,"context_line":"    String hashstr \u003d \"metricName\u003d\" + metricName + \"dimensionName\u003d\" + dimensionName;"}],"source_content_type":"text/x-java","patch_set":19,"id":"1ac06dbe_cb8f2473","line":52,"range":{"start_line":47,"start_character":0,"end_line":52,"end_character":3},"in_reply_to":"1ac06dbe_f4576223","updated":"2016-08-24 03:35:23.000000000","message":"Done","commit_id":"9ed098136d9bd0eaa147b306fb4f0a6c481d03db"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"19fa4d78e5400582e65a923198b8ae2ec6cec171","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        return false;"},{"line_number":72,"context_line":"    } else if (!dimensionName.equals(other.dimensionName))"},{"line_number":73,"context_line":"      return false;"},{"line_number":74,"context_line":"    if (metricName \u003d\u003d null) {"},{"line_number":75,"context_line":"      if (other.metricName !\u003d null)"},{"line_number":76,"context_line":"        return false;"},{"line_number":77,"context_line":"    } else if (!metricName.equals(other.metricName))"},{"line_number":78,"context_line":"      return false;"},{"line_number":79,"context_line":"    if (dimensionInfo \u003d\u003d null) {"},{"line_number":80,"context_line":"      if (other.dimensionInfo !\u003d null)"},{"line_number":81,"context_line":"        return false;"},{"line_number":82,"context_line":"    } else if (!dimensionInfo.equals(other.dimensionInfo))"},{"line_number":83,"context_line":"      return false;"},{"line_number":84,"context_line":"    return true;"},{"line_number":85,"context_line":"  }"},{"line_number":86,"context_line":""}],"source_content_type":"text/x-java","patch_set":19,"id":"1ac06dbe_e804a615","line":83,"range":{"start_line":74,"start_character":0,"end_line":83,"end_character":19},"updated":"2016-08-24 03:01:47.000000000","message":"This part is super.equals() so replace it with that","commit_id":"9ed098136d9bd0eaa147b306fb4f0a6c481d03db"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"30e498d3b8abc79e4d2d6dbcb76996b3a6fc46f3","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        return false;"},{"line_number":72,"context_line":"    } else if (!dimensionName.equals(other.dimensionName))"},{"line_number":73,"context_line":"      return false;"},{"line_number":74,"context_line":"    if (metricName \u003d\u003d null) {"},{"line_number":75,"context_line":"      if (other.metricName !\u003d null)"},{"line_number":76,"context_line":"        return false;"},{"line_number":77,"context_line":"    } else if (!metricName.equals(other.metricName))"},{"line_number":78,"context_line":"      return false;"},{"line_number":79,"context_line":"    if (dimensionInfo \u003d\u003d null) {"},{"line_number":80,"context_line":"      if (other.dimensionInfo !\u003d null)"},{"line_number":81,"context_line":"        return false;"},{"line_number":82,"context_line":"    } else if (!dimensionInfo.equals(other.dimensionInfo))"},{"line_number":83,"context_line":"      return false;"},{"line_number":84,"context_line":"    return true;"},{"line_number":85,"context_line":"  }"},{"line_number":86,"context_line":""}],"source_content_type":"text/x-java","patch_set":19,"id":"1ac06dbe_ab8aa861","line":83,"range":{"start_line":74,"start_character":0,"end_line":83,"end_character":19},"in_reply_to":"1ac06dbe_e804a615","updated":"2016-08-24 03:35:23.000000000","message":"Done","commit_id":"9ed098136d9bd0eaa147b306fb4f0a6c481d03db"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"19fa4d78e5400582e65a923198b8ae2ec6cec171","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"  @Override"},{"line_number":88,"context_line":"  public int hashCode() {"},{"line_number":89,"context_line":"    final int prime \u003d 31;"},{"line_number":90,"context_line":"    int result \u003d 1;"},{"line_number":91,"context_line":"    result \u003d prime * result + ((dimensionName \u003d\u003d null) ? 0 : dimensionName.hashCode());"},{"line_number":92,"context_line":"    result \u003d prime * result + ((metricName \u003d\u003d null) ? 0 : metricName.hashCode());"},{"line_number":93,"context_line":"    result \u003d prime * result + ((dimensionInfo \u003d\u003d null) ? 0 : dimensionInfo.hashCode());"},{"line_number":94,"context_line":"    return result;"},{"line_number":95,"context_line":"  }"}],"source_content_type":"text/x-java","patch_set":19,"id":"1ac06dbe_481fba5a","line":92,"range":{"start_line":89,"start_character":0,"end_line":92,"end_character":81},"updated":"2016-08-24 03:01:47.000000000","message":"This part is super.hashcode() so replace it with that","commit_id":"9ed098136d9bd0eaa147b306fb4f0a6c481d03db"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"30e498d3b8abc79e4d2d6dbcb76996b3a6fc46f3","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"  @Override"},{"line_number":88,"context_line":"  public int hashCode() {"},{"line_number":89,"context_line":"    final int prime \u003d 31;"},{"line_number":90,"context_line":"    int result \u003d 1;"},{"line_number":91,"context_line":"    result \u003d prime * result + ((dimensionName \u003d\u003d null) ? 0 : dimensionName.hashCode());"},{"line_number":92,"context_line":"    result \u003d prime * result + ((metricName \u003d\u003d null) ? 0 : metricName.hashCode());"},{"line_number":93,"context_line":"    result \u003d prime * result + ((dimensionInfo \u003d\u003d null) ? 0 : dimensionInfo.hashCode());"},{"line_number":94,"context_line":"    return result;"},{"line_number":95,"context_line":"  }"}],"source_content_type":"text/x-java","patch_set":19,"id":"1ac06dbe_ebee6020","line":92,"range":{"start_line":89,"start_character":0,"end_line":92,"end_character":81},"in_reply_to":"1ac06dbe_481fba5a","updated":"2016-08-24 03:35:23.000000000","message":"Thank you Craig!","commit_id":"9ed098136d9bd0eaa147b306fb4f0a6c481d03db"},{"author":{"_account_id":14517,"name":"Ryan Brandt","email":"ryan.brandt@hpe.com","username":"ryan-brandt"},"change_message_id":"93fe85798c3c5233875e20417e7793871b2973b4","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"  @Override"},{"line_number":53,"context_line":"  public boolean equals(Object obj) {"},{"line_number":54,"context_line":"    super.equals(obj);"},{"line_number":55,"context_line":"    DimensionValues other \u003d (DimensionValues) obj;"},{"line_number":56,"context_line":"    if (dimensionName \u003d\u003d null) {"},{"line_number":57,"context_line":"      if (other.dimensionName !\u003d null)"}],"source_content_type":"text/x-java","patch_set":20,"id":"1ac06dbe_63ac2336","line":54,"range":{"start_line":54,"start_character":4,"end_line":54,"end_character":22},"updated":"2016-08-24 19:39:04.000000000","message":"This should replace \u0027return true;\u0027 as \u0027return super.equals(obj);\u0027","commit_id":"26da0a58b1a94baca8e80b2957147343d7dc0f12"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"622b46b88c8f3dc86c6f2b0401de53e47d53bb26","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"  @Override"},{"line_number":44,"context_line":"  public String getId() {"},{"line_number":45,"context_line":"    return DimensionHelpers.getId(this.id, metricName, dimensionName);"},{"line_number":46,"context_line":"  }"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"  @Override"}],"source_content_type":"text/x-java","patch_set":26,"id":"fa7ab95a_2628b732","line":45,"updated":"2016-08-30 16:47:09.000000000","message":"dimensionName is assigned in the contructor as well as metricName. Those are the only two variables that are required for generating the ID. There is not reason that this needs to be deferred. If you create a help called, generateId(String)\n\nyou could assign this.id in the constructor and avoid this small amount of complexity at this point testing for null.","commit_id":"29efe178689bbbef57eeae3d4e3ef98a96f78bcd"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"d7e2e9212deaa80e0163008ad04cb08214b1700d","unresolved":false,"context_lines":[{"line_number":21,"context_line":" */"},{"line_number":22,"context_line":"public class DimensionValues extends DimensionBase {"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"  private String dimensionName;"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"  public DimensionValues(String metricName, String dimensionValues, String dimensionName) {"},{"line_number":27,"context_line":"    super(metricName, dimensionValues);"}],"source_content_type":"text/x-java","patch_set":40,"id":"9a89bdaa_5b5d40eb","line":24,"updated":"2016-09-09 20:23:17.000000000","message":"Should this be declared final?","commit_id":"529dd7992acb994171d9a2a9c6999ee093b68931"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"d7e2e9212deaa80e0163008ad04cb08214b1700d","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"  private String dimensionName;"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"  public DimensionValues(String metricName, String dimensionValues, String dimensionName) {"},{"line_number":27,"context_line":"    super(metricName, dimensionValues);"},{"line_number":28,"context_line":"    this.dimensionName \u003d dimensionName;"},{"line_number":29,"context_line":"  }"}],"source_content_type":"text/x-java","patch_set":40,"id":"9a89bdaa_1b2f38a2","line":26,"updated":"2016-09-09 20:23:17.000000000","message":"Why did you do this in the order of metricName, dimensionValues, dimensionName instead of metricName, dimensionName and dimensionValues? The latter seems more in order and striaght-forward.","commit_id":"529dd7992acb994171d9a2a9c6999ee093b68931"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"32bcbbb827251e43ace24dde2a83b13ca9421773","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"  @Override"},{"line_number":81,"context_line":"  public boolean equals(Object obj) {"},{"line_number":82,"context_line":"    if (this \u003d\u003d obj)"},{"line_number":83,"context_line":"      return true;"},{"line_number":84,"context_line":"    if (obj \u003d\u003d null)"},{"line_number":85,"context_line":"      return false;"},{"line_number":86,"context_line":"    if (getClass() !\u003d obj.getClass())"},{"line_number":87,"context_line":"      return false;"},{"line_number":88,"context_line":"    DimensionValues other \u003d (DimensionValues) obj;"}],"source_content_type":"text/x-java","patch_set":42,"id":"9a89bdaa_160178af","side":"PARENT","line":85,"range":{"start_line":82,"start_character":0,"end_line":85,"end_character":19},"updated":"2016-09-12 22:02:29.000000000","message":"You want to keep these. Without them you will get a NPE if you call equals with \"null\" which is valid","commit_id":"16156d7b7dfd6ffe1e40016eb0265919d893f42d"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"1219f8217bbd4563ec705f3246cf411da2e492c5","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"  @Override"},{"line_number":81,"context_line":"  public boolean equals(Object obj) {"},{"line_number":82,"context_line":"    if (this \u003d\u003d obj)"},{"line_number":83,"context_line":"      return true;"},{"line_number":84,"context_line":"    if (obj \u003d\u003d null)"},{"line_number":85,"context_line":"      return false;"},{"line_number":86,"context_line":"    if (getClass() !\u003d obj.getClass())"},{"line_number":87,"context_line":"      return false;"},{"line_number":88,"context_line":"    DimensionValues other \u003d (DimensionValues) obj;"}],"source_content_type":"text/x-java","patch_set":42,"id":"9a89bdaa_ca7f6415","side":"PARENT","line":85,"range":{"start_line":82,"start_character":0,"end_line":85,"end_character":19},"in_reply_to":"9a89bdaa_160178af","updated":"2016-09-12 23:07:37.000000000","message":"Done","commit_id":"16156d7b7dfd6ffe1e40016eb0265919d893f42d"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"f671a8f34b8a32431a81f24cb609746f33ff2d63","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":45,"id":"7a8ec9b2_8eb10b4a","updated":"2016-09-15 16:34:28.000000000","message":"If this class is meant to store only one dimensionValue, then the class name should be \u0027dimensionValue\u0027 not \u0027dimensionValues\u0027.","commit_id":"7c6858df2500d26df8c48165e7c5984e1a27ca5d"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"a5c20616431fc3e4e36abe68777192a9999948f1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":45,"id":"7a8ec9b2_f6506b34","in_reply_to":"7a8ec9b2_8eb10b4a","updated":"2016-09-16 17:55:27.000000000","message":"Done","commit_id":"7c6858df2500d26df8c48165e7c5984e1a27ca5d"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"f671a8f34b8a32431a81f24cb609746f33ff2d63","unresolved":false,"context_lines":[{"line_number":21,"context_line":" */"},{"line_number":22,"context_line":"public class DimensionValues extends DimensionBase {"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"  final private String dimensionName;"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"  public DimensionValues(String metricName, String dimensionName, String dimensionValues) {"},{"line_number":27,"context_line":"    super(metricName, dimensionValues);"}],"source_content_type":"text/x-java","patch_set":45,"id":"7a8ec9b2_6ee03ffb","line":24,"updated":"2016-09-15 16:34:28.000000000","message":"Need to have the dimensionValue attribute added. Need equals and hashCode methods.","commit_id":"7c6858df2500d26df8c48165e7c5984e1a27ca5d"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"a5c20616431fc3e4e36abe68777192a9999948f1","unresolved":false,"context_lines":[{"line_number":21,"context_line":" */"},{"line_number":22,"context_line":"public class DimensionValues extends DimensionBase {"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"  final private String dimensionName;"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"  public DimensionValues(String metricName, String dimensionName, String dimensionValues) {"},{"line_number":27,"context_line":"    super(metricName, dimensionValues);"}],"source_content_type":"text/x-java","patch_set":45,"id":"7a8ec9b2_36473378","line":24,"in_reply_to":"7a8ec9b2_6ee03ffb","updated":"2016-09-16 17:55:27.000000000","message":"Done","commit_id":"7c6858df2500d26df8c48165e7c5984e1a27ca5d"}],"java/src/main/java/monasca/api/infrastructure/persistence/influxdb/InfluxV9DimensionRepo.java":[{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"161d0ee6db3054034ae59f54e9f75192eac829e2","unresolved":false,"context_lines":[{"line_number":164,"context_line":"  }"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"  private List\u003cString\u003e filterDimensionNames(Set\u003cString\u003e matchingNames,"},{"line_number":167,"context_line":"                                            String metricName,"},{"line_number":168,"context_line":"                                            int limit,"},{"line_number":169,"context_line":"                                            String offset) {"},{"line_number":170,"context_line":"    Boolean haveOffset \u003d (null !\u003d offset \u0026\u0026 !\"\".equals(offset));"}],"source_content_type":"text/x-java","patch_set":12,"id":"9ad45d7e_7d02fb70","line":167,"range":{"start_line":167,"start_character":44,"end_line":167,"end_character":62},"updated":"2016-08-12 19:37:13.000000000","message":"metricName isn\u0027t used","commit_id":"0304d3ff31cf2b9d5b056e900c543d778ed8d4b3"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"161d0ee6db3054034ae59f54e9f75192eac829e2","unresolved":false,"context_lines":[{"line_number":167,"context_line":"                                            String metricName,"},{"line_number":168,"context_line":"                                            int limit,"},{"line_number":169,"context_line":"                                            String offset) {"},{"line_number":170,"context_line":"    Boolean haveOffset \u003d (null !\u003d offset \u0026\u0026 !\"\".equals(offset));"},{"line_number":171,"context_line":"    List\u003cString\u003e filteredNames \u003d new ArrayList\u003cString\u003e();"},{"line_number":172,"context_line":"    int remaining_limit \u003d limit + 1;"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-java","patch_set":12,"id":"9ad45d7e_b285c2ae","line":170,"range":{"start_line":170,"start_character":25,"end_line":170,"end_character":64},"updated":"2016-08-12 19:37:13.000000000","message":"Using com.google.common.base.Strings.isNullOrEmpty would be better here. Also, remember offset.isEmpty() where you only need to check if it is \"\"","commit_id":"0304d3ff31cf2b9d5b056e900c543d778ed8d4b3"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"f671a8f34b8a32431a81f24cb609746f33ff2d63","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    String q \u003d String.format(\"show series %1$s where %2$s\","},{"line_number":145,"context_line":"            this.influxV9Utils.namePart(metricName, false),"},{"line_number":146,"context_line":"            this.influxV9Utils.privateTenantIdPart(tenantId));"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    logger.debug(\"Dimension names query: {}\", q);"},{"line_number":149,"context_line":"    String r \u003d this.influxV9RepoReader.read(q);"}],"source_content_type":"text/x-java","patch_set":45,"id":"7a8ec9b2_ee2a8f8f","line":146,"updated":"2016-09-15 16:34:28.000000000","message":"This is an unbounded query. Need to use offset and limit to ensure that there are bounds on the size of the result set.","commit_id":"7c6858df2500d26df8c48165e7c5984e1a27ca5d"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"a5c20616431fc3e4e36abe68777192a9999948f1","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    String q \u003d String.format(\"show series %1$s where %2$s\","},{"line_number":145,"context_line":"            this.influxV9Utils.namePart(metricName, false),"},{"line_number":146,"context_line":"            this.influxV9Utils.privateTenantIdPart(tenantId));"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    logger.debug(\"Dimension names query: {}\", q);"},{"line_number":149,"context_line":"    String r \u003d this.influxV9RepoReader.read(q);"}],"source_content_type":"text/x-java","patch_set":45,"id":"7a8ec9b2_f12cf59a","line":146,"in_reply_to":"7a8ec9b2_ee2a8f8f","updated":"2016-09-16 17:55:27.000000000","message":"Cant find a proper way to paginate diemnsion names and dimension values inside influx database. Will keep this part for now.","commit_id":"7c6858df2500d26df8c48165e7c5984e1a27ca5d"}],"java/src/main/java/monasca/api/infrastructure/persistence/vertica/DimensionVerticaRepoImpl.java":[{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"4d2cc9d2315eb43ced6740c082775bbc5dd0661e","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"      for (Map\u003cString, Object\u003e row : rows) {"},{"line_number":122,"context_line":"        String dimValue \u003d (String) row.get(\"dValue\");"},{"line_number":123,"context_line":"        DimensionValues dimensionValue \u003d new DimensionValues(metricName, dimensionName, dimValue);"},{"line_number":124,"context_line":"        dimensionValuesList.add(dimensionValue);"},{"line_number":125,"context_line":"      }"},{"line_number":126,"context_line":"      return dimensionValuesList;"}],"source_content_type":"text/x-java","patch_set":41,"id":"9a89bdaa_e344a5b8","line":123,"range":{"start_line":123,"start_character":8,"end_line":123,"end_character":23},"updated":"2016-09-10 02:53:24.000000000","message":"Being a little pedantic here, but i think u should rename dimValue to dimensionValue, to match the convention in dimensionName, and then DImensionValues dimensionValue should be dimenstionValues, plural, to match the class name.","commit_id":"bea61ad3c5bcdc349f6f1b0eec594cda873e16cb"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"886a79aee11ef4fd3fe2a5f3ab5674766aaba98f","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"      for (Map\u003cString, Object\u003e row : rows) {"},{"line_number":122,"context_line":"        String dimValue \u003d (String) row.get(\"dValue\");"},{"line_number":123,"context_line":"        DimensionValues dimensionValue \u003d new DimensionValues(metricName, dimensionName, dimValue);"},{"line_number":124,"context_line":"        dimensionValuesList.add(dimensionValue);"},{"line_number":125,"context_line":"      }"},{"line_number":126,"context_line":"      return dimensionValuesList;"}],"source_content_type":"text/x-java","patch_set":41,"id":"9a89bdaa_f5496e32","line":123,"range":{"start_line":123,"start_character":8,"end_line":123,"end_character":23},"in_reply_to":"9a89bdaa_e344a5b8","updated":"2016-09-12 20:35:36.000000000","message":"Done","commit_id":"bea61ad3c5bcdc349f6f1b0eec594cda873e16cb"}],"java/src/main/java/monasca/api/resource/DimensionResource.java":[{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"d7e2e9212deaa80e0163008ad04cb08214b1700d","unresolved":false,"context_lines":[{"line_number":70,"context_line":"      @QueryParam(\"tenant_id\") String crossTenantId) throws Exception"},{"line_number":71,"context_line":"  {"},{"line_number":72,"context_line":"    Validation.validateNotNullOrEmpty(dimensionName, \"dimension_name\");"},{"line_number":73,"context_line":"    final int paging_limit \u003d this.persistUtils.getLimit(limit);"},{"line_number":74,"context_line":"    String queryTenantId \u003d Validation.getQueryProject(roles, crossTenantId, tenantId, admin_role);"},{"line_number":75,"context_line":"    List\u003cDimensionValues\u003e dimValues \u003d repo.findValues(metricName, queryTenantId, dimensionName, offset, paging_limit);"},{"line_number":76,"context_line":"    return Links.paginate(paging_limit, dimValues, uriInfo);"}],"source_content_type":"text/x-java","patch_set":40,"id":"9a89bdaa_80ed9927","line":73,"updated":"2016-09-09 20:23:17.000000000","message":"I think se missed this on some prior reviews, but the variable names in Java should be camel case. For example, pagingLimit.","commit_id":"529dd7992acb994171d9a2a9c6999ee093b68931"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"d7e2e9212deaa80e0163008ad04cb08214b1700d","unresolved":false,"context_lines":[{"line_number":90,"context_line":"          @QueryParam(\"tenant_id\") String crossTenantId) throws Exception"},{"line_number":91,"context_line":"  {"},{"line_number":92,"context_line":"    final int paging_limit \u003d this.persistUtils.getLimit(limit);"},{"line_number":93,"context_line":"    String queryTenantId \u003d Validation.getQueryProject(roles, crossTenantId, tenantId, admin_role);"},{"line_number":94,"context_line":"    List\u003cDimensionNames\u003e dimNames \u003d repo.findNames(metricName, queryTenantId, offset, paging_limit);"},{"line_number":95,"context_line":"    return Links.paginate(paging_limit, dimNames, uriInfo);"},{"line_number":96,"context_line":"  }"}],"source_content_type":"text/x-java","patch_set":40,"id":"9a89bdaa_00da6978","line":93,"updated":"2016-09-09 20:23:17.000000000","message":"Similar for admin_role as adminRole.","commit_id":"529dd7992acb994171d9a2a9c6999ee093b68931"}],"java/src/main/java/monasca/api/resource/Links.java":[{"author":{"_account_id":14517,"name":"Ryan Brandt","email":"ryan.brandt@hpe.com","username":"ryan-brandt"},"change_message_id":"131dc4b9bbb9423b598db93213b25ac78caa1609","unresolved":false,"context_lines":[{"line_number":378,"context_line":"    return paged;"},{"line_number":379,"context_line":"  }"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"  public static Paged paginateDimensionNames(DimensionNames dimNames, int limit, UriInfo uriInfo)"},{"line_number":382,"context_line":"          throws UnsupportedEncodingException {"},{"line_number":383,"context_line":"    Paged paged \u003d new Paged();"},{"line_number":384,"context_line":"    List\u003cDimensionNames\u003e elements \u003d new ArrayList\u003cDimensionNames\u003e();"}],"source_content_type":"text/x-java","patch_set":17,"id":"1ac06dbe_07acf68a","line":381,"range":{"start_line":381,"start_character":22,"end_line":381,"end_character":44},"updated":"2016-08-22 19:20:46.000000000","message":"Any way this could be combined with the one above? They are very similar","commit_id":"e8be9caf7b82e87b4022158ce49522ff746aa352"},{"author":{"_account_id":15027,"name":"Michael Hoppal","email":"michael.jam.hoppal@hpe.com","username":"michael-hoppal"},"change_message_id":"40d5bd8f5f2d8265975a674db7dd60cc59adf859","unresolved":false,"context_lines":[{"line_number":360,"context_line":"    alarmCount.setLinks(links);"},{"line_number":361,"context_line":"  }"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"  public static Paged paginateDimensionNamesOrValues(DimensionNames dimNamesOrValues, int limit, UriInfo uriInfo)"},{"line_number":364,"context_line":"          throws UnsupportedEncodingException {"},{"line_number":365,"context_line":"    Paged paged \u003d new Paged();"},{"line_number":366,"context_line":"    List\u003cDimensionNames\u003e elements \u003d new ArrayList\u003c\u003e();"}],"source_content_type":"text/x-java","patch_set":22,"id":"1ac06dbe_980505c4","line":363,"range":{"start_line":363,"start_character":53,"end_line":363,"end_character":67},"updated":"2016-08-25 15:54:04.000000000","message":"confusing that this class is DimensionNames but the variable name is dimNamesOrValues","commit_id":"a6fae4c94abcb49a4a885171c69af044683df72e"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"28d8f1e9148518a0bc9997bface2c63b9dc34865","unresolved":false,"context_lines":[{"line_number":360,"context_line":"    alarmCount.setLinks(links);"},{"line_number":361,"context_line":"  }"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"  public static Paged paginateDimensionNamesOrValues(DimensionNames dimNamesOrValues, int limit, UriInfo uriInfo)"},{"line_number":364,"context_line":"          throws UnsupportedEncodingException {"},{"line_number":365,"context_line":"    Paged paged \u003d new Paged();"},{"line_number":366,"context_line":"    List\u003cDimensionNames\u003e elements \u003d new ArrayList\u003c\u003e();"}],"source_content_type":"text/x-java","patch_set":22,"id":"1ac06dbe_c9d4d1be","line":363,"range":{"start_line":363,"start_character":53,"end_line":363,"end_character":67},"in_reply_to":"1ac06dbe_980505c4","updated":"2016-08-25 16:54:46.000000000","message":"Yeah I agree... But if I change DimensionNames class name to DimensionNamesOrValues that would be wrong too hmm","commit_id":"a6fae4c94abcb49a4a885171c69af044683df72e"},{"author":{"_account_id":14517,"name":"Ryan Brandt","email":"ryan.brandt@hpe.com","username":"ryan-brandt"},"change_message_id":"999c7c97b7eabffcf72b782ec374eedf47558808","unresolved":false,"context_lines":[{"line_number":26,"context_line":"import monasca.api.ApiConfig;"},{"line_number":27,"context_line":"import monasca.api.domain.model.alarm.AlarmCount;"},{"line_number":28,"context_line":"import monasca.api.domain.model.common.Paged;"},{"line_number":29,"context_line":"import monasca.api.domain.model.dimension.DimensionBase;"},{"line_number":30,"context_line":"import monasca.api.domain.model.measurement.Measurements;"},{"line_number":31,"context_line":"import monasca.common.model.domain.common.AbstractEntity;"},{"line_number":32,"context_line":"import monasca.api.domain.model.common.Link;"}],"source_content_type":"text/x-java","patch_set":50,"id":"1a95cdbc_5b5a2d2b","line":29,"range":{"start_line":29,"start_character":42,"end_line":29,"end_character":55},"updated":"2016-10-07 19:58:40.000000000","message":"this import is unnecessary","commit_id":"e35f2251c9a200e7d5de1dd26463a0bdfc032a90"}],"java/src/test/java/monasca/api/resource/LinksTest.java":[{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"34f6d7c52407864fb975e30fe946312e6d7b04d0","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        + ALARM_DEF_ID));"},{"line_number":136,"context_line":"  }"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"  public void verifyPaginateDimensionValues() throws UnsupportedEncodingException, URISyntaxException{"},{"line_number":139,"context_line":"    final String base \u003d \"http://TheVip:8070/v2.0/metrics/dimensions/names/values\";"},{"line_number":140,"context_line":"    final String limitParam \u003d \"limit\u003d1\";"},{"line_number":141,"context_line":"    final String url \u003d base + \"?\" + limitParam;"},{"line_number":142,"context_line":"    final UriInfo uriInfo \u003d mock(UriInfo.class);"},{"line_number":143,"context_line":"    when(uriInfo.getRequestUri()).thenReturn(new URI(url));"},{"line_number":144,"context_line":"    when(uriInfo.getAbsolutePath()).thenReturn(new URI(base));"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    final Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"line_number":147,"context_line":"    params.put(\"limit\", \"1\");"},{"line_number":148,"context_line":"    @SuppressWarnings(\"unchecked\")"},{"line_number":149,"context_line":"    final MultivaluedMap\u003cString, String\u003e mockParams \u003d mock(MultivaluedMap.class);"},{"line_number":150,"context_line":"    when(uriInfo.getQueryParameters()).thenReturn(mockParams);"},{"line_number":151,"context_line":"    when(mockParams.keySet()).thenReturn(params.keySet());"},{"line_number":152,"context_line":"    when(mockParams.get(\"limit\")).thenReturn(Arrays.asList(\"1\"));"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    List\u003cString\u003e values \u003d new ArrayList\u003cString\u003e();"},{"line_number":155,"context_line":"    values.add(\"value1\");"},{"line_number":156,"context_line":"    values.add(\"value2\");"},{"line_number":157,"context_line":"    List\u003cString\u003e oneValue \u003d Arrays.asList(\"value1\");"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    DimensionValues dimVals \u003d new DimensionValues(\"custom_metric\","},{"line_number":160,"context_line":"                                                  \"dimension_name\","},{"line_number":161,"context_line":"                                                  values);"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    DimensionValues expectedDimVal \u003d new DimensionValues(\"custom_metric\","},{"line_number":164,"context_line":"                                                         \"dimension_name\","},{"line_number":165,"context_line":"                                                         oneValue);"},{"line_number":166,"context_line":"    final int limit \u003d 1;"},{"line_number":167,"context_line":"    final Paged expected \u003d new Paged();"},{"line_number":168,"context_line":"    final List\u003cLink\u003e links \u003d new ArrayList\u003c\u003e();"},{"line_number":169,"context_line":"    String expectedSelf \u003d url;"},{"line_number":170,"context_line":"    String expectedNext \u003d base + \"?offset\u003dvalue1\u0026\" + limitParam;"},{"line_number":171,"context_line":"    links.add(new Link(\"self\", expectedSelf));"},{"line_number":172,"context_line":"    links.add(new Link(\"next\", expectedNext));"},{"line_number":173,"context_line":"    expected.links \u003d links;"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    final ArrayList\u003cDimensionValues\u003e expectedElements \u003d new ArrayList\u003cDimensionValues\u003e();"},{"line_number":176,"context_line":"    // Since limit is one, only the first element is returned"},{"line_number":177,"context_line":"    expectedElements.add(expectedDimVal);"},{"line_number":178,"context_line":"    expected.elements \u003d expectedElements;"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    final Paged actual \u003d Links.paginateDimensionValues(dimVals, 1, uriInfo);"},{"line_number":181,"context_line":"    assertEquals(actual, expected);"},{"line_number":182,"context_line":"  }"},{"line_number":183,"context_line":"}"}],"source_content_type":"text/x-java","patch_set":46,"id":"7a8ec9b2_4d50a2d4","side":"PARENT","line":182,"range":{"start_line":138,"start_character":0,"end_line":182,"end_character":3},"updated":"2016-09-16 20:13:15.000000000","message":"I\u0027m not sure you should delete this test. I think you should modify it to use DimensionValue and DimensionName and make sure it works. Unless that is tested elsewhere","commit_id":"d4152b32e6d26c12475bce86c6b7f4bb8d59e8db"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"bbc1981b91f05656d68dbdb190d90b5e5e8ebcd6","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        + ALARM_DEF_ID));"},{"line_number":136,"context_line":"  }"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"  public void verifyPaginateDimensionValues() throws UnsupportedEncodingException, URISyntaxException{"},{"line_number":139,"context_line":"    final String base \u003d \"http://TheVip:8070/v2.0/metrics/dimensions/names/values\";"},{"line_number":140,"context_line":"    final String limitParam \u003d \"limit\u003d1\";"},{"line_number":141,"context_line":"    final String url \u003d base + \"?\" + limitParam;"},{"line_number":142,"context_line":"    final UriInfo uriInfo \u003d mock(UriInfo.class);"},{"line_number":143,"context_line":"    when(uriInfo.getRequestUri()).thenReturn(new URI(url));"},{"line_number":144,"context_line":"    when(uriInfo.getAbsolutePath()).thenReturn(new URI(base));"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    final Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"line_number":147,"context_line":"    params.put(\"limit\", \"1\");"},{"line_number":148,"context_line":"    @SuppressWarnings(\"unchecked\")"},{"line_number":149,"context_line":"    final MultivaluedMap\u003cString, String\u003e mockParams \u003d mock(MultivaluedMap.class);"},{"line_number":150,"context_line":"    when(uriInfo.getQueryParameters()).thenReturn(mockParams);"},{"line_number":151,"context_line":"    when(mockParams.keySet()).thenReturn(params.keySet());"},{"line_number":152,"context_line":"    when(mockParams.get(\"limit\")).thenReturn(Arrays.asList(\"1\"));"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    List\u003cString\u003e values \u003d new ArrayList\u003cString\u003e();"},{"line_number":155,"context_line":"    values.add(\"value1\");"},{"line_number":156,"context_line":"    values.add(\"value2\");"},{"line_number":157,"context_line":"    List\u003cString\u003e oneValue \u003d Arrays.asList(\"value1\");"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    DimensionValues dimVals \u003d new DimensionValues(\"custom_metric\","},{"line_number":160,"context_line":"                                                  \"dimension_name\","},{"line_number":161,"context_line":"                                                  values);"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    DimensionValues expectedDimVal \u003d new DimensionValues(\"custom_metric\","},{"line_number":164,"context_line":"                                                         \"dimension_name\","},{"line_number":165,"context_line":"                                                         oneValue);"},{"line_number":166,"context_line":"    final int limit \u003d 1;"},{"line_number":167,"context_line":"    final Paged expected \u003d new Paged();"},{"line_number":168,"context_line":"    final List\u003cLink\u003e links \u003d new ArrayList\u003c\u003e();"},{"line_number":169,"context_line":"    String expectedSelf \u003d url;"},{"line_number":170,"context_line":"    String expectedNext \u003d base + \"?offset\u003dvalue1\u0026\" + limitParam;"},{"line_number":171,"context_line":"    links.add(new Link(\"self\", expectedSelf));"},{"line_number":172,"context_line":"    links.add(new Link(\"next\", expectedNext));"},{"line_number":173,"context_line":"    expected.links \u003d links;"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    final ArrayList\u003cDimensionValues\u003e expectedElements \u003d new ArrayList\u003cDimensionValues\u003e();"},{"line_number":176,"context_line":"    // Since limit is one, only the first element is returned"},{"line_number":177,"context_line":"    expectedElements.add(expectedDimVal);"},{"line_number":178,"context_line":"    expected.elements \u003d expectedElements;"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    final Paged actual \u003d Links.paginateDimensionValues(dimVals, 1, uriInfo);"},{"line_number":181,"context_line":"    assertEquals(actual, expected);"},{"line_number":182,"context_line":"  }"},{"line_number":183,"context_line":"}"}],"source_content_type":"text/x-java","patch_set":46,"id":"7a8ec9b2_d011a905","side":"PARENT","line":182,"range":{"start_line":138,"start_character":0,"end_line":182,"end_character":3},"in_reply_to":"7a8ec9b2_4d50a2d4","updated":"2016-09-16 20:46:33.000000000","message":"In this code, dimensionName and dimensionValue are both calling Links.paginate() to do pagination. This function Links.paginate()  is tested in checkSelfNextLinks.","commit_id":"d4152b32e6d26c12475bce86c6b7f4bb8d59e8db"}],"monasca_api/api/metrics_api_v2.py":[{"author":{"_account_id":15027,"name":"Michael Hoppal","email":"michael.jam.hoppal@hpe.com","username":"michael-hoppal"},"change_message_id":"40d5bd8f5f2d8265975a674db7dd60cc59adf859","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 IBM Corp"},{"line_number":2,"context_line":"# Copyright 2014 Hewlett-Packard"},{"line_number":3,"context_line":"# (C) Copyright 2016 Hewlett Packard Enterprise Development LP"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":22,"id":"1ac06dbe_581b8d1b","line":2,"range":{"start_line":2,"start_character":17,"end_line":2,"end_character":24},"updated":"2016-08-25 15:54:04.000000000","message":"we should get rid of this and add it to the below copyright. At least that is what we have been doing in other files.","commit_id":"a6fae4c94abcb49a4a885171c69af044683df72e"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"28d8f1e9148518a0bc9997bface2c63b9dc34865","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 IBM Corp"},{"line_number":2,"context_line":"# Copyright 2014 Hewlett-Packard"},{"line_number":3,"context_line":"# (C) Copyright 2016 Hewlett Packard Enterprise Development LP"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":22,"id":"1ac06dbe_29b12590","line":2,"range":{"start_line":2,"start_character":17,"end_line":2,"end_character":24},"in_reply_to":"1ac06dbe_581b8d1b","updated":"2016-08-25 16:54:46.000000000","message":"Done","commit_id":"a6fae4c94abcb49a4a885171c69af044683df72e"}],"monasca_api/common/repositories/influxdb/metrics_repository.py":[{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"161d0ee6db3054034ae59f54e9f75192eac829e2","unresolved":false,"context_lines":[{"line_number":257,"context_line":"                for name in series[u\u0027columns\u0027]:"},{"line_number":258,"context_line":"                    if name not in dim_names and not name.startswith(u\u0027_\u0027):"},{"line_number":259,"context_line":"                        dim_names.append(name)"},{"line_number":260,"context_line":"        dim_names \u003d sorted(dim_names)"},{"line_number":261,"context_line":"        json_dim_names[u\u0027dimension_names\u0027] \u003d dim_names"},{"line_number":262,"context_line":"        return json_dim_names"},{"line_number":263,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad45d7e_8cc6a247","line":260,"range":{"start_line":260,"start_character":20,"end_line":260,"end_character":26},"updated":"2016-08-12 19:37:13.000000000","message":"This doesn\u0027t handle offset or limit","commit_id":"0304d3ff31cf2b9d5b056e900c543d778ed8d4b3"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"db07097c01d72ad4ddec547362527efd439315b5","unresolved":false,"context_lines":[{"line_number":257,"context_line":"                for name in series[u\u0027columns\u0027]:"},{"line_number":258,"context_line":"                    if name not in dim_names and not name.startswith(u\u0027_\u0027):"},{"line_number":259,"context_line":"                        dim_names.append(name)"},{"line_number":260,"context_line":"        dim_names \u003d sorted(dim_names)"},{"line_number":261,"context_line":"        json_dim_names[u\u0027dimension_names\u0027] \u003d dim_names"},{"line_number":262,"context_line":"        return json_dim_names"},{"line_number":263,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3ac371cc_f2eef889","line":260,"range":{"start_line":260,"start_character":20,"end_line":260,"end_character":26},"in_reply_to":"9ad45d7e_8cc6a247","updated":"2016-08-16 15:08:05.000000000","message":"Offset and limit are handled in monasca_api/v2/reference/metrics.py line 389 when it calls helpers.paginate_dimension_names()","commit_id":"0304d3ff31cf2b9d5b056e900c543d778ed8d4b3"},{"author":{"_account_id":15027,"name":"Michael Hoppal","email":"michael.jam.hoppal@hpe.com","username":"michael-hoppal"},"change_message_id":"40d5bd8f5f2d8265975a674db7dd60cc59adf859","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        json_dim_vals[u\u0027values\u0027] \u003d dim_vals"},{"line_number":248,"context_line":"        return json_dim_vals"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def _generate_dimension_names_id(self, metric_name):"},{"line_number":251,"context_line":"        sha1 \u003d hashlib.sha1()"},{"line_number":252,"context_line":"        hashstr \u003d \"metricName\u003d\" + (metric_name or \"\")"},{"line_number":253,"context_line":"        sha1.update(hashstr)"}],"source_content_type":"text/x-python","patch_set":22,"id":"1ac06dbe_83d3da5e","line":250,"range":{"start_line":250,"start_character":8,"end_line":250,"end_character":36},"updated":"2016-08-25 15:54:04.000000000","message":"seems more like you are generating a id off of the metric_name not dimensions names","commit_id":"a6fae4c94abcb49a4a885171c69af044683df72e"},{"author":{"_account_id":15027,"name":"Michael Hoppal","email":"michael.jam.hoppal@hpe.com","username":"michael-hoppal"},"change_message_id":"40d5bd8f5f2d8265975a674db7dd60cc59adf859","unresolved":false,"context_lines":[{"line_number":257,"context_line":"                                     tenant_id, region, offset):"},{"line_number":258,"context_line":"        dim_names \u003d []"},{"line_number":259,"context_line":"        sha1_id \u003d self._generate_dimension_names_id(metric_name)"},{"line_number":260,"context_line":"        json_dim_names \u003d {u\u0027id\u0027: sha1_id,"},{"line_number":261,"context_line":"                          u\u0027dimension_names\u0027: dim_names}"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        #"}],"source_content_type":"text/x-python","patch_set":22,"id":"1ac06dbe_a38ff621","line":260,"range":{"start_line":260,"start_character":28,"end_line":260,"end_character":30},"updated":"2016-08-25 15:54:04.000000000","message":"what is this id for in relation to influxdb?","commit_id":"a6fae4c94abcb49a4a885171c69af044683df72e"}],"monasca_api/v2/reference/helpers.py":[{"author":{"_account_id":14517,"name":"Ryan Brandt","email":"ryan.brandt@hpe.com","username":"ryan-brandt"},"change_message_id":"131dc4b9bbb9423b598db93213b25ac78caa1609","unresolved":false,"context_lines":[{"line_number":444,"context_line":"    return resource"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"def paginate_dimension_names(dimnames, uri, offset, limit):"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"    parsed_uri \u003d urlparse.urlparse(uri)"},{"line_number":450,"context_line":"    self_link \u003d build_base_uri(parsed_uri)"}],"source_content_type":"text/x-python","patch_set":17,"id":"1ac06dbe_67e04afb","line":447,"range":{"start_line":447,"start_character":4,"end_line":447,"end_character":28},"updated":"2016-08-22 19:20:46.000000000","message":"Any way to combine this with the one above? They are extremely similar","commit_id":"e8be9caf7b82e87b4022158ce49522ff746aa352"},{"author":{"_account_id":14517,"name":"Ryan Brandt","email":"ryan.brandt@hpe.com","username":"ryan-brandt"},"change_message_id":"131dc4b9bbb9423b598db93213b25ac78caa1609","unresolved":false,"context_lines":[{"line_number":489,"context_line":"    return resource"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"def _truncate_dimension_values_or_names(values_or_names, limit, offset):"},{"line_number":493,"context_line":"    if offset and offset in values_or_names:"},{"line_number":494,"context_line":"        next_value_pos \u003d values_or_names.index(offset) + 1"},{"line_number":495,"context_line":"        values_or_names \u003d values_or_names[next_value_pos:]"}],"source_content_type":"text/x-python","patch_set":17,"id":"1ac06dbe_c7fbfebf","line":492,"range":{"start_line":492,"start_character":4,"end_line":492,"end_character":39},"updated":"2016-08-22 19:20:46.000000000","message":"Nit: This could be called _truncate_string_list or something more general","commit_id":"e8be9caf7b82e87b4022158ce49522ff746aa352"},{"author":{"_account_id":15027,"name":"Michael Hoppal","email":"michael.jam.hoppal@hpe.com","username":"michael-hoppal"},"change_message_id":"40d5bd8f5f2d8265975a674db7dd60cc59adf859","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 Hewlett-Packard"},{"line_number":2,"context_line":"# Copyright 2015 Cray Inc. All Rights Reserved."},{"line_number":3,"context_line":"# Copyright 2016 Hewlett Packard Enterprise Development LP"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":22,"id":"1ac06dbe_0347ea1d","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"updated":"2016-08-25 15:54:04.000000000","message":"same here","commit_id":"a6fae4c94abcb49a4a885171c69af044683df72e"},{"author":{"_account_id":15027,"name":"Michael Hoppal","email":"michael.jam.hoppal@hpe.com","username":"michael-hoppal"},"change_message_id":"40d5bd8f5f2d8265975a674db7dd60cc59adf859","unresolved":false,"context_lines":[{"line_number":444,"context_line":"    return resource"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"def paginate_dimension_names(dimnames, uri, offset, limit):"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"    parsed_uri \u003d urlparse.urlparse(uri)"},{"line_number":450,"context_line":"    self_link \u003d build_base_uri(parsed_uri)"}],"source_content_type":"text/x-python","patch_set":22,"id":"1ac06dbe_83bd9ad9","line":447,"range":{"start_line":447,"start_character":29,"end_line":447,"end_character":37},"updated":"2016-08-25 15:54:04.000000000","message":"dimension_names or dim_names","commit_id":"a6fae4c94abcb49a4a885171c69af044683df72e"},{"author":{"_account_id":14517,"name":"Ryan Brandt","email":"ryan.brandt@hpe.com","username":"ryan-brandt"},"change_message_id":"0bf542276b7bd298dea5be426f500a3392347568","unresolved":false,"context_lines":[{"line_number":417,"context_line":"        # names_or_values: a list of strings(either names or values) For"},{"line_number":418,"context_line":"        # example: [\u0027name1\u0027, \u0027name2\u0027, \u0027name3\u0027]"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"        have_more, truncated_list \u003d _truncate_dimension_values_or_names("},{"line_number":421,"context_line":"            dim_info_list, dim_key, limit, offset)"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"        links \u003d [{u\u0027rel\u0027: u\u0027self\u0027, u\u0027href\u0027: self_link.decode(\u0027utf8\u0027)}]"}],"source_content_type":"text/x-python","patch_set":39,"id":"9a89bdaa_5b93cd5a","line":420,"range":{"start_line":420,"start_character":8,"end_line":420,"end_character":17},"updated":"2016-09-08 15:37:05.000000000","message":"this boolean is unnecessary when you have already checked the length of the list above","commit_id":"40345cf6bcba703e661d874ce4f992c95b7159f7"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"ed505e9954f4e28bdc048a67464f0e1052b8903a","unresolved":false,"context_lines":[{"line_number":417,"context_line":"        # names_or_values: a list of strings(either names or values) For"},{"line_number":418,"context_line":"        # example: [\u0027name1\u0027, \u0027name2\u0027, \u0027name3\u0027]"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"        have_more, truncated_list \u003d _truncate_dimension_values_or_names("},{"line_number":421,"context_line":"            dim_info_list, dim_key, limit, offset)"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"        links \u003d [{u\u0027rel\u0027: u\u0027self\u0027, u\u0027href\u0027: self_link.decode(\u0027utf8\u0027)}]"}],"source_content_type":"text/x-python","patch_set":39,"id":"9a89bdaa_bed5a71c","line":420,"range":{"start_line":420,"start_character":8,"end_line":420,"end_character":17},"in_reply_to":"9a89bdaa_5b93cd5a","updated":"2016-09-08 15:47:48.000000000","message":"This boolean is for after truncate_dimension.","commit_id":"40345cf6bcba703e661d874ce4f992c95b7159f7"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"a14b327bc7d50bb0d566b073c4462bb5d8b4879e","unresolved":false,"context_lines":[{"line_number":417,"context_line":"        # names_or_values: a list of strings(either names or values) For"},{"line_number":418,"context_line":"        # example: [\u0027name1\u0027, \u0027name2\u0027, \u0027name3\u0027]"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"        have_more, truncated_list \u003d _truncate_dimension_values_or_names("},{"line_number":421,"context_line":"            dim_info_list, dim_key, limit, offset)"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"        links \u003d [{u\u0027rel\u0027: u\u0027self\u0027, u\u0027href\u0027: self_link.decode(\u0027utf8\u0027)}]"}],"source_content_type":"text/x-python","patch_set":39,"id":"9a89bdaa_4f7a2725","line":420,"range":{"start_line":420,"start_character":8,"end_line":420,"end_character":17},"in_reply_to":"9a89bdaa_bed5a71c","updated":"2016-09-08 16:36:40.000000000","message":"Done","commit_id":"40345cf6bcba703e661d874ce4f992c95b7159f7"},{"author":{"_account_id":14517,"name":"Ryan Brandt","email":"ryan.brandt@hpe.com","username":"ryan-brandt"},"change_message_id":"0bf542276b7bd298dea5be426f500a3392347568","unresolved":false,"context_lines":[{"line_number":444,"context_line":"    return resource"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"def _truncate_dimension_values_or_names(dim_info_list, dim_key, limit,"},{"line_number":448,"context_line":"                                        offset):"},{"line_number":449,"context_line":"    names_or_values \u003d _abstract_dim_names_or_values(dim_info_list, dim_key)"},{"line_number":450,"context_line":"    if offset and offset in names_or_values:"}],"source_content_type":"text/x-python","patch_set":39,"id":"9a89bdaa_db319da3","line":447,"range":{"start_line":447,"start_character":4,"end_line":447,"end_character":39},"updated":"2016-09-08 15:37:05.000000000","message":"Perhaps this could be named something like apply_offset_and_limit to make it clearer?","commit_id":"40345cf6bcba703e661d874ce4f992c95b7159f7"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"ed505e9954f4e28bdc048a67464f0e1052b8903a","unresolved":false,"context_lines":[{"line_number":444,"context_line":"    return resource"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"def _truncate_dimension_values_or_names(dim_info_list, dim_key, limit,"},{"line_number":448,"context_line":"                                        offset):"},{"line_number":449,"context_line":"    names_or_values \u003d _abstract_dim_names_or_values(dim_info_list, dim_key)"},{"line_number":450,"context_line":"    if offset and offset in names_or_values:"}],"source_content_type":"text/x-python","patch_set":39,"id":"9a89bdaa_7e6b1f85","line":447,"range":{"start_line":447,"start_character":4,"end_line":447,"end_character":39},"in_reply_to":"9a89bdaa_db319da3","updated":"2016-09-08 15:47:48.000000000","message":"How about truncate_dimension_info_with_offset_limit?","commit_id":"40345cf6bcba703e661d874ce4f992c95b7159f7"},{"author":{"_account_id":14517,"name":"Ryan Brandt","email":"ryan.brandt@hpe.com","username":"ryan-brandt"},"change_message_id":"0bf542276b7bd298dea5be426f500a3392347568","unresolved":false,"context_lines":[{"line_number":459,"context_line":"    # Abstract the names or values from dim_info_list and put them into a"},{"line_number":460,"context_line":"    # separate list."},{"line_number":461,"context_line":"    names_or_values \u003d []"},{"line_number":462,"context_line":"    for i in xrange(len(dim_info_list)):"},{"line_number":463,"context_line":"        names_or_values.append(dim_info_list[i][dim_key])"},{"line_number":464,"context_line":"    return names_or_values"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"9a89bdaa_dbeefd20","line":463,"range":{"start_line":462,"start_character":4,"end_line":463,"end_character":57},"updated":"2016-09-08 15:37:05.000000000","message":"this can be replaced with\n\nfor item in dim_info_list:\n    names_or_values.extend(item.values())\n\nwhich doesn\u0027t require \u0027dim_key\u0027.","commit_id":"40345cf6bcba703e661d874ce4f992c95b7159f7"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"ed505e9954f4e28bdc048a67464f0e1052b8903a","unresolved":false,"context_lines":[{"line_number":459,"context_line":"    # Abstract the names or values from dim_info_list and put them into a"},{"line_number":460,"context_line":"    # separate list."},{"line_number":461,"context_line":"    names_or_values \u003d []"},{"line_number":462,"context_line":"    for i in xrange(len(dim_info_list)):"},{"line_number":463,"context_line":"        names_or_values.append(dim_info_list[i][dim_key])"},{"line_number":464,"context_line":"    return names_or_values"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"9a89bdaa_fe0d6fe8","line":463,"range":{"start_line":462,"start_character":4,"end_line":463,"end_character":57},"in_reply_to":"9a89bdaa_dbeefd20","updated":"2016-09-08 15:47:48.000000000","message":"Good one!","commit_id":"40345cf6bcba703e661d874ce4f992c95b7159f7"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"d7e2e9212deaa80e0163008ad04cb08214b1700d","unresolved":false,"context_lines":[{"line_number":400,"context_line":"def paginate_dimension_info(dim_info_list, uri, offset, limit):"},{"line_number":401,"context_line":"    # dim_info_list: a list of dictionaries. For example: for dimension name"},{"line_number":402,"context_line":"    #  list, [{u\u0027dimension_name\u0027: u\u0027name1\u0027}, {u\u0027dimension_name\u0027: u\u0027name2\u0027},"},{"line_number":403,"context_line":"    # {u\u0027dimension_name\u0027: u\u0027name3\u0027}]"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"    parsed_uri \u003d urlparse.urlparse(uri)"},{"line_number":406,"context_line":"    self_link \u003d build_base_uri(parsed_uri)"}],"source_content_type":"text/x-python","patch_set":40,"id":"9a89bdaa_c0b881e8","line":403,"updated":"2016-09-09 20:23:17.000000000","message":"I think you should change the comment block to use the Python triple quotes., ```comment```","commit_id":"529dd7992acb994171d9a2a9c6999ee093b68931"}],"monasca_tempest_tests/tests/api/base.py":[{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"30e498d3b8abc79e4d2d6dbcb76996b3a6fc46f3","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        if \u0027offset\u0027 not in query_params:"},{"line_number":95,"context_line":"            self.fail(\"No offset in next link: {}\".format(next_link))"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        return query_params[\u0027offset\u0027][0]"}],"source_content_type":"text/x-python","patch_set":19,"id":"1ac06dbe_eb2b0080","side":"PARENT","line":97,"range":{"start_line":97,"start_character":8,"end_line":97,"end_character":40},"updated":"2016-08-24 03:35:23.000000000","message":"Hmm sorry weird rebase issue","commit_id":"34d7eeec2d09c24ed07ddf843366f9995a703687"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"19fa4d78e5400582e65a923198b8ae2ec6cec171","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        if \u0027offset\u0027 not in query_params:"},{"line_number":95,"context_line":"            self.fail(\"No offset in next link: {}\".format(next_link))"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        return query_params[\u0027offset\u0027][0]"}],"source_content_type":"text/x-python","patch_set":19,"id":"1ac06dbe_94f70ed2","side":"PARENT","line":97,"range":{"start_line":97,"start_character":8,"end_line":97,"end_character":40},"updated":"2016-08-24 03:01:47.000000000","message":"This line is required, it returns the offset","commit_id":"34d7eeec2d09c24ed07ddf843366f9995a703687"}],"monasca_tempest_tests/tests/api/test_dimensions.py":[{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"161d0ee6db3054034ae59f54e9f75192eac829e2","unresolved":false,"context_lines":[{"line_number":160,"context_line":"    def test_list_dimension_names_limit_and_offset(self):"},{"line_number":161,"context_line":"        limit \u003d 1"},{"line_number":162,"context_line":"        for i in xrange(2):"},{"line_number":163,"context_line":"            offset \u003d self._dim_names[i]"},{"line_number":164,"context_line":"            parms \u003d \u0027?offset\u003d{}\u0027.format(offset)"},{"line_number":165,"context_line":"            parms +\u003d \u0027\u0026limit\u003d{}\u0027.format(limit)"},{"line_number":166,"context_line":"            resp, response_body \u003d \\"}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad45d7e_4c394a41","line":163,"range":{"start_line":163,"start_character":12,"end_line":163,"end_character":39},"updated":"2016-08-12 19:37:13.000000000","message":"Don\u0027t do this. Treat the offset as an opaque value and only use the one returned by the API.","commit_id":"0304d3ff31cf2b9d5b056e900c543d778ed8d4b3"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"f8d4f8cee0ac0502fb0bcaea9e6726677701e0b9","unresolved":false,"context_lines":[{"line_number":160,"context_line":"    def test_list_dimension_names_limit_and_offset(self):"},{"line_number":161,"context_line":"        limit \u003d 1"},{"line_number":162,"context_line":"        for i in xrange(2):"},{"line_number":163,"context_line":"            offset \u003d self._dim_names[i]"},{"line_number":164,"context_line":"            parms \u003d \u0027?offset\u003d{}\u0027.format(offset)"},{"line_number":165,"context_line":"            parms +\u003d \u0027\u0026limit\u003d{}\u0027.format(limit)"},{"line_number":166,"context_line":"            resp, response_body \u003d \\"}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad45d7e_22e85f16","line":163,"range":{"start_line":163,"start_character":12,"end_line":163,"end_character":39},"in_reply_to":"9ad45d7e_4c394a41","updated":"2016-08-12 20:10:13.000000000","message":"Will fix it! Thanks!!","commit_id":"0304d3ff31cf2b9d5b056e900c543d778ed8d4b3"},{"author":{"_account_id":14517,"name":"Ryan Brandt","email":"ryan.brandt@hpe.com","username":"ryan-brandt"},"change_message_id":"7684eaf92637c8e2d9256f1977c84e6350e1f938","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        param \u003d \u0027?start_time\u003d\u0027 + start_time"},{"line_number":65,"context_line":"        returned_name_set \u003d set()"},{"line_number":66,"context_line":"        for i in xrange(constants.MAX_RETRIES * 2):"},{"line_number":67,"context_line":"            resp, response_body \u003d cls.monasca_client.list_metrics("},{"line_number":68,"context_line":"                param)"},{"line_number":69,"context_line":"            elements \u003d response_body[\u0027elements\u0027]"}],"source_content_type":"text/x-python","patch_set":17,"id":"1ac06dbe_1cda894c","line":66,"range":{"start_line":66,"start_character":45,"end_line":66,"end_character":49},"updated":"2016-08-22 18:42:42.000000000","message":"why does this need double the number of retries?","commit_id":"e8be9caf7b82e87b4022158ce49522ff746aa352"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"82536af0462787fbc2776a0f7d1a31421bcd89e7","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        param \u003d \u0027?start_time\u003d\u0027 + start_time"},{"line_number":65,"context_line":"        returned_name_set \u003d set()"},{"line_number":66,"context_line":"        for i in xrange(constants.MAX_RETRIES * 2):"},{"line_number":67,"context_line":"            resp, response_body \u003d cls.monasca_client.list_metrics("},{"line_number":68,"context_line":"                param)"},{"line_number":69,"context_line":"            elements \u003d response_body[\u0027elements\u0027]"}],"source_content_type":"text/x-python","patch_set":17,"id":"1ac06dbe_5cea41ad","line":66,"range":{"start_line":66,"start_character":45,"end_line":66,"end_character":49},"in_reply_to":"1ac06dbe_1cda894c","updated":"2016-08-22 18:45:57.000000000","message":"I have seen \"Unable to initialize metrics\" locally before when I ran these tests. Adding *2 to make sure we can get the metrics we want. Do you think it\u0027s not necessary?","commit_id":"e8be9caf7b82e87b4022158ce49522ff746aa352"},{"author":{"_account_id":14517,"name":"Ryan Brandt","email":"ryan.brandt@hpe.com","username":"ryan-brandt"},"change_message_id":"29ef82346fb18a4bec5b8b0843897514d5ed89ec","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        param \u003d \u0027?start_time\u003d\u0027 + start_time"},{"line_number":65,"context_line":"        returned_name_set \u003d set()"},{"line_number":66,"context_line":"        for i in xrange(constants.MAX_RETRIES * 2):"},{"line_number":67,"context_line":"            resp, response_body \u003d cls.monasca_client.list_metrics("},{"line_number":68,"context_line":"                param)"},{"line_number":69,"context_line":"            elements \u003d response_body[\u0027elements\u0027]"}],"source_content_type":"text/x-python","patch_set":17,"id":"1ac06dbe_bc6ff529","line":66,"range":{"start_line":66,"start_character":45,"end_line":66,"end_character":49},"in_reply_to":"1ac06dbe_5cea41ad","updated":"2016-08-22 18:48:58.000000000","message":"I haven\u0027t seen it, but if you think it\u0027s necessary I\u0027m fine with it.\n\nMaybe it\u0027s worth investigating why it takes so long rather than increasing the timeout? It really shouldn\u0027t be that long","commit_id":"e8be9caf7b82e87b4022158ce49522ff746aa352"},{"author":{"_account_id":14517,"name":"Ryan Brandt","email":"ryan.brandt@hpe.com","username":"ryan-brandt"},"change_message_id":"131dc4b9bbb9423b598db93213b25ac78caa1609","unresolved":false,"context_lines":[{"line_number":224,"context_line":"            return True"},{"line_number":225,"context_line":"        return False"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    def _is_metric_name_not_in_list(self, response_body):"},{"line_number":228,"context_line":"        elements \u003d response_body[\u0027elements\u0027][0]"},{"line_number":229,"context_line":"        if \u0027metric_name\u0027 not in elements:"},{"line_number":230,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":17,"id":"1ac06dbe_277bf28d","line":227,"range":{"start_line":227,"start_character":8,"end_line":227,"end_character":35},"updated":"2016-08-22 19:20:46.000000000","message":"can this be combined with the one above? They are very similar","commit_id":"e8be9caf7b82e87b4022158ce49522ff746aa352"},{"author":{"_account_id":14517,"name":"Ryan Brandt","email":"ryan.brandt@hpe.com","username":"ryan-brandt"},"change_message_id":"131dc4b9bbb9423b598db93213b25ac78caa1609","unresolved":false,"context_lines":[{"line_number":244,"context_line":"            return True"},{"line_number":245,"context_line":"        return False"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"    def _is_dim_val_in_list(self, element, dim_val):"},{"line_number":248,"context_line":"        if dim_val in element[\u0027values\u0027]:"},{"line_number":249,"context_line":"            return True"},{"line_number":250,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":17,"id":"1ac06dbe_479d4ebb","line":247,"range":{"start_line":247,"start_character":8,"end_line":247,"end_character":27},"updated":"2016-08-22 19:20:46.000000000","message":"this method seems like it might not be necessary","commit_id":"e8be9caf7b82e87b4022158ce49522ff746aa352"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"19fa4d78e5400582e65a923198b8ae2ec6cec171","unresolved":false,"context_lines":[{"line_number":194,"context_line":"                if start_index \u003e\u003d num_dim_names:"},{"line_number":195,"context_line":"                    break"},{"line_number":196,"context_line":"                # Get the next set"},{"line_number":197,"context_line":"                offset \u003d self._get_offset(response_body, query_parms)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":200,"context_line":"    @test.attr(type\u003d[\u0027negative\u0027])"}],"source_content_type":"text/x-python","patch_set":19,"id":"1ac06dbe_1464beb6","line":197,"range":{"start_line":197,"start_character":55,"end_line":197,"end_character":68},"updated":"2016-08-24 03:01:47.000000000","message":"_get_offset() only takes response_body as an argument","commit_id":"9ed098136d9bd0eaa147b306fb4f0a6c481d03db"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"30e498d3b8abc79e4d2d6dbcb76996b3a6fc46f3","unresolved":false,"context_lines":[{"line_number":194,"context_line":"                if start_index \u003e\u003d num_dim_names:"},{"line_number":195,"context_line":"                    break"},{"line_number":196,"context_line":"                # Get the next set"},{"line_number":197,"context_line":"                offset \u003d self._get_offset(response_body, query_parms)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":200,"context_line":"    @test.attr(type\u003d[\u0027negative\u0027])"}],"source_content_type":"text/x-python","patch_set":19,"id":"1ac06dbe_cb4a8454","line":197,"range":{"start_line":197,"start_character":55,"end_line":197,"end_character":68},"in_reply_to":"1ac06dbe_1464beb6","updated":"2016-08-24 03:35:23.000000000","message":"Yes I was using my old get_offset function. Forgot to change it after rebase. Thanks!","commit_id":"9ed098136d9bd0eaa147b306fb4f0a6c481d03db"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"32bcbbb827251e43ace24dde2a83b13ca9421773","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":105,"context_line":"    def test_list_dimension_values_limit_and_offset(self):"},{"line_number":106,"context_line":"        limit \u003d 1"},{"line_number":107,"context_line":"        parms \u003d \u0027?dimension_name\u003d\u0027 + self._dim_names[0]"},{"line_number":108,"context_line":"        parms +\u003d \u0027\u0026limit\u003d{}\u0027.format(limit)"},{"line_number":109,"context_line":"        resp, response_body \u003d self.monasca_client.list_dimension_values(parms)"},{"line_number":110,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":111,"context_line":"        self.assertTrue({\u0027links\u0027, \u0027elements\u0027} \u003d\u003d set(response_body))"},{"line_number":112,"context_line":"        response_values_length \u003d len(response_body[\u0027elements\u0027])"},{"line_number":113,"context_line":"        values \u003d [str(response_body[\u0027elements\u0027][i][\u0027dimension_value\u0027])"},{"line_number":114,"context_line":"                  for i in xrange(response_values_length)]"},{"line_number":115,"context_line":"        self.assertEqual(values, [self._dim_values[0]])"},{"line_number":116,"context_line":"        if not self._is_offset_in_links(response_body, self._dim_values[0]):"},{"line_number":117,"context_line":"            self.fail(\u0027Offset not found in response\u0027)"},{"line_number":118,"context_line":"        if not self._is_limit_in_links(response_body, limit):"},{"line_number":119,"context_line":"            self.fail(\u0027Limit not found in response\u0027)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":122,"context_line":"    @test.attr(type\u003d[\u0027negative\u0027])"}],"source_content_type":"text/x-python","patch_set":42,"id":"9a89bdaa_9632e85c","line":119,"range":{"start_line":106,"start_character":0,"end_line":119,"end_character":52},"updated":"2016-09-12 22:02:29.000000000","message":"I realize you didn\u0027t write this test but to really validate your changes, you need to have a complete test like test_list_dimension_names_limit_and_offset below","commit_id":"24517ead9a7f6d014bc2770122c28e165555293c"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"1219f8217bbd4563ec705f3246cf411da2e492c5","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":105,"context_line":"    def test_list_dimension_values_limit_and_offset(self):"},{"line_number":106,"context_line":"        limit \u003d 1"},{"line_number":107,"context_line":"        parms \u003d \u0027?dimension_name\u003d\u0027 + self._dim_names[0]"},{"line_number":108,"context_line":"        parms +\u003d \u0027\u0026limit\u003d{}\u0027.format(limit)"},{"line_number":109,"context_line":"        resp, response_body \u003d self.monasca_client.list_dimension_values(parms)"},{"line_number":110,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":111,"context_line":"        self.assertTrue({\u0027links\u0027, \u0027elements\u0027} \u003d\u003d set(response_body))"},{"line_number":112,"context_line":"        response_values_length \u003d len(response_body[\u0027elements\u0027])"},{"line_number":113,"context_line":"        values \u003d [str(response_body[\u0027elements\u0027][i][\u0027dimension_value\u0027])"},{"line_number":114,"context_line":"                  for i in xrange(response_values_length)]"},{"line_number":115,"context_line":"        self.assertEqual(values, [self._dim_values[0]])"},{"line_number":116,"context_line":"        if not self._is_offset_in_links(response_body, self._dim_values[0]):"},{"line_number":117,"context_line":"            self.fail(\u0027Offset not found in response\u0027)"},{"line_number":118,"context_line":"        if not self._is_limit_in_links(response_body, limit):"},{"line_number":119,"context_line":"            self.fail(\u0027Limit not found in response\u0027)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":122,"context_line":"    @test.attr(type\u003d[\u0027negative\u0027])"}],"source_content_type":"text/x-python","patch_set":42,"id":"9a89bdaa_aa95c033","line":119,"range":{"start_line":106,"start_character":0,"end_line":119,"end_character":52},"in_reply_to":"9a89bdaa_9632e85c","updated":"2016-09-12 23:07:37.000000000","message":"Done","commit_id":"24517ead9a7f6d014bc2770122c28e165555293c"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"32bcbbb827251e43ace24dde2a83b13ca9421773","unresolved":false,"context_lines":[{"line_number":203,"context_line":"                 in xrange(response_names_length)]"},{"line_number":204,"context_line":"        self.assertEqual(names, dimension_names)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def _are_dim_vals_in_list(self, response_body):"},{"line_number":207,"context_line":"        element \u003d response_body[\u0027elements\u0027][0]"},{"line_number":208,"context_line":"        if self._dim_values[0] in element[\u0027values\u0027] and self._dim_values[1] \\"},{"line_number":209,"context_line":"                in element[\u0027values\u0027]:"},{"line_number":210,"context_line":"            return True"},{"line_number":211,"context_line":"        return False"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    def _is_offset_in_links(self, response_body, dim_val):"},{"line_number":214,"context_line":"        links \u003d response_body[\u0027links\u0027]"}],"source_content_type":"text/x-python","patch_set":42,"id":"9a89bdaa_76f4845a","line":211,"range":{"start_line":206,"start_character":4,"end_line":211,"end_character":20},"updated":"2016-09-12 22:02:29.000000000","message":"Is this method used?","commit_id":"24517ead9a7f6d014bc2770122c28e165555293c"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"1219f8217bbd4563ec705f3246cf411da2e492c5","unresolved":false,"context_lines":[{"line_number":203,"context_line":"                 in xrange(response_names_length)]"},{"line_number":204,"context_line":"        self.assertEqual(names, dimension_names)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def _are_dim_vals_in_list(self, response_body):"},{"line_number":207,"context_line":"        element \u003d response_body[\u0027elements\u0027][0]"},{"line_number":208,"context_line":"        if self._dim_values[0] in element[\u0027values\u0027] and self._dim_values[1] \\"},{"line_number":209,"context_line":"                in element[\u0027values\u0027]:"},{"line_number":210,"context_line":"            return True"},{"line_number":211,"context_line":"        return False"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    def _is_offset_in_links(self, response_body, dim_val):"},{"line_number":214,"context_line":"        links \u003d response_body[\u0027links\u0027]"}],"source_content_type":"text/x-python","patch_set":42,"id":"9a89bdaa_4a743435","line":211,"range":{"start_line":206,"start_character":4,"end_line":211,"end_character":20},"in_reply_to":"9a89bdaa_76f4845a","updated":"2016-09-12 23:07:37.000000000","message":"No. I will delete it.","commit_id":"24517ead9a7f6d014bc2770122c28e165555293c"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"0d57a1e7a4dcd39d598cdee135cf8aad3d6edcac","unresolved":false,"context_lines":[{"line_number":240,"context_line":"        names \u003d [str(response_body[\u0027elements\u0027][i][\u0027dimension_name\u0027]) for i"},{"line_number":241,"context_line":"                 in xrange(response_names_length)]"},{"line_number":242,"context_line":"        self.assertEqual(names, dimension_names)"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    def _is_offset_in_links(self, response_body, dim_val):"},{"line_number":245,"context_line":"        links \u003d response_body[\u0027links\u0027]"},{"line_number":246,"context_line":"        offset \u003d \"offset\u003d\" + dim_val"},{"line_number":247,"context_line":"        for link in links:"},{"line_number":248,"context_line":"            if offset in link[\u0027href\u0027]:"},{"line_number":249,"context_line":"                return True"},{"line_number":250,"context_line":"        return False"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"    def _is_limit_in_links(self, response_body, limit):"},{"line_number":253,"context_line":"        links \u003d response_body[\u0027links\u0027]"},{"line_number":254,"context_line":"        for link in links:"},{"line_number":255,"context_line":"            if str(limit) in link[\u0027href\u0027]:"},{"line_number":256,"context_line":"                return True"},{"line_number":257,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":43,"id":"9a89bdaa_24a1b394","line":257,"range":{"start_line":243,"start_character":0,"end_line":257,"end_character":20},"updated":"2016-09-13 16:07:14.000000000","message":"Are these still used?","commit_id":"c909ed2c5b06121cee55afc676190ffb42d20216"}]}
