View Javadoc
1   /**
2    * Copyright (c) 2013-2023, jcabi.com
3    * All rights reserved.
4    *
5    * Redistribution and use in source and binary forms, with or without
6    * modification, are permitted provided that the following conditions
7    * are met: 1) Redistributions of source code must retain the above
8    * copyright notice, this list of conditions and the following
9    * disclaimer. 2) Redistributions in binary form must reproduce the above
10   * copyright notice, this list of conditions and the following
11   * disclaimer in the documentation and/or other materials provided
12   * with the distribution. 3) Neither the name of the jcabi.com nor
13   * the names of its contributors may be used to endorse or promote
14   * products derived from this software without specific prior written
15   * permission.
16   *
17   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
19   * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20   * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
21   * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
22   * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
28   * OF THE POSSIBILITY OF SUCH DAMAGE.
29   */
30  package com.jcabi.github;
31  
32  import com.jcabi.aspects.Immutable;
33  import com.jcabi.aspects.Loggable;
34  import java.io.IOException;
35  import java.net.URL;
36  import javax.json.JsonObject;
37  import lombok.EqualsAndHashCode;
38  import lombok.ToString;
39  
40  /**
41   * Github fork.
42   *
43   * @author Carlos Miranda (miranda.cma@gmail.com)
44   * @version $Id: dd5d85f9377472b8bd4a2e9ec64d6ec64e45d340 $
45   * @since 0.8
46   * @see <a href="https://developer.github.com/v3/repos/forks/">Forks API</a>
47   */
48  @Immutable
49  @SuppressWarnings("PMD.TooManyMethods")
50  public interface Fork extends JsonReadable, JsonPatchable {
51      /**
52       * Fork id.
53       * @return Id
54       */
55      int number();
56  
57      /**
58       * Smart Fork with extra features.
59       */
60      @Immutable
61      @ToString
62      @Loggable(Loggable.DEBUG)
63      @EqualsAndHashCode(of = { "fork", "jsn" })
64      final class Smart implements Fork {
65          /**
66           * Encapsulated Fork.
67           */
68          private final transient Fork fork;
69          /**
70           * SmartJson object for convenient JSON parsing.
71           */
72          private final transient SmartJson jsn;
73          /**
74           * Public ctor.
75           * @param frk Fork
76           */
77          public Smart(final Fork frk) {
78              this.fork = frk;
79              this.jsn = new SmartJson(frk);
80          }
81  
82          /**
83           * Get its name.
84           * @return Name of fork
85           * @throws java.io.IOException If there is any I/O problem
86           */
87          public String name() throws IOException {
88              return this.jsn.text("name");
89          }
90  
91          /**
92           * Get its organization.
93           * @return Organization
94           * @throws java.io.IOException If there is any I/O problem
95           */
96          public String organization() throws IOException {
97              return this.jsn.text("organization");
98          }
99  
100         /**
101          * Get its URL.
102          * @return URL of fork
103          * @throws IOException If there is any I/O problem
104          */
105         public URL url() throws IOException {
106             return new URL(this.jsn.text("url"));
107         }
108 
109         /**
110          * Get its full name.
111          * @return Full name of fork
112          * @throws java.io.IOException If there is any I/O problem
113          */
114         public String fullName() throws IOException {
115             return this.jsn.text("full_name");
116         }
117 
118         /**
119          * Get its description.
120          * @return Description of fork
121          * @throws java.io.IOException If there is any I/O problem
122          */
123         public String description() throws IOException {
124             return this.jsn.text("description");
125         }
126 
127         /**
128          * Get its html url.
129          * @return Html url of fork
130          * @throws IOException If there is any I/O problem
131          */
132         public URL htmlUrl() throws IOException {
133             return new URL(this.jsn.text("html_url"));
134         }
135 
136         /**
137          * Get its clone url.
138          * @return Clone url of fork
139          * @throws IOException If there is any I/O problem
140          */
141         public URL cloneUrl() throws IOException {
142             return new URL(this.jsn.text("clone_url"));
143         }
144 
145         /**
146          * Get its git url.
147          * @return Git url of fork
148          * @throws IOException If there is any I/O problem
149          */
150         public String gitUrl() throws IOException {
151             return this.jsn.text("git_url");
152         }
153 
154         /**
155          * Get its ssh url.
156          * @return Ssh url of fork
157          * @throws IOException If there is any I/O problem
158          */
159         public String sshUrl() throws IOException {
160             return this.jsn.text("ssh_url");
161         }
162 
163         /**
164          * Get its svn url.
165          * @return Svn url of fork
166          * @throws IOException If there is any I/O problem
167          */
168         public URL svnUrl() throws IOException {
169             return new URL(this.jsn.text("svn_url"));
170         }
171 
172         /**
173          * Get its mirror url.
174          * @return Mirror url of fork
175          * @throws IOException If there is any I/O problem
176          */
177         public String mirrorUrl() throws IOException {
178             return this.jsn.text("mirror_url");
179         }
180 
181         /**
182          * Get its home page.
183          * @return Url of home page of fork
184          * @throws IOException If there is any I/O problem
185          */
186         public URL homeUrl() throws IOException {
187             return new URL(this.jsn.text("homepage"));
188         }
189 
190         /**
191          * Get its forks count.
192          * @return Forks count of fork
193          * @throws IOException If there is any I/O problem
194          */
195         public int forks() throws IOException {
196             return this.jsn.number("forks_count");
197         }
198 
199         /**
200          * Get its stargazers count.
201          * @return Stargazers count of fork
202          * @throws IOException If there is any I/O problem
203          */
204         public int stargazers() throws IOException {
205             return this.jsn.number("stargazers_count");
206         }
207 
208         /**
209          * Get its watchers count.
210          * @return Watchers count of fork
211          * @throws IOException If there is any I/O problem
212          */
213         public int watchers() throws IOException {
214             return this.jsn.number("watchers_count");
215         }
216 
217         /**
218          * Get its size.
219          * @return Size of fork
220          * @throws IOException If there is any I/O problem
221          */
222         public int size() throws IOException {
223             return this.jsn.number("size");
224         }
225 
226         /**
227          * Get its default branch.
228          * @return Default branch
229          * @throws java.io.IOException If there is any I/O problem
230          */
231         public String defaultBranch() throws IOException {
232             return this.jsn.text("default_branch");
233         }
234 
235         /**
236          * Get its open issues count.
237          * @return Size of fork
238          * @throws IOException If there is any I/O problem
239          */
240         public int openIssues() throws IOException {
241             return this.jsn.number("open_issues_count");
242         }
243 
244         @Override
245         public int number() {
246             return this.fork.number();
247         }
248 
249         @Override
250         public JsonObject json() throws IOException {
251             return this.fork.json();
252         }
253 
254         @Override
255         public void patch(final JsonObject json) throws IOException {
256             this.fork.patch(json);
257         }
258     }
259 }