summaryrefslogtreecommitdiffstats
path: root/simple/simple-http/src/test/java/org/simpleframework/http/socket/table/WebSocketTable.java
blob: d6cd401188d8dfa372c2a2b6857f16e11a10e132 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
package org.simpleframework.http.socket.table;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class WebSocketTable {
   
   private final List<WebSocketTableRow> rows;
   private final WebSocketTableRowAnnotator annotator;
   private final WebSocketTableSchema schema;
   private final String key;
   
   public WebSocketTable(String key, WebSocketTableSchema schema, WebSocketTableRowAnnotator annotator) {
      this.rows = new LinkedList<WebSocketTableRow>();
      this.annotator = annotator;
      this.schema = schema;
      this.key = key;
   }   
   
   public String getKey(){
      return key;
   }
   
   public WebSocketTableSchema getSchema(){
      return schema;
   }
   
   public int getRows(){
      return rows.size();
   }

   public WebSocketTableRow updateRow(int index, String value) {
      Map<String, String> map = new HashMap<String, String>();
      String[] cells = value.split(",");
      for(String cell : cells){
         String[] pair = cell.split("=");
         map.put(pair[0], pair[1]);
      }
      return updateRow(index, map);
      
   }
   
   public WebSocketTableRow updateRow(int index, Map<String, String> data) {    
      WebSocketTableRow row = rows.get(index);
      if(row != null) {
         Set<String> columns = data.keySet();
         for(String column : columns) {
            if(!schema.validColumn(column)) {
               throw new IllegalArgumentException("Schema does not match row " + data);
            }
               
         }
         for(String column : columns){
            String value = data.get(column);
            WebSocketTableCell tableCell = row.getValue(column);
            
            if(tableCell == null) {
               row.setValue(column, value);
            } else {
               if(!tableCell.getValue().equals(value)) {
                  row.setValue(column, value);
               }
            }
         }
      }
      return row;
   }
   
   public WebSocketTableRow addRow(String value) {
      Map<String, String> map = new HashMap<String, String>();
      String[] cells = value.split(",");
      for(String cell : cells){
         String[] pair = cell.split("=");
         map.put(pair[0], pair[1]);
      }
      return addRow(map);
      
   }
   
   public WebSocketTableRow addRow(Map<String, String> data) {
      Set<String> columns = data.keySet();
      for(String column : columns) {
         if(!schema.validColumn(column)) {
            throw new IllegalArgumentException("Schema does not match row " + data);
         }            
      }
      int length = rows.size();
      WebSocketTableRow row = new WebSocketTableRow(schema, length);
      for(String column : columns){
         String value = data.get(column);
         row.setValue(column, value);
      }
      rows.add(row);
      return row;
   }
   
   public WebSocketTableRow getRow(int row) {
      int size = rows.size();
      
      if(row < size) {
         return rows.get(row);
      }
      return null;
   }
   
   public String calculateHighlight(long since) {
      StringBuilder builder = new StringBuilder();
      String delim = "";
      int size = rows.size();
      
      for(int i = 0; i < size; i++) {
         WebSocketTableRow row = rows.get(i);
         long time = since;         
         String text = annotator.calculateHighlight(row, time);
         
         if(text != null && text.length() > 0) {
            builder.append(delim);
            builder.append(text);
            delim = "|";            
         }         
      }
      return builder.toString();
   }
   
   public String calculateChange(long since) {
      StringBuilder builder = new StringBuilder();
      String delim = "";
      int size = rows.size();
      
      for(int i = 0; i < size; i++) {
         WebSocketTableRow row = rows.get(i);
         long time = since;         
         String text = row.calculateChange(time);
         
         if(text != null && text.length() > 0) {
            builder.append(delim);
            builder.append(text);
            delim = "|";            
         }         
      }
      return builder.toString();
   }   
   
   public void clearTable() {
      rows.clear();
   }
}