{"action":"created","comment":{"url":"https://api.github.com/repos/paouelle/ddf/pulls/comments/201181710","pull_request_review_id":135632910,"id":201181710,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwMTE4MTcxMA==","diff_hunk":"@@ -0,0 +1,110 @@\n+/**\n+ * Copyright (c) Codice Foundation\n+ *\n+ * <p>This is free software: you can redistribute it and/or modify it under the terms of the GNU\n+ * Lesser General Public License as published by the Free Software Foundation, either version 3 of\n+ * the License, or any later version.\n+ *\n+ * <p>This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n+ * GNU Lesser General Public License for more details. A copy of the GNU Lesser General Public\n+ * License is distributed along with this program and can be found at\n+ * <http://www.gnu.org/licenses/lgpl.html>.\n+ */\n+package org.codice.ddf.config.mapping;\n+\n+import java.util.Map;\n+import org.codice.ddf.config.ConfigService;\n+\n+/**\n+ * Provides access to mapped configuration properties for either a configuration mapping or for a\n+ * given instance of a configuration mapping.\n+ *\n+ * <p>The {@linkConfigMappingService} will apply priority on a per property-basis which would allow\n+ * additional registered providers to override some but not all properties. Comparison of providers\n+ * is based on ranking. A provider with a ranking of {@link Integer#MAX_VALUE} will have its mapped\n+ * properties override all others, whereas a service with a ranking of {@link Integer#MIN_VALUE} is\n+ * very likely to have its mapped properties overridden. When a tie in ranking exist, whichever\n+ * provider was first bound to the {@link ConfigMappingService} directly will be considered to have\n+ * a higher priority.\n+ */\n+public interface ConfigMappingProvider extends Comparable<ConfigMappingProvider> {\n+  /**\n+   * Gets a ranking priority for this provider (see class description for more details).\n+   *\n+   * <p><i>Note:</i> The provider's rank is not expected to change during the life of this provider\n+   * unless the provider is rebound with the {@link ConfigMappingService} which will re-compute\n+   * which config mappings are impacted by this change.\n+   *\n+   * @return this provider's ranking priority (defaults to 0)\n+   */\n+  public default int getRanking() {\n+    return 0;\n+  };\n+\n+  /**\n+   * Indicates whether this provider is only capable of providing partial properties or if it can\n+   * provide all properties.\n+   *\n+   * <p>At least one provider capable of providing all properties and not just partial one is\n+   * required to be bound to the mapping service before a corresponding mapping can be made\n+   * available.\n+   *\n+   * @return <code>true</code> if this provider is only capable of providing parts of all the\n+   *     properties for this mapping; <code>false</code> if it is able to provide all of them\n+   */\n+  public boolean isPartial();\n+\n+  /**\n+   * Checks if this provider can provide mapped dictionaries for a given configuration mapping.\n+   *\n+   * <p><i>Note:</i> A provider is expected not to change which configuration mappings it provides\n+   * for unless the provider is rebound with the {@link ConfigMappingService} which will re-compute\n+   * which config mappings are impacted by this change.\n+   *\n+   * @param mapping the config mapping to check if this provider can provide for\n+   * @return <code>true</code> if this provider can provide mapped dictionaries for the specified\n+   *     config mapping; <code>false</code> otherwise\n+   */\n+  public default boolean canProvideFor(ConfigMapping mapping) {\n+    return canProvideFor(mapping.getId());\n+  }\n+\n+  /**\n+   * Checks if this provider can provide mapped dictionaries for a given configuration mapping.\n+   *\n+   * <p><i>Note:</i> A provider is expected not to change which configuration mappings it provides\n+   * for unless the provider is rebound with the {@link ConfigMappingService} which will re-compute\n+   * which config mappings are impacted by this change.\n+   *\n+   * @param id the id of the config mapping to check if this provider can provide for\n+   * @return <code>true</code> if this provider can provide mapped dictionaries for the specified\n+   *     config mapping; <code>false</code> otherwise\n+   */\n+  public boolean canProvideFor(ConfigMapping.Id id);\n+\n+  /**\n+   * Provides the mapped dictionary for a given configuration mapping.\n+   *\n+   * @param id the unique config mapping id for the mapped properties to provide\n+   * @param config the configuration to use when computing the mapper properties\n+   * @return a map corresponding to all mapped properties and their current values after\n+   *     re-evaluating any internal rules defined\n+   * @throws ConfigMappingException if a failure occurred while resolving this config mapping\n+   */\n+  public Map<String, Object> provide(ConfigMapping.Id id, ConfigService config)\n+      throws ConfigMappingException;\n+\n+  /**\n+   * {@inheritDoce}\n+   *\n+   * <p>The comparison must support the ranking priority described in the class description.\n+   *\n+   * @param provider the other provider to compare this provider with\n+   * @return <code>1</code> if this provider has a higher ranking priority than the one provided;\n+   *     <code>-1</code> if it has a lower ranking priority and <code>0</code> if they have equal\n+   *     priorities\n+   */\n+  @Override\n+  int compareTo(ConfigMappingProvider provider);","path":"platform/config/config-mapping-api/src/main/java/org/codice/ddf/config/mapping/ConfigMappingProvider.java","position":null,"original_position":109,"commit_id":"af7503f5f7d3aa2c00133ca6456a5e5af541a710","original_commit_id":"15ae1ddc846ee055c821c2cdf85a83312a3a041e","user":{"login":"paouelle","id":10549555,"node_id":"MDQ6VXNlcjEwNTQ5NTU1","avatar_url":"https://avatars0.githubusercontent.com/u/10549555?v=4","gravatar_id":"","url":"https://api.github.com/users/paouelle","html_url":"https://github.com/paouelle","followers_url":"https://api.github.com/users/paouelle/followers","following_url":"https://api.github.com/users/paouelle/following{/other_user}","gists_url":"https://api.github.com/users/paouelle/gists{/gist_id}","starred_url":"https://api.github.com/users/paouelle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/paouelle/subscriptions","organizations_url":"https://api.github.com/users/paouelle/orgs","repos_url":"https://api.github.com/users/paouelle/repos","events_url":"https://api.github.com/users/paouelle/events{/privacy}","received_events_url":"https://api.github.com/users/paouelle/received_events","type":"User","site_admin":false},"body":"Fixed","created_at":"2018-07-09T23:48:51Z","updated_at":"2018-07-09T23:48:52Z","html_url":"https://github.com/paouelle/ddf/pull/1#discussion_r201181710","pull_request_url":"https://api.github.com/repos/paouelle/ddf/pulls/1","author_association":"OWNER","_links":{"self":{"href":"https://api.github.com/repos/paouelle/ddf/pulls/comments/201181710"},"html":{"href":"https://github.com/paouelle/ddf/pull/1#discussion_r201181710"},"pull_request":{"href":"https://api.github.com/repos/paouelle/ddf/pulls/1"}},"in_reply_to_id":201181502},"pull_request":{"url":"https://api.github.com/repos/paouelle/ddf/pulls/1","id":199777951,"node_id":"MDExOlB1bGxSZXF1ZXN0MTk5Nzc3OTUx","html_url":"https://github.com/paouelle/ddf/pull/1","diff_url":"https://github.com/paouelle/ddf/pull/1.diff","patch_url":"https://github.com/paouelle/ddf/pull/1.patch","issue_url":"https://api.github.com/repos/paouelle/ddf/issues/1","number":1,"state":"open","locked":false,"title":"CFG-0001 Config Prototype","user":{"login":"paouelle","id":10549555,"node_id":"MDQ6VXNlcjEwNTQ5NTU1","avatar_url":"https://avatars0.githubusercontent.com/u/10549555?v=4","gravatar_id":"","url":"https://api.github.com/users/paouelle","html_url":"https://github.com/paouelle","followers_url":"https://api.github.com/users/paouelle/followers","following_url":"https://api.github.com/users/paouelle/following{/other_user}","gists_url":"https://api.github.com/users/paouelle/gists{/gist_id}","starred_url":"https://api.github.com/users/paouelle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/paouelle/subscriptions","organizations_url":"https://api.github.com/users/paouelle/orgs","repos_url":"https://api.github.com/users/paouelle/repos","events_url":"https://api.github.com/users/paouelle/events{/privacy}","received_events_url":"https://api.github.com/users/paouelle/received_events","type":"User","site_admin":false},"body":"This PR includes everything from the prototype done in Sprint 43 minus the groovy mapping providers & the bundle and file monitors.\r\n\r\nIt is arranged by commits which should make the review easier.\r\n\r\n#### Reviewers\r\n@figliold\r\n@tbatie \r\n@ethantmanns \r\n@jhunzik \r\n@tyler30clemens \r\n\r\n#### Notes on Review Process\r\nPlease see [Notes on Review Process](https://codice.atlassian.net/wiki/spaces/DDF/pages/71946981/Pull+Request+Guidelines) for further guidance on requirements for merging and abbreviated reviews. \r\n\r\n#### Review Comment Legend:\r\n- ✏️ (Pencil) This comment is a nitpick or style suggestion, no action required for approval. This comment should provide a suggestion either as an in line code snippet or a gist. \r\n- ❓ (Question Mark) This comment is to gain a clearer understanding of design or code choices, clarification is required but action may not be necessary for approval.\r\n- ❗ (Exclamation Mark) This comment is critical and requires clarification or action before approval.\r\n","created_at":"2018-07-06T15:22:21Z","updated_at":"2018-07-09T23:48:52Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b85776f826ccaa869211e6217207e656934cced4","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/paouelle/ddf/pulls/1/commits","review_comments_url":"https://api.github.com/repos/paouelle/ddf/pulls/1/comments","review_comment_url":"https://api.github.com/repos/paouelle/ddf/pulls/comments{/number}","comments_url":"https://api.github.com/repos/paouelle/ddf/issues/1/comments","statuses_url":"https://api.github.com/repos/paouelle/ddf/statuses/af7503f5f7d3aa2c00133ca6456a5e5af541a710","head":{"label":"paouelle:cfg","ref":"cfg","sha":"af7503f5f7d3aa2c00133ca6456a5e5af541a710","user":{"login":"paouelle","id":10549555,"node_id":"MDQ6VXNlcjEwNTQ5NTU1","avatar_url":"https://avatars0.githubusercontent.com/u/10549555?v=4","gravatar_id":"","url":"https://api.github.com/users/paouelle","html_url":"https://github.com/paouelle","followers_url":"https://api.github.com/users/paouelle/followers","following_url":"https://api.github.com/users/paouelle/following{/other_user}","gists_url":"https://api.github.com/users/paouelle/gists{/gist_id}","starred_url":"https://api.github.com/users/paouelle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/paouelle/subscriptions","organizations_url":"https://api.github.com/users/paouelle/orgs","repos_url":"https://api.github.com/users/paouelle/repos","events_url":"https://api.github.com/users/paouelle/events{/privacy}","received_events_url":"https://api.github.com/users/paouelle/received_events","type":"User","site_admin":false},"repo":{"id":85875261,"node_id":"MDEwOlJlcG9zaXRvcnk4NTg3NTI2MQ==","name":"ddf","full_name":"paouelle/ddf","owner":{"login":"paouelle","id":10549555,"node_id":"MDQ6VXNlcjEwNTQ5NTU1","avatar_url":"https://avatars0.githubusercontent.com/u/10549555?v=4","gravatar_id":"","url":"https://api.github.com/users/paouelle","html_url":"https://github.com/paouelle","followers_url":"https://api.github.com/users/paouelle/followers","following_url":"https://api.github.com/users/paouelle/following{/other_user}","gists_url":"https://api.github.com/users/paouelle/gists{/gist_id}","starred_url":"https://api.github.com/users/paouelle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/paouelle/subscriptions","organizations_url":"https://api.github.com/users/paouelle/orgs","repos_url":"https://api.github.com/users/paouelle/repos","events_url":"https://api.github.com/users/paouelle/events{/privacy}","received_events_url":"https://api.github.com/users/paouelle/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/paouelle/ddf","description":"Distributed Data Framework - an open source, modular integration framework.","fork":true,"url":"https://api.github.com/repos/paouelle/ddf","forks_url":"https://api.github.com/repos/paouelle/ddf/forks","keys_url":"https://api.github.com/repos/paouelle/ddf/keys{/key_id}","collaborators_url":"https://api.github.com/repos/paouelle/ddf/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/paouelle/ddf/teams","hooks_url":"https://api.github.com/repos/paouelle/ddf/hooks","issue_events_url":"https://api.github.com/repos/paouelle/ddf/issues/events{/number}","events_url":"https://api.github.com/repos/paouelle/ddf/events","assignees_url":"https://api.github.com/repos/paouelle/ddf/assignees{/user}","branches_url":"https://api.github.com/repos/paouelle/ddf/branches{/branch}","tags_url":"https://api.github.com/repos/paouelle/ddf/tags","blobs_url":"https://api.github.com/repos/paouelle/ddf/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/paouelle/ddf/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/paouelle/ddf/git/refs{/sha}","trees_url":"https://api.github.com/repos/paouelle/ddf/git/trees{/sha}","statuses_url":"https://api.github.com/repos/paouelle/ddf/statuses/{sha}","languages_url":"https://api.github.com/repos/paouelle/ddf/languages","stargazers_url":"https://api.github.com/repos/paouelle/ddf/stargazers","contributors_url":"https://api.github.com/repos/paouelle/ddf/contributors","subscribers_url":"https://api.github.com/repos/paouelle/ddf/subscribers","subscription_url":"https://api.github.com/repos/paouelle/ddf/subscription","commits_url":"https://api.github.com/repos/paouelle/ddf/commits{/sha}","git_commits_url":"https://api.github.com/repos/paouelle/ddf/git/commits{/sha}","comments_url":"https://api.github.com/repos/paouelle/ddf/comments{/number}","issue_comment_url":"https://api.github.com/repos/paouelle/ddf/issues/comments{/number}","contents_url":"https://api.github.com/repos/paouelle/ddf/contents/{+path}","compare_url":"https://api.github.com/repos/paouelle/ddf/compare/{base}...{head}","merges_url":"https://api.github.com/repos/paouelle/ddf/merges","archive_url":"https://api.github.com/repos/paouelle/ddf/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/paouelle/ddf/downloads","issues_url":"https://api.github.com/repos/paouelle/ddf/issues{/number}","pulls_url":"https://api.github.com/repos/paouelle/ddf/pulls{/number}","milestones_url":"https://api.github.com/repos/paouelle/ddf/milestones{/number}","notifications_url":"https://api.github.com/repos/paouelle/ddf/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/paouelle/ddf/labels{/name}","releases_url":"https://api.github.com/repos/paouelle/ddf/releases{/id}","deployments_url":"https://api.github.com/repos/paouelle/ddf/deployments","created_at":"2017-03-22T20:55:51Z","updated_at":"2018-07-09T14:51:18Z","pushed_at":"2018-07-09T23:48:50Z","git_url":"git://github.com/paouelle/ddf.git","ssh_url":"git@github.com:paouelle/ddf.git","clone_url":"https://github.com/paouelle/ddf.git","svn_url":"https://github.com/paouelle/ddf","homepage":"http://ddf.codice.org","size":354457,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":1,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"paouelle:config","ref":"config","sha":"005034b2612617acc4766bab6e0384f7ec684d29","user":{"login":"paouelle","id":10549555,"node_id":"MDQ6VXNlcjEwNTQ5NTU1","avatar_url":"https://avatars0.githubusercontent.com/u/10549555?v=4","gravatar_id":"","url":"https://api.github.com/users/paouelle","html_url":"https://github.com/paouelle","followers_url":"https://api.github.com/users/paouelle/followers","following_url":"https://api.github.com/users/paouelle/following{/other_user}","gists_url":"https://api.github.com/users/paouelle/gists{/gist_id}","starred_url":"https://api.github.com/users/paouelle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/paouelle/subscriptions","organizations_url":"https://api.github.com/users/paouelle/orgs","repos_url":"https://api.github.com/users/paouelle/repos","events_url":"https://api.github.com/users/paouelle/events{/privacy}","received_events_url":"https://api.github.com/users/paouelle/received_events","type":"User","site_admin":false},"repo":{"id":85875261,"node_id":"MDEwOlJlcG9zaXRvcnk4NTg3NTI2MQ==","name":"ddf","full_name":"paouelle/ddf","owner":{"login":"paouelle","id":10549555,"node_id":"MDQ6VXNlcjEwNTQ5NTU1","avatar_url":"https://avatars0.githubusercontent.com/u/10549555?v=4","gravatar_id":"","url":"https://api.github.com/users/paouelle","html_url":"https://github.com/paouelle","followers_url":"https://api.github.com/users/paouelle/followers","following_url":"https://api.github.com/users/paouelle/following{/other_user}","gists_url":"https://api.github.com/users/paouelle/gists{/gist_id}","starred_url":"https://api.github.com/users/paouelle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/paouelle/subscriptions","organizations_url":"https://api.github.com/users/paouelle/orgs","repos_url":"https://api.github.com/users/paouelle/repos","events_url":"https://api.github.com/users/paouelle/events{/privacy}","received_events_url":"https://api.github.com/users/paouelle/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/paouelle/ddf","description":"Distributed Data Framework - an open source, modular integration framework.","fork":true,"url":"https://api.github.com/repos/paouelle/ddf","forks_url":"https://api.github.com/repos/paouelle/ddf/forks","keys_url":"https://api.github.com/repos/paouelle/ddf/keys{/key_id}","collaborators_url":"https://api.github.com/repos/paouelle/ddf/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/paouelle/ddf/teams","hooks_url":"https://api.github.com/repos/paouelle/ddf/hooks","issue_events_url":"https://api.github.com/repos/paouelle/ddf/issues/events{/number}","events_url":"https://api.github.com/repos/paouelle/ddf/events","assignees_url":"https://api.github.com/repos/paouelle/ddf/assignees{/user}","branches_url":"https://api.github.com/repos/paouelle/ddf/branches{/branch}","tags_url":"https://api.github.com/repos/paouelle/ddf/tags","blobs_url":"https://api.github.com/repos/paouelle/ddf/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/paouelle/ddf/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/paouelle/ddf/git/refs{/sha}","trees_url":"https://api.github.com/repos/paouelle/ddf/git/trees{/sha}","statuses_url":"https://api.github.com/repos/paouelle/ddf/statuses/{sha}","languages_url":"https://api.github.com/repos/paouelle/ddf/languages","stargazers_url":"https://api.github.com/repos/paouelle/ddf/stargazers","contributors_url":"https://api.github.com/repos/paouelle/ddf/contributors","subscribers_url":"https://api.github.com/repos/paouelle/ddf/subscribers","subscription_url":"https://api.github.com/repos/paouelle/ddf/subscription","commits_url":"https://api.github.com/repos/paouelle/ddf/commits{/sha}","git_commits_url":"https://api.github.com/repos/paouelle/ddf/git/commits{/sha}","comments_url":"https://api.github.com/repos/paouelle/ddf/comments{/number}","issue_comment_url":"https://api.github.com/repos/paouelle/ddf/issues/comments{/number}","contents_url":"https://api.github.com/repos/paouelle/ddf/contents/{+path}","compare_url":"https://api.github.com/repos/paouelle/ddf/compare/{base}...{head}","merges_url":"https://api.github.com/repos/paouelle/ddf/merges","archive_url":"https://api.github.com/repos/paouelle/ddf/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/paouelle/ddf/downloads","issues_url":"https://api.github.com/repos/paouelle/ddf/issues{/number}","pulls_url":"https://api.github.com/repos/paouelle/ddf/pulls{/number}","milestones_url":"https://api.github.com/repos/paouelle/ddf/milestones{/number}","notifications_url":"https://api.github.com/repos/paouelle/ddf/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/paouelle/ddf/labels{/name}","releases_url":"https://api.github.com/repos/paouelle/ddf/releases{/id}","deployments_url":"https://api.github.com/repos/paouelle/ddf/deployments","created_at":"2017-03-22T20:55:51Z","updated_at":"2018-07-09T14:51:18Z","pushed_at":"2018-07-09T23:48:50Z","git_url":"git://github.com/paouelle/ddf.git","ssh_url":"git@github.com:paouelle/ddf.git","clone_url":"https://github.com/paouelle/ddf.git","svn_url":"https://github.com/paouelle/ddf","homepage":"http://ddf.codice.org","size":354457,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":1,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/paouelle/ddf/pulls/1"},"html":{"href":"https://github.com/paouelle/ddf/pull/1"},"issue":{"href":"https://api.github.com/repos/paouelle/ddf/issues/1"},"comments":{"href":"https://api.github.com/repos/paouelle/ddf/issues/1/comments"},"review_comments":{"href":"https://api.github.com/repos/paouelle/ddf/pulls/1/comments"},"review_comment":{"href":"https://api.github.com/repos/paouelle/ddf/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/paouelle/ddf/pulls/1/commits"},"statuses":{"href":"https://api.github.com/repos/paouelle/ddf/statuses/af7503f5f7d3aa2c00133ca6456a5e5af541a710"}},"author_association":"OWNER"}}
{"actor":{"display_login":"paouelle"}}