package com.cxy.redisclient.service;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import com.cxy.redisclient.domain.Favorite;
import com.cxy.redisclient.integration.ConfigFile;
public class FavoriteService {
public int add(int id, String name, String favorite) {
try {
int fid = Integer.parseInt(ConfigFile
.readMaxId(ConfigFile.FAVORITE_MAXID)) + 1;
ConfigFile.write(ConfigFile.FAVORITE + fid, favorite);
ConfigFile.write(ConfigFile.FAVORITE_NAME + fid, name);
ConfigFile.write(ConfigFile.FAVORITE_SERVER + fid,
String.valueOf(id));
ConfigFile.write(ConfigFile.FAVORITE_MAXID, String.valueOf(fid));
return fid;
} catch (IOException e) {
throw new RuntimeException(e.getLocalizedMessage());
}
}
public void delete(int fid) {
try {
ConfigFile.delete(ConfigFile.FAVORITE + fid);
ConfigFile.delete(ConfigFile.FAVORITE_SERVER + fid);
} catch (IOException e) {
throw new RuntimeException(e.getLocalizedMessage());
}
}
public Favorite listById(int fid) {
try {
Favorite favorite = null;
if (ConfigFile.read(ConfigFile.FAVORITE + fid) != null)
favorite = new Favorite(fid, Integer.parseInt(ConfigFile
.read(ConfigFile.FAVORITE_SERVER + fid)),
ConfigFile.read(ConfigFile.FAVORITE_NAME + fid),
ConfigFile.read(ConfigFile.FAVORITE + fid));
return favorite;
} catch (IOException e) {
throw new RuntimeException(e.getLocalizedMessage());
}
}
public List<Favorite> listAll() {
try {
int amount = Integer.parseInt(ConfigFile
.readMaxId(ConfigFile.FAVORITE_MAXID));
List<Favorite> favorites = new ArrayList<Favorite>();
for (int i = 1; i <= amount; i++) {
Favorite favorite = listById(i);
if (favorite != null)
favorites.add(favorite);
}
return favorites;
} catch (IOException e) {
throw new RuntimeException(e.getLocalizedMessage());
}
}
public void updateList(List<Favorite> favorites) {
List<Favorite> allFavorite = listAll();
for (Favorite favorite : allFavorite) {
Favorite newFavorite = find(favorite.getFid(), favorites);
if (newFavorite == null)
delete(favorite.getFid());
else {
if (!favorite.getName().equals(newFavorite.getName()))
updateName(favorite.getFid(), newFavorite.getName());
}
}
}
private Favorite find(int fid, List<Favorite> favorites) {
for (Favorite favorite : favorites) {
if (favorite.getFid() == fid)
return favorite;
}
return null;
}
public void updateName(int fid, String name) {
try {
ConfigFile.write(ConfigFile.FAVORITE_NAME + fid, name);
} catch (IOException e) {
throw new RuntimeException(e.getLocalizedMessage());
}
}
}