Revision 576
org.gvsig.jexcel/tags/org.gvsig.jexcel-1.0.87/org.gvsig.jexcel.app/org.gvsig.jexcel.app.mainplugin/src/main/resources-plugin/test1.txt | ||
---|---|---|
1 |
>>> from jxl import Workbook |
|
2 |
>>> Workbook.getWorkbook |
|
3 |
<java function getWorkbook 1> |
|
4 |
>>> from java.io import File |
|
5 |
>>> f=File("/home/usuario/datos/geodata/tables/torrent_4-es-excel2003.xls") |
|
6 |
>>> f.exists() |
|
7 |
1 |
|
8 |
>>> w=Workbook.getWorkbook(f) |
|
9 |
>>> dir(w) |
|
10 |
['XCTRecords', 'addInFunctionNames', 'buttonPropertySet', 'class', 'close', 'compoundFile', 'containsMacros', 'countryRecord', 'createWorkbook', 'drawingGroup', 'equals', 'externalSheetRecord', 'findByName', 'findCellByName', 'fonts', 'formattingRecords', 'getAddInFunctionNames', 'getButtonPropertySet', 'getCell', 'getClass', 'getCompoundFile', 'getCountryRecord', 'getDrawingGroup', 'getExternalSheetIndex', 'getExternalSheetName', 'getExternalSheetRecord', 'getFonts', 'getFormattingRecords', 'getIndex', 'getLastExternalSheetIndex', 'getLastExternalSheetName', 'getMsoDrawingGroupRecord', 'getName', 'getNameIndex', 'getNameRecords', 'getNumberOfSheets', 'getRangeNames', 'getReadSheet', 'getSettings', 'getSheet', 'getSheetNames', 'getSheets', 'getSupbookRecords', 'getVersion', 'getWorkbook', 'getWorkbookBof', 'getXCTRecords', 'hashCode', 'isProtected', 'msoDrawingGroupRecord', 'nameRecords', 'notify', 'notifyAll', 'numberOfSheets', 'protected', 'rangeNames', 'settings', 'sheetNames', 'sheets', 'supbookRecords', 'toString', 'wait', 'workbookBof'] |
|
11 |
>>> w.numberOfSheets |
|
12 |
1 |
|
13 |
>>> w.sheetNames |
|
14 |
array(java.lang.String,['Hoja1']) |
|
15 |
>>> w.sheets |
|
16 |
array(jxl.Sheet,[jxl.read.biff.SheetImpl@3a4f51e8]) |
|
17 |
>>> s=w.sheets[0] |
|
18 |
>>> s |
|
19 |
jxl.read.biff.SheetImpl@3a4f51e8 |
|
20 |
>>> dir(s) |
|
21 |
['PLS', 'autoFilter', 'buttonPropertySet', 'charts', 'class', 'columnInfos', 'columnPageBreaks', 'columns', 'conditionalFormats', 'dataValidation', 'drawingData', 'drawings', 'equals', 'findCell', 'findLabelCell', 'getAutoFilter', 'getButtonPropertySet', 'getCell', 'getCharts', 'getClass', 'getColumn', 'getColumnFormat', 'getColumnInfo', 'getColumnInfos', 'getColumnPageBreaks', 'getColumnView', 'getColumnWidth', 'getColumns', 'getConditionalFormats', 'getDataValidation', 'getDrawing', 'getDrawingData', 'getDrawings', 'getHyperlinks', 'getMaxColumnOutlineLevel', 'getMaxRowOutlineLevel', 'getMergedCells', 'getName', 'getNumberOfImages', 'getPLS', 'getRow', 'getRowHeight', 'getRowPageBreaks', 'getRowProperties', 'getRowView', 'getRows', 'getSettings', 'getSheetBof', 'getWorkbook', 'getWorkbookBof', 'getWorkspaceOptions', 'hashCode', 'hidden', 'hyperlinks', 'isHidden', 'isProtected', 'maxColumnOutlineLevel', 'maxRowOutlineLevel', 'mergedCells', 'name', 'notify', 'notifyAll', 'numberOfImages', 'protected', 'rowPageBreaks', 'rowProperties', 'rows', 'settings', 'sheetBof', 'toString', 'wait', 'workbook', 'workbookBof', 'workspaceOptions'] |
|
22 |
>>> |
|
23 |
>>> s.getRows() |
|
24 |
382 |
|
25 |
>>> s.columns |
|
26 |
5 |
|
27 |
>>> |
|
28 |
>>> c=s.getCell(0,0) |
|
29 |
>>> dir(c) |
|
30 |
['XFIndex', 'cellFeatures', 'cellFormat', 'class', 'column', 'contents', 'equals', 'getCellFeatures', 'getCellFormat', 'getClass', 'getColumn', 'getContents', 'getRow', 'getString', 'getType', 'getXFIndex', 'hashCode', 'hidden', 'isHidden', 'notify', 'notifyAll', 'row', 'setCellFeatures', 'string', 'toString', 'type', 'wait'] |
|
31 |
>>> |
|
32 |
>>> c.toString() |
|
33 |
'jxl.read.biff.LabelSSTRecord@14a614b5' |
|
34 |
>>> c.contents |
|
35 |
'B1' |
|
36 |
>>> |
|
37 |
>>> s.getCell(0,s.getRows()-1) |
|
38 |
jxl.read.biff.NumberValue@3e803098 |
|
39 |
>>> s.getCell(s.columns-1,s.getRows()-1) |
|
40 |
jxl.read.biff.LabelSSTRecord@56dc16be |
|
41 |
>>> s.getCell(s.columns-1,s.getRows()-1).contents |
|
42 |
'R' |
|
43 |
>>> |
|
44 |
|
|
45 |
|
|
46 |
|
|
47 |
|
|
48 |
|
|
49 |
|
|
50 |
|
|
51 |
|
|
52 |
|
org.gvsig.jexcel/tags/org.gvsig.jexcel-1.0.87/org.gvsig.jexcel.app/org.gvsig.jexcel.app.mainplugin/src/main/resources-plugin/config.xml | ||
---|---|---|
1 |
<?xml version="1.0" encoding="ISO-8859-1"?> |
|
2 |
<plugin-config> |
|
3 |
<libraries library-dir="lib/"/> |
|
4 |
<depends plugin-name="org.gvsig.app.mainplugin"/> |
|
5 |
<resourceBundle name="text"/> |
|
6 |
<extensions> |
|
7 |
<extension class-name="org.gvsig.andami.LibraryExtension" active="false"/> |
|
8 |
</extensions> |
|
9 |
</plugin-config> |
org.gvsig.jexcel/tags/org.gvsig.jexcel-1.0.87/org.gvsig.jexcel.app/org.gvsig.jexcel.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml | ||
---|---|---|
1 |
<assembly> |
|
2 |
<id>gvsig-plugin-package</id> |
|
3 |
<formats> |
|
4 |
<format>zip</format> |
|
5 |
</formats> |
|
6 |
<baseDirectory>${project.artifactId}</baseDirectory> |
|
7 |
<includeBaseDirectory>true</includeBaseDirectory> |
|
8 |
<files> |
|
9 |
<file> |
|
10 |
<source>target/${project.artifactId}-${project.version}.jar</source> |
|
11 |
<outputDirectory>lib</outputDirectory> |
|
12 |
</file> |
|
13 |
<file> |
|
14 |
<source>target/package.info</source> |
|
15 |
</file> |
|
16 |
</files> |
|
17 |
|
|
18 |
<fileSets> |
|
19 |
<fileSet> |
|
20 |
<directory>src/main/resources-plugin</directory> |
|
21 |
<outputDirectory>.</outputDirectory> |
|
22 |
</fileSet> |
|
23 |
</fileSets> |
|
24 |
|
|
25 |
<dependencySets> |
|
26 |
|
|
27 |
<dependencySet> |
|
28 |
<useProjectArtifact>false</useProjectArtifact> |
|
29 |
<useTransitiveDependencies>false</useTransitiveDependencies> |
|
30 |
<outputDirectory>lib</outputDirectory> |
|
31 |
<includes> |
|
32 |
<include>net.sourceforge.jexcelapi:jxl</include> |
|
33 |
<include>org.gvsig:org.gvsig.jexcel.provider</include> |
|
34 |
</includes> |
|
35 |
</dependencySet> |
|
36 |
|
|
37 |
</dependencySets> |
|
38 |
|
|
39 |
</assembly> |
org.gvsig.jexcel/tags/org.gvsig.jexcel-1.0.87/org.gvsig.jexcel.app/org.gvsig.jexcel.app.mainplugin/src/main/userdoc/user_manual.rst | ||
---|---|---|
1 |
jexcel plugin user manual v0.2 |
|
2 |
================================= |
|
3 |
|
|
4 |
.. contents:: Contents |
|
5 |
|
|
6 |
Introduction |
|
7 |
-------------- |
|
8 |
|
|
9 |
The jexcel plugin add to gvSIG the following functionalities: |
|
10 |
|
|
11 |
* Load Microsoft Excel spreadsheets as tables. |
|
12 |
* Load Microsoft Excel spreadsheets as layers. |
|
13 |
* Export a table to Excel spreadsheet format. |
|
14 |
|
|
15 |
It supports the following Excel spreadsheet versions: |
|
16 |
|
|
17 |
* Reading: Excel 95, 97, 2000, XP, and 2003 workbooks. |
|
18 |
* Writing: Excel 2000 |
|
19 |
|
|
20 |
Installation |
|
21 |
-------------- |
|
22 |
|
|
23 |
(TODO) |
|
24 |
|
|
25 |
Loading a table from an Excel spreadsheet |
|
26 |
------------------------------------------ |
|
27 |
|
|
28 |
From the gvSIG project manager, select the “Table” document (1) and click on “New” (2). In the “New table” window the “File” tab is selected by default. Click on “Add” (3) and find the Excel file that contains the spreadsheet you want to load (4). Finally click on “Open” (5). |
|
29 |
|
|
30 |
| |
|
31 |
|
|
32 |
.. image:: Selection_088.png |
|
33 |
:align: center |
|
34 |
:scale: 150 |
|
35 |
|
|
36 |
Once the file appears in the “New table” window, click on “Properties” (7) in order to set up the following parameters: |
|
37 |
|
|
38 |
Data source properties |
|
39 |
+++++++++++++++++++++++ |
|
40 |
|
|
41 |
General tab (default) |
|
42 |
^^^^^^^^^^^^^^^^^^^^^^ |
|
43 |
|
|
44 |
- **File:** File path. |
|
45 |
- **Locale:** Localization configuration. This determines the characters used as decimal and thousands separators. |
|
46 |
- **Sheet to load:** Position within the spreadsheet file of the sheet that we want to load. First position corresponds with the number "0", second with "1" and so on. |
|
47 |
- **Use first row as header:** In case this option is checked it will consider the first row values as the field names. |
|
48 |
- **CRS:** In case the sheet contains coordinates this parameter sets its Coordinate Reference System. |
|
49 |
- **Point (X,Y,Z):** Position of the fields that contains the coordinates. It should be provided at least two fields for X,Y coordinates. |
|
50 |
|
|
51 |
| |
|
52 |
|
|
53 |
.. image:: Selection_091.png |
|
54 |
:align: center |
|
55 |
:scale: 150 |
|
56 |
|
|
57 |
Advanced tab |
|
58 |
^^^^^^^^^^^^^^ |
|
59 |
|
|
60 |
- **ProviderName:** The provider name (internal use). |
|
61 |
- **Header:** In case the sheet doesn't have a header we can define it here. We have to type the name of the fields separated by a comma. |
|
62 |
- **Field types:** The is useful if we want to force the program to load the table with a specific field types. |
|
63 |
- **Automatic types detection:** This options is checked by default. It tryes to figure out what the field types are. |
|
64 |
- **Ignore errors:** This option forces the program to load the table even in case it finds erros. |
|
65 |
|
|
66 |
| |
|
67 |
|
|
68 |
.. image:: Selection_090.png |
|
69 |
:align: center |
|
70 |
:scale: 150 |
|
71 |
|
|
72 |
Once all the needed parameters have been set up click on “Accept” and finally on “Ok”. If everything worked fine the table should appear. |
|
73 |
|
|
74 |
| |
|
75 |
|
|
76 |
.. image:: Selection_092.png |
|
77 |
:align: center |
|
78 |
:scale: 150 |
|
79 |
|
|
80 |
Loading a layer from an Excel Spreadsheet |
|
81 |
------------------------------------------ |
|
82 |
|
|
83 |
From the gvSIG project manager, select the “View” document (1) and click on “New” (2). In the “Add layer” window the “File” tab is selected by default. Click on “Add” (4) and find the Excel file that contains the spreadsheet you want to load (5). Finally click on “Open” (6). |
|
84 |
|
|
85 |
| |
|
86 |
|
|
87 |
.. image:: Selection_095.png |
|
88 |
:align: center |
|
89 |
:scale: 150 |
|
90 |
|
|
91 |
Once the file appears in the “Add layer” window, click on “Properties” (7) in order to set up the following parameters: |
|
92 |
|
|
93 |
Data source properties |
|
94 |
+++++++++++++++++++++++ |
|
95 |
|
|
96 |
General tab (default) |
|
97 |
^^^^^^^^^^^^^^^^^^^^^^ |
|
98 |
|
|
99 |
- **File:** File path. |
|
100 |
- **Locale:** Localization configuration. This determines the characters used as decimal and thousands separators. |
|
101 |
- **Sheet to load:** Position within the spreadsheet file of the sheet that we want to load. First position corresponds with the number "0", second with "1" and so on. |
|
102 |
- **Use first row as header:** In case this option is checked it will consider the first row values as the field names. |
|
103 |
- **CRS:** In case the sheet contains coordinates this parameter sets its Coordinate Reference System. |
|
104 |
- **Point (X,Y,Z):** Position of the fields that contains the coordinates. It should be provided at least two fields for X,Y coordinates. |
|
105 |
|
|
106 |
| |
|
107 |
|
|
108 |
.. image:: Selection_096.png |
|
109 |
:align: center |
|
110 |
:scale: 150 |
|
111 |
|
|
112 |
Advanced tab |
|
113 |
^^^^^^^^^^^^^^ |
|
114 |
|
|
115 |
- **ProviderName:** The provider name (internal use). |
|
116 |
- **Header:** In case the sheet doesn't have a header we can define it here. We have to type the name of the fields separated by a comma. |
|
117 |
- **Field types:** The is useful if we want to force the program to load the table with a specific field types. |
|
118 |
- **Automatic types detection:** This options is checked by default. It tryes to figure out what the field types are. |
|
119 |
- **Ignore errors:** This option forces the program to load the table even in case it finds erros. |
|
120 |
|
|
121 |
| |
|
122 |
|
|
123 |
.. image:: Selection_097.png |
|
124 |
:align: center |
|
125 |
:scale: 150 |
|
126 |
|
|
127 |
Once all the needed parameters have been set up click on “Accept” and finally on “Ok”. If everything worked fine the layer should appear in the view. |
|
128 |
|
|
129 |
| |
|
130 |
|
|
131 |
.. image:: Selection_098.png |
|
132 |
:align: center |
|
133 |
:scale: 150 |
|
134 |
|
|
135 |
Exporting a table to Excel spreadsheet format |
|
136 |
---------------------------------------------- |
|
137 |
|
|
138 |
(TODO) |
org.gvsig.jexcel/tags/org.gvsig.jexcel-1.0.87/org.gvsig.jexcel.app/org.gvsig.jexcel.app.mainplugin/pom.xml | ||
---|---|---|
1 |
<?xml version="1.0" encoding="UTF-8"?> |
|
2 |
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
|
3 |
<modelVersion>4.0.0</modelVersion> |
|
4 |
<artifactId>org.gvsig.jexcel.app.mainplugin</artifactId> |
|
5 |
<packaging>jar</packaging> |
|
6 |
<name>${project.artifactId}</name> |
|
7 |
<description>Excel file format support</description> |
|
8 |
<parent> |
|
9 |
<groupId>org.gvsig</groupId> |
|
10 |
<artifactId>org.gvsig.jexcel.app</artifactId> |
|
11 |
<version>1.0.87</version> |
|
12 |
</parent> |
|
13 |
|
|
14 |
<dependencies> |
|
15 |
<dependency> |
|
16 |
<groupId>org.gvsig</groupId> |
|
17 |
<artifactId>org.gvsig.tools.lib</artifactId> |
|
18 |
<scope>compile</scope> |
|
19 |
</dependency> |
|
20 |
<dependency> |
|
21 |
<groupId>org.gvsig</groupId> |
|
22 |
<artifactId>org.gvsig.andami</artifactId> |
|
23 |
<scope>compile</scope> |
|
24 |
</dependency> |
|
25 |
<dependency> |
|
26 |
<groupId>org.gvsig</groupId> |
|
27 |
<artifactId>org.gvsig.jexcel.provider</artifactId> |
|
28 |
<scope>compile</scope> |
|
29 |
</dependency> |
|
30 |
|
|
31 |
<dependency> |
|
32 |
<groupId>net.sourceforge.jexcelapi</groupId> |
|
33 |
<artifactId>jxl</artifactId> |
|
34 |
<scope>compile</scope> |
|
35 |
</dependency> |
|
36 |
|
|
37 |
</dependencies> |
|
38 |
|
|
39 |
<properties> |
|
40 |
<!-- Package info property values --> |
|
41 |
<!-- Default values in org.gvsig.desktop --> |
|
42 |
<gvsig.package.info.name>Formats: Excel file format support</gvsig.package.info.name> |
|
43 |
<gvsig.package.info.state>testing</gvsig.package.info.state> |
|
44 |
<gvsig.package.info.official>true</gvsig.package.info.official> |
|
45 |
<gvsig.package.info.dependencies>required: org.gvsig.app.mainplugin -ge 2.1.0-A</gvsig.package.info.dependencies> |
|
46 |
<gvsig.package.info.categories>Formats,Vector</gvsig.package.info.categories> |
|
47 |
<gvsig.package.info.poolURL>https://devel.gvsig.org/download/projects/gvsig-jexcel/pool/</gvsig.package.info.poolURL> |
|
48 |
</properties> |
|
49 |
|
|
50 |
</project> |
org.gvsig.jexcel/tags/org.gvsig.jexcel-1.0.87/org.gvsig.jexcel.app/org.gvsig.jexcel.app.mainplugin/buildNumber.properties | ||
---|---|---|
1 |
#Wed Jan 29 15:03:31 CET 2020 |
|
2 |
buildNumber=91 |
|
0 | 3 |
org.gvsig.jexcel/tags/org.gvsig.jexcel-1.0.87/org.gvsig.jexcel.app/pom.xml | ||
---|---|---|
1 |
<?xml version="1.0" encoding="UTF-8"?> |
|
2 |
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
|
3 |
<modelVersion>4.0.0</modelVersion> |
|
4 |
<artifactId>org.gvsig.jexcel.app</artifactId> |
|
5 |
<packaging>pom</packaging> |
|
6 |
<name>${project.artifactId}</name> |
|
7 |
<parent> |
|
8 |
<groupId>org.gvsig</groupId> |
|
9 |
<artifactId>org.gvsig.jexcel</artifactId> |
|
10 |
<version>1.0.87</version> |
|
11 |
</parent> |
|
12 |
|
|
13 |
<modules> |
|
14 |
<module>org.gvsig.jexcel.app.mainplugin</module> |
|
15 |
</modules> |
|
16 |
|
|
17 |
|
|
18 |
</project> |
org.gvsig.jexcel/tags/org.gvsig.jexcel-1.0.87/org.gvsig.jexcel.provider/src/main/resources/META-INF/services/org.gvsig.tools.library.Library | ||
---|---|---|
1 |
org.gvsig.jexcel.JExcelLibrary |
org.gvsig.jexcel/tags/org.gvsig.jexcel-1.0.87/org.gvsig.jexcel.provider/src/main/resources/org/gvsig/jexcel/dal/provider/JExcelMetadata.xml | ||
---|---|---|
1 |
<?xml version="1.0"?> |
|
2 |
<!-- |
|
3 |
Definitions of metadata fields of a shp file. |
|
4 |
--> |
|
5 |
<definitions> |
|
6 |
<version>1.0.0</version> |
|
7 |
<classes> |
|
8 |
|
|
9 |
<class name="JExcel" namespace="Metadata"> |
|
10 |
<extends> |
|
11 |
<class namespace="Metadata" name="SpatialProvider"/> |
|
12 |
</extends> |
|
13 |
<description>Metadata of a JExcel store</description> |
|
14 |
<fields> |
|
15 |
</fields> |
|
16 |
</class> |
|
17 |
|
|
18 |
</classes> |
|
19 |
</definitions> |
org.gvsig.jexcel/tags/org.gvsig.jexcel-1.0.87/org.gvsig.jexcel.provider/src/main/resources/org/gvsig/jexcel/dal/provider/JExcelParameters.xml | ||
---|---|---|
1 |
<?xml version= "1.0 "?> |
|
2 |
<definitions> |
|
3 |
<version>1.0.0</version> |
|
4 |
<classes> |
|
5 |
<class name="JExcel"> |
|
6 |
<extends> |
|
7 |
<class namespace="dal" name="ProviderParameters"/> |
|
8 |
</extends> |
|
9 |
<description>Store the parameters need to open a Excel file</description> |
|
10 |
<fields> |
|
11 |
<field name="file" label="File" type="file" mandatory="true"> |
|
12 |
<description>Excel file</description> |
|
13 |
</field> |
|
14 |
<field name="locale" label="Locale" type="string" mandatory="true" defaultValue="DEFAULT"> |
|
15 |
<description>Locale used to parse double and float values (BCP47 language tag representing the locale)</description> |
|
16 |
<availableValues> |
|
17 |
<value label="Default (use system locale)">DEFAULT</value> |
|
18 |
<value label="Canada (english)">en-CA</value> |
|
19 |
<value label="Canada (french)">fr-CA</value> |
|
20 |
<value label="Chinese">zh</value> |
|
21 |
<value label="English">en</value> |
|
22 |
<value label="French">fr</value> |
|
23 |
<value label="German">de</value> |
|
24 |
<value label="Italian">it</value> |
|
25 |
<value label="Japanese">ja</value> |
|
26 |
<value label="Korea">ko</value> |
|
27 |
<value label="Spain">es</value> |
|
28 |
<value label="Uk">en-GB</value> |
|
29 |
<value label="Us">en-US</value> |
|
30 |
</availableValues> |
|
31 |
</field> |
|
32 |
<field name="sheet" label="Sheet to load" type="integer" subtype="jexcel.sheet.selector" mandatory="false" defaultValue="0"> |
|
33 |
<description>Sheet to use.</description> |
|
34 |
</field> |
|
35 |
<field name="isFirstRowHeadeer" label="Use first row as header" type="boolean" mandatory="false" defaultValue="false"> |
|
36 |
<description>Check for use first row as header.</description> |
|
37 |
</field> |
|
38 |
<field name="CRS" type="crs" mandatory="false"> |
|
39 |
<description>The coordinate reference system used when use the point parameter to generate a layer</description> |
|
40 |
</field> |
|
41 |
<field name="point" label="Point (X,Y,Z)" type="string" mandatory="false" defaultValue="" > |
|
42 |
<description>This field allow to add a Geometry column to the table. It is a list of field names separated by commas used as dimensions for the attribute GEOM of type point to add to the table.</description> |
|
43 |
</field> |
|
44 |
|
|
45 |
<field name="header" label="Header" type="string" mandatory="false" defaultValue="" group="Advanced"> |
|
46 |
<description>The header or empty if parsed automatically</description> |
|
47 |
</field> |
|
48 |
<field name="fieldtypes" label="Field types" type="string" mandatory="false" defaultValue="" group="Advanced"> |
|
49 |
<description>Comma separated list of field types. If empty strings are assumed (Eg: integer,string,double,boolean,float,geometry).</description> |
|
50 |
</field> |
|
51 |
<field name="automaticTypesDetection" label="Automatic types detection" type="boolean" mandatory="false" defaultValue="true" group="Advanced"> |
|
52 |
<description>This flag activate the autodetection of types in the CSV. Can be slow.</description> |
|
53 |
</field> |
|
54 |
<field name="ignoreErrors" label="Ignore errors" type="boolean" mandatory="false" defaultValue="false" group="Advanced"> |
|
55 |
<description>Set to true to ignore errors during load of data.</description> |
|
56 |
</field> |
|
57 |
</fields> |
|
58 |
|
|
59 |
</class> |
|
60 |
</classes> |
|
61 |
</definitions> |
org.gvsig.jexcel/tags/org.gvsig.jexcel-1.0.87/org.gvsig.jexcel.provider/src/main/java/org/gvsig/jexcel/JExcelSpread.java | ||
---|---|---|
1 |
package org.gvsig.jexcel; |
|
2 |
|
|
3 |
import java.io.File; |
|
4 |
import java.io.IOException; |
|
5 |
import java.util.ArrayList; |
|
6 |
import java.util.Collections; |
|
7 |
import java.util.List; |
|
8 |
import java.util.Locale; |
|
9 |
import java.util.Objects; |
|
10 |
import org.apache.commons.lang3.StringUtils; |
|
11 |
import java.awt.Rectangle; |
|
12 |
import java.util.Arrays; |
|
13 |
import jxl.Cell; |
|
14 |
import jxl.Workbook; |
|
15 |
import org.slf4j.Logger; |
|
16 |
import org.slf4j.LoggerFactory; |
|
17 |
|
|
18 |
/** |
|
19 |
* |
|
20 |
* @author jjdelcerro |
|
21 |
*/ |
|
22 |
@SuppressWarnings("UseSpecificCatch") |
|
23 |
public class JExcelSpread implements Spread { |
|
24 |
|
|
25 |
private static final Logger LOGGER = LoggerFactory.getLogger(JExcelSpread.class); |
|
26 |
|
|
27 |
private static class SheetJExcel implements Sheet { |
|
28 |
|
|
29 |
private final Workbook workbook; |
|
30 |
private final File spreadFile; |
|
31 |
private final int sheetIndex; |
|
32 |
private final jxl.Sheet sheetExcel; |
|
33 |
|
|
34 |
public SheetJExcel(File spreadFile, int sheetIndex) throws IOException { |
|
35 |
try { |
|
36 |
this.spreadFile = spreadFile; |
|
37 |
this.sheetIndex = sheetIndex; |
|
38 |
this.workbook = Workbook.getWorkbook(spreadFile); |
|
39 |
this.sheetExcel = this.workbook.getSheet(sheetIndex); |
|
40 |
} catch (Exception ex) { |
|
41 |
throw new IOException("Can't open sheet "+sheetIndex+" from '"+Objects.toString(spreadFile)+"'.", ex); |
|
42 |
} |
|
43 |
} |
|
44 |
|
|
45 |
@Override |
|
46 |
public int getColumnCount() { |
|
47 |
return this.sheetExcel.getColumns(); |
|
48 |
} |
|
49 |
|
|
50 |
@Override |
|
51 |
public Rectangle getUsedRange() { |
|
52 |
return null; |
|
53 |
} |
|
54 |
|
|
55 |
@Override |
|
56 |
public List<String> getColumnNames(boolean isFirstLineHedaer) { |
|
57 |
int columns = this.getColumnCount(); |
|
58 |
List<String> columnNames = new ArrayList<>(columns); |
|
59 |
|
|
60 |
String abc = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; |
|
61 |
if (columns > abc.length()) { |
|
62 |
for (int i = 0; i < columns; i++) { |
|
63 |
columnNames.add("C" + i); |
|
64 |
} |
|
65 |
} else { |
|
66 |
for (int i = 0; i < columns; i++) { |
|
67 |
columnNames.add(abc.substring(i, i + 1)); |
|
68 |
} |
|
69 |
} |
|
70 |
if (isFirstLineHedaer) { |
|
71 |
for (int col = 0; col < columns; col++) { |
|
72 |
Object value = this.getValueAt(col, 0); |
|
73 |
String s = Objects.toString(value); |
|
74 |
if (!StringUtils.isBlank(s)) { |
|
75 |
columnNames.set(col, s); |
|
76 |
} |
|
77 |
} |
|
78 |
} |
|
79 |
return columnNames; |
|
80 |
} |
|
81 |
|
|
82 |
@Override |
|
83 |
public File getFile() { |
|
84 |
return this.spreadFile; |
|
85 |
} |
|
86 |
|
|
87 |
@Override |
|
88 |
public String getName() { |
|
89 |
return this.sheetExcel.getName(); |
|
90 |
} |
|
91 |
|
|
92 |
@Override |
|
93 |
public int getRowCount() { |
|
94 |
return this.sheetExcel.getRows(); |
|
95 |
} |
|
96 |
|
|
97 |
@Override |
|
98 |
public int getSheetIndex() { |
|
99 |
return this.sheetIndex; |
|
100 |
} |
|
101 |
|
|
102 |
@Override |
|
103 |
public Object getValueAt(int col, int row) { |
|
104 |
Cell cell = this.sheetExcel.getCell(col, row); |
|
105 |
Object value = cell.getContents(); |
|
106 |
return value; |
|
107 |
} |
|
108 |
|
|
109 |
} |
|
110 |
|
|
111 |
private File spreadFile; |
|
112 |
|
|
113 |
public JExcelSpread() { |
|
114 |
|
|
115 |
} |
|
116 |
|
|
117 |
@Override |
|
118 |
public void open(File spreadFile) { |
|
119 |
this.spreadFile = spreadFile; |
|
120 |
} |
|
121 |
|
|
122 |
@Override |
|
123 |
public File getFile() { |
|
124 |
return this.spreadFile; |
|
125 |
} |
|
126 |
|
|
127 |
@Override |
|
128 |
public Sheet getSheet(int sheetIndex) { |
|
129 |
try { |
|
130 |
if (spreadFile == null || sheetIndex < 0) { |
|
131 |
return null; |
|
132 |
} |
|
133 |
return new SheetJExcel(spreadFile, sheetIndex); |
|
134 |
} catch (IOException ex) { |
|
135 |
return null; |
|
136 |
} |
|
137 |
} |
|
138 |
|
|
139 |
@Override |
|
140 |
public List<String> getSheetNames() { |
|
141 |
try { |
|
142 |
List<String> r = new ArrayList<>(); |
|
143 |
Workbook workbook = Workbook.getWorkbook(spreadFile); |
|
144 |
r.addAll(Arrays.asList(workbook.getSheetNames())); |
|
145 |
return r; |
|
146 |
} catch (Exception ex) { |
|
147 |
return Collections.EMPTY_LIST; |
|
148 |
} |
|
149 |
} |
|
150 |
|
|
151 |
} |
org.gvsig.jexcel/tags/org.gvsig.jexcel-1.0.87/org.gvsig.jexcel.provider/src/main/java/org/gvsig/jexcel/Spread.java | ||
---|---|---|
1 |
package org.gvsig.jexcel; |
|
2 |
|
|
3 |
import java.awt.Rectangle; |
|
4 |
import java.io.File; |
|
5 |
import java.util.List; |
|
6 |
|
|
7 |
/** |
|
8 |
* |
|
9 |
* @author jjdelcerro |
|
10 |
*/ |
|
11 |
public interface Spread { |
|
12 |
|
|
13 |
public static String NAME = "Excel"; |
|
14 |
|
|
15 |
public static Spread create(File file, Object... args) { |
|
16 |
JExcelSpread spread = new JExcelSpread(); |
|
17 |
spread.open(file); |
|
18 |
return spread; |
|
19 |
} |
|
20 |
|
|
21 |
public interface Sheet { |
|
22 |
|
|
23 |
int getColumnCount(); |
|
24 |
|
|
25 |
List<String> getColumnNames(boolean isFirstLineHedaer); |
|
26 |
|
|
27 |
File getFile(); |
|
28 |
|
|
29 |
String getName(); |
|
30 |
|
|
31 |
int getRowCount(); |
|
32 |
|
|
33 |
int getSheetIndex(); |
|
34 |
|
|
35 |
Object getValueAt(int col, int row); |
|
36 |
|
|
37 |
public Rectangle getUsedRange(); |
|
38 |
} |
|
39 |
|
|
40 |
public void open(File spreadFile); |
|
41 |
|
|
42 |
public File getFile(); |
|
43 |
|
|
44 |
public Sheet getSheet(int sheetIndex); |
|
45 |
|
|
46 |
public List<String> getSheetNames(); |
|
47 |
} |
org.gvsig.jexcel/tags/org.gvsig.jexcel-1.0.87/org.gvsig.jexcel.provider/src/main/java/org/gvsig/jexcel/JExcelLibrary.java | ||
---|---|---|
1 |
/** |
|
2 |
* gvSIG. Desktop Geographic Information System. |
|
3 |
* |
|
4 |
* Copyright (C) 2007-2013 gvSIG Association. |
|
5 |
* |
|
6 |
* This program is free software; you can redistribute it and/or |
|
7 |
* modify it under the terms of the GNU General Public License |
|
8 |
* as published by the Free Software Foundation; either version 3 |
|
9 |
* of the License, or (at your option) any later version. |
|
10 |
* |
|
11 |
* This program is distributed in the hope that it will be useful, |
|
12 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
13 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
14 |
* GNU General Public License for more details. |
|
15 |
* |
|
16 |
* You should have received a copy of the GNU General Public License |
|
17 |
* along with this program; if not, write to the Free Software |
|
18 |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, |
|
19 |
* MA 02110-1301, USA. |
|
20 |
* |
|
21 |
* For any additional information, do not hesitate to contact us |
|
22 |
* at info AT gvsig.com, or visit our website www.gvsig.com. |
|
23 |
*/ |
|
24 |
package org.gvsig.jexcel; |
|
25 |
|
|
26 |
import java.util.ArrayList; |
|
27 |
import java.util.List; |
|
28 |
|
|
29 |
import org.gvsig.fmap.dal.DALFileLibrary; |
|
30 |
import org.gvsig.fmap.dal.DALFileLocator; |
|
31 |
import org.gvsig.fmap.dal.DALLibrary; |
|
32 |
import org.gvsig.fmap.dal.DALLocator; |
|
33 |
import org.gvsig.fmap.dal.FileHelper; |
|
34 |
import org.gvsig.fmap.dal.spi.DataManagerProviderServices; |
|
35 |
import org.gvsig.jexcel.dal.provider.JExcelFilesystemServerProvider; |
|
36 |
import org.gvsig.jexcel.dal.provider.JExcelStoreParameters; |
|
37 |
import org.gvsig.jexcel.dal.provider.JExcelStoreProvider; |
|
38 |
import org.gvsig.jexcel.dal.provider.JExcelStoreProviderFactory; |
|
39 |
import org.gvsig.jexcel.dynformfield.point.JDynFormFieldExcelPointFieldsFactory; |
|
40 |
import org.gvsig.jexcel.dynformfield.sheet.JDynFormFieldExcelSheetFactory; |
|
41 |
import org.gvsig.metadata.exceptions.MetadataException; |
|
42 |
import org.gvsig.tools.dynform.spi.DynFormSPILocator; |
|
43 |
import org.gvsig.tools.dynform.spi.DynFormSPIManager; |
|
44 |
import org.gvsig.tools.library.AbstractLibrary; |
|
45 |
import org.gvsig.tools.library.LibraryException; |
|
46 |
|
|
47 |
public class JExcelLibrary extends AbstractLibrary { |
|
48 |
|
|
49 |
@Override |
|
50 |
public void doRegistration() { |
|
51 |
registerAsServiceOf(DALLibrary.class); |
|
52 |
require(DALFileLibrary.class); |
|
53 |
} |
|
54 |
|
|
55 |
@Override |
|
56 |
protected void doInitialize() throws LibraryException { |
|
57 |
} |
|
58 |
|
|
59 |
@Override |
|
60 |
protected void doPostInitialize() throws LibraryException { |
|
61 |
List<Throwable> exs = new ArrayList<Throwable>(); |
|
62 |
|
|
63 |
FileHelper.registerParametersDefinition( |
|
64 |
JExcelStoreParameters.PARAMETERS_DEFINITION_NAME, |
|
65 |
JExcelStoreParameters.class, "JExcelParameters.xml"); |
|
66 |
try { |
|
67 |
FileHelper.registerMetadataDefinition( |
|
68 |
JExcelStoreProvider.METADATA_DEFINITION_NAME, |
|
69 |
JExcelStoreProvider.class, "JExcelMetadata.xml"); |
|
70 |
} catch (MetadataException e) { |
|
71 |
exs.add(e); |
|
72 |
} |
|
73 |
|
|
74 |
DataManagerProviderServices dataman = (DataManagerProviderServices) DALLocator |
|
75 |
.getDataManager(); |
|
76 |
|
|
77 |
try { |
|
78 |
if (!dataman.getStoreProviders().contains(JExcelStoreProvider.NAME)) { |
|
79 |
dataman.registerStoreProviderFactory(new JExcelStoreProviderFactory(JExcelStoreProvider.NAME, JExcelStoreProvider.DESCRIPTION)); |
|
80 |
|
|
81 |
} |
|
82 |
} catch (RuntimeException e) { |
|
83 |
exs.add(e); |
|
84 |
} |
|
85 |
|
|
86 |
try { |
|
87 |
DALFileLocator.getFilesystemServerExplorerManager() |
|
88 |
.registerProvider(JExcelStoreProvider.NAME, |
|
89 |
JExcelStoreProvider.DESCRIPTION, |
|
90 |
JExcelFilesystemServerProvider.class); |
|
91 |
} catch (RuntimeException e) { |
|
92 |
exs.add(e); |
|
93 |
} |
|
94 |
|
|
95 |
DynFormSPIManager manager = DynFormSPILocator.getDynFormSPIManager(); |
|
96 |
manager.registerDynFieldFactory(new JDynFormFieldExcelSheetFactory()); |
|
97 |
manager.registerDynFieldFactory(new JDynFormFieldExcelPointFieldsFactory()); |
|
98 |
|
|
99 |
if (exs.size() > 0) { |
|
100 |
throw new LibraryException(this.getClass(), exs); |
|
101 |
} |
|
102 |
} |
|
103 |
} |
org.gvsig.jexcel/tags/org.gvsig.jexcel-1.0.87/org.gvsig.jexcel.provider/src/main/java/org/gvsig/jexcel/dal/provider/JExcelFilesystemServerProvider.java | ||
---|---|---|
1 |
/** |
|
2 |
* gvSIG. Desktop Geographic Information System. |
|
3 |
* |
|
4 |
* Copyright (C) 2007-2013 gvSIG Association. |
|
5 |
* |
|
6 |
* This program is free software; you can redistribute it and/or |
|
7 |
* modify it under the terms of the GNU General Public License |
|
8 |
* as published by the Free Software Foundation; either version 3 |
|
9 |
* of the License, or (at your option) any later version. |
|
10 |
* |
|
11 |
* This program is distributed in the hope that it will be useful, |
|
12 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
13 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
14 |
* GNU General Public License for more details. |
|
15 |
* |
|
16 |
* You should have received a copy of the GNU General Public License |
|
17 |
* along with this program; if not, write to the Free Software |
|
18 |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, |
|
19 |
* MA 02110-1301, USA. |
|
20 |
* |
|
21 |
* For any additional information, do not hesitate to contact us |
|
22 |
* at info AT gvsig.com, or visit our website www.gvsig.com. |
|
23 |
*/ |
|
24 |
package org.gvsig.jexcel.dal.provider; |
|
25 |
|
|
26 |
import java.io.File; |
|
27 |
|
|
28 |
import org.gvsig.fmap.dal.DALLocator; |
|
29 |
import org.gvsig.fmap.dal.DataManager; |
|
30 |
import org.gvsig.fmap.dal.DataServerExplorer; |
|
31 |
import org.gvsig.fmap.dal.DataStoreParameters; |
|
32 |
import org.gvsig.fmap.dal.NewDataStoreParameters; |
|
33 |
import org.gvsig.fmap.dal.exception.CreateException; |
|
34 |
import org.gvsig.fmap.dal.exception.DataException; |
|
35 |
import org.gvsig.fmap.dal.exception.FileNotFoundException; |
|
36 |
import org.gvsig.fmap.dal.exception.RemoveException; |
|
37 |
import org.gvsig.fmap.dal.resource.spi.ResourceConsumer; |
|
38 |
import org.gvsig.fmap.dal.resource.spi.ResourceProvider; |
|
39 |
import org.gvsig.fmap.dal.serverexplorer.filesystem.impl.AbstractFilesystemServerExplorerProvider; |
|
40 |
import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProvider; |
|
41 |
import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProviderServices; |
|
42 |
|
|
43 |
public class JExcelFilesystemServerProvider extends AbstractFilesystemServerExplorerProvider |
|
44 |
implements FilesystemServerExplorerProvider, ResourceConsumer { |
|
45 |
|
|
46 |
private FilesystemServerExplorerProviderServices serverExplorer; |
|
47 |
|
|
48 |
public String getDataStoreProviderName() { |
|
49 |
return JExcelStoreProvider.NAME; |
|
50 |
} |
|
51 |
|
|
52 |
public int getMode() { |
|
53 |
return DataServerExplorer.MODE_FEATURE | DataServerExplorer.MODE_GEOMETRY; |
|
54 |
} |
|
55 |
|
|
56 |
public boolean accept(File pathname) { |
|
57 |
return (pathname.getName().toLowerCase().endsWith(".xls")); |
|
58 |
} |
|
59 |
|
|
60 |
public String getDescription() { |
|
61 |
return JExcelStoreProvider.DESCRIPTION; |
|
62 |
} |
|
63 |
|
|
64 |
public DataStoreParameters getParameters(File file) throws DataException { |
|
65 |
DataManager manager = DALLocator.getDataManager(); |
|
66 |
JExcelStoreParameters params = (JExcelStoreParameters) manager |
|
67 |
.createStoreParameters(this |
|
68 |
.getDataStoreProviderName()); |
|
69 |
params.setFile(file); |
|
70 |
return params; |
|
71 |
} |
|
72 |
|
|
73 |
public boolean canCreate() { |
|
74 |
return false; |
|
75 |
} |
|
76 |
|
|
77 |
public boolean canCreate(NewDataStoreParameters parameters) { |
|
78 |
throw new UnsupportedOperationException(); |
|
79 |
} |
|
80 |
|
|
81 |
public void create(NewDataStoreParameters parameters, boolean overwrite) |
|
82 |
throws CreateException { |
|
83 |
throw new UnsupportedOperationException(); |
|
84 |
} |
|
85 |
|
|
86 |
public NewDataStoreParameters getCreateParameters() throws DataException { |
|
87 |
throw new UnsupportedOperationException(); |
|
88 |
} |
|
89 |
|
|
90 |
public void initialize( |
|
91 |
FilesystemServerExplorerProviderServices serverExplorer) { |
|
92 |
this.serverExplorer = serverExplorer; |
|
93 |
} |
|
94 |
|
|
95 |
public void remove(DataStoreParameters parameters) throws RemoveException { |
|
96 |
File file = ((JExcelStoreParameters) parameters).getFile(); |
|
97 |
if (!file.exists()) { |
|
98 |
throw new RemoveException(this.getDataStoreProviderName(), |
|
99 |
new FileNotFoundException(file)); |
|
100 |
} |
|
101 |
if (!file.delete()) { |
|
102 |
// FIXME throws ??? |
|
103 |
} |
|
104 |
|
|
105 |
} |
|
106 |
|
|
107 |
public boolean closeResourceRequested(ResourceProvider resource) { |
|
108 |
// while it is using a resource anyone can't close it |
|
109 |
return false; |
|
110 |
} |
|
111 |
|
|
112 |
public void resourceChanged(ResourceProvider resource) { |
|
113 |
//Do nothing |
|
114 |
|
|
115 |
} |
|
116 |
|
|
117 |
|
|
118 |
} |
org.gvsig.jexcel/tags/org.gvsig.jexcel-1.0.87/org.gvsig.jexcel.provider/src/main/java/org/gvsig/jexcel/dal/provider/JExcelStoreProvider.java | ||
---|---|---|
1 |
/** |
|
2 |
* gvSIG. Desktop Geographic Information System. |
|
3 |
* |
|
4 |
* Copyright (C) 2007-2013 gvSIG Association. |
|
5 |
* |
|
6 |
* This program is free software; you can redistribute it and/or |
|
7 |
* modify it under the terms of the GNU General Public License |
|
8 |
* as published by the Free Software Foundation; either version 3 |
|
9 |
* of the License, or (at your option) any later version. |
|
10 |
* |
|
11 |
* This program is distributed in the hope that it will be useful, |
|
12 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
13 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
14 |
* GNU General Public License for more details. |
|
15 |
* |
|
16 |
* You should have received a copy of the GNU General Public License |
|
17 |
* along with this program; if not, write to the Free Software |
|
18 |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, |
|
19 |
* MA 02110-1301, USA. |
|
20 |
* |
|
21 |
* For any additional information, do not hesitate to contact us |
|
22 |
* at info AT gvsig.com, or visit our website www.gvsig.com. |
|
23 |
*/ |
|
24 |
package org.gvsig.jexcel.dal.provider; |
|
25 |
|
|
26 |
import java.io.File; |
|
27 |
import java.io.IOException; |
|
28 |
import java.text.SimpleDateFormat; |
|
29 |
import java.util.ArrayList; |
|
30 |
import java.util.HashMap; |
|
31 |
import java.util.Iterator; |
|
32 |
import java.util.List; |
|
33 |
import java.util.Locale; |
|
34 |
import jxl.Cell; |
|
35 |
import jxl.Sheet; |
|
36 |
import jxl.Workbook; |
|
37 |
import jxl.read.biff.BiffException; |
|
38 |
|
|
39 |
import org.apache.commons.io.FilenameUtils; |
|
40 |
import org.apache.commons.lang3.StringUtils; |
|
41 |
import org.cresques.cts.IProjection; |
|
42 |
import org.gvsig.fmap.dal.DALLocator; |
|
43 |
import org.gvsig.fmap.dal.DataManager; |
|
44 |
import org.gvsig.fmap.dal.DataServerExplorer; |
|
45 |
import org.gvsig.fmap.dal.DataStore; |
|
46 |
import org.gvsig.fmap.dal.DataStoreNotification; |
|
47 |
import org.gvsig.fmap.dal.DataTypes; |
|
48 |
import org.gvsig.fmap.dal.FileHelper; |
|
49 |
import org.gvsig.fmap.dal.exception.DataException; |
|
50 |
import org.gvsig.fmap.dal.exception.InitializeException; |
|
51 |
import org.gvsig.fmap.dal.exception.OpenException; |
|
52 |
import org.gvsig.fmap.dal.exception.ReadException; |
|
53 |
import org.gvsig.fmap.dal.exception.ValidateDataParametersException; |
|
54 |
import org.gvsig.fmap.dal.feature.EditableFeature; |
|
55 |
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor; |
|
56 |
import org.gvsig.fmap.dal.feature.EditableFeatureType; |
|
57 |
import org.gvsig.fmap.dal.feature.Feature; |
|
58 |
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor; |
|
59 |
import org.gvsig.fmap.dal.feature.FeatureAttributeEmulator; |
|
60 |
import org.gvsig.fmap.dal.feature.FeatureStore; |
|
61 |
import org.gvsig.fmap.dal.feature.FeatureType; |
|
62 |
import org.gvsig.fmap.dal.feature.exception.PerformEditingException; |
|
63 |
import org.gvsig.fmap.dal.feature.spi.FeatureProvider; |
|
64 |
import org.gvsig.fmap.dal.feature.spi.FeatureStoreProviderServices; |
|
65 |
import org.gvsig.fmap.dal.feature.spi.memory.AbstractMemoryStoreProvider; |
|
66 |
import org.gvsig.fmap.dal.resource.file.FileResource; |
|
67 |
import org.gvsig.fmap.dal.resource.spi.ResourceConsumer; |
|
68 |
import org.gvsig.fmap.dal.resource.spi.ResourceProvider; |
|
69 |
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorer; |
|
70 |
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorerParameters; |
|
71 |
import org.gvsig.fmap.dal.spi.DataStoreProviderServices; |
|
72 |
import org.gvsig.fmap.geom.Geometry; |
|
73 |
import org.gvsig.fmap.geom.GeometryLocator; |
|
74 |
import org.gvsig.fmap.geom.GeometryManager; |
|
75 |
import org.gvsig.fmap.geom.aggregate.MultiPoint; |
|
76 |
import org.gvsig.fmap.geom.primitive.Envelope; |
|
77 |
import org.gvsig.fmap.geom.primitive.Point; |
|
78 |
import org.gvsig.fmap.geom.type.GeometryType; |
|
79 |
import org.gvsig.tools.ToolsLocator; |
|
80 |
import org.gvsig.tools.dataTypes.Coercion; |
|
81 |
import org.gvsig.tools.dataTypes.CoercionException; |
|
82 |
import org.gvsig.tools.dataTypes.DataType; |
|
83 |
import org.gvsig.tools.dataTypes.DataTypesManager; |
|
84 |
import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException; |
|
85 |
import org.gvsig.tools.exception.BaseException; |
|
86 |
import org.gvsig.tools.exception.NotYetImplemented; |
|
87 |
import org.gvsig.tools.persistence.PersistentState; |
|
88 |
import org.gvsig.tools.persistence.exception.PersistenceException; |
|
89 |
import org.gvsig.tools.task.SimpleTaskStatus; |
|
90 |
import org.gvsig.tools.task.TaskStatusManager; |
|
91 |
import org.gvsig.tools.visitor.VisitCanceledException; |
|
92 |
import org.gvsig.tools.visitor.Visitor; |
|
93 |
import org.slf4j.Logger; |
|
94 |
import org.slf4j.LoggerFactory; |
|
95 |
|
|
96 |
public class JExcelStoreProvider extends AbstractMemoryStoreProvider implements |
|
97 |
ResourceConsumer { |
|
98 |
|
|
99 |
private static final Logger logger = LoggerFactory.getLogger(JExcelStoreProvider.class); |
|
100 |
|
|
101 |
public static final String NAME = "JExcel"; |
|
102 |
public static final String DESCRIPTION = "JExcel file"; |
|
103 |
|
|
104 |
public static final String METADATA_DEFINITION_NAME = NAME; |
|
105 |
|
|
106 |
private ResourceProvider resource; |
|
107 |
|
|
108 |
private long counterNewsOIDs = 0; |
|
109 |
private Envelope envelope; |
|
110 |
private boolean need_calculate_envelope = false; |
|
111 |
private SimpleTaskStatus taskStatus; |
|
112 |
private String sheetName = ""; |
|
113 |
|
|
114 |
public JExcelStoreProvider(JExcelStoreParameters parameters, |
|
115 |
DataStoreProviderServices storeServices) throws InitializeException { |
|
116 |
super( |
|
117 |
parameters, |
|
118 |
storeServices, |
|
119 |
FileHelper.newMetadataContainer(METADATA_DEFINITION_NAME) |
|
120 |
); |
|
121 |
|
|
122 |
TaskStatusManager manager = ToolsLocator.getTaskStatusManager(); |
|
123 |
this.taskStatus = manager.createDefaultSimpleTaskStatus("JExcel"); |
|
124 |
|
|
125 |
counterNewsOIDs = 0; |
|
126 |
|
|
127 |
File file = getJExcelParameters().getFile(); |
|
128 |
resource = this.createResource( |
|
129 |
FileResource.NAME, |
|
130 |
new Object[]{file.getAbsolutePath()} |
|
131 |
); |
|
132 |
|
|
133 |
resource.addConsumer(this); |
|
134 |
initializeFeatureTypes(); |
|
135 |
} |
|
136 |
|
|
137 |
private JExcelStoreParameters getJExcelParameters() { |
|
138 |
return (JExcelStoreParameters) this.getParameters(); |
|
139 |
} |
|
140 |
|
|
141 |
public String getProviderName() { |
|
142 |
return NAME; |
|
143 |
} |
|
144 |
|
|
145 |
public boolean allowWrite() { |
|
146 |
return false; |
|
147 |
} |
|
148 |
|
|
149 |
private String getFullFileName() { |
|
150 |
// Usar solo para mostrar mensajes en el logger. |
|
151 |
String s = "(unknow)"; |
|
152 |
try { |
|
153 |
s = getJExcelParameters().getFile().getAbsolutePath(); |
|
154 |
} catch (Exception e2) { |
|
155 |
s = "(unknow)"; |
|
156 |
} |
|
157 |
return s; |
|
158 |
} |
|
159 |
|
|
160 |
@Override |
|
161 |
public void open() throws OpenException { |
|
162 |
if ( this.data != null ) { |
|
163 |
return; |
|
164 |
} |
|
165 |
this.data = new ArrayList<>(); |
|
166 |
resource.setData(new HashMap()); |
|
167 |
counterNewsOIDs = 0; |
|
168 |
try { |
|
169 |
loadFeatures(); |
|
170 |
} catch (RuntimeException e) { |
|
171 |
logger.warn("Can't load features from JExcel '" + getFullFileName() + "'.", e); |
|
172 |
throw e; |
|
173 |
} catch (Exception e) { |
|
174 |
logger.warn("Can't load features from JExcel '" + getFullFileName() + "'.", e); |
|
175 |
throw new RuntimeException(e); |
|
176 |
} |
|
177 |
} |
|
178 |
|
|
179 |
public DataServerExplorer getExplorer() throws ReadException { |
|
180 |
DataManager manager = DALLocator.getDataManager(); |
|
181 |
FilesystemServerExplorerParameters params; |
|
182 |
try { |
|
183 |
params = (FilesystemServerExplorerParameters) manager |
|
184 |
.createServerExplorerParameters(FilesystemServerExplorer.NAME); |
|
185 |
params.setRoot(this.getJExcelParameters().getFile().getParent()); |
|
186 |
return manager.openServerExplorer(FilesystemServerExplorer.NAME, params); |
|
187 |
} catch (DataException e) { |
|
188 |
throw new ReadException(this.getProviderName(), e); |
|
189 |
} catch (ValidateDataParametersException e) { |
|
190 |
throw new ReadException(this.getProviderName(), e); |
|
191 |
} |
|
192 |
|
|
193 |
} |
|
194 |
|
|
195 |
public void performChanges(Iterator deleteds, Iterator inserteds, Iterator updateds, Iterator originalFeatureTypesUpdated) throws PerformEditingException { |
|
196 |
throw new UnsupportedOperationException(); |
|
197 |
} |
|
198 |
|
|
199 |
public boolean closeResourceRequested(ResourceProvider resource) { |
|
200 |
return true; |
|
201 |
} |
|
202 |
|
|
203 |
public int getOIDType() { |
|
204 |
return DataTypes.LONG; |
|
205 |
} |
|
206 |
|
|
207 |
public boolean supportsAppendMode() { |
|
208 |
return false; |
|
209 |
} |
|
210 |
|
|
211 |
public void append(FeatureProvider featureProvider) { |
|
212 |
throw new UnsupportedOperationException(); |
|
213 |
} |
|
214 |
|
|
215 |
public void beginAppend() { |
|
216 |
throw new UnsupportedOperationException(); |
|
217 |
} |
|
218 |
|
|
219 |
public void endAppend() { |
|
220 |
throw new UnsupportedOperationException(); |
|
221 |
} |
|
222 |
|
|
223 |
public void saveToState(PersistentState state) throws PersistenceException { |
|
224 |
throw new NotYetImplemented(); |
|
225 |
} |
|
226 |
|
|
227 |
public void loadFromState(PersistentState state) throws PersistenceException { |
|
228 |
throw new NotYetImplemented(); |
|
229 |
} |
|
230 |
|
|
231 |
public Object createNewOID() { |
|
232 |
return new Long(counterNewsOIDs++); |
|
233 |
} |
|
234 |
|
|
235 |
protected void initializeFeatureTypes() throws InitializeException { |
|
236 |
try { |
|
237 |
this.open(); |
|
238 |
} catch (OpenException e) { |
|
239 |
throw new InitializeException(this.getProviderName(), e); |
|
240 |
} |
|
241 |
} |
|
242 |
|
|
243 |
public Envelope getEnvelope() throws DataException { |
|
244 |
this.open(); |
|
245 |
if ( this.envelope != null ) { |
|
246 |
return this.envelope; |
|
247 |
} |
|
248 |
if ( !this.need_calculate_envelope ) { |
|
249 |
return null; |
|
250 |
} |
|
251 |
FeatureStore fs = this.getFeatureStore(); |
|
252 |
FeatureType ft = fs.getDefaultFeatureType(); |
|
253 |
FeatureAttributeDescriptor fad = ft.getAttributeDescriptor(ft.getDefaultGeometryAttributeIndex()); |
|
254 |
|
|
255 |
try { |
|
256 |
this.envelope = GeometryLocator.getGeometryManager().createEnvelope(fad.getGeomType().getSubType()); |
|
257 |
fs.accept(new Visitor() { |
|
258 |
public void visit(Object obj) throws VisitCanceledException, BaseException { |
|
259 |
Feature f = (Feature) obj; |
|
260 |
Geometry geom = f.getDefaultGeometry(); |
|
261 |
if ( geom != null ) { |
|
262 |
envelope.add(geom.getEnvelope()); |
|
263 |
} |
|
264 |
} |
|
265 |
}); |
|
266 |
} catch (BaseException e) { |
|
267 |
logger.warn("Can't calculate the envelope of JExcel file '" + this.getFullName() + "'.", e); |
|
268 |
this.envelope = null; |
|
269 |
} |
|
270 |
|
|
271 |
this.need_calculate_envelope = false; |
|
272 |
return this.envelope; |
|
273 |
} |
|
274 |
|
|
275 |
public Object getDynValue(String name) throws DynFieldNotFoundException { |
|
276 |
if ( DataStore.METADATA_ENVELOPE.equalsIgnoreCase(name) ) { |
|
277 |
try { |
|
278 |
return this.getEnvelope(); |
|
279 |
} catch (DataException e) { |
|
280 |
return null; |
|
281 |
} |
|
282 |
} else { |
|
283 |
if ( DataStore.METADATA_CRS.equalsIgnoreCase(name) ) { |
|
284 |
IProjection pro = JExcelStoreParameters.getCRS(this.getJExcelParameters()); |
|
285 |
if ( pro != null ) { |
|
286 |
return pro; |
|
287 |
} |
|
288 |
} |
|
289 |
} |
|
290 |
return super.getDynValue(name); |
|
291 |
} |
|
292 |
|
|
293 |
public void resourceChanged(ResourceProvider resource) { |
|
294 |
this.getStoreServices().notifyChange( |
|
295 |
DataStoreNotification.RESOURCE_CHANGED, |
|
296 |
resource); |
|
297 |
} |
|
298 |
|
|
299 |
public Object getSourceId() { |
|
300 |
return this.getJExcelParameters().getFile(); |
|
301 |
} |
|
302 |
|
|
303 |
public String getName() { |
|
304 |
String name = this.getJExcelParameters().getFile().getName(); |
|
305 |
if( StringUtils.isBlank(this.sheetName) ) { |
|
306 |
return FilenameUtils.getBaseName(name); |
|
307 |
} |
|
308 |
return FilenameUtils.getBaseName(name)+"."+this.sheetName; |
|
309 |
} |
|
310 |
|
|
311 |
public String getFullName() { |
|
312 |
return this.getJExcelParameters().getFile().getAbsolutePath(); |
|
313 |
} |
|
314 |
|
|
315 |
public ResourceProvider getResource() { |
|
316 |
return resource; |
|
317 |
} |
|
318 |
|
|
319 |
private class FieldTypeParser { |
|
320 |
|
|
321 |
public String name = null; |
|
322 |
public int type = DataTypes.STRING; |
|
323 |
public int size = 0; |
|
324 |
public boolean allowNulls = true; |
|
325 |
|
|
326 |
private String typename = "string"; |
|
327 |
|
|
328 |
FieldTypeParser() { |
|
329 |
} |
|
330 |
|
|
331 |
private int getType(String value) { |
|
332 |
DataTypesManager dataTypesManager = ToolsLocator.getDataTypesManager(); |
|
333 |
return dataTypesManager.getType(typename); |
|
334 |
} |
|
335 |
|
|
336 |
// El formato seria: |
|
337 |
// name[:typename[:size[:notnull|null]]] |
|
338 |
// name[__typename[__size[__notnull|null]]] |
|
339 |
// |
|
340 |
public boolean parse(String value) { |
|
341 |
String typename = null; |
|
342 |
String[] ss = null; |
|
343 |
if ( value.contains(":") ) { |
|
344 |
ss = value.split(":"); |
|
345 |
} else if ( value.contains("__") ) { |
|
346 |
ss = value.split("__"); |
|
347 |
} |
|
348 |
if ( ss == null ) { |
|
349 |
this.name = value; |
|
350 |
return true; |
|
351 |
} |
|
352 |
switch (ss.length) { |
|
353 |
case 4: |
|
354 |
if ( ss[3].length() > 0 ) { |
|
355 |
if ( "notnull".equalsIgnoreCase(ss[3]) ) { |
|
356 |
this.allowNulls = false; |
|
357 |
} else { |
|
358 |
this.allowNulls = true; |
|
359 |
} |
|
360 |
} |
|
361 |
case 3: |
|
362 |
if ( ss[2].length() > 0 ) { |
|
363 |
try { |
|
364 |
this.size = Integer.parseInt(ss[2]); |
|
365 |
} catch (Exception ex) { |
|
366 |
logger.warn("Ignore incorrect field size for field " + value + " in JExcel header of '" + getFullFileName() + "'.", ex); |
|
367 |
} |
|
368 |
} |
|
369 |
case 2: |
|
370 |
if ( ss[1].length() > 0 ) { |
|
371 |
this.typename = ss[1]; |
|
372 |
this.type = this.getType(this.typename); |
|
373 |
if ( this.type == DataTypes.INVALID ) { |
|
374 |
this.type = DataTypes.STRING; |
|
375 |
logger.info("Type '" + typename + "' not valid for attribute '" + value + "' in JExcel file '" + getFullFileName() + "'."); |
|
376 |
} |
|
377 |
} |
|
378 |
case 1: |
|
379 |
this.name = ss[0]; |
|
380 |
break; |
|
381 |
} |
|
382 |
|
|
383 |
if ( this.type != DataTypes.STRING ) { |
|
384 |
this.size = 0; |
|
385 |
} |
|
386 |
return true; |
|
387 |
} |
|
388 |
|
|
389 |
} |
|
390 |
|
|
391 |
private EditableFeatureType getFeatureType(String headers[], int automaticTypes[]) { |
|
392 |
EditableFeatureType fType = getStoreServices().createFeatureType(this.getName()); |
|
393 |
fType.setHasOID(true); |
|
394 |
DataTypesManager dataTypesManager = ToolsLocator.getDataTypesManager(); |
|
395 |
|
|
396 |
FieldTypeParser[] fieldTypes = new FieldTypeParser[headers.length]; |
|
397 |
// |
|
398 |
// Calculamos cuales pueden ser los tipos de datos |
|
399 |
// |
|
400 |
for ( int i = 0; i < fieldTypes.length; i++ ) { |
|
401 |
fieldTypes[i] = new FieldTypeParser(); |
|
402 |
} |
|
403 |
|
|
404 |
// Asuminos los tipos pasados por parametro, que se supone |
|
405 |
// son los detectados automaticamente. |
|
406 |
if ( automaticTypes != null ) { |
|
407 |
for ( int i = 0; i < fieldTypes.length && i < automaticTypes.length; i++ ) { |
|
408 |
fieldTypes[i].type = automaticTypes[i]; |
|
409 |
} |
|
410 |
} |
|
411 |
// Luego probamos con lo que diga las cabezeras del CVS, sobreescribiendo |
|
412 |
// los tipos anteriores en caso de definirse en la cabezara. |
|
413 |
for ( int i = 0; i < fieldTypes.length; i++ ) { |
|
414 |
if ( !fieldTypes[i].parse(headers[i]) ) { |
|
415 |
continue; |
|
416 |
} |
|
417 |
|
|
418 |
} |
|
419 |
|
|
420 |
// Y por ultimo hacemos caso a lo que se haya especificado en los parametros |
|
421 |
// de apertura del JExcel, teniendo esto prioridad sobre todo. |
|
422 |
int[] param_types = JExcelStoreParameters.getFieldTypes(this.getParameters()); |
|
423 |
if ( param_types != null ) { |
|
424 |
for ( int i = 0; i < fieldTypes.length && i < param_types.length; i++ ) { |
|
425 |
fieldTypes[i].type = param_types[i]; |
|
426 |
} |
|
427 |
} |
|
428 |
|
|
429 |
int[] param_sizes = JExcelStoreParameters.getFieldSizes(this.getParameters()); |
|
430 |
if ( param_sizes != null ) { |
|
431 |
for ( int i = 0; i < param_sizes.length; i++ ) { |
|
432 |
if ( param_sizes[i] > 0 ) { |
|
433 |
fieldTypes[i].size = param_sizes[i]; |
|
434 |
} |
|
435 |
} |
|
436 |
} |
|
437 |
// |
|
438 |
// Una vez ya sabemos los tipos de datos rellenamos el feature-type |
|
439 |
// |
|
440 |
for ( int i = 0; i < fieldTypes.length; i++ ) { |
|
441 |
EditableFeatureAttributeDescriptor fad = fType.add( |
|
442 |
fieldTypes[i].name, |
|
443 |
fieldTypes[i].type |
|
444 |
); |
|
445 |
fad.setSize(fieldTypes[i].size); |
|
446 |
fad.setAllowNull(fieldTypes[i].allowNulls); |
|
447 |
if ( fieldTypes[i].type == DataTypes.GEOMETRY |
|
448 |
&& fType.getDefaultGeometryAttributeName() == null ) { |
|
449 |
fType.setDefaultGeometryAttributeName(fieldTypes[i].name); |
|
450 |
} |
|
451 |
} |
|
452 |
String[] pointDimensionNames = JExcelStoreParameters.getPointDimensionNames(this.getParameters()); |
|
453 |
if ( pointDimensionNames != null ) { |
|
454 |
// ToPointEvaluaror evaluator = new ToPointEvaluaror(pointDimensionNames); |
|
455 |
PointAttributeEmulator emulator = new PointAttributeEmulator(pointDimensionNames); |
|
456 |
EditableFeatureAttributeDescriptor attr = fType.add("GEOM", DataTypes.GEOMETRY, emulator); |
|
457 |
GeometryManager geommgr = GeometryLocator.getGeometryManager(); |
|
458 |
GeometryType gt; |
|
459 |
try { |
|
460 |
if ( emulator.fieldNames != null && emulator.fieldNames.length <= 2 ) { |
|
461 |
gt = geommgr.getGeometryType(Geometry.TYPES.GEOMETRY, Geometry.SUBTYPES.GEOM2D); |
|
462 |
} else { |
|
463 |
gt = geommgr.getGeometryType(Geometry.TYPES.GEOMETRY, Geometry.SUBTYPES.GEOM3D); |
|
464 |
} |
|
465 |
attr.setGeometryType(gt); |
|
466 |
} catch (Exception e) { |
|
467 |
logger.warn("Can't set geometry type for the calculated field in JExcel file '" + getFullFileName() + "'.", e); |
|
468 |
} |
|
469 |
} |
|
470 |
return fType; |
|
471 |
} |
|
472 |
|
|
473 |
static class PointAttributeEmulator implements FeatureAttributeEmulator { |
|
474 |
|
|
475 |
private static final Logger logger = LoggerFactory.getLogger(PointAttributeEmulator.class); |
|
476 |
|
|
477 |
private static final int XNAME = 0; |
|
478 |
private static final int YNAME = 1; |
|
479 |
private static final int ZNAME = 2; |
|
480 |
|
|
481 |
private final GeometryManager geommgr; |
|
482 |
private final String[] fieldNames; |
|
483 |
private final Coercion toDouble; |
|
484 |
private final DataType dataType; |
|
485 |
private int errorcount = 0; |
|
486 |
|
|
487 |
public PointAttributeEmulator(String[] pointDimensionNames) { |
|
488 |
if ( pointDimensionNames.length > 2 ) { |
|
489 |
this.fieldNames = new String[3]; |
|
490 |
this.fieldNames[ZNAME] = pointDimensionNames[2]; |
|
491 |
} else { |
|
492 |
this.fieldNames = new String[2]; |
|
493 |
} |
|
494 |
this.fieldNames[XNAME] = pointDimensionNames[0]; |
|
495 |
this.fieldNames[YNAME] = pointDimensionNames[1]; |
|
496 |
this.geommgr = GeometryLocator.getGeometryManager(); |
|
497 |
DataTypesManager datatypeManager = ToolsLocator.getDataTypesManager(); |
|
498 |
|
|
499 |
this.toDouble = datatypeManager.getCoercion(DataTypes.DOUBLE); |
Also available in: Unified diff