{"action":"created","comment":{"url":"https://api.github.com/repos/ua-eas/kfs/pulls/comments/60656857","id":60656857,"diff_hunk":"@@ -0,0 +1,698 @@\n+package edu.arizona.kfs.vnd.service.impl;\r\n+\r\n+import java.io.File;\r\n+import java.io.FileOutputStream;\r\n+import java.io.IOException;\r\n+import java.sql.Timestamp;\r\n+import java.text.SimpleDateFormat;\r\n+import java.util.ArrayList;\r\n+import java.util.Collection;\r\n+import java.util.Date;\r\n+import java.util.HashMap;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.regex.Pattern;\r\n+\r\n+import org.apache.commons.lang.StringUtils;\r\n+import org.apache.commons.lang.time.DateUtils;\r\n+import org.apache.log4j.Logger;\r\n+import org.kuali.kfs.sys.context.SpringContext;\r\n+import org.kuali.kfs.vnd.businessobject.VendorAddress;\r\n+import org.kuali.kfs.vnd.businessobject.VendorDetail;\r\n+import org.kuali.kfs.vnd.document.service.VendorService;\r\n+import org.kuali.rice.core.api.CoreConstants;\r\n+import org.kuali.rice.core.api.search.SearchOperator;\r\n+import org.kuali.rice.core.api.util.type.KualiDecimal;\r\n+import org.kuali.rice.core.api.util.type.KualiInteger;\r\n+import org.kuali.rice.core.framework.persistence.ojb.conversion.OjbCharBooleanConversion;\r\n+import org.kuali.rice.kew.api.KEWPropertyConstants;\r\n+import org.kuali.rice.kew.api.KewApiConstants;\r\n+import org.kuali.rice.kew.api.exception.WorkflowException;\r\n+import org.kuali.rice.kew.doctype.bo.DocumentType;\r\n+import org.kuali.rice.kew.impl.KewImplConstants;\r\n+import org.kuali.rice.kew.routeheader.DocumentRouteHeaderValue;\r\n+import org.kuali.rice.krad.bo.Note;\r\n+import org.kuali.rice.krad.bo.PersistableBusinessObject;\r\n+import org.kuali.rice.krad.maintenance.MaintenanceDocument;\r\n+import org.kuali.rice.krad.service.BusinessObjectService;\r\n+import org.kuali.rice.krad.service.DocumentService;\r\n+import org.kuali.rice.krad.service.LookupService;\r\n+import org.kuali.rice.krad.util.GlobalVariables;\r\n+import org.kuali.rice.krad.util.KRADConstants;\r\n+import org.kuali.rice.krad.util.KRADPropertyConstants;\r\n+import org.springframework.transaction.annotation.Transactional;\r\n+\r\n+import edu.arizona.kfs.sys.KFSConstants;\r\n+import edu.arizona.kfs.sys.KFSPropertyConstants;\r\n+import edu.arizona.kfs.sys.businessobject.BatchFileUploads;\r\n+import edu.arizona.kfs.vnd.VendorConstants;\r\n+import edu.arizona.kfs.vnd.VendorPropertyConstants;\r\n+import edu.arizona.kfs.vnd.businessobject.VendorDetailExtension;\r\n+import edu.arizona.kfs.vnd.service.EcustomsFileService;\r\n+import edu.arizona.kfs.vnd.service.EcustomsService;\r\n+\r\n+/**\r\n+ * UAF-66 MOD-PA7000-02 ECustoms - US Export Compliance\r\n+ *\r\n+ * New service is to perform the batch job steps for validating vendor compliance with US Export Controls.\r\n+ *\r\n+ * @author Adam Kost kosta@email.arizona.edu\r\n+ */\r\n+@Transactional\r\n+public class EcustomsServiceImpl implements EcustomsService {\r\n+\r\n+    private static final Logger LOG = Logger.getLogger(EcustomsServiceImpl.class);\r\n+    private static final Pattern INVALID_CHARACTERS = Pattern.compile(\"[^A-Za-z0-9.\\\\-\\\\ ]\");\r\n+    private static final Pattern DUPLICATE_WHITESPACE = Pattern.compile(\"\\\\s{2,}\");\r\n+\r\n+    private static transient volatile VendorService vendorService;\r\n+    private static transient volatile DocumentService documentService;\r\n+    private static transient volatile BusinessObjectService businessObjectService;\r\n+    private static transient volatile LookupService lookupService;\r\n+    private static transient volatile EcustomsFileService ecustomsFileService;\r\n+\r\n+    private File dataFile;\r\n+    private File vendorCountFile;\r\n+\r\n+    private String defaultLastRunDate;\r\n+    private String batchFileName;\r\n+    private String batchName;\r\n+\r\n+    public String getDefaultLastRunDate() {\r\n+        return defaultLastRunDate;\r\n+    }\r\n+\r\n+    public void setDefaultLastRunDate(String defaultLastRunDate) {\r\n+        this.defaultLastRunDate = defaultLastRunDate;\r\n+    }\r\n+\r\n+    public String getBatchFileName() {\r\n+        return batchFileName;\r\n+    }\r\n+\r\n+    public void setBatchFileName(String batchFileName) {\r\n+        this.batchFileName = batchFileName;\r\n+    }\r\n+\r\n+    private static VendorService getVendorService() {\r\n+        if (vendorService == null) {\r\n+            vendorService = SpringContext.getBean(VendorService.class);\r\n+        }\r\n+        return vendorService;\r\n+    }\r\n+\r\n+    private static DocumentService getDocumentService() {\r\n+        if (documentService == null) {\r\n+            documentService = SpringContext.getBean(DocumentService.class);\r\n+        }\r\n+        return documentService;\r\n+    }\r\n+\r\n+    private static BusinessObjectService getBusinessObjectService() {\r\n+        if (businessObjectService == null) {\r\n+            businessObjectService = SpringContext.getBean(BusinessObjectService.class);\r\n+        }\r\n+        return businessObjectService;\r\n+    }\r\n+\r\n+    private static LookupService getLookupService() {\r\n+        if (lookupService == null) {\r\n+            lookupService = SpringContext.getBean(LookupService.class);\r\n+        }\r\n+        return lookupService;\r\n+    }\r\n+\r\n+    private static EcustomsFileService getEcustomsFileService() {\r\n+        if (ecustomsFileService == null) {\r\n+            ecustomsFileService = SpringContext.getBean(EcustomsFileService.class);\r\n+        }\r\n+        return ecustomsFileService;\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean createEcustomsDailyFile(String jobName, Date jobRunDate) throws Exception {\r\n+        LOG.debug(\"createEcustomsDailyFile(): jobRunDate=\" + jobRunDate + \", start-time=\" + new Date());\r\n+        boolean processVendorDetails = false;\r\n+        try {\r\n+            boolean deleteOldDailyDone = getEcustomsFileService().deleteOldDailyDoneFiles();\r\n+            LOG.debug(\"getEcustomsFileService().deleteOldDailyDoneFiles() returned \" + deleteOldDailyDone);\r\n+            dataFile = getEcustomsFileService().getDailyBatchDataFile(jobRunDate);\r\n+            vendorCountFile = getEcustomsFileService().getDailyBatchVendorCountFile(jobRunDate);\r\n+            batchName = VendorConstants.ECUSTOMS_BATCH_DAILY;\r\n+            List<VendorDetail> vendorDetails = getDailyVendorDetailList(jobRunDate);\r\n+            processVendorDetails = processVendorDetails(jobRunDate, vendorDetails);\r\n+            getEcustomsFileService().createDailyBatchDoneFile(jobRunDate);\r\n+        } catch (Exception e) {\r\n+            LOG.error(\"Exception: \" + e.getMessage());\r\n+            throw new Exception(e.getMessage());\r\n+        }\r\n+        return processVendorDetails;\r\n+    }\r\n+\r\n+    /**\r\n+     * Processes the list of vendors for output.\r\n+     *\r\n+     * @param jobRunDate\r\n+     *\r\n+     * @param vendorDetails\r\n+     * @return\r\n+     * @throws IOException\r\n+     */\r\n+    private boolean processVendorDetails(Date jobRunDate, List<VendorDetail> vendorDetails) throws IOException {\r\n+        FileOutputStream dataFileStream = new FileOutputStream(dataFile);\r\n+        List<String> outputVendorLineList = new ArrayList<String>();\r\n+//        List<VendorDetailExtension> updatedVDEList = new ArrayList<VendorDetailExtension>();\r\n+//        List<Note> noteList = new ArrayList<Note>();\r\n+\r\n+        for (VendorDetail vendorDetail : vendorDetails) {\r\n+            String vendorLine = generateVendorLine(vendorDetail);\r\n+            if (!outputVendorLineList.contains(vendorLine)) {\r\n+                outputVendorLineList.add(vendorLine);\r\n+                dataFileStream.write(vendorLine.getBytes());\r\n+//                VendorDetailExtension updatedVDE = updateVendorDetailExtension(vendorDetail);\r\n+                updateVendor(vendorDetail);\r\n+//                Note note = createNote(vendorDetail);\r\n+//                updatedVDEList.add(updatedVDE);\r\n+//                noteList.add(note);\r\n+            }\r\n+        }\r\n+//        getBusinessObjectService().save(updatedVDEList);\r\n+//        getBusinessObjectService().save(noteList);\r\n+        dataFileStream.flush();\r\n+        dataFileStream.close();\r","path":"kfs-core/src/main/java/edu/arizona/kfs/vnd/service/impl/EcustomsServiceImpl.java","position":182,"original_position":182,"commit_id":"0b6356cb864c53c8d8cbd2f0895973afa9556836","original_commit_id":"0b6356cb864c53c8d8cbd2f0895973afa9556836","user":{"login":"sskinner","id":3514837,"avatar_url":"https://avatars.githubusercontent.com/u/3514837?v=3","gravatar_id":"","url":"https://api.github.com/users/sskinner","html_url":"https://github.com/sskinner","followers_url":"https://api.github.com/users/sskinner/followers","following_url":"https://api.github.com/users/sskinner/following{/other_user}","gists_url":"https://api.github.com/users/sskinner/gists{/gist_id}","starred_url":"https://api.github.com/users/sskinner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sskinner/subscriptions","organizations_url":"https://api.github.com/users/sskinner/orgs","repos_url":"https://api.github.com/users/sskinner/repos","events_url":"https://api.github.com/users/sskinner/events{/privacy}","received_events_url":"https://api.github.com/users/sskinner/received_events","type":"User","site_admin":false},"body":"dataFileStream needs to be in try/finally to ensure resource gets closed. Do try to minimize what's in all try's, since the compiler will not optimize contents therein.","created_at":"2016-04-21T21:18:01Z","updated_at":"2016-04-21T21:18:01Z","html_url":"https://github.com/ua-eas/kfs/pull/100#discussion_r60656857","pull_request_url":"https://api.github.com/repos/ua-eas/kfs/pulls/100","_links":{"self":{"href":"https://api.github.com/repos/ua-eas/kfs/pulls/comments/60656857"},"html":{"href":"https://github.com/ua-eas/kfs/pull/100#discussion_r60656857"},"pull_request":{"href":"https://api.github.com/repos/ua-eas/kfs/pulls/100"}}},"pull_request":{"url":"https://api.github.com/repos/ua-eas/kfs/pulls/100","id":67265723,"html_url":"https://github.com/ua-eas/kfs/pull/100","diff_url":"https://github.com/ua-eas/kfs/pull/100.diff","patch_url":"https://github.com/ua-eas/kfs/pull/100.patch","issue_url":"https://api.github.com/repos/ua-eas/kfs/issues/100","number":100,"state":"open","locked":false,"title":"UAF-66 / UAF-1971 / UAF-1972 MOD-PA7000-02 US Export Controls Process Update - eCustoms (Step 2)","user":{"login":"adamkost","id":5092117,"avatar_url":"https://avatars.githubusercontent.com/u/5092117?v=3","gravatar_id":"","url":"https://api.github.com/users/adamkost","html_url":"https://github.com/adamkost","followers_url":"https://api.github.com/users/adamkost/followers","following_url":"https://api.github.com/users/adamkost/following{/other_user}","gists_url":"https://api.github.com/users/adamkost/gists{/gist_id}","starred_url":"https://api.github.com/users/adamkost/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adamkost/subscriptions","organizations_url":"https://api.github.com/users/adamkost/orgs","repos_url":"https://api.github.com/users/adamkost/repos","events_url":"https://api.github.com/users/adamkost/events{/privacy}","received_events_url":"https://api.github.com/users/adamkost/received_events","type":"User","site_admin":false},"body":"This is the second step of the modification for MOD-PA7000-02 US Export Controls Process Update - eCustoms, to create the daily batch job of creating a list of vendors that meet one of the following requirements:\r\n1) The vendor is new since the last time the batch job was ran.\r\n2) The vendor's name has changed since the last time the batch job was ran.\r\n3) The vendor's Export Controls Flag is set to No.\r\nIf a vendor meets any of these requirements, it is added to the .data file to be sent\r\n\r\nincluded are:\r\n1) a minor fix discovered for Step 1, which was that the Additional Information tab on the Vendor Inquiry page that contains the Export Controls Flag was showing at the bottom, rather than as the second tab.\r\n2) a mechanism/BO for archiving information about batch jobs that have been run (BatchFileUploads). This table already exists in the database.","created_at":"2016-04-20T22:00:12Z","updated_at":"2016-04-21T21:18:01Z","closed_at":null,"merged_at":null,"merge_commit_sha":"0ff778f1f2865c39f9563f20cacb1d8cdf6b16ce","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/ua-eas/kfs/pulls/100/commits","review_comments_url":"https://api.github.com/repos/ua-eas/kfs/pulls/100/comments","review_comment_url":"https://api.github.com/repos/ua-eas/kfs/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ua-eas/kfs/issues/100/comments","statuses_url":"https://api.github.com/repos/ua-eas/kfs/statuses/0b6356cb864c53c8d8cbd2f0895973afa9556836","head":{"label":"ua-eas:UAF-1971","ref":"UAF-1971","sha":"0b6356cb864c53c8d8cbd2f0895973afa9556836","user":{"login":"ua-eas","id":3485494,"avatar_url":"https://avatars.githubusercontent.com/u/3485494?v=3","gravatar_id":"","url":"https://api.github.com/users/ua-eas","html_url":"https://github.com/ua-eas","followers_url":"https://api.github.com/users/ua-eas/followers","following_url":"https://api.github.com/users/ua-eas/following{/other_user}","gists_url":"https://api.github.com/users/ua-eas/gists{/gist_id}","starred_url":"https://api.github.com/users/ua-eas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ua-eas/subscriptions","organizations_url":"https://api.github.com/users/ua-eas/orgs","repos_url":"https://api.github.com/users/ua-eas/repos","events_url":"https://api.github.com/users/ua-eas/events{/privacy}","received_events_url":"https://api.github.com/users/ua-eas/received_events","type":"Organization","site_admin":false},"repo":{"id":39457535,"name":"kfs","full_name":"ua-eas/kfs","owner":{"login":"ua-eas","id":3485494,"avatar_url":"https://avatars.githubusercontent.com/u/3485494?v=3","gravatar_id":"","url":"https://api.github.com/users/ua-eas","html_url":"https://github.com/ua-eas","followers_url":"https://api.github.com/users/ua-eas/followers","following_url":"https://api.github.com/users/ua-eas/following{/other_user}","gists_url":"https://api.github.com/users/ua-eas/gists{/gist_id}","starred_url":"https://api.github.com/users/ua-eas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ua-eas/subscriptions","organizations_url":"https://api.github.com/users/ua-eas/orgs","repos_url":"https://api.github.com/users/ua-eas/repos","events_url":"https://api.github.com/users/ua-eas/events{/privacy}","received_events_url":"https://api.github.com/users/ua-eas/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ua-eas/kfs","description":"Kuali Financial System","fork":true,"url":"https://api.github.com/repos/ua-eas/kfs","forks_url":"https://api.github.com/repos/ua-eas/kfs/forks","keys_url":"https://api.github.com/repos/ua-eas/kfs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ua-eas/kfs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ua-eas/kfs/teams","hooks_url":"https://api.github.com/repos/ua-eas/kfs/hooks","issue_events_url":"https://api.github.com/repos/ua-eas/kfs/issues/events{/number}","events_url":"https://api.github.com/repos/ua-eas/kfs/events","assignees_url":"https://api.github.com/repos/ua-eas/kfs/assignees{/user}","branches_url":"https://api.github.com/repos/ua-eas/kfs/branches{/branch}","tags_url":"https://api.github.com/repos/ua-eas/kfs/tags","blobs_url":"https://api.github.com/repos/ua-eas/kfs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ua-eas/kfs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ua-eas/kfs/git/refs{/sha}","trees_url":"https://api.github.com/repos/ua-eas/kfs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ua-eas/kfs/statuses/{sha}","languages_url":"https://api.github.com/repos/ua-eas/kfs/languages","stargazers_url":"https://api.github.com/repos/ua-eas/kfs/stargazers","contributors_url":"https://api.github.com/repos/ua-eas/kfs/contributors","subscribers_url":"https://api.github.com/repos/ua-eas/kfs/subscribers","subscription_url":"https://api.github.com/repos/ua-eas/kfs/subscription","commits_url":"https://api.github.com/repos/ua-eas/kfs/commits{/sha}","git_commits_url":"https://api.github.com/repos/ua-eas/kfs/git/commits{/sha}","comments_url":"https://api.github.com/repos/ua-eas/kfs/comments{/number}","issue_comment_url":"https://api.github.com/repos/ua-eas/kfs/issues/comments{/number}","contents_url":"https://api.github.com/repos/ua-eas/kfs/contents/{+path}","compare_url":"https://api.github.com/repos/ua-eas/kfs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ua-eas/kfs/merges","archive_url":"https://api.github.com/repos/ua-eas/kfs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ua-eas/kfs/downloads","issues_url":"https://api.github.com/repos/ua-eas/kfs/issues{/number}","pulls_url":"https://api.github.com/repos/ua-eas/kfs/pulls{/number}","milestones_url":"https://api.github.com/repos/ua-eas/kfs/milestones{/number}","notifications_url":"https://api.github.com/repos/ua-eas/kfs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ua-eas/kfs/labels{/name}","releases_url":"https://api.github.com/repos/ua-eas/kfs/releases{/id}","deployments_url":"https://api.github.com/repos/ua-eas/kfs/deployments","created_at":"2015-07-21T16:41:24Z","updated_at":"2016-02-10T20:21:10Z","pushed_at":"2016-04-21T21:08:21Z","git_url":"git://github.com/ua-eas/kfs.git","ssh_url":"git@github.com:ua-eas/kfs.git","clone_url":"https://github.com/ua-eas/kfs.git","svn_url":"https://github.com/ua-eas/kfs","homepage":null,"size":440809,"stargazers_count":2,"watchers_count":2,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":4,"forks":1,"open_issues":4,"watchers":2,"default_branch":"ua-development"}},"base":{"label":"ua-eas:ua-development","ref":"ua-development","sha":"30e5cbc66a8e79b55094f6651d2bf97a990bb753","user":{"login":"ua-eas","id":3485494,"avatar_url":"https://avatars.githubusercontent.com/u/3485494?v=3","gravatar_id":"","url":"https://api.github.com/users/ua-eas","html_url":"https://github.com/ua-eas","followers_url":"https://api.github.com/users/ua-eas/followers","following_url":"https://api.github.com/users/ua-eas/following{/other_user}","gists_url":"https://api.github.com/users/ua-eas/gists{/gist_id}","starred_url":"https://api.github.com/users/ua-eas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ua-eas/subscriptions","organizations_url":"https://api.github.com/users/ua-eas/orgs","repos_url":"https://api.github.com/users/ua-eas/repos","events_url":"https://api.github.com/users/ua-eas/events{/privacy}","received_events_url":"https://api.github.com/users/ua-eas/received_events","type":"Organization","site_admin":false},"repo":{"id":39457535,"name":"kfs","full_name":"ua-eas/kfs","owner":{"login":"ua-eas","id":3485494,"avatar_url":"https://avatars.githubusercontent.com/u/3485494?v=3","gravatar_id":"","url":"https://api.github.com/users/ua-eas","html_url":"https://github.com/ua-eas","followers_url":"https://api.github.com/users/ua-eas/followers","following_url":"https://api.github.com/users/ua-eas/following{/other_user}","gists_url":"https://api.github.com/users/ua-eas/gists{/gist_id}","starred_url":"https://api.github.com/users/ua-eas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ua-eas/subscriptions","organizations_url":"https://api.github.com/users/ua-eas/orgs","repos_url":"https://api.github.com/users/ua-eas/repos","events_url":"https://api.github.com/users/ua-eas/events{/privacy}","received_events_url":"https://api.github.com/users/ua-eas/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ua-eas/kfs","description":"Kuali Financial System","fork":true,"url":"https://api.github.com/repos/ua-eas/kfs","forks_url":"https://api.github.com/repos/ua-eas/kfs/forks","keys_url":"https://api.github.com/repos/ua-eas/kfs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ua-eas/kfs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ua-eas/kfs/teams","hooks_url":"https://api.github.com/repos/ua-eas/kfs/hooks","issue_events_url":"https://api.github.com/repos/ua-eas/kfs/issues/events{/number}","events_url":"https://api.github.com/repos/ua-eas/kfs/events","assignees_url":"https://api.github.com/repos/ua-eas/kfs/assignees{/user}","branches_url":"https://api.github.com/repos/ua-eas/kfs/branches{/branch}","tags_url":"https://api.github.com/repos/ua-eas/kfs/tags","blobs_url":"https://api.github.com/repos/ua-eas/kfs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ua-eas/kfs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ua-eas/kfs/git/refs{/sha}","trees_url":"https://api.github.com/repos/ua-eas/kfs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ua-eas/kfs/statuses/{sha}","languages_url":"https://api.github.com/repos/ua-eas/kfs/languages","stargazers_url":"https://api.github.com/repos/ua-eas/kfs/stargazers","contributors_url":"https://api.github.com/repos/ua-eas/kfs/contributors","subscribers_url":"https://api.github.com/repos/ua-eas/kfs/subscribers","subscription_url":"https://api.github.com/repos/ua-eas/kfs/subscription","commits_url":"https://api.github.com/repos/ua-eas/kfs/commits{/sha}","git_commits_url":"https://api.github.com/repos/ua-eas/kfs/git/commits{/sha}","comments_url":"https://api.github.com/repos/ua-eas/kfs/comments{/number}","issue_comment_url":"https://api.github.com/repos/ua-eas/kfs/issues/comments{/number}","contents_url":"https://api.github.com/repos/ua-eas/kfs/contents/{+path}","compare_url":"https://api.github.com/repos/ua-eas/kfs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ua-eas/kfs/merges","archive_url":"https://api.github.com/repos/ua-eas/kfs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ua-eas/kfs/downloads","issues_url":"https://api.github.com/repos/ua-eas/kfs/issues{/number}","pulls_url":"https://api.github.com/repos/ua-eas/kfs/pulls{/number}","milestones_url":"https://api.github.com/repos/ua-eas/kfs/milestones{/number}","notifications_url":"https://api.github.com/repos/ua-eas/kfs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ua-eas/kfs/labels{/name}","releases_url":"https://api.github.com/repos/ua-eas/kfs/releases{/id}","deployments_url":"https://api.github.com/repos/ua-eas/kfs/deployments","created_at":"2015-07-21T16:41:24Z","updated_at":"2016-02-10T20:21:10Z","pushed_at":"2016-04-21T21:08:21Z","git_url":"git://github.com/ua-eas/kfs.git","ssh_url":"git@github.com:ua-eas/kfs.git","clone_url":"https://github.com/ua-eas/kfs.git","svn_url":"https://github.com/ua-eas/kfs","homepage":null,"size":440809,"stargazers_count":2,"watchers_count":2,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":4,"forks":1,"open_issues":4,"watchers":2,"default_branch":"ua-development"}},"_links":{"self":{"href":"https://api.github.com/repos/ua-eas/kfs/pulls/100"},"html":{"href":"https://github.com/ua-eas/kfs/pull/100"},"issue":{"href":"https://api.github.com/repos/ua-eas/kfs/issues/100"},"comments":{"href":"https://api.github.com/repos/ua-eas/kfs/issues/100/comments"},"review_comments":{"href":"https://api.github.com/repos/ua-eas/kfs/pulls/100/comments"},"review_comment":{"href":"https://api.github.com/repos/ua-eas/kfs/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ua-eas/kfs/pulls/100/commits"},"statuses":{"href":"https://api.github.com/repos/ua-eas/kfs/statuses/0b6356cb864c53c8d8cbd2f0895973afa9556836"}}}}