package com.ericsson.ma.jbl.midwsv.midwsv.internal.action;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
public class CustomLogger {
static CustomLogger logger;
Object logger_object;
public static CustomLogger getLogger(Class clazz){
File file = new File("/var/sog/logs/pm/log4j/");
if(file.exists()){
File[] files = file.listFiles();
if(files!=null && files.length>0){
try {
URLClassLoader loader = loadJar(files,clazz);
Class c = loader.loadClass("org.apache.log4j.Logger");
Object logger_object = c.getMethod("getLogger", Class.class).invoke(null, clazz);
Class c1 = loader.loadClass("org.apache.log4j.xml.DOMConfigurator");
File log4j_xml = new File("/var/sog/logs/pm/log4j/log4j.xml");
if(log4j_xml.exists()){
c1.getMethod("configure", String.class).invoke(null, "/var/sog/logs/pm/log4j/log4j.xml");
}
logger = new CustomLogger();
logger.logger_object = logger_object;
return logger;
} catch (Exception e) {
e.printStackTrace();
}
}
}
return new CustomLogger();
}
public void debug(String message){
if(logger_object!=null){
try{
logger_object.getClass().getMethod("debug", Object.class).invoke(logger_object, message);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void debug(Document doc){
if(logger_object!=null){
try{
String xml = tranferFromDom2String(doc);
logger_object.getClass().getMethod("debug", Object.class).invoke(logger_object, xml);
} catch (Exception e) {
e.printStackTrace();
}
}
}
private String tranferFromDom2String(Document doc) throws Exception{
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
StreamResult result = new StreamResult(bos);
transformer.transform(new DOMSource(doc), result);
String xml = bos.toString();
bos.close();
return xml;
}
public void info(Object message){
if(logger_object!=null){
try{
logger_object.getClass().getMethod("info", Object.class).invoke(logger_object, message);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void warn(Object message){
if(logger_object!=null){
try{
logger_object.getClass().getMethod("warn", Object.class).invoke(logger_object, message);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void error(Object message){
if(logger_object!=null){
try{
logger_object.getClass().getMethod("error", Object.class).invoke(logger_object, message);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static URLClassLoader loadJar(File[] fileArray,Class clazz) throws Exception{
URL[] urlarray = new URL[fileArray.length];
int i=0;
for(File f : fileArray){
URL url = f.toURI().toURL();
urlarray[i]=url;
i++;
}
URLClassLoader loader = new URLClassLoader(urlarray, clazz.getClassLoader());
//loader.loadClass("org.apache.log4j.net.JMSSink");
for(File f : fileArray){
if(f.getName().equals(".jar")){
JarFile jarfile = new JarFile(f);
Enumeration<JarEntry> jarEntry = jarfile.entries();
while(jarEntry.hasMoreElements()){
JarEntry je = jarEntry.nextElement();
if(je.getName().endsWith(".class")){
//System.out.println(je.getName());
String classpath = je.getName().replaceAll("/", ".").replaceAll(".class", "");
if(!classpath.equals("org.apache.log4j.net.JMSSink")){
continue;
}else if(!classpath.equals("javax/mail/Authenticator".replace("/", "."))){
continue;
}
loader.loadClass(classpath);
}
}
}else{
//loader.getResource(name)
}
}
return loader;
}
/**
* @param args
*/
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}