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 lombok.EqualsAndHashCode;
36  
37  /**
38   * Check if a Github JSON object actually exists on the server.
39   *
40   * @author Mihai Andronache (amihaiemil@gmail.com)
41   * @version $Id: 901a3bc26b9c334a895d229a5aa19927b3f73970 $
42   * @since 0.38
43   */
44  @Immutable
45  @Loggable(Loggable.DEBUG)
46  @EqualsAndHashCode(of = "readable")
47  final class Existence {
48  
49      /**
50       * Checked object.
51       */
52      private final transient JsonReadable readable;
53  
54      /**
55       * Ctor.
56       * @param rdbl Checked object.
57       */
58      Existence(final JsonReadable rdbl) {
59          this.readable = rdbl;
60      }
61  
62      /**
63       * Check existence.
64       * @return True if exists, false otherwise.
65       * @throws IOException If there is a networking problem.
66       */
67      public boolean check() throws IOException {
68          boolean exists = true;
69          try {
70              this.readable.json();
71          } catch (final AssertionError ex) {
72              exists = false;
73          } catch (final IndexOutOfBoundsException ex) {
74              exists = false;
75          }
76          return exists;
77      }
78  
79  }