]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.spreadsheet/src/org/simantics/spreadsheet/solver/SpreadsheetLine.java
Adopt spreadsheet changes made in Balas development
[simantics/platform.git] / bundles / org.simantics.spreadsheet / src / org / simantics / spreadsheet / solver / SpreadsheetLine.java
diff --git a/bundles/org.simantics.spreadsheet/src/org/simantics/spreadsheet/solver/SpreadsheetLine.java b/bundles/org.simantics.spreadsheet/src/org/simantics/spreadsheet/solver/SpreadsheetLine.java
new file mode 100644 (file)
index 0000000..d11fdc6
--- /dev/null
@@ -0,0 +1,123 @@
+package org.simantics.spreadsheet.solver;
+
+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.SpreadsheetVisitor;
+import org.simantics.spreadsheet.Spreadsheets;
+
+import it.unimi.dsi.fastutil.objects.ObjectArrayList;
+
+@SuppressWarnings("rawtypes")
+public class SpreadsheetLine implements SpreadsheetElement<SpreadsheetCell, SpreadsheetLines>, SheetNode {
+
+    private static final long serialVersionUID = -304574098117404663L;
+
+    final private SpreadsheetLines parent;
+    final public int row;
+    int id;
+
+    public ObjectArrayList<SpreadsheetCell> cells = new ObjectArrayList<>();
+
+    public SpreadsheetLine(SpreadsheetLines parent, int row) {
+        this.parent = parent;
+        this.row = row;
+        this.id = getEngine().getBook().getNewId(this);
+    }
+
+    public int getId() {
+        return id;
+    }
+
+    public SpreadsheetEngine getEngine() {
+        return ((SpreadsheetLines)parent).getEngine();
+    }
+
+    @Override
+    public String getName() {
+        return "Row"+row;
+    }
+
+    @Override
+    public Map getChildren() {
+        String rowName = ""+row;
+        Map<String,SpreadsheetCell> result = new HashMap<>();
+        for(int i=0;i<cells.size();i++) {
+            SpreadsheetCell cell = cells.get(i);
+            if(SpreadsheetCell.EMPTY == cell) continue;
+            String name = "Row"+Spreadsheets.columnName(i) + rowName;
+            result.put(name, cell);
+        }
+        return result;
+    }
+
+    @Override
+    public Map getProperties() {
+        return Collections.singletonMap("typeURI", new SpreadsheetTypeNode(Spreadsheets.LINE_TYPE_URI));
+    }
+
+    Object resolve(String[] parts, int index) {
+
+        if(index == parts.length) return this;
+
+        Range r = Spreadsheets.decodeCellAbsolute(parts[index]);
+        return cells.get(r.startColumn);
+
+    }
+
+    public void accept(SpreadsheetVisitor v) {
+        v.visit(this);
+    }
+
+    public String getPath() {
+        return ((SpreadsheetLines)parent).getPath() + "/" + getName();
+    }
+
+    @Override
+    public Optional<SpreadsheetLines> getParent() {
+        return Optional.of(parent);
+    }
+
+    @Override
+    public List<SpreadsheetCell> getSpreadsheetChildren() {
+        return cells;
+    }
+
+    @Override
+    public void remove(SpreadsheetCell child) {
+
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((parent == null) ? 0 : parent.hashCode());
+        result = prime * result + row;
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        SpreadsheetLine other = (SpreadsheetLine) obj;
+        if (parent == null) {
+            if (other.parent != null)
+                return false;
+        } else if (!parent.equals(other.parent))
+            return false;
+        if (row != other.row)
+            return false;
+        return true;
+    }
+
+}