package fi.arcusys.koku.palvelukanava.palvelut.appender;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Properties;
import java.util.Scanner;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import javax.xml.namespace.QName;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.spi.LoggingEvent;
import com.ixonos.loggingserviceclient.LoggingServiceException_Exception;
import com.ixonos.loggingserviceclient.WSLoggingService;
import com.ixonos.loggingserviceclient.WSLoggingServiceService;
public class KuntaITAppender extends AppenderSkeleton {
private static final String PROPERTY_FILE_NAME = "loggingservice.properties";
private static final String WSDL_LOCATION_PROPERTY_NAME = "loggingServiceWSDLLocation";
private static final String SERVICE_NAME_PROPERTY_NAME = "loggingServiceName";
private static Log log = LogFactory.getLog(KuntaITAppender.class);
private Properties properties;
public KuntaITAppender() throws IOException {
this.properties = loadProperties(PROPERTY_FILE_NAME);
}
public boolean requiresLayout(){
return true;
}
protected void append(LoggingEvent event)
{
String message = (String)event.getMessage();
Scanner scanner = new Scanner(message);
scanner.useDelimiter(" ");
String logMessage = null;
String customerId= null;
String applicationId= null;
String userId= null;
String action= "";
String time= null;
try {
while (scanner.hasNext()) {
logMessage = scanner.next();
if (logMessage.equals("loggingservice")) {
customerId = scanner.next();
applicationId = scanner.next();
userId = scanner.next();
Scanner actionScanner = new Scanner(scanner.next());
actionScanner.useDelimiter("_");
while (actionScanner.hasNext()) {
action+=actionScanner.next()+" ";
}
time = scanner.next();
URL wsdlLocation = new URL(properties.get(WSDL_LOCATION_PROPERTY_NAME).toString());
QName serviceName = new QName(properties.get(SERVICE_NAME_PROPERTY_NAME).toString());
WSLoggingServiceService service = new WSLoggingServiceService(wsdlLocation, serviceName);
WSLoggingService port = service.getWSLoggingServicePort();
Calendar cal = Calendar.getInstance();
Date d = cal.getTime();
GregorianCalendar c = new GregorianCalendar();
c.setTime(d);
XMLGregorianCalendar date2 = null;
try {
date2 = DatatypeFactory.newInstance().newXMLGregorianCalendar(time);
} catch (DatatypeConfigurationException e)
{
//
}
try {
port.addLogEntry(customerId, applicationId, userId, action, date2);
} catch (LoggingServiceException_Exception e) {
log.debug(e.toString());
}
} else {break;}
}
} catch (Exception e) {
log.error(e);
}
}
private static Properties loadProperties(String propertyFileName) throws IOException {
InputStream in = KuntaITAppender.class.getResourceAsStream(propertyFileName);
Properties properties = new Properties();
properties.load(in);
return properties;
}
public void close() {
}
}