1 package org.simantics.spreadsheet.graph;
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.resource.SpreadsheetResource;
11 import org.simantics.spreadsheet.util.SpreadsheetUtils;
13 import it.unimi.dsi.fastutil.objects.ObjectArrayList;
15 public class SpreadsheetLine implements SpreadsheetElement<SpreadsheetCell, SpreadsheetLines>, SheetNode {
17 private static final long serialVersionUID = -304574098117404663L;
19 final private SpreadsheetLines parent;
23 public ObjectArrayList<SpreadsheetCell> cells = new ObjectArrayList<>();
25 public SpreadsheetLine(SpreadsheetLines parent, int row) {
28 this.id = getEngine().getBook().getNewId(this);
29 // getEngine().registerRow(row, this);
36 public SpreadsheetEngine getEngine() {
37 // if(parent instanceof SpreadsheetEngine)
38 // return (SpreadsheetEngine)parent;
39 return ((SpreadsheetLines)parent).getEngine();
43 public String getName() {
48 public Map getChildren() {
49 String rowName = ""+row;
50 Map<String,SpreadsheetCell> result = new HashMap<>();
51 for(int i=0;i<cells.size();i++) {
52 SpreadsheetCell cell = cells.get(i);
53 if(SpreadsheetCell.EMPTY == cell) continue;
54 String name = "Row"+SpreadsheetUtils.columnName(i) + rowName;
55 result.put(name, cell);
61 public Map getProperties() {
62 return Collections.singletonMap("typeURI", new SpreadsheetTypeNode(SpreadsheetResource.URIs.Line));
65 Object resolve(String[] parts, int index) {
67 if(index == parts.length) return this;
69 Range r = SpreadsheetUtils.decodeCellAbsolute(parts[index]);
70 return cells.get(r.startColumn);
74 public void accept(SpreadsheetVisitor v) {
78 public String getPath() {
79 return ((SpreadsheetLines)parent).getPath() + "/" + getName();
83 public Optional<SpreadsheetLines> getParent() {
84 return Optional.of(parent);
88 public List<SpreadsheetCell> getSpreadsheetChildren() {
93 public void remove(SpreadsheetCell child) {
98 public int hashCode() {
101 result = prime * result + ((parent == null) ? 0 : parent.hashCode());
102 result = prime * result + row;
107 public boolean equals(Object obj) {
112 if (getClass() != obj.getClass())
114 SpreadsheetLine other = (SpreadsheetLine) obj;
115 if (parent == null) {
116 if (other.parent != null)
118 } else if (!parent.equals(other.parent))
120 if (row != other.row)