diff --git a/dataspread-ui/src/Components/Navigation.js b/dataspread-ui/src/Components/Navigation.js index 4f4c9156..65f8048e 100644 --- a/dataspread-ui/src/Components/Navigation.js +++ b/dataspread-ui/src/Components/Navigation.js @@ -1062,6 +1062,8 @@ export default class Navigation extends Component { queryObj.last = lastR; queryObj.conditions = cond; queryObj.values = value; + let childlist = this.computePath(); + queryObj.path = " " + childlist; fetch(this.state.urlPrefix + '/api/' + 'getBrushColorList', { method: "POST", diff --git a/webapp/src/api/controller/NavigationController.java b/webapp/src/api/controller/NavigationController.java index db5b15b1..ff1c2d4b 100644 --- a/webapp/src/api/controller/NavigationController.java +++ b/webapp/src/api/controller/NavigationController.java @@ -241,6 +241,8 @@ public HashMap getBrushColorList(@RequestBody String value) { JSONObject dict = (JSONObject) parser.parse(value); String bookId = (String) dict.get("bookId"); String sheetName = (String) dict.get("sheetName"); + String path = (String) dict.get("path"); + JSONArray first_ls = (JSONArray) dict.get("first"); JSONArray last_ls = (JSONArray) dict.get("last"); JSONArray cond_ls = (JSONArray) dict.get("conditions"); @@ -249,7 +251,8 @@ public HashMap getBrushColorList(@RequestBody String value) { SBook book = BookBindings.getBookById(bookId); SSheet currentSheet = book.getSheetByName(sheetName); - ArrayList indices = new ArrayList(); + + List cellIndices; Model model = currentSheet.getDataModel(); //Todo: when on demand loading available /*for(int i=0;i getBrushColorList(@RequestBody String value) { double queryValue = Double.parseDouble((String) val_ls.get(i)); if(model.navS.isConditionSatisfied(currvalue,(String) cond_ls.get(i),queryValue)) - indices.add(j); + cellIndices.add(j); } }*/ System.out.println("Calling brush color list"); + + int first = (Integer) first_ls.get(0); int last = (Integer) last_ls.get(0); + + //cellIndices = model.navS.getBrushColotList(first,last,val_ls,cond_ls,attrIndex); + + cellIndices = new ArrayList(); for(int j=first;j<=last;j++) { SCell sCell = currentSheet.getCell(j, attrIndex); @@ -280,19 +289,19 @@ public HashMap getBrushColorList(@RequestBody String value) { double queryValue = Double.parseDouble((String) val_ls.get(0)); if (model.navS.isConditionSatisfied(currvalue, (String) cond_ls.get(0), queryValue)) - indices.add(j); + cellIndices.add(j); }catch (Exception e) { String currvalue = String.valueOf(sCell.getValue()); String queryValue = (String) val_ls.get(0); if (model.navS.isConditionSatisfiedStr(currvalue, (String) cond_ls.get(0), queryValue)) - indices.add(j); + cellIndices.add(j); } } - return JsonWrapper.generateJson(indices); + return JsonWrapper.generateJson(cellIndices); } private int[] getIndices(String path) { diff --git a/zssmodel/src/org/zkoss/zss/model/impl/Bucket.java b/zssmodel/src/org/zkoss/zss/model/impl/Bucket.java index 52421b60..fc1dbd87 100644 --- a/zssmodel/src/org/zkoss/zss/model/impl/Bucket.java +++ b/zssmodel/src/org/zkoss/zss/model/impl/Bucket.java @@ -19,6 +19,7 @@ public class Bucket implements Serializable { String summary; ArrayList children; Map aggMem; + Map summaryStat; Bucket() { aggMem = new HashMap<>(); diff --git a/zssmodel/src/org/zkoss/zss/model/impl/NavChartsPrototype.java b/zssmodel/src/org/zkoss/zss/model/impl/NavChartsPrototype.java index 1dc24212..541948b7 100644 --- a/zssmodel/src/org/zkoss/zss/model/impl/NavChartsPrototype.java +++ b/zssmodel/src/org/zkoss/zss/model/impl/NavChartsPrototype.java @@ -78,10 +78,13 @@ private int getChartType(String formulaStr) { - public HashMap summaryStat(int attr, Bucket subGroup) + public Map summaryStat(int attr, Bucket subGroup) { + if(subGroup.summaryStat!=null) + return subGroup.summaryStat; + ArrayList numData = navS.collectDoubleValues(attr, subGroup); - HashMap result = new HashMap(); + Map result = new HashMap<>(); //min, max, average, var, STDDEV // 0, 1, 2, 3, 4 double min = Double.MAX_VALUE; @@ -107,7 +110,7 @@ public HashMap summaryStat(int attr, Bucket subGroup) result.put("AVERAGE",avg/numData.size()); result.put("STDEV",Double.MAX_VALUE); result.put("VAR",Double.MAX_VALUE); - + subGroup.summaryStat = result; return result; } @@ -133,14 +136,14 @@ private void type0Chart(Map obj, int attr, Bucket subGro private void type0Chart(Map obj, int attr, Bucket subGroup, String formula) { obj.put("chartType", 0); List chartData = new ArrayList<>(); - HashMap res = summaryStat(attr,subGroup); + Map res = summaryStat(attr,subGroup); List emptyList = new ArrayList<>(); emptyList.add(""); for (String f : type0Stat) { if(!f.equals("MEDIAN")) { - chartData.add(res.get(f)); - navS.setBucketAggWithMemoization(model,subGroup,attr,f,emptyList,res.get(f)); + chartData.add((Double) res.get(f)); + navS.setBucketAggWithMemoization(model,subGroup,attr,f,emptyList,(Double) res.get(f)); } else if(formula.equals("MEDIAN")) { @@ -177,7 +180,7 @@ private void type2Chart(Map obj, int attr, Bucket subGro NavigationHistogram hist = new NavigationHistogram(navS.collectDoubleValues(attr, subGroup)); hist.formattedOutput(obj, null); - HashMap res = summaryStat(attr,subGroup); + Map res = summaryStat(attr,subGroup); HashMap chartData = (HashMap) obj.get("chartData"); List emptyList = new ArrayList<>(); @@ -186,12 +189,12 @@ private void type2Chart(Map obj, int attr, Bucket subGro if(f.equals("AVERAGE")) { chartData.put(f,res.get(f)); - navS.setBucketAggWithMemoization(model,subGroup,attr,f,emptyList,res.get(f)); + navS.setBucketAggWithMemoization(model,subGroup,attr,f,emptyList,(Double) res.get(f)); } else { Map resMed = navS.getBucketAggWithMemoization(model, subGroup, attr, f, emptyList); - chartData.put(f,(Double) resMed.get("value")); + chartData.put(f,resMed.get("value")); } } } diff --git a/zssmodel/src/org/zkoss/zss/model/impl/NavigationStructure.java b/zssmodel/src/org/zkoss/zss/model/impl/NavigationStructure.java index 5ae92ad4..55653144 100644 --- a/zssmodel/src/org/zkoss/zss/model/impl/NavigationStructure.java +++ b/zssmodel/src/org/zkoss/zss/model/impl/NavigationStructure.java @@ -8,6 +8,7 @@ import org.model.AutoRollbackConnection; import org.model.DBContext; import org.model.DBHandler; +import org.zkoss.json.JSONArray; import org.zkoss.zss.model.CellRegion; import org.zkoss.zss.model.SBook; import org.zkoss.zss.model.SCell; @@ -32,6 +33,9 @@ public class NavigationStructure { */ private ReturnBuffer returnBuffer; public int isNumericNavAttr; + List cellIndices; + + class ReturnBuffer { @@ -98,6 +102,51 @@ else if (condition.equals("<=")) } + public List getBrushColotList(int first, int last, JSONArray val_ls,JSONArray cond_ls, int attrIndex) { + + System.out.println(first+","+last); + List newCellIndices = new ArrayList(); + if(cellIndices!=null) + { + + for(int i=first-1;i(); + for(int j=first;j<=last;j++) + { + SCell sCell = currentSheet.getCell(j, attrIndex); + + try { + double currvalue = Double.parseDouble(String.valueOf(sCell.getValue())); + double queryValue = Double.parseDouble((String) val_ls.get(0)); + + if (isConditionSatisfied(currvalue, (String) cond_ls.get(0), queryValue)) { + cellIndices.add(1); + newCellIndices.add(j); + } + else + cellIndices.add(0); + }catch (Exception e) + { + String currvalue = String.valueOf(sCell.getValue()); + String queryValue = (String) val_ls.get(0); + + if (isConditionSatisfiedStr(currvalue, (String) cond_ls.get(0), queryValue)){ + cellIndices.add(1); + newCellIndices.add(j); + } + else + cellIndices.add(0); + } + } + return newCellIndices; + } + public boolean isConditionSatisfied(double currValue, String condition, double queryValue) { int conditionCode = getConditionCode(condition);