-package org.simantics.spreadsheet.graph;\r
-\r
-import java.util.Collections;\r
-import java.util.HashMap;\r
-import java.util.List;\r
-import java.util.Map;\r
-import java.util.Optional;\r
-\r
-import org.simantics.spreadsheet.Range;\r
-import org.simantics.spreadsheet.graph.parser.ast.AstRange;\r
-\r
-public class SpreadsheetEngine implements SpreadsheetElement, SheetNode {\r
-\r
- private static final long serialVersionUID = -5246063647558595642L;\r
- \r
- private static final String LINES = "Lines";\r
- \r
- private final SpreadsheetBook book;\r
- private final String name;\r
- private final int id;\r
-\r
- public SpreadsheetLines lines;\r
- \r
- transient public Map<String,Object> rangeCache;\r
-\r
- public Map<String,Object> getRangeCache() {\r
- if(rangeCache == null) rangeCache = new HashMap<String,Object>();\r
- return rangeCache;\r
- }\r
- \r
- public Object getCachedRange(AstRange range) {\r
- if(range.sheetName != null) return null;\r
- return getRangeCache().get(range.first + ":" + range.second); \r
- }\r
- \r
- public void cacheRange(AstRange range, Object value) {\r
- if(range.sheetName != null) return;\r
- getRangeCache().put(range.first + ":" + range.second, value);\r
- }\r
-\r
- public SpreadsheetEngine(SpreadsheetBook book, String name) {\r
- this.book = book;\r
- this.name = name;\r
- this.id = book.getNewId(this);\r
- this.lines = new SpreadsheetLines(this, LINES);\r
- }\r
- \r
- public SpreadsheetBook getBook() {\r
- return book;\r
- }\r
- \r
- public int getId() {\r
- return id;\r
- }\r
- \r
- Object resolve(String[] parts, int index) {\r
- \r
- String part = parts[index];\r
- if(!part.equals(LINES)) return null;\r
- \r
- if(index == parts.length-1) return lines;\r
- \r
- return lines.resolve(parts, index+1);\r
-\r
- }\r
- \r
- @Override\r
- public String getName() {\r
- return name;\r
- }\r
- \r
- @Override\r
- public Map<String, SheetNode> getChildren() {\r
- return Collections.singletonMap(LINES, lines);\r
- }\r
- \r
- @Override\r
- public Map<String, SheetNode> getProperties() {\r
- return Collections.emptyMap();\r
- } \r
- \r
- public Object ensureSubprocess(String[] path, int index) {\r
- \r
- String name = path[index];\r
- if(!LINES.equals(name)) throw new IllegalStateException();\r
- if(index == path.length - 1) return lines;\r
- return lines.ensureSubprocess(path, index+1);\r
- \r
- }\r
- \r
- public SpreadsheetLine getLine(int row) {\r
- assert(lines.nodes.size() == 1);\r
- SpreadsheetLines root = lines.nodes.values().iterator().next();\r
- return root.getLine(row);\r
- }\r
-\r
- @Override\r
- public void accept(SpreadsheetVisitor v) {\r
- v.visit(this);\r
- }\r
- \r
- public Range actualRange(Range r) {\r
- if(r.isFullRows()) {\r
- SpreadsheetLines root = lines.nodes.values().iterator().next();\r
- Range result = new Range(r);\r
- result.startRow = 0;\r
- result.endRow = root.getMaxRow(); \r
- return result;\r
- } else {\r
- return r;\r
- }\r
- }\r
-\r
- @Override\r
- public Optional<SpreadsheetElement> getParent() {\r
- return Optional.of(book);\r
- }\r
-\r
- @Override\r
- public List<SpreadsheetElement> getSpreadsheetChildren() {\r
- return Collections.singletonList(lines);\r
- }\r
-\r
- @Override\r
- public void remove(SpreadsheetElement child) {\r
- \r
- }\r
-\r
- @Override\r
- public int hashCode() {\r
- final int prime = 31;\r
- int result = 1;\r
- result = prime * result + ((book == null) ? 0 : book.hashCode());\r
- result = prime * result + ((name == null) ? 0 : name.hashCode());\r
- return result;\r
- }\r
-\r
- @Override\r
- public boolean equals(Object obj) {\r
- if (this == obj)\r
- return true;\r
- if (obj == null)\r
- return false;\r
- if (getClass() != obj.getClass())\r
- return false;\r
- SpreadsheetEngine other = (SpreadsheetEngine) obj;\r
- if (book == null) {\r
- if (other.book != null)\r
- return false;\r
- } else if (!book.equals(other.book))\r
- return false;\r
- if (name == null) {\r
- if (other.name != null)\r
- return false;\r
- } else if (!name.equals(other.name))\r
- return false;\r
- return true;\r
- }\r
- \r
- \r
+package org.simantics.spreadsheet.graph;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+import org.simantics.spreadsheet.Range;
+import org.simantics.spreadsheet.graph.parser.ast.AstRange;
+
+@SuppressWarnings("rawtypes")
+public class SpreadsheetEngine implements SpreadsheetElement, SheetNode {
+
+ private static final long serialVersionUID = -5246063647558595642L;
+
+ private static final String LINES = "Lines";
+
+ private final SpreadsheetBook book;
+ private final String name;
+ private final int id;
+
+ public SpreadsheetLines lines;
+
+ transient public Map<String,Object> rangeCache;
+
+ public Map<String,Object> getRangeCache() {
+ if(rangeCache == null) rangeCache = new HashMap<String,Object>();
+ return rangeCache;
+ }
+
+ public Object getCachedRange(AstRange range) {
+ if(range.sheetName != null) return null;
+ return getRangeCache().get(range.first + ":" + range.second);
+ }
+
+ public void cacheRange(AstRange range, Object value) {
+ if(range.sheetName != null) return;
+ getRangeCache().put(range.first + ":" + range.second, value);
+ }
+
+ public SpreadsheetEngine(SpreadsheetBook book, String name) {
+ this.book = book;
+ this.name = name;
+ this.id = book.getNewId(this);
+ this.lines = new SpreadsheetLines(this, LINES);
+ }
+
+ public SpreadsheetBook getBook() {
+ return book;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ Object resolve(String[] parts, int index) {
+
+ String part = parts[index];
+ if(!part.equals(LINES)) return null;
+
+ if(index == parts.length-1) return lines;
+
+ return lines.resolve(parts, index+1);
+
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public Map<String, SheetNode> getChildren() {
+ return Collections.singletonMap(LINES, lines);
+ }
+
+ @Override
+ public Map<String, SheetNode> getProperties() {
+ return Collections.emptyMap();
+ }
+
+ public Object ensureSubprocess(String[] path, int index) {
+
+ String name = path[index];
+ if(!LINES.equals(name)) throw new IllegalStateException();
+ if(index == path.length - 1) return lines;
+ return lines.ensureSubprocess(path, index+1);
+
+ }
+
+ public SpreadsheetLine getLine(int row) {
+ assert(lines.nodes.size() == 1);
+ SpreadsheetLines root = lines.nodes.values().iterator().next();
+ return root.getLine(row);
+ }
+
+ @Override
+ public void accept(SpreadsheetVisitor v) {
+ v.visit(this);
+ }
+
+ public Range actualRange(Range r) {
+ if(r.isFullRows()) {
+ SpreadsheetLines root = lines.nodes.values().iterator().next();
+ Range result = new Range(r);
+ result.startRow = 0;
+ result.endRow = root.getMaxRow();
+ return result;
+ } else {
+ return r;
+ }
+ }
+
+ @Override
+ public Optional<SpreadsheetElement> getParent() {
+ return Optional.of(book);
+ }
+
+ @Override
+ public List<SpreadsheetElement> getSpreadsheetChildren() {
+ return Collections.singletonList(lines);
+ }
+
+ @Override
+ public void remove(SpreadsheetElement child) {
+
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((book == null) ? 0 : book.hashCode());
+ result = prime * result + ((name == null) ? 0 : name.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ SpreadsheetEngine other = (SpreadsheetEngine) obj;
+ if (book == null) {
+ if (other.book != null)
+ return false;
+ } else if (!book.equals(other.book))
+ return false;
+ if (name == null) {
+ if (other.name != null)
+ return false;
+ } else if (!name.equals(other.name))
+ return false;
+ return true;
+ }
+
+