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