package ch.rakudave.jnetmap.util;
import net.xeoh.plugins.base.util.PluginManagerUtil;
import ch.rakudave.jnetmap.controller.Controller;
import ch.rakudave.jnetmap.model.Connection;
import ch.rakudave.jnetmap.model.Map;
import ch.rakudave.jnetmap.model.MapListener;
import ch.rakudave.jnetmap.model.IF.LogicalIF;
import ch.rakudave.jnetmap.model.IF.NetworkIF;
import ch.rakudave.jnetmap.model.IF.PhysicalIF;
import ch.rakudave.jnetmap.model.IF.TransparentIF;
import ch.rakudave.jnetmap.model.device.Device;
import ch.rakudave.jnetmap.model.device.DeviceListener;
import ch.rakudave.jnetmap.net.status.IsReachable;
import ch.rakudave.jnetmap.net.status.NativePing;
import ch.rakudave.jnetmap.net.status.OpenSocket;
import ch.rakudave.jnetmap.net.status.PingMethod;
import ch.rakudave.jnetmap.plugins.Plugin;
import ch.rakudave.jnetmap.util.logging.Logger;
import com.thoughtworks.xstream.XStream;
/**
* @author rakudave
*/
public class XStreamHelper {
/**
* @return XStream-Object with all relevant class-mappings
*/
public static XStream getXStream() {
XStream xs = new XStream();
xs.processAnnotations(Map.class);
xs.processAnnotations(MapListener.class);
xs.processAnnotations(Connection.class);
xs.processAnnotations(Device.class);
xs.processAnnotations(DeviceListener.class);
xs.processAnnotations(NetworkIF.class);
xs.processAnnotations(PhysicalIF.class);
xs.processAnnotations(LogicalIF.class);
xs.processAnnotations(TransparentIF.class);
xs.processAnnotations(PingMethod.class);
xs.processAnnotations(IsReachable.class);
xs.processAnnotations(NativePing.class);
xs.processAnnotations(OpenSocket.class);
for (Plugin p : new PluginManagerUtil(Controller.pm).getPlugins(Plugin.class)) {
try {
xs.processAnnotations(p.getClass());
} catch (Exception e) {
Logger.warn("Unable to process xs-annotations for" + p.getPluginName());
}
}
return xs;
}
}