diff options
Diffstat (limited to 'simple/simple-http/src/test/java/org/simpleframework/http/socket/table/WebSocketTableRow.java')
-rw-r--r-- | simple/simple-http/src/test/java/org/simpleframework/http/socket/table/WebSocketTableRow.java | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/simple/simple-http/src/test/java/org/simpleframework/http/socket/table/WebSocketTableRow.java b/simple/simple-http/src/test/java/org/simpleframework/http/socket/table/WebSocketTableRow.java new file mode 100644 index 0000000..bb8a6db --- /dev/null +++ b/simple/simple-http/src/test/java/org/simpleframework/http/socket/table/WebSocketTableRow.java @@ -0,0 +1,84 @@ +package org.simpleframework.http.socket.table; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +public class WebSocketTableRow { + + private final Map<String, WebSocketTableCell> cells; + private final WebSocketValueEncoder encoder; + private final WebSocketTableSchema schema; + private final int index; + + public WebSocketTableRow(WebSocketTableSchema schema, int index) { + this.cells = new ConcurrentHashMap<String, WebSocketTableCell>(); + this.encoder = new WebSocketValueEncoder(); + this.index = index; + this.schema = schema; + } + + public int getIndex(){ + return index; + } + + public void setValue(String column, String value){ + WebSocketTableCell cell = getValue(column); + + if(cell == null) { + WebSocketTableCell newCell = new WebSocketTableCell(column, value); + List<String> columns = schema.columnNames(); + boolean match = false; + for(String name : columns) { + if(name.equals(column)) { + match = true; + } + } + if(!match) { + throw new IllegalStateException("Could not find " + column + " in schema"); + } + cells.put(column, newCell); + } else { + String previous = cell.getValue(); + + if(previous != null && !previous.equals(value)) { + WebSocketTableCell replaceCell = new WebSocketTableCell(column, value); + cells.put(column, replaceCell); + } + } + } + + public WebSocketTableCell getValue(String column) { + return cells.get(column); + } + + public String calculateChange(long lastUpdateDone) { + StringBuilder builder = new StringBuilder(); + builder.append(index); + builder.append(":"); + String delim = ""; + int count = 0; + List<String> columns = schema.columnNames(); + for(int i = 0; i < columns.size(); i++){ + String column = columns.get(i); + WebSocketTableCell cell = cells.get(column); + if(cell != null) { + long cellChanged = cell.getTimeStamp(); + long difference = cellChanged - lastUpdateDone; + + if(difference > 0) { // positive means change happened later than update + builder.append(delim); + builder.append(i); + builder.append("="); + builder.append(cell.getValue()); + count++; + delim = ","; + } + } + } + if(count <= 0) { + return ""; + } + return builder.toString(); + } +} |