[LIB-10] SerialVersionUID for Serializable classes
[snooker-score-api.git] / src / main / java / org / hedgecode / snooker / json / JsonPlayer.java
1 /*
2  * Copyright (c) 2017-2020. Developed by Hedgecode.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package org.hedgecode.snooker.json;
18
19 import java.io.Serializable;
20 import java.net.URL;
21 import java.util.Date;
22
23 import com.google.gson.annotations.Expose;
24 import com.google.gson.annotations.SerializedName;
25
26 import org.hedgecode.snooker.SnookerURLUtils;
27 import org.hedgecode.snooker.annotation.IsURL;
28 import org.hedgecode.snooker.api.APIException;
29 import org.hedgecode.snooker.api.Player;
30 import org.hedgecode.snooker.api.PlayerImage;
31
32 /**
33  * Player Entity to JSON deserialize.
34  *
35  * @author Dmitry Samoshin aka gotty
36  */
37 public class JsonPlayer extends JsonIdEntity implements Player, Serializable {
38
39     private static final long serialVersionUID = 5978347071162091429L;
40
41     @SerializedName("ID")
42     private int playerId;
43     @SerializedName("Type")
44     private int type;
45     @SerializedName("FirstName")
46     private String firstName;
47     @SerializedName("MiddleName")
48     private String middleName;
49     @SerializedName("LastName")
50     private String lastName;
51     @SerializedName("TeamName")
52     private String teamName;
53     @SerializedName("TeamNumber")
54     private int teamNumber;
55     @SerializedName("TeamSeason")
56     private int teamSeason;
57     @SerializedName("ShortName")
58     private String shortName;
59     @Expose
60     private String fullName;
61     @SerializedName("Nationality")
62     private String nationality;
63     @SerializedName("Sex")
64     private String sex;
65     @IsURL
66     @SerializedName("BioPage")
67     private String bioPage;
68     @SerializedName("Born")
69     private Date born;
70     @SerializedName("Twitter")
71     private String twitter;
72     @SerializedName("SurnameFirst")
73     private boolean surnameFirst;
74     @SerializedName("License")
75     private String license;
76     @SerializedName("Club")
77     private String club;
78     @IsURL
79     @SerializedName("URL")
80     private String url;
81     @IsURL
82     @SerializedName("Photo")
83     private String photo;
84     @Expose
85     private PlayerImage image;
86     @IsURL
87     @SerializedName("PhotoSource")
88     private String photoSource;
89     @SerializedName("FirstSeasonAsPro")
90     private int firstSeasonAsPro;
91     @SerializedName("LastSeasonAsPro")
92     private int lastSeasonAsPro;
93     @SerializedName("Info")
94     private String info;
95
96     JsonPlayer() {
97     }
98
99     @Override
100     public int playerId() {
101         return playerId;
102     }
103
104     @Override
105     public int type() {
106         return type;
107     }
108
109     @Override
110     public String firstName() {
111         return firstName;
112     }
113
114     @Override
115     public String middleName() {
116         return middleName;
117     }
118
119     @Override
120     public String lastName() {
121         return lastName;
122     }
123
124     @Override
125     public String teamName() {
126         return teamName;
127     }
128
129     @Override
130     public int teamNumber() {
131         return teamNumber;
132     }
133
134     @Override
135     public int teamSeason() {
136         return teamSeason;
137     }
138
139     @Override
140     public String shortName() {
141         return shortName;
142     }
143
144     @Override
145     public String fullName() {
146         if (fullName == null) {
147             fullName = String.format(
148                     "%s %s %s",
149                     surnameFirst ? lastName : firstName,
150                     middleName,
151                     surnameFirst ? firstName : lastName
152             ).replaceAll("\\s+", " ").trim();
153         }
154         return fullName;
155     }
156
157     @Override
158     public String nationality() {
159         return nationality;
160     }
161
162     @Override
163     public String sex() {
164         return sex;
165     }
166
167     @Override
168     public String bioPage() {
169         return bioPage;
170     }
171
172     @Override
173     public Date born() {
174         return born == null
175                 ? null
176                 : new Date(born.getTime());
177     }
178
179     @Override
180     public String twitter() {
181         return twitter;
182     }
183
184     @IsURL
185     @Override
186     public String twitterUrl() {
187         return SnookerURLUtils.twitterUrl(twitter);
188     }
189
190     @Override
191     public boolean surnameFirst() {
192         return surnameFirst;
193     }
194
195     @Override
196     public String license() {
197         return license;
198     }
199
200     @Override
201     public String club() {
202         return club;
203     }
204
205     @Override
206     public String url() {
207         return url;
208     }
209
210     @Override
211     public String photo() {
212         return photo;
213     }
214
215     @Override
216     public PlayerImage image() throws APIException {
217         if (image == null) {
218             URL imageUrl = SnookerURLUtils.assignUrl(photo);
219             if (imageUrl != null) {
220                 image = new PlayerImage(imageUrl, false);
221             }
222         }
223         return image;
224     }
225
226     @Override
227     public String photoSource() {
228         return photoSource;
229     }
230
231     @Override
232     public int firstSeasonAsPro() {
233         return firstSeasonAsPro;
234     }
235
236     @Override
237     public int lastSeasonAsPro() {
238         return lastSeasonAsPro;
239     }
240
241     @Override
242     public String info() {
243         return info;
244     }
245
246     @Override
247     public int getId() {
248         return playerId;
249     }
250
251 }