package org.apache.wicket.persistence.provider;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.wicket.util.io.IOUtils;
import org.jabox.environment.Environment;
import org.jabox.model.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.thoughtworks.xstream.XStream;
public class UserXstreamDao {
private static final Logger LOGGER = LoggerFactory
.getLogger(UserXstreamDao.class);
private static XStream getXStream() {
XStream xstream = new XStream();
xstream.alias("user", User.class);
return xstream;
}
public static void persist(User user) {
XStream xstream = getXStream();
String xml = xstream.toXML(user);
try {
File usersDir = Environment.getUsersDir();
File file = new File(usersDir, user.getLogin() + ".xml");
FileWriter writer = new FileWriter(file);
writer.write(xml);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static List<User> getUsers() {
ArrayList<User> users = new ArrayList<User>();
File usersDir = Environment.getUsersDir();
String[] children = usersDir.list();
if (children == null) {
// Either dir does not exist or is not a directory
} else {
for (int i = 0; i < children.length; i++) {
// Get filename of file or directory
String filename = children[i];
String login = filename.replaceAll(".xml$", "");
users.add(getUser(login));
}
}
return users;
}
public static User getUser(String login) {
XStream xstream = getXStream();
File usersDir = Environment.getUsersDir();
File file = new File(usersDir, login + ".xml");
FileInputStream is = null;
try {
is = new FileInputStream(file);
User user = (User) xstream.fromXML(is);
return user;
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally {
if (is!= null)
IOUtils.closeQuietly(is);
}
return null;
}
public static void deleteUser(User user) {
File file =
new File(Environment.getUsersDir(), user.getLogin() + ".xml");
file.delete();
LOGGER.info("User \"" + user.getLogin() + "\" deleted");
}
}