package org.apache.wicket.persistence.provider;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import org.apache.wicket.util.io.IOUtils;
import org.jabox.apis.ConnectorConfig;
import org.jabox.environment.Environment;
import org.jabox.model.Server;
import com.thoughtworks.xstream.XStream;
public class ServerXstreamDao {
private static XStream getXStream() {
XStream xstream = new XStream();
xstream.alias("server", Server.class);
return xstream;
}
public static void persist(ConnectorConfig config) {
XStream xstream = getXStream();
String xml = xstream.toXML(config);
try {
File dir = Environment.getServersDir();
File file =
new File(dir, config.getServer().getName() + ".xml");
FileWriter writer = new FileWriter(file);
try{
writer.write(xml);
} finally {
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static List<ConnectorConfig> getServers(
Class<? extends ConnectorConfig> clas) {
ArrayList<ConnectorConfig> servers =
new ArrayList<ConnectorConfig>();
File dir = Environment.getServersDir();
String[] children = dir.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 name = filename.replaceAll(".xml$", "");
ConnectorConfig server = getServer(name);
// Just add the Servers of the specific Class
if (clas.isAssignableFrom(server.getClass())) {
servers.add(server);
}
}
}
return servers;
}
public static ConnectorConfig getServer(String name) {
XStream xstream = getXStream();
File dir = Environment.getServersDir();
File file = new File(dir, name + ".xml");
FileInputStream is = null;
try {
is = new FileInputStream(file);
ConnectorConfig server = (ConnectorConfig) xstream.fromXML(is);
return server;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (is != null)
IOUtils.closeQuietly(is);
}
return null;
}
public static boolean deleteServer(Server server) {
File file =
new File(Environment.getServersDir(), server.getName()
+ ".xml");
return file.delete();
}
}