]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.spreadsheet/src/org/simantics/spreadsheet/solver/SpreadsheetLine.java
Merge "Maintain info about changed resources in virtual graph"
[simantics/platform.git] / bundles / org.simantics.spreadsheet / src / org / simantics / spreadsheet / solver / SpreadsheetLine.java
1 package org.simantics.spreadsheet.solver;
2
3 import java.util.Collections;
4 import java.util.HashMap;
5 import java.util.List;
6 import java.util.Map;
7 import java.util.Optional;
8
9 import org.simantics.spreadsheet.Range;
10 import org.simantics.spreadsheet.SpreadsheetVisitor;
11 import org.simantics.spreadsheet.Spreadsheets;
12
13 import it.unimi.dsi.fastutil.objects.ObjectArrayList;
14
15 @SuppressWarnings("rawtypes")
16 public class SpreadsheetLine implements SpreadsheetElement<SpreadsheetCell, SpreadsheetLines>, SheetNode {
17
18     private static final long serialVersionUID = -304574098117404663L;
19
20     final private SpreadsheetLines parent;
21     final public int row;
22     int id;
23
24     public ObjectArrayList<SpreadsheetCell> cells = new ObjectArrayList<>();
25
26     public SpreadsheetLine(SpreadsheetLines parent, int row) {
27         this.parent = parent;
28         this.row = row;
29         this.id = getEngine().getBook().getNewId(this);
30     }
31
32     public int getId() {
33         return id;
34     }
35
36     public SpreadsheetEngine getEngine() {
37         return ((SpreadsheetLines)parent).getEngine();
38     }
39
40     @Override
41     public String getName() {
42         return "Row"+row;
43     }
44
45     @Override
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);
54         }
55         return result;
56     }
57
58     @Override
59     public Map getProperties() {
60         return Collections.singletonMap("typeURI", new SpreadsheetTypeNode(Spreadsheets.LINE_TYPE_URI));
61     }
62
63     Object resolve(String[] parts, int index) {
64
65         if(index == parts.length) return this;
66
67         Range r = Spreadsheets.decodeCellAbsolute(parts[index]);
68         return cells.get(r.startColumn);
69
70     }
71
72     public void accept(SpreadsheetVisitor v) {
73         v.visit(this);
74     }
75
76     public String getPath() {
77         return ((SpreadsheetLines)parent).getPath() + "/" + getName();
78     }
79
80     @Override
81     public Optional<SpreadsheetLines> getParent() {
82         return Optional.of(parent);
83     }
84
85     @Override
86     public List<SpreadsheetCell> getSpreadsheetChildren() {
87         return cells;
88     }
89
90     @Override
91     public void remove(SpreadsheetCell child) {
92
93     }
94
95     @Override
96     public int hashCode() {
97         final int prime = 31;
98         int result = 1;
99         result = prime * result + ((parent == null) ? 0 : parent.hashCode());
100         result = prime * result + row;
101         return result;
102     }
103
104     @Override
105     public boolean equals(Object obj) {
106         if (this == obj)
107             return true;
108         if (obj == null)
109             return false;
110         if (getClass() != obj.getClass())
111             return false;
112         SpreadsheetLine other = (SpreadsheetLine) obj;
113         if (parent == null) {
114             if (other.parent != null)
115                 return false;
116         } else if (!parent.equals(other.parent))
117             return false;
118         if (row != other.row)
119             return false;
120         return true;
121     }
122
123 }