<mavenAssemblyPluginVersion>2.4.1</mavenAssemblyPluginVersion>
<mavenReleasePluginVersion>2.5.3</mavenReleasePluginVersion>
<mavenPluginToolsVersion>3.4</mavenPluginToolsVersion>
+ <mavenReportsPluginVersion>2.8.1</mavenReportsPluginVersion>
+ <mavenFindBugsPluginVersion>3.0.4</mavenFindBugsPluginVersion>
<wagonWebDavVersion>2.7</wagonWebDavVersion>
<issueComponentId>10012</issueComponentId>
<issueKey>LIB</issueKey>
- <issueNumber>2</issueNumber>
+ <issueNumber>5</issueNumber>
</properties>
<dependencies>
</plugins>
</build>
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-project-info-reports-plugin</artifactId>
+ <version>${mavenReportsPluginVersion}</version>
+ <configuration>
+ <dependencyLocationsEnabled>false</dependencyLocationsEnabled>
+ </configuration>
+ <reportSets>
+ <reportSet>
+ <reports>
+ <report>index</report>
+ <report>summary</report>
+ <report>dependency-info</report>
+ <report>project-team</report>
+ <report>scm</report>
+ <report>dependency-management</report>
+ <report>dependencies</report>
+ <report>plugin-management</report>
+ <report>plugins</report>
+ <report>distribution-management</report>
+ </reports>
+ </reportSet>
+ </reportSets>
+ </plugin>
+ </plugins>
+ </reporting>
+
<profiles>
<profile>
<id>jar-with-dependencies</id>
</plugins>
</build>
</profile>
+ <profile>
+ <id>reporting</id>
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-project-info-reports-plugin</artifactId>
+ <version>${mavenReportsPluginVersion}</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <notimestamp>true</notimestamp>
+ <quiet>true</quiet>
+ <sourceFileExcludes>
+ <exclude>org//hedgecode/snooker/cache/assign/*.java</exclude>
+ <exclude>org//hedgecode/snooker/compare/*.java</exclude>
+ <exclude>org//hedgecode/snooker/gson/*.java</exclude>
+ <exclude>org//hedgecode/snooker/json/*.java</exclude>
+ <exclude>org//hedgecode/snooker/request/*.java</exclude>
+ </sourceFileExcludes>
+ </configuration>
+ <reportSets>
+ <reportSet>
+ <id>default</id>
+ <reports>
+ <report>javadoc</report>
+ </reports>
+ </reportSet>
+ </reportSets>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>findbugs-maven-plugin</artifactId>
+ <version>${mavenFindBugsPluginVersion}</version>
+ </plugin>
+ </plugins>
+ </reporting>
+ </profile>
</profiles>
</project>
package org.hedgecode.snooker;
+import java.text.DateFormat;
import java.text.SimpleDateFormat;
import org.hedgecode.snooker.api.APIException;
private static final String UPCOMING_EVENTS = " Upcoming Snooker Events: ";
private static final String INDENT = " ";
- private static SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd.MM.yyyy");
+ private static final String DATE_FORMAT = "dd.MM.yyyy";
private static final int UPCOMING_COUNT = 5;
}
private static void printEvent(Event event) {
+ final DateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);
System.out.println(
INDENT + event.name()
- + " [" + DATE_FORMAT.format(event.startDate())
- + " - " + DATE_FORMAT.format(event.endDate()) + "]"
+ + " [" + dateFormat.format(event.startDate())
+ + " - " + dateFormat.format(event.endDate()) + "]"
+ " (" + event.country() + ", " + event.city() + ")"
);
}
package org.hedgecode.snooker.api;
+import java.io.Serializable;
import java.util.Calendar;
import java.util.LinkedHashMap;
import java.util.Map;
*
* @author Dmitry Samoshin aka gotty
*/
-public class Season {
+public class Season implements Serializable {
private static final Calendar CURRENT_CALENDAR = Calendar.getInstance();
? CURRENT_CALENDAR.get(Calendar.YEAR)
: CURRENT_CALENDAR.get(Calendar.YEAR) - 1;
- private static final int ALL_SEASONS = -1;
+ public static final int ALL_SEASONS = -1;
public static final Season ALL = new Season(ALL_SEASONS);
public static final Season CURRENT_SEASON = new Season(CURRENT_YEAR);
- public static Map<Integer, Season> SEASONS = new LinkedHashMap<>();
+ private static final Map<Integer, Season> SEASONS = new LinkedHashMap<>();
static {
for (int year = BEGIN_YEAR; year < CURRENT_YEAR; ++year) {
package org.hedgecode.snooker.compare;
+import java.io.Serializable;
import java.util.Comparator;
import org.hedgecode.snooker.api.Event;
return comparator;
}
- static class DateComparator implements Comparator<Event> {
+ static class DateComparator implements Comparator<Event>, Serializable {
@Override
public int compare(Event event1, Event event2) {
}
- static class SnookerIdComparator implements Comparator<Event> {
+ static class SnookerIdComparator implements Comparator<Event>, Serializable {
@Override
public int compare(Event event1, Event event2) {
package org.hedgecode.snooker.compare;
+import java.io.Serializable;
import java.util.Comparator;
import org.hedgecode.snooker.api.Match;
return comparator;
}
- static class RoundNumberComparator implements Comparator<Match> {
+ static class RoundNumberComparator implements Comparator<Match>, Serializable {
@Override
public int compare(Match match1, Match match2) {
}
- static class EventComparator implements Comparator<Match> {
+ static class EventComparator implements Comparator<Match>, Serializable {
@Override
public int compare(Match match1, Match match2) {
package org.hedgecode.snooker.compare;
+import java.io.Serializable;
import java.util.Comparator;
import org.hedgecode.snooker.api.Player;
return comparator;
}
- static class NameComparator implements Comparator<Player> {
+ static class NameComparator implements Comparator<Player>, Serializable {
@Override
public int compare(Player player1, Player player2) {
}
- static class AgeComparator implements Comparator<Player> {
+ static class AgeComparator implements Comparator<Player>, Serializable {
@Override
public int compare(Player player1, Player player2) {
package org.hedgecode.snooker.compare;
+import java.io.Serializable;
import java.util.Comparator;
import org.hedgecode.snooker.api.Ranking;
return comparator;
}
- static class PositionComparator implements Comparator<Ranking> {
+ static class PositionComparator implements Comparator<Ranking>, Serializable {
@Override
public int compare(Ranking ranking1, Ranking ranking2) {
}
- static class SumComparator implements Comparator<Ranking> {
+ static class SumComparator implements Comparator<Ranking>, Serializable {
@Override
public int compare(Ranking ranking1, Ranking ranking2) {
package org.hedgecode.snooker.json;
+import java.io.Serializable;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
* @author Dmitry Samoshin aka gotty
*/
public abstract class JsonCollectionEntity<E extends IdEntity>
- implements CollectionEntity<E>, JsonSerializable
+ implements CollectionEntity<E>, Serializable
{
private final Map<Integer, E> entities = new LinkedHashMap<>();
protected JsonCollectionEntity(E[] entities) {
for (E entity : entities) {
if (entity != null)
- this.entities.put(entity.getId(), entity);
+ this.entities.put(
+ entity.getId(), entity
+ );
}
}
protected JsonCollectionEntity(List<E> entities) {
for (E entity : entities) {
- this.entities.put(entity.getId(), entity);
+ this.entities.put(
+ entity.getId(), entity
+ );
}
}
@SerializedName("PreviousEdition")
private int previousEdition;
+ protected JsonEvent() {
+ }
+
@Override
public int eventId() {
return eventId;
@Override
public Date startDate() {
- return startDate;
+ return startDate == null
+ ? null
+ : new Date(startDate.getTime());
}
@Override
public Date endDate() {
- return endDate;
+ return endDate == null
+ ? null
+ : new Date(endDate.getTime());
}
@Override
package org.hedgecode.snooker.json;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Date;
import java.util.List;
import org.hedgecode.snooker.api.Event;
*/
public class JsonEvents extends JsonCollectionEntity<Event> implements Events {
+ private static final JsonEvents EMPTY = new JsonEvents(new Event[0]);
+
protected JsonEvents(Event[] entities) {
super(entities);
}
for (Event event : this)
if (event.season().equals(season))
events.add(event);
- return events.isEmpty() ? null : new JsonEvents(events);
+ return events.isEmpty() ? EMPTY : new JsonEvents(events);
}
@Override
for (Event event : this)
if (event.type().equals(type))
events.add(event);
- return events.isEmpty() ? null : new JsonEvents(events);
+ return events.isEmpty() ? EMPTY : new JsonEvents(events);
}
@Override
for (Event event : this)
if (event.city().equals(city))
events.add(event);
- return events.isEmpty() ? null : new JsonEvents(events);
+ return events.isEmpty() ? EMPTY : new JsonEvents(events);
}
@Override
for (Event event : this)
if (event.country().equals(country))
events.add(event);
- return events.isEmpty() ? null : new JsonEvents(events);
+ return events.isEmpty() ? EMPTY : new JsonEvents(events);
}
@Override
for (Event event : this)
if (event.sex().equals(sex))
events.add(event);
- return events.isEmpty() ? null : new JsonEvents(events);
+ return events.isEmpty() ? EMPTY : new JsonEvents(events);
}
@Override
for (Event event : this)
if (event.stage().equals(stage))
events.add(event);
- return events.isEmpty() ? null : new JsonEvents(events);
+ return events.isEmpty() ? EMPTY : new JsonEvents(events);
}
@Override
for (Event event : this)
if (event.valueType().equals(valueType))
events.add(event);
- return events.isEmpty() ? null : new JsonEvents(events);
+ return events.isEmpty() ? EMPTY : new JsonEvents(events);
}
@Override
for (Event event : this)
if (event.worldSnookerId() == worldSnookerId)
events.add(event);
- return events.isEmpty() ? null : new JsonEvents(events);
+ return events.isEmpty() ? EMPTY : new JsonEvents(events);
}
@Override
List<Event> events = new ArrayList<>();
long currentTime = System.currentTimeMillis();
for (Event event : this)
- if (event.endDate().getTime() < currentTime)
+ if (currentTime > nextDate(event.endDate()).getTime())
events.add(event);
- return events.isEmpty() ? null : new JsonEvents(events);
+ return events.isEmpty() ? EMPTY : new JsonEvents(events);
}
@Override
List<Event> events = new ArrayList<>();
long currentTime = System.currentTimeMillis();
for (Event event : this)
- if (event.startDate().getTime() < currentTime
- && event.endDate().getTime() > currentTime)
+ if (currentTime > event.startDate().getTime()
+ && currentTime < nextDate(event.endDate()).getTime())
events.add(event);
- return events.isEmpty() ? null : new JsonEvents(events);
+ return events.isEmpty() ? EMPTY : new JsonEvents(events);
}
@Override
List<Event> events = new ArrayList<>();
long currentTime = System.currentTimeMillis();
for (Event event : this)
- if (event.startDate().getTime() > currentTime)
+ if (currentTime < event.startDate().getTime())
events.add(event);
- return events.isEmpty() ? null : new JsonEvents(events);
+ return events.isEmpty() ? EMPTY : new JsonEvents(events);
}
@Override
);
}
+ private Date nextDate(Date date) {
+ Calendar c = Calendar.getInstance();
+ c.setTime(date);
+ c.add(Calendar.DATE, 1);
+ return c.getTime();
+ }
+
}
package org.hedgecode.snooker.json;
+import java.io.Serializable;
+
import org.hedgecode.snooker.api.IdEntity;
/**
*
* @author Dmitry Samoshin aka gotty
*/
-public abstract class JsonIdEntity implements IdEntity, JsonSerializable {
+public abstract class JsonIdEntity implements IdEntity, Serializable {
@Override
public boolean equals(Object obj) {
@SerializedName("ExtendedNote")
private String extendedNote;
+ protected JsonMatch() {
+ }
+
@Override
public int matchId() {
return matchId;
@Override
public Date initDate() {
- return initDate;
+ return initDate == null
+ ? null
+ : new Date(initDate.getTime());
}
@Override
public Date modDate() {
- return modDate;
+ return modDate == null
+ ? null
+ : new Date(modDate.getTime());
}
@Override
public Date startDate() {
- return startDate;
+ return startDate == null
+ ? null
+ : new Date(startDate.getTime());
}
@Override
public Date endDate() {
- return endDate;
+ return endDate == null
+ ? null
+ : new Date(endDate.getTime());
}
@Override
public Date scheduledDate() {
- return scheduledDate;
+ return scheduledDate == null
+ ? null
+ : new Date(scheduledDate.getTime());
}
@Override
*/
public class JsonMatches extends JsonCollectionEntity<Match> implements Matches {
+ private static final JsonMatches EMPTY = new JsonMatches(new Match[0]);
+
protected JsonMatches(Match[] entities) {
super(entities);
}
for (Match match : this)
if (match.eventId() == eventId)
matches.add(match);
- return matches.isEmpty() ? null : new JsonMatches(matches);
+ return matches.isEmpty() ? EMPTY : new JsonMatches(matches);
}
@Override
for (Match match : this)
if (match.eventId() == eventId && match.round() == round)
matches.add(match);
- return matches.isEmpty() ? null : new JsonMatches(matches);
+ return matches.isEmpty() ? EMPTY : new JsonMatches(matches);
}
@Override
for (Match match : this)
if (match.player1Id() == playerId || match.player2Id() == playerId)
matches.add(match);
- return matches.isEmpty() ? null : new JsonMatches(matches);
+ return matches.isEmpty() ? EMPTY : new JsonMatches(matches);
}
@Override
for (Match match : this)
if (match.endDate() != null)
matches.add(match);
- return matches.isEmpty() ? null : new JsonMatches(matches);
+ return matches.isEmpty() ? EMPTY : new JsonMatches(matches);
}
@Override
for (Match match : this)
if (match.startDate() != null && match.endDate() == null)
matches.add(match);
- return matches.isEmpty() ? null : new JsonMatches(matches);
+ return matches.isEmpty() ? EMPTY : new JsonMatches(matches);
}
@Override
for (Match match : this)
if (match.startDate() == null)
matches.add(match);
- return matches.isEmpty() ? null : new JsonMatches(matches);
+ return matches.isEmpty() ? EMPTY : new JsonMatches(matches);
}
@Override
*/
public class JsonOngoingMatch extends JsonMatch implements OngoingMatch {
+ protected JsonOngoingMatch() {
+ }
+
}
@SerializedName("Info")
private String info;
+ protected JsonPlayer() {
+ }
+
@Override
public int playerId() {
return playerId;
@Override
public Date born() {
- return born;
+ return born == null
+ ? null
+ : new Date(born.getTime());
}
@Override
*/
public class JsonPlayers extends JsonCollectionEntity<Player> implements Players {
+ private static final JsonPlayers EMPTY = new JsonPlayers(new Player[0]);
+
protected JsonPlayers(Player[] entities) {
super(entities);
}
for (Player player : this)
if (player.type() == type)
players.add(player);
- return players.isEmpty() ? null : new JsonPlayers(players);
+ return players.isEmpty() ? EMPTY : new JsonPlayers(players);
}
@Override
for (Player player : this)
if (player.shortName().contains(name))
players.add(player);
- return players.isEmpty() ? null : new JsonPlayers(players);
+ return players.isEmpty() ? EMPTY : new JsonPlayers(players);
}
@Override
for (Player player : this)
if (player.nationality().equals(nationality))
players.add(player);
- return players.isEmpty() ? null : new JsonPlayers(players);
+ return players.isEmpty() ? EMPTY : new JsonPlayers(players);
}
@Override
for (Player player : this)
if (player.nationality().equals(sex))
players.add(player);
- return players.isEmpty() ? null : new JsonPlayers(players);
+ return players.isEmpty() ? EMPTY : new JsonPlayers(players);
}
@Override
@Expose
private RankingType rankingType;
+ protected JsonRanking() {
+ }
+
@Override
public int rankingId() {
return rankingId;
*/
public class JsonRankings extends JsonCollectionEntity<Ranking> implements Rankings {
+ private static final JsonRankings EMPTY = new JsonRankings(new Ranking[0]);
+
protected JsonRankings(Ranking[] entities) {
super(entities);
}
for (Ranking ranking : this)
if (ranking.sum() >= minSum && ranking.sum() <= maxSum)
rankings.add(ranking);
- return rankings.isEmpty() ? null : new JsonRankings(rankings);
+ return rankings.isEmpty() ? EMPTY : new JsonRankings(rankings);
}
@Override
RankingComparators.SUM.comparator()
);
}
+
}
+++ /dev/null
-/*
- * Copyright (c) 2017. Developed by Hedgecode.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.hedgecode.snooker.json;
-
-import java.io.Serializable;
-
-/**
- * Dummy Interface to Serializable Objects.
- *
- * @author Dmitry Samoshin aka gotty
- */
-public interface JsonSerializable extends Serializable {
-
-}
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
/**
* Abstract Data Requester from the portal api.snooker.org.
public abstract class AbstractRequester implements Requester {
protected static final String API_SNOOKER_URL = "http://api.snooker.org/";
+ protected static final Charset API_SNOOKER_CHARSET = StandardCharsets.UTF_8;
protected abstract String getRequestUrl(int id) throws RequestException;
URLConnection urlConnection = url.openConnection();
BufferedReader br = new BufferedReader(
new InputStreamReader(
- urlConnection.getInputStream()
+ urlConnection.getInputStream(), API_SNOOKER_CHARSET
)
);
String inputLine;
case SEASON_EVENTS:
this.season = season;
break;
+ default:
}
}