aeds2/tps/fonte/Game.java

490 lines
14 KiB
Java

/**
* @file Game.java
* @author Pedro Costa
* @version 0.1
* @date 2022-09-25
*
* @copyright Copyright (c) 2022
*/
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Locale;
public class Game {
static SimpleDateFormat default_dateFormat = new SimpleDateFormat("MMM/yyyy", Locale.ENGLISH);
private String name, owners, website, developers;
private ArrayList<String> languages, genres;
private Date release_date;
private int app_id, age, dlcs, avg_playtime;
private float price, upvotes;
private boolean windows, mac, linux;
public Game() {
this.name = this.owners = this.website = this.developers = null;
this.languages = new ArrayList<String>();
this.genres = new ArrayList<String>();
this.release_date = null;
this.app_id = this.age = this.dlcs = this.avg_playtime = -1;
this.price = this.upvotes = -1;
this.windows = this.mac = this.linux = false;
}
public Game(String name, String owners, String website, String developers, ArrayList<String> languages,
ArrayList<String> genres, Date release_date, int app_id, int age, int dlcs, int upvotes, int avg_playtime,
float price, boolean windows, boolean mac, boolean linux) {
this.name = name;
this.owners = owners;
this.website = website;
this.developers = developers;
this.languages = languages;
this.genres = genres;
this.release_date = release_date;
this.app_id = app_id;
this.age = age;
this.dlcs = dlcs;
this.upvotes = upvotes;
this.avg_playtime = avg_playtime;
this.price = price;
this.windows = windows;
this.mac = mac;
this.linux = linux;
}
public void setName(String name) {
this.name = name;
}
public void setOwners(String owners) {
this.owners = owners;
}
public void setWebsite(String website) {
this.website = website;
}
public void setDevelopers(String developers) {
this.developers = developers;
}
public void setLanguages(ArrayList<String> languages) {
this.languages = languages;
}
public void setGenres(ArrayList<String> genres) {
this.genres = genres;
}
public void setReleaseDate(Date release_date) {
this.release_date = release_date;
}
public void setAppId(int app_id) {
this.app_id = app_id;
}
public void setAge(int age) {
this.age = age;
}
public void setDlcs(int dlcs) {
this.dlcs = dlcs;
}
public void setAvgPlaytime(int avg_playtime) {
this.avg_playtime = avg_playtime;
}
public void setPrice(float price) {
this.price = price;
}
public void setUpvotes(float upvotes) {
this.upvotes = upvotes;
}
public void setWindows(boolean windows) {
this.windows = windows;
}
public void setMac(boolean mac) {
this.mac = mac;
}
public void setLinux(boolean linux) {
this.linux = linux;
}
public String getName() {
return this.name;
}
public String getOwners() {
return this.owners;
}
public String getWebsite() {
return this.website;
}
public String getDevelopers() {
return this.developers;
}
public ArrayList<String> getLanguages() {
return this.languages;
}
public ArrayList<String> getGenres() {
return this.genres;
}
public Date getReleaseDate() {
return this.release_date;
}
public int getAppId() {
return this.app_id;
}
public int getAge() {
return this.age;
}
public int getDlcs() {
return this.dlcs;
}
public int getAvgPlaytime() {
return this.avg_playtime;
}
public float getPrice() {
return this.price;
}
public float getUpvotes() {
return this.upvotes;
}
public boolean getWindows() {
return this.windows;
}
public boolean getMac() {
return this.mac;
}
public boolean getLinux() {
return this.linux;
}
public Game clone() {
Game cloned = new Game();
cloned.name = this.name;
cloned.owners = this.owners;
cloned.website = this.website;
cloned.developers = this.developers;
cloned.languages = this.languages;
cloned.genres = this.genres;
cloned.release_date = this.release_date;
cloned.app_id = this.app_id;
cloned.age = this.age;
cloned.dlcs = this.dlcs;
cloned.avg_playtime = this.avg_playtime;
cloned.price = this.price;
cloned.upvotes = this.upvotes;
cloned.windows = this.windows;
cloned.mac = this.mac;
cloned.linux = this.linux;
return cloned;
}
public void ler(String line) {
char c_search;
int index = 0, atr_index = 0;
// ---------------------------------- //
// Find "AppID"
while (true) {
index++;
if (line.charAt(index) == ',') {
this.app_id = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Name"
if (line.charAt(atr_index) != ',') {
if (line.charAt(atr_index) == '\"') {
atr_index++;
c_search = '\"';
} else
c_search = ',';
while (true) {
index++;
if (line.charAt(index) == c_search) {
this.name = line.substring(atr_index, index);
if (c_search == ',')
index++;
else if (c_search == '\"')
index += 2;
atr_index = index;
break;
}
}
} else
atr_index = ++index;
// ---------------------------------- //
// Find release date
if (line.charAt(atr_index) != ',') {
SimpleDateFormat df;
if (line.charAt(atr_index) == '\"') {
df = new SimpleDateFormat("MMM dd, yyyy", Locale.ENGLISH);
atr_index++;
c_search = '\"';
} else {
df = new SimpleDateFormat("MMM yyyy", Locale.ENGLISH);
c_search = ',';
}
while (true) {
index++;
if (line.charAt(index) == c_search) {
try {
this.release_date = df.parse(line.substring(atr_index, index));
} catch (java.text.ParseException e) {
e.printStackTrace();
}
if (c_search == ',')
index++;
else if (c_search == '\"')
index += 2;
atr_index = index;
break;
}
}
} else
atr_index = ++index;
// ---------------------------------- //
// Find "Owners"
while (true) {
index++;
if (line.charAt(index) == ',') {
this.owners = line.substring(atr_index, index);
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Age"
while (true) {
index++;
if (line.charAt(index) == ',') {
this.age = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Price"
while (true) {
index++;
if (line.charAt(index) == ',') {
this.price = Float.parseFloat(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "DLCs"
while (true) {
index++;
if (line.charAt(index) == ',') {
this.dlcs = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Languages"
while (true) {
index++;
if (line.charAt(index) == ']') {
index++;
if (line.charAt(index) == ',')
index++;
else if (line.charAt(index) == '\"')
index += 2;
atr_index = index;
break;
} else if (line.charAt(index) == '\'') {
int wordStart = index + 1;
while (true) {
index++;
if (line.charAt(index) == '\'') {
this.languages.add(line.substring(wordStart, index));
break;
}
}
}
}
// ---------------------------------- //
// Find "Website"
if (line.charAt(atr_index) != ',') {
if (line.charAt(atr_index) == '\"') {
atr_index++;
c_search = '\"';
} else
c_search = ',';
while (true) {
index++;
if (line.charAt(index) == c_search) {
this.website = line.substring(atr_index, index);
atr_index = ++index;
break;
}
}
} else
atr_index = ++index;
// ---------------------------------- //
// Find "Windows"
while (true) {
index++;
if (line.charAt(index) == ',') {
this.windows = Boolean.parseBoolean(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// Find "Mac"
while (true) {
index++;
if (line.charAt(index) == ',') {
this.mac = Boolean.parseBoolean(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// Find "Linux"
while (true) {
index++;
if (line.charAt(index) == ',') {
this.linux = Boolean.parseBoolean(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Upvotes"
int positives, negatives;
while (true) {
index++;
if (line.charAt(index) == ',') {
positives = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
while (true) {
index++;
if (line.charAt(index) == ',') {
negatives = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
this.upvotes = (float) (positives * 100) / (float) (positives + negatives);
// ---------------------------------- //
// Find "AVG Playtime"
while (true) {
index++;
if (line.charAt(index) == ',') {
this.avg_playtime = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Developers"
if (line.charAt(atr_index) != ',') {
if (line.charAt(atr_index) == '\"') {
atr_index++;
c_search = '\"';
} else
c_search = ',';
while (true) {
index++;
if (line.charAt(index) == c_search) {
this.developers = line.substring(atr_index, index);
atr_index = ++index;
break;
}
}
} else
atr_index = ++index;
// ---------------------------------- //
// Find "Genres"
if (index < line.length() - 1) {
if (line.charAt(index) == ',')
atr_index = ++index;
if (line.charAt(atr_index) == '\"') {
atr_index++;
while (true) {
index++;
if (line.charAt(index) == ',') {
this.genres.add(line.substring(atr_index, index));
atr_index = ++index;
} else if (line.charAt(index) == '\"') {
this.genres.add(line.substring(atr_index, line.length() - 1));
break;
}
}
} else
this.genres.add(line.substring(atr_index, line.length()));
}
}
public void imprimir() {
String avg_pt = null;
if (this.avg_playtime == 0)
avg_pt = "null ";
else if (this.avg_playtime < 60)
avg_pt = this.avg_playtime + "m ";
else {
if (this.avg_playtime % 60 == 0)
avg_pt = this.avg_playtime / 60 + "h ";
else
avg_pt = (this.avg_playtime / 60) + "h " + (this.avg_playtime % 60) + "m ";
}
DecimalFormat df = new DecimalFormat("##");
System.out.println(this.app_id + " " + this.name + " " + default_dateFormat.format(this.release_date) + " "
+ this.owners + " " + this.age + " " + String.format("%.2f", this.price) + " " + this.dlcs + " "
+ this.languages + " " + this.website + " " + this.windows + " " + this.mac + " " + this.linux + " "
+ (Float.isNaN(this.upvotes) ? "0.0% " : df.format(this.upvotes) + "% ") + avg_pt + this.developers
+ " " + this.genres);
}
}