{"action":"created","comment":{"url":"https://api.github.com/repos/europeana/metis-framework/pulls/comments/185060180","pull_request_review_id":116376981,"id":185060180,"diff_hunk":"@@ -0,0 +1,489 @@\n+package eu.europeana.enrichment.service;\n+\n+import java.io.BufferedReader;\n+import java.io.File;\n+import java.io.FileInputStream;\n+import java.io.IOException;\n+import java.io.InputStreamReader;\n+import java.util.ArrayList;\n+import java.util.Arrays;\n+import java.util.Collections;\n+import java.util.HashMap;\n+import java.util.HashSet;\n+import java.util.List;\n+import java.util.Map;\n+import java.util.Map.Entry;\n+import java.util.Set;\n+import javax.xml.bind.JAXBException;\n+import org.apache.commons.lang3.StringUtils;\n+import org.codehaus.jackson.Version;\n+import org.codehaus.jackson.map.ObjectMapper;\n+import org.codehaus.jackson.map.module.SimpleModule;\n+import eu.europeana.corelib.solr.entity.OrganizationImpl;\n+import eu.europeana.enrichment.api.external.ObjectIdSerializer;\n+import eu.europeana.enrichment.api.external.model.TextProperty;\n+import eu.europeana.enrichment.api.external.model.WebResource;\n+\n+/**\n+ * This class supports conversion of different organization objects into OrganizationImpl object.\n+ * \n+ * @author GrafR\n+ *\n+ */\n+public class EntityConverterUtils {\n+\n+  private static final String UNDEFINED_LANGUAGE_KEY = \"def\";\n+\n+  /**\n+   * Create OrganizationImpl map from value\n+   * \n+   * @param key The field name\n+   * @param value The value\n+   * @return map of strings and lists\n+   */\n+  public Map<String, List<String>> createMapOfStringList(String key, String value) {\n+    if (value == null)\n+      return null;\n+    List<String> valueList = createList(value);\n+    return createMapOfStringList(key, valueList);\n+  }\n+\n+  /**\n+   * This method converts string value to Map<String,String> values for given key - language.\n+   * \n+   * @param key The language\n+   * @param value The input string value\n+   * @return the Map<String,List<String>>\n+   */\n+  public Map<String, String> createMap(String key, String value) {\n+    if (value == null)\n+      return null;\n+    Map<String, String> resMap = new HashMap<String, String>();\n+    resMap.put(key, value);\n+    return resMap;\n+  }\n+\n+  /**\n+   * This method creates language map in format Map<String, String> from text property object.\n+   * \n+   * @param textProperty The text property object\n+   * @return The language map\n+   */\n+  public Map<String, String> createMapFromTextProperty(TextProperty textProperty) {\n+    if (textProperty == null)\n+      return null;\n+\n+    String key = textProperty.getKey();\n+    String value = textProperty.getValue();\n+\n+    return createMap(key, value);\n+  }\n+\n+  /**\n+   * @param value\n+   * @return\n+   */\n+  List<String> createList(String value) {\n+    if (value == null)\n+      return null;\n+\n+    return Collections.singletonList(value);\n+  }\n+\n+  /**\n+   * Create OrganizationImpl map from list of values\n+   * \n+   * @param key The field name\n+   * @param value The list of values\n+   * @return map of strings and lists\n+   */\n+  public Map<String, List<String>> createMapOfStringList(String key, List<String> value) {\n+    Map<String, List<String>> resMap = new HashMap<String, List<String>>();\n+    resMap.put(key, value);\n+    return resMap;\n+  }\n+\n+  /**\n+   * @param languages\n+   * @param values\n+   * @return\n+   */\n+  public Map<String, List<String>> createLanguageMapOfStringList(List<String> languages,\n+      List<String> values) {\n+    if (languages == null)\n+      return null;\n+\n+    Map<String, List<String>> resMap = new HashMap<String, List<String>>();\n+    for (int i = 0; i < languages.size(); i++) {\n+      resMap.put(toIsoLanguage(languages.get(i)), createList(values.get(i)));\n+    }\n+    return resMap;\n+  }\n+\n+  /**\n+   * This method creates language map from text property object list.\n+   * \n+   * @param textPropertyList The list of text property objects\n+   * @return The language map\n+   */\n+  public Map<String, List<String>> createLanguageMapFromTextPropertyList(\n+      List<? extends TextProperty> textPropertyList) {\n+    if (textPropertyList == null)\n+      return null;\n+\n+    Map<String, List<String>> resMap = new HashMap<String, List<String>>();\n+    for (int i = 0; i < textPropertyList.size(); i++) {\n+      TextProperty textProperty = textPropertyList.get(i);\n+      resMap.put(toIsoLanguage(textProperty.getKey()), createList(textProperty.getValue()));\n+    }\n+    return resMap;\n+  }\n+\n+  /**\n+   * This method creates language map from text property object list.\n+   * \n+   * @param textPropertyList The list of text property objects\n+   * @return The language map\n+   */\n+  public Map<String, String> createStringStringMapFromTextPropertyList(\n+      List<? extends TextProperty> textPropertyList) {\n+    if (textPropertyList == null)\n+      return null;\n+\n+    Map<String, String> resMap = new HashMap<String, String>();\n+    for (int i = 0; i < textPropertyList.size(); i++) {\n+      TextProperty textProperty = textPropertyList.get(i);\n+      resMap.put(toIsoLanguage(textProperty.getKey()), textProperty.getValue());\n+    }\n+    return resMap;\n+  }\n+\n+  /**\n+   * This method converts a list of Part objects to a string array.\n+   * \n+   * @param resources The list of Part objects\n+   * @return string array\n+   */\n+  public String[] createStringArrayFromPartList(List<? extends WebResource> resources) {\n+    if (resources == null)\n+      return null;\n+\n+    List<String> res = new ArrayList<String>();\n+    for (int i = 0; i < resources.size(); i++) {\n+      WebResource part = resources.get(i);\n+      res.add(part.getResourceUri());\n+    }\n+    return res.toArray(new String[] {});\n+  }\n+\n+  /**\n+   * @param language\n+   * @param value\n+   * @return\n+   */\n+  public Map<String, List<String>> createLanguageMapOfStringList(String language, String value) {\n+\n+    if (value == null)\n+      return null;\n+\n+    Map<String, List<String>> resMap = new HashMap<String, List<String>>();\n+    resMap.put(toIsoLanguage(language), createList(value));\n+    return resMap;\n+  }\n+\n+  /**\n+   * @param language\n+   * @param value\n+   * @return\n+   */\n+  public Map<String, List<String>> createLanguageMapOfStringList(String language,\n+      List<String> value) {\n+\n+    if (value == null)\n+      return null;\n+\n+    Map<String, List<String>> resMap = new HashMap<String, List<String>>();\n+    resMap.put(toIsoLanguage(language), value);\n+    return resMap;\n+  }\n+\n+  /**\n+   * @param language\n+   * @return\n+   */\n+  String toIsoLanguage(String language) {\n+    if (StringUtils.isBlank(language))\n+      return UNDEFINED_LANGUAGE_KEY;\n+\n+    return language.substring(0, 2).toLowerCase();\n+  }\n+\n+  /********************** \n+   * Merging methods \n+   **********************/\n+  \n+  /**\n+   * This method compares two language maps of type Map<String, List<String>> \n+   * @param zohoOrganization\n+   * @param wikidataOrganization\n+   * @return true if language maps are equal, false otherwise\n+   */\n+  public boolean isEqualLanguageListMap(     \n+      Map<String, List<String>> zohoOrganization\n+      , Map<String, List<String>> wikidataOrganization) {\n+    \n+    boolean res = false;\n+    \n+    for (Map.Entry<String, List<String>> entry : zohoOrganization.entrySet()) {\n+        String zohoLanguage = entry.getKey();\n+        List<String> zohoList = entry.getValue();\n+        List<String> wikidataList = wikidataOrganization.get(zohoLanguage);\n+        if (zohoList != null && wikidataList != null) {\n+          res = (zohoList.size() == wikidataList.size()) && zohoList.containsAll(wikidataList);\n+          if (res) {\n+            res = compareMapsByValues(zohoOrganization, wikidataOrganization);\n+          }\n+        } else {\n+          /** no such key */\n+          return false;\n+        }\n+    }\n+    return res;\n+  }\n+  \n+  /**\n+   * This method performs comparison of Map values for \n+   * different possible types e.g. Map<String, List<String>>\n+   * or Map<String, String>\n+   * @param baseMap\n+   * @param addMap\n+   * @return return true if map values are the same\n+   */\n+  @SuppressWarnings(\"unchecked\")\n+  public <T> boolean compareMapsByValues(\n+      Map<String, T> baseMap\n+      , Map<String, T> addMap) {\n+\n+    if (baseMap == null || addMap == null || baseMap.size() != addMap.size()) \n+      return false;\n+    \n+    for (String key : baseMap.keySet()) {\n+      T baseValue = baseMap.get(key);\n+      T addValue = addMap.get(key);\n+      if (baseValue == null && addValue == null)\n+          continue;\n+      else if (baseValue == null || addValue == null)\n+          return false;\n+      if (!baseValue.getClass().equals(List.class))\n+        return compareLists((List<String>) baseValue, (List<String>) addValue);\n+      if (!baseValue.equals(addValue))\n+        return false;\n+    }    \n+    return false;\n+  }\n+  \n+  /**\n+   * This method creates a map of values, which are different to the\n+   * base map for different possible types e.g. Map<String, List<String>>\n+   * or Map<String, String>\n+   * @param baseMap\n+   * @param addMap\n+   * @return map of differences to the base map\n+   */\n+  @SuppressWarnings(\"unchecked\")\n+  public <T> Map<String, T> extractValuesNotIncludedInBaseMap(\n+      Map<String, T> baseMap\n+      , Map<String, T> addMap) {\n+\n+    Map<String, T> resMap = new HashMap<String, T>();\n+    \n+    if (baseMap == null) {\n+      if (addMap == null)\n+        /** if both maps are null - result is empty map */\n+        return resMap;\n+      else\n+        /** if base map is empty and add map not - result is add map */\n+        return addMap;\n+    }\n+    \n+    /** go through all keys of the base map and extract not equal values from the add map */\n+    for (String key : baseMap.keySet()) {\n+      T baseValue = baseMap.get(key);\n+      T addValue = addMap.get(key);\n+      if (baseValue == null && addValue == null)\n+          continue;\n+      else if (baseValue == null && addValue != null) {\n+        /** use value from add list for given key if it is not null and base value is null */\n+        resMap.put(key, addValue);\n+        continue;\n+      }\n+      if (!baseValue.getClass().equals(List.class)) {\n+        /** remove all elements in base list from add list */\n+        ((List<String>) addValue).removeAll((List<String>) baseValue);\n+        resMap.put(key, addValue);\n+      }\n+      if (!baseValue.equals(addValue))\n+        resMap.put(key, addValue);\n+    }   \n+    \n+    /** find keys existing in add map that a not existing in the base map */\n+    Set<Entry<String, T>> diffEntrySet = new HashSet<Entry<String, T>>(addMap.entrySet());\n+    diffEntrySet.removeAll(baseMap.entrySet());\n+    \n+    /** add extracted keys with their values to the result map */\n+    for(Entry<String, T> entry : diffEntrySet) {\n+        resMap.put(entry.getKey(), entry.getValue());\n+    }\n+    \n+    return resMap;\n+  }\n+  \n+  /**\n+   * This method creates a list of values, which are different to the\n+   * base list compared to add list\n+   * @param baseList\n+   * @param addList\n+   * @return list of differences to the base map\n+   */\n+  public List<String> extractValuesNotIncludedInBaseList(\n+      List<String> baseList\n+      , List<String> addList) {\n+   \n+    if (baseList == null) {\n+      if (addList == null)\n+        /** if both lists are null - result is null */\n+        return null;\n+      else\n+        /** if base list is empty and add list not - result is add list */\n+        return addList;\n+    }\n+    \n+    /** remove all elements in add list from base list */\n+    addList.removeAll(baseList);\n+    \n+    return addList;\n+  }\n+  \n+  /**\n+   * This method compares two List<String>\n+   * @param baseList\n+   * @param addList\n+   * @return true if lists are equal\n+   */\n+  public boolean compareLists(List<String> baseList, List<String> addList) {\n+    Collections.sort(baseList);\n+    Collections.sort(addList);\n+    return baseList.equals(addList);    \n+  }\n+  \n+  /**\n+   * This method extends base language map in format Map<String, List<String>> \n+   * by additional map values if they are not duplicates\n+   * @param baseMap\n+   * @param addMap\n+   * @return enriched base map\n+   */\n+  @SuppressWarnings(\"unchecked\")\n+  public <T> Map<String, T> mergeLanguageListMap(\n+      Map<String, T> baseMap\n+      , Map<String, T> addMap) {\n+    \n+    if (baseMap == null) {\n+      /** if base map is empty and add map not - result is add map */\n+      return addMap;\n+    }\n+    \n+    /** go through all keys of the add map and add not equal values to the base map */\n+    for (String key : addMap.keySet()) {\n+      T baseValue = baseMap.get(key);\n+      T addValue = addMap.get(key);\n+      if (baseValue == null && addValue == null)\n+          continue;\n+      else if (baseValue == null && addValue != null) {","path":"metis-enrichment/metis-enrichment-service/src/main/java/eu/europeana/enrichment/service/EntityConverterUtils.java","position":null,"original_position":402,"commit_id":"d288972e70238adf4f366c02a3861f0be5b5fd4f","original_commit_id":"5ed6de6ad55385ac8c1233a29ea905a70d9146ce","user":{"login":"gsergiu","id":4517853,"avatar_url":"https://avatars3.githubusercontent.com/u/4517853?v=4","gravatar_id":"","url":"https://api.github.com/users/gsergiu","html_url":"https://github.com/gsergiu","followers_url":"https://api.github.com/users/gsergiu/followers","following_url":"https://api.github.com/users/gsergiu/following{/other_user}","gists_url":"https://api.github.com/users/gsergiu/gists{/gist_id}","starred_url":"https://api.github.com/users/gsergiu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gsergiu/subscriptions","organizations_url":"https://api.github.com/users/gsergiu/orgs","repos_url":"https://api.github.com/users/gsergiu/repos","events_url":"https://api.github.com/users/gsergiu/events{/privacy}","received_events_url":"https://api.github.com/users/gsergiu/received_events","type":"User","site_admin":false},"body":"TODO: move diffMethod to test class as it is not used by service anymore","created_at":"2018-04-30T17:55:44Z","updated_at":"2018-04-30T17:55:44Z","html_url":"https://github.com/europeana/metis-framework/pull/150#discussion_r185060180","pull_request_url":"https://api.github.com/repos/europeana/metis-framework/pulls/150","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/europeana/metis-framework/pulls/comments/185060180"},"html":{"href":"https://github.com/europeana/metis-framework/pull/150#discussion_r185060180"},"pull_request":{"href":"https://api.github.com/repos/europeana/metis-framework/pulls/150"}},"in_reply_to_id":183987465},"pull_request":{"url":"https://api.github.com/repos/europeana/metis-framework/pulls/150","id":182441757,"html_url":"https://github.com/europeana/metis-framework/pull/150","diff_url":"https://github.com/europeana/metis-framework/pull/150.diff","patch_url":"https://github.com/europeana/metis-framework/pull/150.patch","issue_url":"https://api.github.com/repos/europeana/metis-framework/issues/150","number":150,"state":"open","locked":false,"title":"EA-1044 wikidata integration for organizations","user":{"login":"rgraf","id":475743,"avatar_url":"https://avatars0.githubusercontent.com/u/475743?v=4","gravatar_id":"","url":"https://api.github.com/users/rgraf","html_url":"https://github.com/rgraf","followers_url":"https://api.github.com/users/rgraf/followers","following_url":"https://api.github.com/users/rgraf/following{/other_user}","gists_url":"https://api.github.com/users/rgraf/gists{/gist_id}","starred_url":"https://api.github.com/users/rgraf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rgraf/subscriptions","organizations_url":"https://api.github.com/users/rgraf/orgs","repos_url":"https://api.github.com/users/rgraf/repos","events_url":"https://api.github.com/users/rgraf/events{/privacy}","received_events_url":"https://api.github.com/users/rgraf/received_events","type":"User","site_admin":false},"body":"please merge the new functionality into develop","created_at":"2018-04-18T10:58:44Z","updated_at":"2018-04-30T17:55:44Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3e348c135fd7aff5320d44d8a3b73dac6aaf92e5","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/europeana/metis-framework/pulls/150/commits","review_comments_url":"https://api.github.com/repos/europeana/metis-framework/pulls/150/comments","review_comment_url":"https://api.github.com/repos/europeana/metis-framework/pulls/comments{/number}","comments_url":"https://api.github.com/repos/europeana/metis-framework/issues/150/comments","statuses_url":"https://api.github.com/repos/europeana/metis-framework/statuses/d288972e70238adf4f366c02a3861f0be5b5fd4f","head":{"label":"europeana:EA-1044_Wikidata_integration","ref":"EA-1044_Wikidata_integration","sha":"d288972e70238adf4f366c02a3861f0be5b5fd4f","user":{"login":"europeana","id":4570681,"avatar_url":"https://avatars3.githubusercontent.com/u/4570681?v=4","gravatar_id":"","url":"https://api.github.com/users/europeana","html_url":"https://github.com/europeana","followers_url":"https://api.github.com/users/europeana/followers","following_url":"https://api.github.com/users/europeana/following{/other_user}","gists_url":"https://api.github.com/users/europeana/gists{/gist_id}","starred_url":"https://api.github.com/users/europeana/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/europeana/subscriptions","organizations_url":"https://api.github.com/users/europeana/orgs","repos_url":"https://api.github.com/users/europeana/repos","events_url":"https://api.github.com/users/europeana/events{/privacy}","received_events_url":"https://api.github.com/users/europeana/received_events","type":"Organization","site_admin":false},"repo":{"id":51921813,"name":"metis-framework","full_name":"europeana/metis-framework","owner":{"login":"europeana","id":4570681,"avatar_url":"https://avatars3.githubusercontent.com/u/4570681?v=4","gravatar_id":"","url":"https://api.github.com/users/europeana","html_url":"https://github.com/europeana","followers_url":"https://api.github.com/users/europeana/followers","following_url":"https://api.github.com/users/europeana/following{/other_user}","gists_url":"https://api.github.com/users/europeana/gists{/gist_id}","starred_url":"https://api.github.com/users/europeana/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/europeana/subscriptions","organizations_url":"https://api.github.com/users/europeana/orgs","repos_url":"https://api.github.com/users/europeana/repos","events_url":"https://api.github.com/users/europeana/events{/privacy}","received_events_url":"https://api.github.com/users/europeana/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/europeana/metis-framework","description":"Metis, named after the Titaness of Wisdom, is our in-development data publication framework including both a client application and a number of data processing (micro)services","fork":false,"url":"https://api.github.com/repos/europeana/metis-framework","forks_url":"https://api.github.com/repos/europeana/metis-framework/forks","keys_url":"https://api.github.com/repos/europeana/metis-framework/keys{/key_id}","collaborators_url":"https://api.github.com/repos/europeana/metis-framework/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/europeana/metis-framework/teams","hooks_url":"https://api.github.com/repos/europeana/metis-framework/hooks","issue_events_url":"https://api.github.com/repos/europeana/metis-framework/issues/events{/number}","events_url":"https://api.github.com/repos/europeana/metis-framework/events","assignees_url":"https://api.github.com/repos/europeana/metis-framework/assignees{/user}","branches_url":"https://api.github.com/repos/europeana/metis-framework/branches{/branch}","tags_url":"https://api.github.com/repos/europeana/metis-framework/tags","blobs_url":"https://api.github.com/repos/europeana/metis-framework/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/europeana/metis-framework/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/europeana/metis-framework/git/refs{/sha}","trees_url":"https://api.github.com/repos/europeana/metis-framework/git/trees{/sha}","statuses_url":"https://api.github.com/repos/europeana/metis-framework/statuses/{sha}","languages_url":"https://api.github.com/repos/europeana/metis-framework/languages","stargazers_url":"https://api.github.com/repos/europeana/metis-framework/stargazers","contributors_url":"https://api.github.com/repos/europeana/metis-framework/contributors","subscribers_url":"https://api.github.com/repos/europeana/metis-framework/subscribers","subscription_url":"https://api.github.com/repos/europeana/metis-framework/subscription","commits_url":"https://api.github.com/repos/europeana/metis-framework/commits{/sha}","git_commits_url":"https://api.github.com/repos/europeana/metis-framework/git/commits{/sha}","comments_url":"https://api.github.com/repos/europeana/metis-framework/comments{/number}","issue_comment_url":"https://api.github.com/repos/europeana/metis-framework/issues/comments{/number}","contents_url":"https://api.github.com/repos/europeana/metis-framework/contents/{+path}","compare_url":"https://api.github.com/repos/europeana/metis-framework/compare/{base}...{head}","merges_url":"https://api.github.com/repos/europeana/metis-framework/merges","archive_url":"https://api.github.com/repos/europeana/metis-framework/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/europeana/metis-framework/downloads","issues_url":"https://api.github.com/repos/europeana/metis-framework/issues{/number}","pulls_url":"https://api.github.com/repos/europeana/metis-framework/pulls{/number}","milestones_url":"https://api.github.com/repos/europeana/metis-framework/milestones{/number}","notifications_url":"https://api.github.com/repos/europeana/metis-framework/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/europeana/metis-framework/labels{/name}","releases_url":"https://api.github.com/repos/europeana/metis-framework/releases{/id}","deployments_url":"https://api.github.com/repos/europeana/metis-framework/deployments","created_at":"2016-02-17T12:43:34Z","updated_at":"2018-04-26T14:14:16Z","pushed_at":"2018-04-30T13:06:49Z","git_url":"git://github.com/europeana/metis-framework.git","ssh_url":"git@github.com:europeana/metis-framework.git","clone_url":"https://github.com/europeana/metis-framework.git","svn_url":"https://github.com/europeana/metis-framework","homepage":"","size":128283,"stargazers_count":7,"watchers_count":7,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"archived":false,"open_issues_count":2,"license":{"key":"eupl-1.1","name":"European Union Public License 1.1","spdx_id":"EUPL-1.1","url":"https://api.github.com/licenses/eupl-1.1"},"forks":1,"open_issues":2,"watchers":7,"default_branch":"develop"}},"base":{"label":"europeana:develop","ref":"develop","sha":"6bce5b849309fa94fbc9cbf18d0ed264f2e4b72d","user":{"login":"europeana","id":4570681,"avatar_url":"https://avatars3.githubusercontent.com/u/4570681?v=4","gravatar_id":"","url":"https://api.github.com/users/europeana","html_url":"https://github.com/europeana","followers_url":"https://api.github.com/users/europeana/followers","following_url":"https://api.github.com/users/europeana/following{/other_user}","gists_url":"https://api.github.com/users/europeana/gists{/gist_id}","starred_url":"https://api.github.com/users/europeana/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/europeana/subscriptions","organizations_url":"https://api.github.com/users/europeana/orgs","repos_url":"https://api.github.com/users/europeana/repos","events_url":"https://api.github.com/users/europeana/events{/privacy}","received_events_url":"https://api.github.com/users/europeana/received_events","type":"Organization","site_admin":false},"repo":{"id":51921813,"name":"metis-framework","full_name":"europeana/metis-framework","owner":{"login":"europeana","id":4570681,"avatar_url":"https://avatars3.githubusercontent.com/u/4570681?v=4","gravatar_id":"","url":"https://api.github.com/users/europeana","html_url":"https://github.com/europeana","followers_url":"https://api.github.com/users/europeana/followers","following_url":"https://api.github.com/users/europeana/following{/other_user}","gists_url":"https://api.github.com/users/europeana/gists{/gist_id}","starred_url":"https://api.github.com/users/europeana/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/europeana/subscriptions","organizations_url":"https://api.github.com/users/europeana/orgs","repos_url":"https://api.github.com/users/europeana/repos","events_url":"https://api.github.com/users/europeana/events{/privacy}","received_events_url":"https://api.github.com/users/europeana/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/europeana/metis-framework","description":"Metis, named after the Titaness of Wisdom, is our in-development data publication framework including both a client application and a number of data processing (micro)services","fork":false,"url":"https://api.github.com/repos/europeana/metis-framework","forks_url":"https://api.github.com/repos/europeana/metis-framework/forks","keys_url":"https://api.github.com/repos/europeana/metis-framework/keys{/key_id}","collaborators_url":"https://api.github.com/repos/europeana/metis-framework/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/europeana/metis-framework/teams","hooks_url":"https://api.github.com/repos/europeana/metis-framework/hooks","issue_events_url":"https://api.github.com/repos/europeana/metis-framework/issues/events{/number}","events_url":"https://api.github.com/repos/europeana/metis-framework/events","assignees_url":"https://api.github.com/repos/europeana/metis-framework/assignees{/user}","branches_url":"https://api.github.com/repos/europeana/metis-framework/branches{/branch}","tags_url":"https://api.github.com/repos/europeana/metis-framework/tags","blobs_url":"https://api.github.com/repos/europeana/metis-framework/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/europeana/metis-framework/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/europeana/metis-framework/git/refs{/sha}","trees_url":"https://api.github.com/repos/europeana/metis-framework/git/trees{/sha}","statuses_url":"https://api.github.com/repos/europeana/metis-framework/statuses/{sha}","languages_url":"https://api.github.com/repos/europeana/metis-framework/languages","stargazers_url":"https://api.github.com/repos/europeana/metis-framework/stargazers","contributors_url":"https://api.github.com/repos/europeana/metis-framework/contributors","subscribers_url":"https://api.github.com/repos/europeana/metis-framework/subscribers","subscription_url":"https://api.github.com/repos/europeana/metis-framework/subscription","commits_url":"https://api.github.com/repos/europeana/metis-framework/commits{/sha}","git_commits_url":"https://api.github.com/repos/europeana/metis-framework/git/commits{/sha}","comments_url":"https://api.github.com/repos/europeana/metis-framework/comments{/number}","issue_comment_url":"https://api.github.com/repos/europeana/metis-framework/issues/comments{/number}","contents_url":"https://api.github.com/repos/europeana/metis-framework/contents/{+path}","compare_url":"https://api.github.com/repos/europeana/metis-framework/compare/{base}...{head}","merges_url":"https://api.github.com/repos/europeana/metis-framework/merges","archive_url":"https://api.github.com/repos/europeana/metis-framework/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/europeana/metis-framework/downloads","issues_url":"https://api.github.com/repos/europeana/metis-framework/issues{/number}","pulls_url":"https://api.github.com/repos/europeana/metis-framework/pulls{/number}","milestones_url":"https://api.github.com/repos/europeana/metis-framework/milestones{/number}","notifications_url":"https://api.github.com/repos/europeana/metis-framework/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/europeana/metis-framework/labels{/name}","releases_url":"https://api.github.com/repos/europeana/metis-framework/releases{/id}","deployments_url":"https://api.github.com/repos/europeana/metis-framework/deployments","created_at":"2016-02-17T12:43:34Z","updated_at":"2018-04-26T14:14:16Z","pushed_at":"2018-04-30T13:06:49Z","git_url":"git://github.com/europeana/metis-framework.git","ssh_url":"git@github.com:europeana/metis-framework.git","clone_url":"https://github.com/europeana/metis-framework.git","svn_url":"https://github.com/europeana/metis-framework","homepage":"","size":128283,"stargazers_count":7,"watchers_count":7,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"archived":false,"open_issues_count":2,"license":{"key":"eupl-1.1","name":"European Union Public License 1.1","spdx_id":"EUPL-1.1","url":"https://api.github.com/licenses/eupl-1.1"},"forks":1,"open_issues":2,"watchers":7,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/europeana/metis-framework/pulls/150"},"html":{"href":"https://github.com/europeana/metis-framework/pull/150"},"issue":{"href":"https://api.github.com/repos/europeana/metis-framework/issues/150"},"comments":{"href":"https://api.github.com/repos/europeana/metis-framework/issues/150/comments"},"review_comments":{"href":"https://api.github.com/repos/europeana/metis-framework/pulls/150/comments"},"review_comment":{"href":"https://api.github.com/repos/europeana/metis-framework/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/europeana/metis-framework/pulls/150/commits"},"statuses":{"href":"https://api.github.com/repos/europeana/metis-framework/statuses/d288972e70238adf4f366c02a3861f0be5b5fd4f"}},"author_association":"COLLABORATOR"}}
{"actor":{"display_login":"gsergiu"}}