{"action":"created","comment":{"url":"https://api.github.com/repos/JabRef/jabref/pulls/comments/69857229","id":69857229,"diff_hunk":"@@ -84,50 +121,371 @@ public boolean isRecognizedFormat(BufferedReader reader) throws IOException {\n     public ParserResult importDatabase(BufferedReader reader) throws IOException {\n         Objects.requireNonNull(reader);\n \n-        // Obtain a factory object for creating SAX parsers\n-        SAXParserFactory parserFactory = SAXParserFactory.newInstance();\n-\n-        // Configure the factory object to specify attributes of the parsers it\n-        // creates\n-        parserFactory.setValidating(true);\n-        parserFactory.setNamespaceAware(true);\n-\n-        // Now create a SAXParser object\n         List<BibEntry> bibItems = new ArrayList<>();\n         try {\n-            SAXParser parser = parserFactory.newSAXParser(); // May throw\n-            // exceptions\n-            MedlineHandler handler = new MedlineHandler();\n-            // Start the parser. It reads the file and calls methods of the\n-            // handler.\n-            parser.parse(new InputSource(reader), handler);\n-\n-            // Switch this to true if you want to make a local copy for testing.\n-            if (false) {\n-                reader.reset();\n-                try (FileOutputStream out = new FileOutputStream(new File(\"/home/alver/ut.txt\"))) {\n-                    int c;\n-                    while ((c = reader.read()) != -1) {\n-                        out.write((char) c);\n+            JAXBContext context = JAXBContext.newInstance(\"generated\");\n+            Unmarshaller unmarshaller = context.createUnmarshaller();\n+            Object unmarshalledObject = unmarshaller.unmarshal(reader);\n+\n+            //check whether we have an article set or just an article\n+            if (unmarshalledObject instanceof PubmedArticleSet) {\n+                PubmedArticleSet articleSet = (PubmedArticleSet) unmarshalledObject;\n+                for (Object article : articleSet.getPubmedArticleOrPubmedBookArticle()) {\n+                    if (article instanceof PubmedArticle) {\n+                        PubmedArticle currentArticle = (PubmedArticle) article;\n+                        parseArticle(currentArticle, bibItems);\n                     }\n                 }\n+            } else {\n+                PubmedArticle article = (PubmedArticle) unmarshalledObject;\n+                parseArticle(article, bibItems);\n             }\n-\n-            // When you're done, report the results stored by your handler\n-            // object\n-            bibItems.addAll(handler.getItems());\n-        } catch (javax.xml.parsers.ParserConfigurationException e) {\n-            LOGGER.error(\"Error with XML parser configuration\", e);\n-            return ParserResult.fromErrorMessage(e.getLocalizedMessage());\n-        } catch (org.xml.sax.SAXException e) {\n-            LOGGER.error(\"Error during XML parsing\", e);\n-            return ParserResult.fromErrorMessage(e.getLocalizedMessage());\n-        } catch (IOException e) {\n-            LOGGER.error(\"Error during file import\", e);\n-            return ParserResult.fromErrorMessage(e.getLocalizedMessage());\n+        } catch (JAXBException e1) {\n+            LOGGER.debug(\"could not parse document\", e1);\n+            return ParserResult.fromErrorMessage(e1.getLocalizedMessage());\n         }\n \n         return new ParserResult(bibItems);\n     }\n \n+    private void parseArticle(PubmedArticle article, List<BibEntry> bibItems) {\n+        HashMap<String, String> fields = new HashMap<>();\n+\n+        if (article.getPubmedData() != null) {\n+            addDateRevised(fields, article);\n+            putIfNotNull(fields, \"pubstatus\", article.getPubmedData().getPublicationStatus());\n+        }\n+        if (article.getMedlineCitation() != null) {\n+            MedlineCitation medlineCitation = article.getMedlineCitation();\n+\n+            fields.put(\"status\", medlineCitation.getStatus());\n+            DateCreated dateCreated = medlineCitation.getDateCreated();\n+            fields.put(\"created\", dateCreated.getDay() + \"/\" + dateCreated.getMonth() + \"/\" + dateCreated.getYear());\n+            fields.put(\"pubmodel\", medlineCitation.getArticle().getPubModel());\n+\n+            if (medlineCitation.getDateCompleted() != null) {\n+                DateCompleted dateCompleted = medlineCitation.getDateCompleted();\n+                fields.put(\"completed\",\n+                        dateCompleted.getDay() + \"/\" + dateCompleted.getMonth() + \"/\" + dateCompleted.getYear());\n+            }\n+\n+            fields.put(\"pmid\", medlineCitation.getPMID().getContent());\n+            fields.put(\"owner\", medlineCitation.getOwner());\n+\n+            addArticleInformation(fields, medlineCitation.getArticle().getContent());\n+\n+            MedlineJournalInfo medlineJournalInfo = medlineCitation.getMedlineJournalInfo();\n+            putIfNotNull(fields, \"country\", medlineJournalInfo.getCountry());\n+            putIfNotNull(fields, \"journal-abbreviation\", medlineJournalInfo.getMedlineTA());\n+            putIfNotNull(fields, \"nlm-id\", medlineJournalInfo.getNlmUniqueID());\n+            putIfNotNull(fields, \"issn-linking\", medlineJournalInfo.getISSNLinking());\n+            if (medlineCitation.getChemicalList() != null) {\n+                if (medlineCitation.getChemicalList().getChemical() != null) {\n+                    addChemicals(fields, medlineCitation.getChemicalList().getChemical());\n+                }\n+            }\n+            if (medlineCitation.getCitationSubset() != null) {\n+                fields.put(\"citation-subset\", join(medlineCitation.getCitationSubset(), \", \"));\n+            }\n+            if (medlineCitation.getGeneSymbolList() != null) {\n+                addGeneSymbols(fields, medlineCitation.getGeneSymbolList());\n+            }\n+            if (medlineCitation.getMeshHeadingList() != null) {\n+                addMeashHeading(fields, medlineCitation.getMeshHeadingList());\n+            }\n+            putIfNotNull(fields, \"references\", medlineCitation.getNumberOfReferences());\n+            if (medlineCitation.getPersonalNameSubjectList() != null) {\n+                addPersonalNames(fields, medlineCitation.getPersonalNameSubjectList());\n+            }\n+            if (medlineCitation.getOtherID() != null) {\n+                addOtherId(fields, medlineCitation.getOtherID());\n+            }\n+            if (medlineCitation.getKeywordList() != null) {\n+                addKeyWords(fields, medlineCitation.getKeywordList());\n+            }\n+            if (medlineCitation.getSpaceFlightMission() != null) {\n+                fields.put(\"space-flight-mission\", join(medlineCitation.getSpaceFlightMission(), \", \"));\n+            }\n+            if (medlineCitation.getInvestigatorList() != null) {\n+                addInvestigators(fields, medlineCitation.getInvestigatorList());\n+            }\n+            if (medlineCitation.getGeneralNote() != null) {\n+                addNotes(fields, medlineCitation.getGeneralNote());\n+            }\n+\n+        }\n+\n+        BibEntry entry = new BibEntry(IdGenerator.next(), \"article\"); // id assumes an existing database so don't create one here\n+        entry.setField(fields);\n+\n+        bibItems.add(entry);\n+    }\n+\n+    private void addNotes(HashMap<String, String> fields, List<GeneralNote> generalNote) {\n+        List<String> notes = new ArrayList<>();\n+        for (GeneralNote note : generalNote) {\n+            if (note != null) {\n+                notes.add(note.getContent());\n+            }\n+        }\n+        fields.put(\"note\", join(notes, \", \"));\n+    }\n+\n+    private void addInvestigators(HashMap<String, String> fields, InvestigatorList investigatorList) {\n+        List<String> investigatorNames = new ArrayList<>();\n+        List<String> affiliationInfos = new ArrayList<>();\n+        String name = \"\";\n+        // add the investigators like the authors\n+        if (investigatorList.getInvestigator() != null) {\n+            List<Investigator> investigators = investigatorList.getInvestigator();\n+            for (Investigator investigator : investigators) {\n+                name = investigator.getLastName();\n+                if (investigator.getForeName() != null) {\n+                    name += \", \" + investigator.getForeName();\n+                }\n+                investigatorNames.add(name);\n+\n+                //now add the affiliation info\n+                if (investigator.getAffiliationInfo() != null) {\n+                    for (AffiliationInfo info : investigator.getAffiliationInfo()) {\n+                        for (Serializable affiliation : info.getAffiliation().getContent()) {\n+                            if (affiliation instanceof String) {\n+                                affiliationInfos.add((String) affiliation);\n+                            }\n+                        }\n+                    }\n+                    fields.put(\"affiliation\", join(affiliationInfos, \", \"));\n+                }\n+            }\n+            fields.put(\"investigator\", join(investigatorNames, \" and \"));\n+        }\n+    }\n+\n+    private void addKeyWords(HashMap<String, String> fields, List<KeywordList> allKeywordLists) {\n+        List<String> keywordStrings = new ArrayList<>();\n+        //add keywords to the list\n+        for (KeywordList keywordList : allKeywordLists) {\n+            for (Keyword keyword : keywordList.getKeyword()) {\n+                for (Serializable content : keyword.getContent()) {\n+                    if (content instanceof String) {\n+                        keywordStrings.add((String) content);\n+                    }\n+                }\n+            }\n+        }\n+        //Check whether MeshHeadingList exist or not\n+        if (fields.get(\"keywords\") == null) {\n+            fields.put(\"keywords\", join(keywordStrings, \"; \"));\n+        } else {\n+            if (keywordStrings.size() > 0) {\n+                //if it exists, combine the MeshHeading with the keywords\n+                String result = join(keywordStrings, \"; \");\n+                result = fields.get(\"keywords\") + \"; \" + result;\n+                fields.put(\"keywords\", result);\n+            }\n+        }\n+    }\n+\n+    private void addOtherId(HashMap<String, String> fields, List<OtherID> otherID) {\n+        for (OtherID id : otherID) {\n+            if ((id.getSource() != null) && (id.getContent() != null)) {\n+                fields.put(id.getSource(), id.getContent());\n+            }\n+        }\n+    }\n+\n+    private void addPersonalNames(HashMap<String, String> fields, PersonalNameSubjectList personalNameSubjectList) {\n+        if (fields.get(\"author\") == null) {\n+            //if no authors appear, then add the personal names as authors\n+            List<String> personalNames = new ArrayList<>();\n+            if (personalNameSubjectList.getPersonalNameSubject() != null) {\n+                List<PersonalNameSubject> personalNameSubject = personalNameSubjectList.getPersonalNameSubject();\n+                for (PersonalNameSubject personalName : personalNameSubject) {\n+                    String name = personalName.getLastName();\n+                    if (personalName.getForeName() != null) {\n+                        name += \", \" + personalName.getForeName().toString();\n+                    }\n+                    personalNames.add(name);\n+                }\n+                fields.put(\"author\", join(personalNames, \" and \"));\n+            }\n+        }\n+    }\n+\n+    private void addMeashHeading(HashMap<String, String> fields, MeshHeadingList meshHeadingList) {\n+        ArrayList<String> keywords = new ArrayList<>();\n+        String result = \"\";\n+        for (MeshHeading keyword : meshHeadingList.getMeshHeading()) {\n+            result = keyword.getDescriptorName().getContent();\n+            if (keyword.getQualifierName() != null) {\n+                for (QualifierName qualifier : keyword.getQualifierName()) {\n+                    result += \", \" + qualifier.getContent();\n+                }\n+            }\n+            keywords.add(result);\n+        }\n+        fields.put(\"keywords\", join(keywords, \"; \"));\n+    }\n+\n+    private void addGeneSymbols(HashMap<String, String> fields, GeneSymbolList geneSymbolList) {\n+        List<String> geneSymbols = geneSymbolList.getGeneSymbol();\n+        fields.put(\"gene-symbols\", join(geneSymbols, \", \"));\n+    }\n+\n+    private void addChemicals(HashMap<String, String> fields, List<Chemical> chemicals) {\n+        List<String> chemicalNames = new ArrayList<>();\n+        for (Chemical chemical : chemicals) {\n+            if (chemical != null) {\n+                chemicalNames.add(chemical.getNameOfSubstance().getContent());\n+            }\n+        }\n+        fields.put(\"chemicals\", join(chemicalNames, \", \"));\n+    }\n+\n+    private void addArticleInformation(HashMap<String, String> fields, List<Object> content) {\n+        for (Object object : content) {\n+            if (object instanceof Journal) {\n+                Journal journal = (Journal) object;\n+                putIfNotNull(fields, \"journal\", journal.getTitle());\n+\n+                ISSN issn = journal.getISSN();\n+                putIfNotNull(fields, \"issn\", issn.getContent());\n+\n+                JournalIssue journalIssue = journal.getJournalIssue();\n+                putIfNotNull(fields, \"volume\", journalIssue.getVolume());\n+                putIfNotNull(fields, \"issue\", journalIssue.getIssue());\n+\n+                PubDate pubDate = journalIssue.getPubDate();\n+                if (pubDate.getYear() == null) {\n+                    //if year of the pubdate is null, the medlineDate shouldn't be null\n+                    fields.put(\"year\", extractYear(pubDate.getMedlineDate()));\n+                } else {\n+                    fields.put(\"year\", pubDate.getYear());\n+                    if (pubDate.getMonth() != null) {\n+                        fields.put(\"month\", pubDate.getMonth());\n+                    } else if (pubDate.getSeason() != null) {\n+                        fields.put(\"season\", pubDate.getSeason());\n+                    }\n+                }\n+            } else if (object instanceof ArticleTitle) {\n+                ArticleTitle articleTitle = (ArticleTitle) object;\n+                fields.put(\"title\", removeSurroundingBrackets(articleTitle.getContent().toString()));\n+            } else if (object instanceof Pagination) {\n+                Pagination pagination = (Pagination) object;\n+                String startPage = \"\";\n+                String endPage = \"\";\n+                for (JAXBElement<String> element : pagination.getContent()) {\n+                    if (\"MedlinePgn\".equals(element.getName().getLocalPart())) {\n+                        putIfNotNull(fields, \"pages\", fixPageRange(element.getValue()));\n+                    } else if (\"StartPage\".equals(element.getName().getLocalPart())) {\n+                        //it could happen, that the article has only a start page\n+                        startPage = element.getValue() + endPage;\n+                        putIfNotNull(fields, \"pages\", startPage);\n+                    } else if (\"EndPage\".equals(element.getName().getLocalPart())) {\n+                        endPage = element.getValue();\n+                        //but it should not happen, that a endpage appears without startpage\n+                        fields.put(\"pages\", fixPageRange(startPage + \"-\" + endPage));\n+                    }\n+                }\n+            } else if (object instanceof ELocationID) {\n+                ELocationID eLocationID = (ELocationID) object;\n+                if (\"doi\".equals(eLocationID.getEIdType())) {\n+                    fields.put(\"doi\", eLocationID.getContent());\n+                }\n+                if (\"pii\".equals(eLocationID.getEIdType())) {\n+                    fields.put(\"pii\", eLocationID.getContent());\n+                }\n+            } else if (object instanceof Abstract) {\n+                Abstract abs = (Abstract) object;\n+                putIfNotNull(fields, \"copyright\", abs.getCopyrightInformation());\n+                List<String> abstractText = new ArrayList<>();\n+                for (AbstractText text : abs.getAbstractText()) {\n+                    for (Serializable textContent : text.getContent()) {\n+                        if (textContent instanceof String) {\n+                            abstractText.add((String) textContent);\n+                        }\n+                    }\n+                }\n+                fields.put(\"abstract\", join(abstractText, \" \"));\n+            } else if (object instanceof AuthorList) {\n+                AuthorList authors = (AuthorList) object;\n+                handleAuthors(fields, authors);\n+            }\n+        }\n+    }\n+\n+    private String extractYear(String medlineDate) {\n+        //The year of the medlineDate should be the first 4 digits\n+        return medlineDate.substring(0, 4);\n+    }\n+\n+    private String removeSurroundingBrackets(String title) {\n+        if (title.startsWith(\"[\") && title.endsWith(\"]\")) {\n+            return title.replace(\"[\", \"\").replace(\"]\", \"\");\n+        }\n+        return title;","path":"src/main/java/net/sf/jabref/importer/fileformat/MedlineImporter.java","position":416,"original_position":416,"commit_id":"69110ef3d4ca7defa930f4022eb6e205fd65931c","original_commit_id":"69110ef3d4ca7defa930f4022eb6e205fd65931c","user":{"login":"simonharrer","id":375693,"avatar_url":"https://avatars.githubusercontent.com/u/375693?v=3","gravatar_id":"","url":"https://api.github.com/users/simonharrer","html_url":"https://github.com/simonharrer","followers_url":"https://api.github.com/users/simonharrer/followers","following_url":"https://api.github.com/users/simonharrer/following{/other_user}","gists_url":"https://api.github.com/users/simonharrer/gists{/gist_id}","starred_url":"https://api.github.com/users/simonharrer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/simonharrer/subscriptions","organizations_url":"https://api.github.com/users/simonharrer/orgs","repos_url":"https://api.github.com/users/simonharrer/repos","events_url":"https://api.github.com/users/simonharrer/events{/privacy}","received_events_url":"https://api.github.com/users/simonharrer/received_events","type":"User","site_admin":false},"body":"Remove surrounding brackes looks like a util method, and should maybe go into the StringUtil class?","created_at":"2016-07-07T06:36:19Z","updated_at":"2016-07-07T06:36:19Z","html_url":"https://github.com/JabRef/jabref/pull/1479#discussion_r69857229","pull_request_url":"https://api.github.com/repos/JabRef/jabref/pulls/1479","_links":{"self":{"href":"https://api.github.com/repos/JabRef/jabref/pulls/comments/69857229"},"html":{"href":"https://github.com/JabRef/jabref/pull/1479#discussion_r69857229"},"pull_request":{"href":"https://api.github.com/repos/JabRef/jabref/pulls/1479"}}},"pull_request":{"url":"https://api.github.com/repos/JabRef/jabref/pulls/1479","id":72691296,"html_url":"https://github.com/JabRef/jabref/pull/1479","diff_url":"https://github.com/JabRef/jabref/pull/1479.diff","patch_url":"https://github.com/JabRef/jabref/pull/1479.patch","issue_url":"https://api.github.com/repos/JabRef/jabref/issues/1479","number":1479,"state":"open","locked":false,"title":"Rewrite MedlineImporter with JAXB and add nbib fields","user":{"login":"tschechlovdev","id":15339876,"avatar_url":"https://avatars.githubusercontent.com/u/15339876?v=3","gravatar_id":"","url":"https://api.github.com/users/tschechlovdev","html_url":"https://github.com/tschechlovdev","followers_url":"https://api.github.com/users/tschechlovdev/followers","following_url":"https://api.github.com/users/tschechlovdev/following{/other_user}","gists_url":"https://api.github.com/users/tschechlovdev/gists{/gist_id}","starred_url":"https://api.github.com/users/tschechlovdev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tschechlovdev/subscriptions","organizations_url":"https://api.github.com/users/tschechlovdev/orgs","repos_url":"https://api.github.com/users/tschechlovdev/repos","events_url":"https://api.github.com/users/tschechlovdev/events{/privacy}","received_events_url":"https://api.github.com/users/tschechlovdev/received_events","type":"User","site_admin":false},"body":"Regarding:[#1063] (https://github.com/JabRef/jabref/issues/1063)\r\nI've rewrite the MedlineImporter (to be more specific the importDatabase method), so that it uses a JAXB parser now, instead of a SAX parser. I've also added the nbib fields to the importer. Tests for the changes will be comming.\r\n- [x] Change in CHANGELOG.md described\r\n- [x] Tests created for changes\r\n\r\n","created_at":"2016-06-06T11:01:49Z","updated_at":"2016-07-07T06:36:19Z","closed_at":null,"merged_at":null,"merge_commit_sha":"1d7af22a8b991c219e988bf7e4d8d01ed2660035","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/JabRef/jabref/pulls/1479/commits","review_comments_url":"https://api.github.com/repos/JabRef/jabref/pulls/1479/comments","review_comment_url":"https://api.github.com/repos/JabRef/jabref/pulls/comments{/number}","comments_url":"https://api.github.com/repos/JabRef/jabref/issues/1479/comments","statuses_url":"https://api.github.com/repos/JabRef/jabref/statuses/69110ef3d4ca7defa930f4022eb6e205fd65931c","head":{"label":"tschechlovdev:nBibXmlImporter","ref":"nBibXmlImporter","sha":"69110ef3d4ca7defa930f4022eb6e205fd65931c","user":{"login":"tschechlovdev","id":15339876,"avatar_url":"https://avatars.githubusercontent.com/u/15339876?v=3","gravatar_id":"","url":"https://api.github.com/users/tschechlovdev","html_url":"https://github.com/tschechlovdev","followers_url":"https://api.github.com/users/tschechlovdev/followers","following_url":"https://api.github.com/users/tschechlovdev/following{/other_user}","gists_url":"https://api.github.com/users/tschechlovdev/gists{/gist_id}","starred_url":"https://api.github.com/users/tschechlovdev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tschechlovdev/subscriptions","organizations_url":"https://api.github.com/users/tschechlovdev/orgs","repos_url":"https://api.github.com/users/tschechlovdev/repos","events_url":"https://api.github.com/users/tschechlovdev/events{/privacy}","received_events_url":"https://api.github.com/users/tschechlovdev/received_events","type":"User","site_admin":false},"repo":{"id":46298017,"name":"jabref","full_name":"tschechlovdev/jabref","owner":{"login":"tschechlovdev","id":15339876,"avatar_url":"https://avatars.githubusercontent.com/u/15339876?v=3","gravatar_id":"","url":"https://api.github.com/users/tschechlovdev","html_url":"https://github.com/tschechlovdev","followers_url":"https://api.github.com/users/tschechlovdev/followers","following_url":"https://api.github.com/users/tschechlovdev/following{/other_user}","gists_url":"https://api.github.com/users/tschechlovdev/gists{/gist_id}","starred_url":"https://api.github.com/users/tschechlovdev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tschechlovdev/subscriptions","organizations_url":"https://api.github.com/users/tschechlovdev/orgs","repos_url":"https://api.github.com/users/tschechlovdev/repos","events_url":"https://api.github.com/users/tschechlovdev/events{/privacy}","received_events_url":"https://api.github.com/users/tschechlovdev/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/tschechlovdev/jabref","description":"Graphical Java application for managing bibtex (.bib) databases","fork":true,"url":"https://api.github.com/repos/tschechlovdev/jabref","forks_url":"https://api.github.com/repos/tschechlovdev/jabref/forks","keys_url":"https://api.github.com/repos/tschechlovdev/jabref/keys{/key_id}","collaborators_url":"https://api.github.com/repos/tschechlovdev/jabref/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/tschechlovdev/jabref/teams","hooks_url":"https://api.github.com/repos/tschechlovdev/jabref/hooks","issue_events_url":"https://api.github.com/repos/tschechlovdev/jabref/issues/events{/number}","events_url":"https://api.github.com/repos/tschechlovdev/jabref/events","assignees_url":"https://api.github.com/repos/tschechlovdev/jabref/assignees{/user}","branches_url":"https://api.github.com/repos/tschechlovdev/jabref/branches{/branch}","tags_url":"https://api.github.com/repos/tschechlovdev/jabref/tags","blobs_url":"https://api.github.com/repos/tschechlovdev/jabref/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/tschechlovdev/jabref/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/tschechlovdev/jabref/git/refs{/sha}","trees_url":"https://api.github.com/repos/tschechlovdev/jabref/git/trees{/sha}","statuses_url":"https://api.github.com/repos/tschechlovdev/jabref/statuses/{sha}","languages_url":"https://api.github.com/repos/tschechlovdev/jabref/languages","stargazers_url":"https://api.github.com/repos/tschechlovdev/jabref/stargazers","contributors_url":"https://api.github.com/repos/tschechlovdev/jabref/contributors","subscribers_url":"https://api.github.com/repos/tschechlovdev/jabref/subscribers","subscription_url":"https://api.github.com/repos/tschechlovdev/jabref/subscription","commits_url":"https://api.github.com/repos/tschechlovdev/jabref/commits{/sha}","git_commits_url":"https://api.github.com/repos/tschechlovdev/jabref/git/commits{/sha}","comments_url":"https://api.github.com/repos/tschechlovdev/jabref/comments{/number}","issue_comment_url":"https://api.github.com/repos/tschechlovdev/jabref/issues/comments{/number}","contents_url":"https://api.github.com/repos/tschechlovdev/jabref/contents/{+path}","compare_url":"https://api.github.com/repos/tschechlovdev/jabref/compare/{base}...{head}","merges_url":"https://api.github.com/repos/tschechlovdev/jabref/merges","archive_url":"https://api.github.com/repos/tschechlovdev/jabref/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/tschechlovdev/jabref/downloads","issues_url":"https://api.github.com/repos/tschechlovdev/jabref/issues{/number}","pulls_url":"https://api.github.com/repos/tschechlovdev/jabref/pulls{/number}","milestones_url":"https://api.github.com/repos/tschechlovdev/jabref/milestones{/number}","notifications_url":"https://api.github.com/repos/tschechlovdev/jabref/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/tschechlovdev/jabref/labels{/name}","releases_url":"https://api.github.com/repos/tschechlovdev/jabref/releases{/id}","deployments_url":"https://api.github.com/repos/tschechlovdev/jabref/deployments","created_at":"2015-11-16T19:45:21Z","updated_at":"2016-03-10T11:41:18Z","pushed_at":"2016-07-04T11:35:19Z","git_url":"git://github.com/tschechlovdev/jabref.git","ssh_url":"git@github.com:tschechlovdev/jabref.git","clone_url":"https://github.com/tschechlovdev/jabref.git","svn_url":"https://github.com/tschechlovdev/jabref","homepage":"http://jabref.sourceforge.net/","size":81797,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"JabRef:master","ref":"master","sha":"b376621246652241217db82f7ddff100f3b110fe","user":{"login":"JabRef","id":3914421,"avatar_url":"https://avatars.githubusercontent.com/u/3914421?v=3","gravatar_id":"","url":"https://api.github.com/users/JabRef","html_url":"https://github.com/JabRef","followers_url":"https://api.github.com/users/JabRef/followers","following_url":"https://api.github.com/users/JabRef/following{/other_user}","gists_url":"https://api.github.com/users/JabRef/gists{/gist_id}","starred_url":"https://api.github.com/users/JabRef/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JabRef/subscriptions","organizations_url":"https://api.github.com/users/JabRef/orgs","repos_url":"https://api.github.com/users/JabRef/repos","events_url":"https://api.github.com/users/JabRef/events{/privacy}","received_events_url":"https://api.github.com/users/JabRef/received_events","type":"Organization","site_admin":false},"repo":{"id":17634071,"name":"jabref","full_name":"JabRef/jabref","owner":{"login":"JabRef","id":3914421,"avatar_url":"https://avatars.githubusercontent.com/u/3914421?v=3","gravatar_id":"","url":"https://api.github.com/users/JabRef","html_url":"https://github.com/JabRef","followers_url":"https://api.github.com/users/JabRef/followers","following_url":"https://api.github.com/users/JabRef/following{/other_user}","gists_url":"https://api.github.com/users/JabRef/gists{/gist_id}","starred_url":"https://api.github.com/users/JabRef/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JabRef/subscriptions","organizations_url":"https://api.github.com/users/JabRef/orgs","repos_url":"https://api.github.com/users/JabRef/repos","events_url":"https://api.github.com/users/JabRef/events{/privacy}","received_events_url":"https://api.github.com/users/JabRef/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/JabRef/jabref","description":"Graphical Java application for managing BibTeX and Biblatex (.bib) databases","fork":false,"url":"https://api.github.com/repos/JabRef/jabref","forks_url":"https://api.github.com/repos/JabRef/jabref/forks","keys_url":"https://api.github.com/repos/JabRef/jabref/keys{/key_id}","collaborators_url":"https://api.github.com/repos/JabRef/jabref/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/JabRef/jabref/teams","hooks_url":"https://api.github.com/repos/JabRef/jabref/hooks","issue_events_url":"https://api.github.com/repos/JabRef/jabref/issues/events{/number}","events_url":"https://api.github.com/repos/JabRef/jabref/events","assignees_url":"https://api.github.com/repos/JabRef/jabref/assignees{/user}","branches_url":"https://api.github.com/repos/JabRef/jabref/branches{/branch}","tags_url":"https://api.github.com/repos/JabRef/jabref/tags","blobs_url":"https://api.github.com/repos/JabRef/jabref/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/JabRef/jabref/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/JabRef/jabref/git/refs{/sha}","trees_url":"https://api.github.com/repos/JabRef/jabref/git/trees{/sha}","statuses_url":"https://api.github.com/repos/JabRef/jabref/statuses/{sha}","languages_url":"https://api.github.com/repos/JabRef/jabref/languages","stargazers_url":"https://api.github.com/repos/JabRef/jabref/stargazers","contributors_url":"https://api.github.com/repos/JabRef/jabref/contributors","subscribers_url":"https://api.github.com/repos/JabRef/jabref/subscribers","subscription_url":"https://api.github.com/repos/JabRef/jabref/subscription","commits_url":"https://api.github.com/repos/JabRef/jabref/commits{/sha}","git_commits_url":"https://api.github.com/repos/JabRef/jabref/git/commits{/sha}","comments_url":"https://api.github.com/repos/JabRef/jabref/comments{/number}","issue_comment_url":"https://api.github.com/repos/JabRef/jabref/issues/comments{/number}","contents_url":"https://api.github.com/repos/JabRef/jabref/contents/{+path}","compare_url":"https://api.github.com/repos/JabRef/jabref/compare/{base}...{head}","merges_url":"https://api.github.com/repos/JabRef/jabref/merges","archive_url":"https://api.github.com/repos/JabRef/jabref/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/JabRef/jabref/downloads","issues_url":"https://api.github.com/repos/JabRef/jabref/issues{/number}","pulls_url":"https://api.github.com/repos/JabRef/jabref/pulls{/number}","milestones_url":"https://api.github.com/repos/JabRef/jabref/milestones{/number}","notifications_url":"https://api.github.com/repos/JabRef/jabref/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/JabRef/jabref/labels{/name}","releases_url":"https://api.github.com/repos/JabRef/jabref/releases{/id}","deployments_url":"https://api.github.com/repos/JabRef/jabref/deployments","created_at":"2014-03-11T14:48:42Z","updated_at":"2016-07-04T08:55:41Z","pushed_at":"2016-07-06T22:02:05Z","git_url":"git://github.com/JabRef/jabref.git","ssh_url":"git@github.com:JabRef/jabref.git","clone_url":"https://github.com/JabRef/jabref.git","svn_url":"https://github.com/JabRef/jabref","homepage":"http://www.jabref.org","size":87539,"stargazers_count":302,"watchers_count":302,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":242,"mirror_url":null,"open_issues_count":205,"forks":242,"open_issues":205,"watchers":302,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/JabRef/jabref/pulls/1479"},"html":{"href":"https://github.com/JabRef/jabref/pull/1479"},"issue":{"href":"https://api.github.com/repos/JabRef/jabref/issues/1479"},"comments":{"href":"https://api.github.com/repos/JabRef/jabref/issues/1479/comments"},"review_comments":{"href":"https://api.github.com/repos/JabRef/jabref/pulls/1479/comments"},"review_comment":{"href":"https://api.github.com/repos/JabRef/jabref/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/JabRef/jabref/pulls/1479/commits"},"statuses":{"href":"https://api.github.com/repos/JabRef/jabref/statuses/69110ef3d4ca7defa930f4022eb6e205fd65931c"}}}}
{"actor":{"display_login":"simonharrer"}}