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