package net.billforward.model;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.StringWriter;
import java.net.InetSocketAddress;
import java.util.Date;
import java.util.List;
import java.util.Scanner;
import net.billforward.exception.BillforwardException;
import net.billforward.model.Invoice.InvoiceState;
import net.billforward.model.amendments.Amendment;
import net.billforward.model.amendments.Amendment.AmendmentState;
import net.billforward.model.amendments.ServiceEndAmendment;
import net.billforward.model.notifications.AmendmentNotification;
import net.billforward.model.notifications.FieldChange;
import net.billforward.model.notifications.InvoiceNotification;
import net.billforward.model.notifications.Notification;
import net.billforward.model.notifications.Notification.NotificationAction;
import net.billforward.model.notifications.NotificationHelper;
import net.billforward.model.notifications.Notification.NotificationDomain;
import org.junit.Test;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
public class HttpHandlerTest extends TestBase {
@Test
public void getByState() throws BillforwardException, IOException, InterruptedException {
HttpServer server = HttpServer.create(new InetSocketAddress(8099), 0);
server.createContext("/test", new EchoHandler());
server.setExecutor(null); // creates a default executor
server.start();
Thread.sleep(10000000);
//
// //--Get Invoice by State
// InvoiceState invoiceState = InvoiceState.Unpaid;
//
// Invoice[] invoices = Invoice.getByState(invoiceState);
//
// for(Invoice invoice : invoices) {
// assertEquals(invoiceState, invoice.getState());
// System.out.println(invoice.toString());
// }
}
static class EchoHandler implements HttpHandler {
public void handle(HttpExchange t) throws IOException {
InputStream inputStream = t.getRequestBody();
StringWriter writer = new StringWriter();
String inputStreamString = new Scanner(inputStream,"UTF-8").useDelimiter("\\A").next();
Notification notification = NotificationHelper.parse(inputStreamString.toString());
if(notification instanceof AmendmentNotification) {
AmendmentNotification amendmentNotification = (AmendmentNotification)notification;
Amendment amendment = amendmentNotification.getAmendment();
if(amendment instanceof ServiceEndAmendment) {
ServiceEndAmendment serviceEndAmendment = (ServiceEndAmendment)amendment;
if(amendment.getState().equals(AmendmentState.Succeeded)) {
//Cancel here
Date cancelledTime = serviceEndAmendment.getActionedTime();
System.out.println(cancelledTime);
}
}
}
// List<FieldChange> changes = notification.getAuditFieldChanges();
// for(FieldChange change : changes) {
// if(change.getAttributeName().equals("currentPeriodStart")) {
// System.out.println("currentPeriodStart");
// System.out.println(change.getNewValueAsDate());
// System.out.println(change.getPreviousValueAsDate());
// }
// }
String response = "This is the response";
t.sendResponseHeaders(200, response.length());
OutputStream os = t.getResponseBody();
os.write(response.getBytes());
os.close();
}
}
static class MyHandler implements HttpHandler {
public void handle(HttpExchange t) throws IOException {
InputStream inputStream = t.getRequestBody();
StringWriter writer = new StringWriter();
String inputStreamString = new Scanner(inputStream,"UTF-8").useDelimiter("\\A").next();
System.out.println(inputStreamString.toString());
Notification notification = null;
try {
notification = NotificationHelper.parse(inputStreamString.toString());
} catch(Exception ex) {
return;
}
if(notification.getDomain() == NotificationDomain.Invoice && notification.getAction() == NotificationAction.Pending) {
InvoiceNotification invoiceNotification = (InvoiceNotification)notification;
Invoice invoice = invoiceNotification.getInvoice();
try {
int usage = 10;
invoice.setUsage(usage);
invoice.recalculate(InvoiceState.Unpaid);
} catch (Exception e) {
e.printStackTrace();
}
}
String response = "This is the response";
t.sendResponseHeaders(200, response.length());
OutputStream os = t.getResponseBody();
os.write(response.getBytes());
os.close();
}
}
}