{"action":"created","comment":{"url":"https://api.github.com/repos/JabRef/jabref/pulls/comments/79059927","id":79059927,"diff_hunk":"@@ -1,58 +1,376 @@\n package net.sf.jabref.logic.exporter;\n \n-import java.io.IOException;\n+import java.io.File;\n+import java.math.BigInteger;\n import java.nio.charset.Charset;\n-import java.nio.charset.StandardCharsets;\n-import java.nio.file.Paths;\n import java.util.List;\n+import java.util.Map;\n import java.util.Objects;\n+import java.util.Optional;\n \n-import javax.xml.transform.OutputKeys;\n-import javax.xml.transform.Transformer;\n-import javax.xml.transform.TransformerException;\n-import javax.xml.transform.TransformerFactory;\n-import javax.xml.transform.TransformerFactoryConfigurationError;\n-import javax.xml.transform.dom.DOMSource;\n-import javax.xml.transform.stream.StreamResult;\n+import javax.xml.bind.JAXBContext;\n+import javax.xml.bind.JAXBElement;\n+import javax.xml.bind.JAXBException;\n+import javax.xml.bind.Marshaller;\n+import javax.xml.namespace.QName;\n \n-import net.sf.jabref.logic.mods.MODSDatabase;\n+import net.sf.jabref.logic.importer.fileformat.mods.AbstractDefinition;\n+import net.sf.jabref.logic.importer.fileformat.mods.CodeOrText;\n+import net.sf.jabref.logic.importer.fileformat.mods.DateDefinition;\n+import net.sf.jabref.logic.importer.fileformat.mods.DetailDefinition;\n+import net.sf.jabref.logic.importer.fileformat.mods.ExtentDefinition;\n+import net.sf.jabref.logic.importer.fileformat.mods.GenreDefinition;\n+import net.sf.jabref.logic.importer.fileformat.mods.IdentifierDefinition;\n+import net.sf.jabref.logic.importer.fileformat.mods.IssuanceDefinition;\n+import net.sf.jabref.logic.importer.fileformat.mods.LanguageDefinition;\n+import net.sf.jabref.logic.importer.fileformat.mods.LanguageTermDefinition;\n+import net.sf.jabref.logic.importer.fileformat.mods.LocationDefinition;\n+import net.sf.jabref.logic.importer.fileformat.mods.ModsCollectionDefinition;\n+import net.sf.jabref.logic.importer.fileformat.mods.ModsDefinition;\n+import net.sf.jabref.logic.importer.fileformat.mods.NameDefinition;\n+import net.sf.jabref.logic.importer.fileformat.mods.NamePartDefinition;\n+import net.sf.jabref.logic.importer.fileformat.mods.NoteDefinition;\n+import net.sf.jabref.logic.importer.fileformat.mods.OriginInfoDefinition;\n+import net.sf.jabref.logic.importer.fileformat.mods.PartDefinition;\n+import net.sf.jabref.logic.importer.fileformat.mods.PhysicalLocationDefinition;\n+import net.sf.jabref.logic.importer.fileformat.mods.PlaceDefinition;\n+import net.sf.jabref.logic.importer.fileformat.mods.PlaceTermDefinition;\n+import net.sf.jabref.logic.importer.fileformat.mods.RelatedItemDefinition;\n+import net.sf.jabref.logic.importer.fileformat.mods.StringPlusLanguage;\n+import net.sf.jabref.logic.importer.fileformat.mods.StringPlusLanguagePlusAuthority;\n+import net.sf.jabref.logic.importer.fileformat.mods.StringPlusLanguagePlusSupplied;\n+import net.sf.jabref.logic.importer.fileformat.mods.SubjectDefinition;\n+import net.sf.jabref.logic.importer.fileformat.mods.TitleInfoDefinition;\n+import net.sf.jabref.logic.importer.fileformat.mods.TypeOfResourceDefinition;\n+import net.sf.jabref.logic.importer.fileformat.mods.UrlDefinition;\n import net.sf.jabref.model.database.BibDatabaseContext;\n import net.sf.jabref.model.entry.BibEntry;\n+import net.sf.jabref.model.entry.FieldName;\n+\n+import com.sun.xml.bind.marshaller.NamespacePrefixMapper;\n \n /**\n  * ExportFormat for exporting in MODS XML format.\n  */\n class ModsExportFormat extends ExportFormat {\n \n+    private static final String KEYWORD_SEPARATOR = \";\";\n+\n+\n     public ModsExportFormat() {\n         super(\"MODS\", \"mods\", null, null, \".xml\");\n     }\n \n     @Override\n-    public void performExport(final BibDatabaseContext databaseContext, final String file,\n-            final Charset encoding, List<BibEntry> entries) throws SaveException {\n+    public void performExport(final BibDatabaseContext databaseContext, final String file, final Charset encoding,\n+            List<BibEntry> entries) throws SaveException {\n         Objects.requireNonNull(databaseContext);\n         Objects.requireNonNull(entries);\n         if (entries.isEmpty()) { // Only export if entries exist\n             return;\n         }\n \n-        SaveSession ss = new FileSaveSession(StandardCharsets.UTF_8, false);\n-        try (VerifyingWriter ps = ss.getWriter()) {\n-            MODSDatabase md = new MODSDatabase(databaseContext.getDatabase(), entries);\n-\n-            try {\n-                DOMSource source = new DOMSource(md.getDOMrepresentation());\n-                StreamResult result = new StreamResult(ps);\n-                Transformer trans = TransformerFactory.newInstance().newTransformer();\n-                trans.setOutputProperty(OutputKeys.INDENT, \"yes\");\n-                trans.transform(source, result);\n-            } catch (TransformerException | IllegalArgumentException | TransformerFactoryConfigurationError e) {\n-                throw new Error(e);\n+        try {\n+            ModsCollectionDefinition modsCollection = new ModsCollectionDefinition();\n+            for (BibEntry bibEntry : entries) {\n+                ModsDefinition mods = new ModsDefinition();\n+\n+                Optional<String> citeKey = bibEntry.getCiteKeyOptional();\n+                if (citeKey.isPresent()) {\n+                    mods.setID(citeKey.get());\n+                    addIdentifier(\"citekey\", citeKey.get(), mods);\n+                }\n+\n+                Map<String, String> fieldMap = bibEntry.getFieldMap();\n+                GenreDefinition genre = new GenreDefinition();\n+                genre.setValue(bibEntry.getType());\n+                mods.getModsGroup().add(genre);\n+\n+                OriginInfoDefinition originInfo = new OriginInfoDefinition();\n+                PartDefinition partDefinition = new PartDefinition();\n+                RelatedItemDefinition relatedItem = new RelatedItemDefinition();\n+\n+                for (Map.Entry<String, String> entry : fieldMap.entrySet()) {\n+                    String key = entry.getKey();\n+                    String value = entry.getValue();\n+                    if (FieldName.AUTHOR.equals(key)) {\n+                        NameDefinition name = new NameDefinition();\n+                        name.setAtType(\"personal\");\n+                        String[] authors = value.split(\" and \");\n+                        for (String author : authors) {\n+                            NamePartDefinition namePart = new NamePartDefinition();\n+                            if (author.contains(\",\")) {\n+                                //if author contains \",\"  then this indicates that the author has a forename and family name\n+                                int commaIndex = author.indexOf(',');\n+                                String familyName = author.substring(0, commaIndex);\n+                                namePart.setAtType(\"family\");\n+                                namePart.setValue(familyName);\n+\n+                                JAXBElement<NamePartDefinition> element = new JAXBElement<>(new QName(\"namePart\"),\n+                                        NamePartDefinition.class, namePart);\n+                                name.getNamePartOrDisplayFormOrAffiliation().add(element);\n+\n+                                //now take care of the forenames\n+                                String forename = author.substring(commaIndex + 1, author.length());\n+                                String[] forenames = forename.split(\" \");\n+                                for (String given : forenames) {\n+                                    NamePartDefinition namePartDefinition = new NamePartDefinition();\n+                                    namePartDefinition.setAtType(\"given\");\n+                                    namePartDefinition.setValue(given);\n+                                    element = new JAXBElement<>(new QName(\"\", \"namePart\"), NamePartDefinition.class,\n+                                            namePartDefinition);\n+                                    name.getNamePartOrDisplayFormOrAffiliation().add(element);\n+                                }\n+                            } else {\n+                                //no \",\" indicates that there should only be a family name\n+                                namePart.setAtType(\"family\");\n+                                namePart.setValue(author);\n+                                JAXBElement<NamePartDefinition> element = new JAXBElement<>(new QName(\"namePart\"),\n+                                        NamePartDefinition.class, namePart);\n+                                name.getNamePartOrDisplayFormOrAffiliation().add(element);\n+                            }\n+                        }\n+                        mods.getModsGroup().add(name);\n+                    } else if (\"affiliation\".equals(key)) {\n+                        NameDefinition nameDefinition = new NameDefinition();\n+                        StringPlusLanguage affiliation = new StringPlusLanguage();\n+                        affiliation.setValue(value);\n+                        JAXBElement<StringPlusLanguage> element = new JAXBElement<>(new QName(\"affiliation\"),\n+                                StringPlusLanguage.class, affiliation);\n+                        nameDefinition.getAffiliationOrRoleOrDescription().add(element);\n+                        mods.getModsGroup().add(nameDefinition);\n+                    } else if (FieldName.ABSTRACT.equals(key)) {\n+                        AbstractDefinition abstractDefinition = new AbstractDefinition();\n+                        abstractDefinition.setValue(value);\n+                        mods.getModsGroup().add(abstractDefinition);\n+                    } else if (FieldName.TITLE.equals(key)) {\n+                        TitleInfoDefinition titleInfo = new TitleInfoDefinition();\n+                        StringPlusLanguage title = new StringPlusLanguage();\n+                        title.setValue(value);\n+                        JAXBElement<StringPlusLanguage> element = new JAXBElement<>(new QName(\"title\"),\n+                                StringPlusLanguage.class, title);\n+                        titleInfo.getTitleOrSubTitleOrPartNumber().add(element);\n+                    } else if (FieldName.LANGUAGE.equals(key)) {\n+                        LanguageDefinition language = new LanguageDefinition();\n+                        LanguageTermDefinition languageTerm = new LanguageTermDefinition();\n+                        languageTerm.setValue(value);\n+                        language.getLanguageTerm().add(languageTerm);\n+                        mods.getModsGroup().add(language);\n+                    } else if (FieldName.LOCATION.equals(key)) {\n+                        LocationDefinition locationDefinition = new LocationDefinition();\n+                        //There can be more than one location\n+                        String[] locations = value.split(\", \");\n+                        for (String location : locations) {\n+                            PhysicalLocationDefinition physicalLocation = new PhysicalLocationDefinition();\n+                            physicalLocation.setValue(location);\n+                            locationDefinition.getPhysicalLocation().add(physicalLocation);\n+                        }\n+                        mods.getModsGroup().add(locationDefinition);\n+                    } else if (FieldName.URL.equals(key)) {\n+                        String[] urls = value.split(\", \");\n+                        for (String url : urls) {\n+                            UrlDefinition urlDefinition = new UrlDefinition();\n+                            urlDefinition.setValue(url);\n+                            mods.getModsGroup().add(urlDefinition);\n+                        }\n+                    } else if (FieldName.NOTE.equals(key)) {\n+                        String[] notes = value.split(\", \");\n+                        for (String note : notes) {\n+                            NoteDefinition noteDefinition = new NoteDefinition();\n+                            noteDefinition.setValue(note);\n+                            mods.getModsGroup().add(noteDefinition);\n+                        }\n+                    } else if (FieldName.KEYWORDS.equals(key)) {\n+                        String[] keywords = null;\n+                        if (value.contains(KEYWORD_SEPARATOR)) {\n+                            keywords = value.split(KEYWORD_SEPARATOR);\n+                        } else if (value.contains(\", \")) {\n+                            keywords = value.split(\", \");\n+                        }\n+\n+                        if (keywords != null) {\n+                            for (String keyword : keywords) {\n+                                SubjectDefinition subject = new SubjectDefinition();\n+                                StringPlusLanguagePlusAuthority topic = new StringPlusLanguagePlusAuthority();\n+                                topic.setValue(keyword);\n+                                JAXBElement<?> element = new JAXBElement<>(new QName(\"topic\"),\n+                                        StringPlusLanguagePlusAuthority.class, topic);\n+                                subject.getTopicOrGeographicOrTemporal().add(element);\n+                                mods.getModsGroup().add(subject);\n+                            }\n+                        } else {\n+                            SubjectDefinition subject = new SubjectDefinition();\n+                            StringPlusLanguagePlusAuthority topic = new StringPlusLanguagePlusAuthority();\n+                            topic.setValue(value);\n+                            JAXBElement<?> element = new JAXBElement<>(new QName(\"topic\"),\n+                                    StringPlusLanguagePlusAuthority.class, topic);\n+                            subject.getTopicOrGeographicOrTemporal().add(element);\n+                            mods.getModsGroup().add(subject);\n+                        }\n+                    } else if (FieldName.VOLUME.equals(key)) {\n+                        addDetail(FieldName.VOLUME, value, partDefinition);\n+                    } else if (FieldName.ISSUE.equals(key)) {\n+                        addDetail(FieldName.ISSUE, value, partDefinition);\n+                    } else if (FieldName.PAGES.equals(key)) {\n+                        if (value.contains(\"--\")) {\n+                            addStartAndEndPage(value, partDefinition, \"--\");\n+                        } else if (value.contains(\"-\")) {\n+                            addStartAndEndPage(value, partDefinition, \"-\");\n+                        } else {\n+                            BigInteger total = new BigInteger(value);\n+                            ExtentDefinition extent = new ExtentDefinition();\n+                            extent.setTotal(total);\n+                            partDefinition.getDetailOrExtentOrDate().add(extent);\n+                        }\n+                    } else if (FieldName.URI.equals(key)) {\n+                        addIdentifier(FieldName.URI, value, mods);\n+                    } else if (FieldName.ISBN.equals(key)) {\n+                        addIdentifier(FieldName.ISBN, value, mods);\n+                    } else if (FieldName.ISSN.equals(key)) {\n+                        addIdentifier(FieldName.ISSN, value, mods);\n+                    } else if (FieldName.DOI.equals(key)) {\n+                        addIdentifier(FieldName.DOI, value, mods);\n+                    } else if (FieldName.PMID.equals(key)) {\n+                        addIdentifier(FieldName.PMID, value, mods);\n+                    } else if (FieldName.JOURNAL.equals(key)) {\n+                        TitleInfoDefinition titleInfo = new TitleInfoDefinition();\n+                        StringPlusLanguage title = new StringPlusLanguage();\n+                        title.setValue(value);\n+                        JAXBElement<StringPlusLanguage> element = new JAXBElement<>(new QName(\"title\"),\n+                                StringPlusLanguage.class, title);\n+                        titleInfo.getTitleOrSubTitleOrPartNumber().add(element);\n+                        relatedItem.getModsGroup().add(titleInfo);\n+                    }\n+\n+                    addOriginInformation(key, value, originInfo);\n+                }\n+\n+                relatedItem.getModsGroup().add(partDefinition);\n+                relatedItem.setAtType(\"host\");\n+                mods.getModsGroup().add(relatedItem);\n+                mods.getModsGroup().add(originInfo);\n+                TypeOfResourceDefinition typeOfResource = new TypeOfResourceDefinition();\n+                typeOfResource.setValue(\"text\");\n+                mods.getModsGroup().add(typeOfResource);\n+                modsCollection.getMods().add(mods);\n             }\n-            finalizeSaveSession(ss, Paths.get(file));\n-        } catch (IOException ex) {\n+\n+            JAXBContext context = JAXBContext.newInstance(ModsCollectionDefinition.class);\n+            Marshaller marshaller = context.createMarshaller();\n+            JAXBElement<ModsCollectionDefinition> jaxbElement = new JAXBElement<>(new QName(\"modsCollection\"),\n+                    ModsCollectionDefinition.class, modsCollection);\n+\n+            //since it has to be a prefix, use mods everywhere as prefix for elements\n+            //see also http://www.loc.gov/standards/mods/v3/mods-userguide-intro.html\n+            NamespacePrefixMapper myPrefixMapper = new NamespacePrefixMapper() {\n+\n+                @Override\n+                public String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix) {\n+                    if (\"http://www.loc.gov/mods/v3\".equals(namespaceUri)) {","path":"src/main/java/net/sf/jabref/logic/exporter/ModsExportFormat.java","position":296,"original_position":296,"commit_id":"be4ecdb28e3bdb486fd533c9d76dc899f33412a7","original_commit_id":"be4ecdb28e3bdb486fd533c9d76dc899f33412a7","user":{"login":"Siedlerchr","id":320228,"avatar_url":"https://avatars.githubusercontent.com/u/320228?v=3","gravatar_id":"","url":"https://api.github.com/users/Siedlerchr","html_url":"https://github.com/Siedlerchr","followers_url":"https://api.github.com/users/Siedlerchr/followers","following_url":"https://api.github.com/users/Siedlerchr/following{/other_user}","gists_url":"https://api.github.com/users/Siedlerchr/gists{/gist_id}","starred_url":"https://api.github.com/users/Siedlerchr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Siedlerchr/subscriptions","organizations_url":"https://api.github.com/users/Siedlerchr/orgs","repos_url":"https://api.github.com/users/Siedlerchr/repos","events_url":"https://api.github.com/users/Siedlerchr/events{/privacy}","received_events_url":"https://api.github.com/users/Siedlerchr/received_events","type":"User","site_admin":false},"body":"Pleas consider extracting those as String constants, so in case of change they could be easily changed..","created_at":"2016-09-15T20:56:40Z","updated_at":"2016-09-15T20:56:40Z","html_url":"https://github.com/JabRef/jabref/pull/1989#discussion_r79059927","pull_request_url":"https://api.github.com/repos/JabRef/jabref/pulls/1989","_links":{"self":{"href":"https://api.github.com/repos/JabRef/jabref/pulls/comments/79059927"},"html":{"href":"https://github.com/JabRef/jabref/pull/1989#discussion_r79059927"},"pull_request":{"href":"https://api.github.com/repos/JabRef/jabref/pulls/1989"}}},"pull_request":{"url":"https://api.github.com/repos/JabRef/jabref/pulls/1989","id":85441283,"html_url":"https://github.com/JabRef/jabref/pull/1989","diff_url":"https://github.com/JabRef/jabref/pull/1989.diff","patch_url":"https://github.com/JabRef/jabref/pull/1989.patch","issue_url":"https://api.github.com/repos/JabRef/jabref/issues/1989","number":1989,"state":"open","locked":false,"title":"[WIP] Rewrite mods exporter and add test for it","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: #1920 \r\nRewrite the MODS exporter with a JAXB parser. \r\nDetails on the format and the newest xml schema can be found [here] (http://www.loc.gov/standards/mods/).\r\nI've used the newest schema (version 3.6).\r\nThis PR uses the same gradle script and schema as in #1942 . \r\n\r\n\r\n- [x] Tests created for changes\r\n- [x] Manually tested changed features in running JabRef","created_at":"2016-09-15T16:57:30Z","updated_at":"2016-09-15T20:57:31Z","closed_at":null,"merged_at":null,"merge_commit_sha":"91ddaa17a5a96c7ee081d965e6d9998b02eea74b","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/JabRef/jabref/pulls/1989/commits","review_comments_url":"https://api.github.com/repos/JabRef/jabref/pulls/1989/comments","review_comment_url":"https://api.github.com/repos/JabRef/jabref/pulls/comments{/number}","comments_url":"https://api.github.com/repos/JabRef/jabref/issues/1989/comments","statuses_url":"https://api.github.com/repos/JabRef/jabref/statuses/be4ecdb28e3bdb486fd533c9d76dc899f33412a7","head":{"label":"tschechlovdev:mods-export-test","ref":"mods-export-test","sha":"be4ecdb28e3bdb486fd533c9d76dc899f33412a7","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-09-15T17:33:39Z","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":91385,"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":"3604a301bd8f1c70d0766e6dd71a1eade357b032","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-09-14T16:02:01Z","pushed_at":"2016-09-15T19:45:50Z","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":100399,"stargazers_count":351,"watchers_count":351,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":257,"mirror_url":null,"open_issues_count":201,"forks":257,"open_issues":201,"watchers":351,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/JabRef/jabref/pulls/1989"},"html":{"href":"https://github.com/JabRef/jabref/pull/1989"},"issue":{"href":"https://api.github.com/repos/JabRef/jabref/issues/1989"},"comments":{"href":"https://api.github.com/repos/JabRef/jabref/issues/1989/comments"},"review_comments":{"href":"https://api.github.com/repos/JabRef/jabref/pulls/1989/comments"},"review_comment":{"href":"https://api.github.com/repos/JabRef/jabref/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/JabRef/jabref/pulls/1989/commits"},"statuses":{"href":"https://api.github.com/repos/JabRef/jabref/statuses/be4ecdb28e3bdb486fd533c9d76dc899f33412a7"}}}}
{"actor":{"display_login":"Siedlerchr"}}