1 package org.simantics.spreadsheet.solver;
3 import java.util.Collections;
4 import java.util.HashMap;
7 import java.util.Optional;
9 import org.simantics.spreadsheet.Range;
10 import org.simantics.spreadsheet.SpreadsheetVisitor;
11 import org.simantics.spreadsheet.Spreadsheets;
13 import it.unimi.dsi.fastutil.objects.ObjectArrayList;
15 @SuppressWarnings("rawtypes")
16 public class SpreadsheetLine implements SpreadsheetElement<SpreadsheetCell, SpreadsheetLines>, SheetNode {
18 private static final long serialVersionUID = -304574098117404663L;
20 final private SpreadsheetLines parent;
24 public ObjectArrayList<SpreadsheetCell> cells = new ObjectArrayList<>();
26 public SpreadsheetLine(SpreadsheetLines parent, int row) {
29 this.id = getEngine().getBook().getNewId(this);
36 public SpreadsheetEngine getEngine() {
37 return ((SpreadsheetLines)parent).getEngine();
41 public String getName() {
46 public Map getChildren() {
47 String rowName = ""+row;
48 Map<String,SpreadsheetCell> result = new HashMap<>();
49 for(int i=0;i<cells.size();i++) {
50 SpreadsheetCell cell = cells.get(i);
51 if(SpreadsheetCell.EMPTY == cell) continue;
52 String name = "Row"+Spreadsheets.columnName(i) + rowName;
53 result.put(name, cell);
59 public Map getProperties() {
60 return Collections.singletonMap("typeURI", new SpreadsheetTypeNode(Spreadsheets.LINE_TYPE_URI));
63 Object resolve(String[] parts, int index) {
65 if(index == parts.length) return this;
67 Range r = Spreadsheets.decodeCellAbsolute(parts[index]);
68 return cells.get(r.startColumn);
72 public void accept(SpreadsheetVisitor v) {
76 public String getPath() {
77 return ((SpreadsheetLines)parent).getPath() + "/" + getName();
81 public Optional<SpreadsheetLines> getParent() {
82 return Optional.of(parent);
86 public List<SpreadsheetCell> getSpreadsheetChildren() {
91 public void remove(SpreadsheetCell child) {
96 public int hashCode() {
99 result = prime * result + ((parent == null) ? 0 : parent.hashCode());
100 result = prime * result + row;
105 public boolean equals(Object obj) {
110 if (getClass() != obj.getClass())
112 SpreadsheetLine other = (SpreadsheetLine) obj;
113 if (parent == null) {
114 if (other.parent != null)
116 } else if (!parent.equals(other.parent))
118 if (row != other.row)