1 /*******************************************************************************
\r
2 * Copyright (c) 2007, 2010 Association for Decentralized Information Management
\r
3 * in Industry THTH ry.
\r
4 * All rights reserved. This program and the accompanying materials
\r
5 * are made available under the terms of the Eclipse Public License v1.0
\r
6 * which accompanies this distribution, and is available at
\r
7 * http://www.eclipse.org/legal/epl-v10.html
\r
10 * VTT Technical Research Centre of Finland - initial API and implementation
\r
11 *******************************************************************************/
\r
12 package org.simantics.spreadsheet.graph;
\r
14 import java.util.UUID;
\r
16 import org.simantics.db.Resource;
\r
17 import org.simantics.db.common.utils.Logger;
\r
18 import org.simantics.excel.Excel;
\r
19 import org.simantics.spreadsheet.ClientModel;
\r
20 import org.simantics.spreadsheet.Range;
\r
21 import org.simantics.spreadsheet.common.client.ClientModelListenerAdapter;
\r
22 import org.simantics.spreadsheet.common.exception.CellParseException;
\r
23 import org.simantics.spreadsheet.util.SpreadsheetUtils;
\r
24 import org.simantics.utils.datastructures.Pair;
\r
26 public class ExcelLink extends ClientModelListenerAdapter {
\r
28 final private ClientModel model;
\r
29 final private String name;
\r
30 final private String prefix;
\r
31 final private Excel excel;
\r
34 public ExcelLink(ClientModel model, Resource spreadsheet, String prefix) {
\r
38 this.name = "" + spreadsheet.getResourceId();
\r
39 this.prefix = prefix;
\r
40 this.excel = Excel.getInstance(System.out);
\r
41 model.addListener(this);
\r
45 // public <T> void load(final Resource spreadsheet) {
\r
49 // e = Excel.getInstance(System.out);
\r
50 // } catch (Throwable t) {
\r
51 // t.printStackTrace();
\r
54 // handle = excel.open_(excel.getFile(name + ".xlsx"));
\r
55 // System.err.println("excel.open " + (name + ".xlsx"));
\r
60 public void dispose() {
\r
61 model.removeListener(this);
\r
62 excel.close_(handle);
\r
63 System.err.println("excel.close " + handle);
\r
67 public void propertyChange(String location, String property, Object value) {
\r
69 if(ClientModel.LABEL.equals(property) && value != null && value instanceof String) {
\r
71 if(handle == 0) return;
\r
72 Range range = SpreadsheetUtils.decodeCellAbsolute(location);
\r
73 excel.setString_(handle, range.startRow, range.startColumn, (String)value);
\r
74 // System.err.println("excel.setString " + value);
\r
76 } else if("Excel".equals(location) && "Visible".equals(property) && value instanceof Boolean) {
\r
78 Boolean visible = (Boolean)value;
\r
84 Excel excel = Excel.getInstance(System.out);
\r
85 handle = excel.open_(excel.getFile(name + ".xlsx"));
\r
86 // System.err.println("excel.open " + (name + ".xlsx"));
\r
88 for(Pair<String, Object> label : model.listAll(ClientModel.LABEL)) {
\r
90 Range range = SpreadsheetUtils.decodeCellAbsolute(label.first);
\r
91 excel.setString_(handle, range.startRow, range.startColumn, (String)label.second);
\r
92 System.err.println("excel.setString " + label.second);
\r
93 } catch (CellParseException e) {
\r
96 for(Pair<String, Object> label : model.listAll(ClientModel.CONTENT)) {
\r
98 Range range = SpreadsheetUtils.decodeCellAbsolute(label.first);
\r
99 //excel.setString_(handle, range.startRow, range.startColumn, (String)label.second);
\r
101 String uri = (String)label.second;
\r
102 if(uri.startsWith(prefix)) {
\r
103 String rvi = uri.substring(prefix.length()+1).replace("#", "_").replace("(", "_").replace(")", "_").replace("+", "p").replace("-", "m");
\r
104 excel.setName_(handle, range.startRow, range.startColumn, rvi);
\r
105 System.err.println("excel.setCellName '" + rvi + "'");
\r
108 } catch (CellParseException e) {
\r
113 } catch (Throwable t) {
\r
114 Logger.defaultLogError(t);
\r
121 Excel excel = Excel.getInstance(System.out);
\r
122 handle = excel.close_(handle);
\r
124 // System.err.println("excel.close " + handle);
\r
126 } catch (Throwable t) {
\r
127 Logger.defaultLogError(t);
\r
131 // excel.setVisible_(handle, (Boolean)value);
\r
132 // System.err.println("excel.setVisible " + value);
\r
137 // public void changed(int row, int column, Cell cell) {
\r
139 // String value = cell != null ? cell.toString() : "";
\r
140 // if(value == null) value = "...";
\r
141 // excel.setString_(handle, row, column, value);
\r