View Javadoc
1   /*-
2    * #%L
3    * io.earcam.instrumental.module.jpms
4    * %%
5    * Copyright (C) 2018 earcam
6    * %%
7    * SPDX-License-Identifier: (BSD-3-Clause OR EPL-1.0 OR Apache-2.0 OR MIT)
8    * 
9    * You <b>must</b> choose to accept, in full - any individual or combination of 
10   * the following licenses:
11   * <ul>
12   * 	<li><a href="https://opensource.org/licenses/BSD-3-Clause">BSD-3-Clause</a></li>
13   * 	<li><a href="https://www.eclipse.org/legal/epl-v10.html">EPL-1.0</a></li>
14   * 	<li><a href="https://www.apache.org/licenses/LICENSE-2.0">Apache-2.0</a></li>
15   * 	<li><a href="https://opensource.org/licenses/MIT">MIT</a></li>
16   * </ul>
17   * #L%
18   */
19  package io.earcam.instrumental.module.jpms;
20  
21  import static io.earcam.instrumental.module.jpms.ExportModifier.MANDATED;
22  
23  import java.io.Serializable;
24  import java.util.Arrays;
25  import java.util.Objects;
26  import java.util.Set;
27  
28  import javax.annotation.concurrent.Immutable;
29  
30  /**
31   * <p>
32   * Export class.
33   * </p>
34   *
35   */
36  @Immutable
37  public class Export implements Serializable {
38  
39  	private static final long serialVersionUID = -4919749651818958350L;
40  	private static final transient String[] NO_MODULES = new String[0];
41  	private final String paquet;
42  	private final int access;
43  	private final String[] modules;
44  
45  
46  	/**
47  	 * <p>
48  	 * Constructor for Export.
49  	 * </p>
50  	 *
51  	 * @param paquet a {@link java.lang.String} object.
52  	 * @param modules a {@link java.lang.String} object.
53  	 */
54  	public Export(String paquet, String... modules)
55  	{
56  		this(paquet, MANDATED.access(), modules);
57  	}
58  
59  
60  	/**
61  	 * <p>
62  	 * Constructor for Export.
63  	 * </p>
64  	 *
65  	 * @param paquet a {@link java.lang.String} object.
66  	 * @param access a int.
67  	 * @param modules a {@link java.lang.String} object.
68  	 */
69  	public Export(String paquet, int access, String... modules)
70  	{
71  		this.paquet = paquet;
72  		this.access = access;
73  		this.modules = (modules == null) ? NO_MODULES : Arrays.copyOf(modules, modules.length);
74  	}
75  
76  
77  	@Override
78  	public boolean equals(Object other)
79  	{
80  		return other instanceof Export && equals((Export) other);
81  	}
82  
83  
84  	/**
85  	 * <p>
86  	 * equals.
87  	 * </p>
88  	 *
89  	 * @param that a {@link io.earcam.instrumental.module.jpms.Export} object.
90  	 * @return a boolean.
91  	 */
92  	public boolean equals(Export that)
93  	{
94  		return that != null
95  				&& Objects.equals(that.paquet(), paquet)
96  				&& that.access() == access
97  				&& Arrays.equals(that.modules(), modules);
98  	}
99  
100 
101 	@Override
102 	public int hashCode()
103 	{
104 		return Objects.hash(paquet, access, Arrays.hashCode(modules));
105 	}
106 
107 
108 	/**
109 	 * <p>
110 	 * paquet.
111 	 * </p>
112 	 *
113 	 * @return a {@link java.lang.String} object.
114 	 */
115 	public String paquet()
116 	{
117 		return paquet;
118 	}
119 
120 
121 	/**
122 	 * <p>
123 	 * access.
124 	 * </p>
125 	 *
126 	 * @return a int.
127 	 */
128 	public int access()
129 	{
130 		return access;
131 	}
132 
133 
134 	/**
135 	 * <p>
136 	 * modifiers.
137 	 * </p>
138 	 *
139 	 * @return a {@link java.util.Set} object.
140 	 */
141 	public Set<ExportModifier> modifiers()
142 	{
143 		return Access.modifiers(ExportModifier.class, access());
144 	}
145 
146 
147 	/**
148 	 * <p>
149 	 * modules.
150 	 * </p>
151 	 *
152 	 * @return an array of {@link java.lang.String} objects.
153 	 */
154 	public String[] modules()
155 	{
156 		return modules;
157 	}
158 }