Skip to content

Commit

Permalink
Use a circular buffer for storing the log. Display start/stop log mes…
Browse files Browse the repository at this point in the history
…sages.
  • Loading branch information
mbogoevici committed Jun 7, 2012
1 parent d87b4ad commit 26ac070
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 20 deletions.
@@ -1,7 +1,5 @@
package org.jboss.jdf.example.ticketmonster.monitor.client.local;

import static com.google.gwt.user.client.ui.HasHorizontalAlignment.ALIGN_RIGHT;

import java.util.List;

import javax.enterprise.event.Observes;
Expand All @@ -14,12 +12,11 @@
import org.jboss.jdf.example.ticketmonster.model.Booking;
import org.jboss.jdf.example.ticketmonster.monitor.client.shared.BookingMonitorService;
import org.jboss.jdf.example.ticketmonster.monitor.client.shared.BotService;
import org.jboss.jdf.example.ticketmonster.monitor.client.shared.qualifier.BotCreated;
import org.jboss.jdf.example.ticketmonster.monitor.client.shared.qualifier.BotMessage;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
Expand Down Expand Up @@ -116,7 +113,7 @@ public void callback(Void response) {


stop.setStyleName("btn", true);
stop.setStyleName("btn-danger",true);
stop.setStyleName("btn-danger", true);

deleteAll.addClickHandler(new ClickHandler() {

Expand All @@ -133,7 +130,7 @@ public void callback(Void response) {
});

deleteAll.setStyleName("btn", true);
deleteAll.setStyleName("btn-danger",true);
deleteAll.setStyleName("btn-danger", true);

controls.add(start);
controls.add(stop);
Expand Down Expand Up @@ -176,7 +173,7 @@ private void updateLog(String append) {
*
* @param booking the create booking
*/
public void onLogUpdated(@Observes @BotCreated String append) {
public void onLogUpdated(@Observes @BotMessage String append) {
updateLog(append);
}

Expand Down
Expand Up @@ -16,6 +16,6 @@
@Target({ TYPE, METHOD, PARAMETER, FIELD })
@Retention(RUNTIME)
@Documented
public @interface BotCreated {
public @interface BotMessage {

}
@@ -1,6 +1,5 @@
package org.jboss.jdf.example.ticketmonster.service;

import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
Expand All @@ -20,7 +19,7 @@
import org.jboss.jdf.example.ticketmonster.model.Performance;
import org.jboss.jdf.example.ticketmonster.model.Show;
import org.jboss.jdf.example.ticketmonster.model.TicketPrice;
import org.jboss.jdf.example.ticketmonster.monitor.client.shared.qualifier.BotCreated;
import org.jboss.jdf.example.ticketmonster.monitor.client.shared.qualifier.BotMessage;
import org.jboss.jdf.example.ticketmonster.rest.BookingRequest;
import org.jboss.jdf.example.ticketmonster.rest.BookingService;
import org.jboss.jdf.example.ticketmonster.rest.ShowService;
Expand Down Expand Up @@ -49,17 +48,25 @@ public class Bot {
@Inject
private BookingService bookingService;

@Inject @BotCreated
@Inject @BotMessage
Event<String> event;

@Resource
private TimerService timerService;

public Timer start() {
String startMessage = new StringBuilder("==========================\n")
.append("Bot started at ").append(new Date().toString()).append("\n")
.toString();
event.fire(startMessage);
return timerService.createIntervalTimer(0, DURATION, new TimerConfig(null, false));
}

public void stop(Timer timer) {
String startMessage = new StringBuilder("==========================\n")
.append("Bot stopped at ").append(new Date().toString()).append("\n")
.toString();
event.fire(startMessage);
timer.cancel();
}

Expand Down
@@ -1,8 +1,6 @@
package org.jboss.jdf.example.ticketmonster.service;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
import java.util.logging.Logger;

import javax.ejb.Timer;
Expand All @@ -14,8 +12,9 @@
import org.jboss.errai.bus.server.annotations.Service;
import org.jboss.jdf.example.ticketmonster.model.Booking;
import org.jboss.jdf.example.ticketmonster.monitor.client.shared.BotService;
import org.jboss.jdf.example.ticketmonster.monitor.client.shared.qualifier.BotCreated;
import org.jboss.jdf.example.ticketmonster.monitor.client.shared.qualifier.BotMessage;
import org.jboss.jdf.example.ticketmonster.rest.BookingService;
import org.jboss.jdf.example.ticketmonster.util.CircularBuffer;
import org.jboss.jdf.example.ticketmonster.util.MultivaluedHashMap;

/**
Expand All @@ -30,7 +29,9 @@
@Service
public class BotServiceImpl implements BotService {

private List<String> log;
private static final int MAX_LOG_SIZE = 50;

private CircularBuffer<String> log;

@Inject
private Bot bot;
Expand All @@ -41,13 +42,13 @@ public class BotServiceImpl implements BotService {
@Inject
private Logger logger;

@Inject @BotCreated
@Inject @BotMessage
private Event<String> event;

private Timer timer;

public BotServiceImpl() {
log = new ArrayList<String>();
log = new CircularBuffer<String>(MAX_LOG_SIZE);
}

@Override
Expand Down Expand Up @@ -79,13 +80,13 @@ public void deleteAll() {
}
}

public void newBookingRequest(@Observes @BotCreated String bookingRequest) {
public void newBookingRequest(@Observes @BotMessage String bookingRequest) {
log.add(bookingRequest);
}

@Override
public List<String> fetchLog() {
return log;
return log.getContents();
}

}
@@ -0,0 +1,37 @@
package org.jboss.jdf.example.ticketmonster.util;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class CircularBuffer<T> {

private List<T> buffer;

private volatile int cursor = 0;

private final int capacity;

public CircularBuffer(int capacity) {
buffer = Collections.synchronizedList(new ArrayList<T>());
this.capacity = capacity;
}

public void add(T item) {
synchronized (buffer) {
buffer.add (cursor++,item);
}
}

public List<T> getContents() {
synchronized (buffer) {
if (cursor > capacity) {
List<T> returnedItems = buffer.subList(cursor % capacity, capacity);
returnedItems.addAll(buffer.subList(0, cursor % capacity));
return returnedItems;
} else {
return buffer.subList(0, cursor);
}
}
}
}

0 comments on commit 26ac070

Please sign in to comment.