Lines 25-30
Link Here
|
25 |
import java.util.ArrayList; |
25 |
import java.util.ArrayList; |
26 |
import java.util.Arrays; |
26 |
import java.util.Arrays; |
27 |
import java.util.Collections; |
27 |
import java.util.Collections; |
|
|
28 |
import java.util.HashMap; |
28 |
import java.util.List; |
29 |
import java.util.List; |
29 |
import java.util.Map; |
30 |
import java.util.Map; |
30 |
import java.util.Map.Entry; |
31 |
import java.util.Map.Entry; |
Lines 76-82
Link Here
|
76 |
private final List<CTXf> xfs = new ArrayList<CTXf>(); |
77 |
private final List<CTXf> xfs = new ArrayList<CTXf>(); |
77 |
|
78 |
|
78 |
private final List<CTDxf> dxfs = new ArrayList<CTDxf>(); |
79 |
private final List<CTDxf> dxfs = new ArrayList<CTDxf>(); |
79 |
|
80 |
|
|
|
81 |
// Use DualBidiMap |
82 |
//http://commons.apache.org/proper/commons-collections/apidocs/org/apache/commons/collections4/bidimap/DualHashBidiMap.html |
83 |
private final Map<XSSFFont, Integer> fontsInverse = new HashMap<XSSFFont, Integer>(); |
84 |
private final Map<XSSFCellFill, Integer> fillsInverse = new HashMap<XSSFCellFill, Integer>(); |
85 |
private final Map<XSSFCellBorder, Integer> bordersInverse = new HashMap<XSSFCellBorder, Integer>(); |
86 |
private final Map<CTXf, Integer> xfsInverse = new HashMap<CTXf, Integer>(); |
87 |
|
80 |
/** |
88 |
/** |
81 |
* The first style id available for use as a custom style |
89 |
* The first style id available for use as a custom style |
82 |
*/ |
90 |
*/ |
Lines 174-179
Link Here
|
174 |
for (CTFont font : ctfonts.getFontArray()) { |
182 |
for (CTFont font : ctfonts.getFontArray()) { |
175 |
// Create the font and save it. Themes Table supplied later |
183 |
// Create the font and save it. Themes Table supplied later |
176 |
XSSFFont f = new XSSFFont(font, idx); |
184 |
XSSFFont f = new XSSFFont(font, idx); |
|
|
185 |
fontsInverse.put(f, fonts.size()); |
177 |
fonts.add(f); |
186 |
fonts.add(f); |
178 |
idx++; |
187 |
idx++; |
179 |
} |
188 |
} |
Lines 181-187
Link Here
|
181 |
CTFills ctfills = styleSheet.getFills(); |
190 |
CTFills ctfills = styleSheet.getFills(); |
182 |
if(ctfills != null){ |
191 |
if(ctfills != null){ |
183 |
for (CTFill fill : ctfills.getFillArray()) { |
192 |
for (CTFill fill : ctfills.getFillArray()) { |
184 |
fills.add(new XSSFCellFill(fill)); |
193 |
XSSFCellFill xfill = new XSSFCellFill(fill); |
|
|
194 |
fillsInverse.put(xfill, fills.size()); |
195 |
fills.add(xfill); |
185 |
} |
196 |
} |
186 |
} |
197 |
} |
187 |
|
198 |
|
Lines 188-199
Link Here
|
188 |
CTBorders ctborders = styleSheet.getBorders(); |
199 |
CTBorders ctborders = styleSheet.getBorders(); |
189 |
if(ctborders != null) { |
200 |
if(ctborders != null) { |
190 |
for (CTBorder border : ctborders.getBorderArray()) { |
201 |
for (CTBorder border : ctborders.getBorderArray()) { |
191 |
borders.add(new XSSFCellBorder(border)); |
202 |
XSSFCellBorder xborder = new XSSFCellBorder(border); |
|
|
203 |
bordersInverse.put(xborder, borders.size()); |
204 |
borders.add(xborder); |
192 |
} |
205 |
} |
193 |
} |
206 |
} |
194 |
|
207 |
|
195 |
CTCellXfs cellXfs = styleSheet.getCellXfs(); |
208 |
CTCellXfs cellXfs = styleSheet.getCellXfs(); |
196 |
if(cellXfs != null) xfs.addAll(Arrays.asList(cellXfs.getXfArray())); |
209 |
if(cellXfs != null) { |
|
|
210 |
for (CTXf ctxf : cellXfs.getXfArray()) { |
211 |
xfsInverse.put(ctxf, xfs.size()); |
212 |
xfs.add(ctxf); |
213 |
} |
214 |
} |
197 |
|
215 |
|
198 |
CTCellStyleXfs cellStyleXfs = styleSheet.getCellStyleXfs(); |
216 |
CTCellStyleXfs cellStyleXfs = styleSheet.getCellStyleXfs(); |
199 |
if(cellStyleXfs != null) styleXfs.addAll(Arrays.asList(cellStyleXfs.getXfArray())); |
217 |
if(cellStyleXfs != null) styleXfs.addAll(Arrays.asList(cellStyleXfs.getXfArray())); |
Lines 272-287
Link Here
|
272 |
* {@link XSSFFont#registerTo(StylesTable)} |
290 |
* {@link XSSFFont#registerTo(StylesTable)} |
273 |
*/ |
291 |
*/ |
274 |
public int putFont(XSSFFont font, boolean forceRegistration) { |
292 |
public int putFont(XSSFFont font, boolean forceRegistration) { |
275 |
int idx = -1; |
293 |
if (!forceRegistration) { |
276 |
if(!forceRegistration) { |
294 |
Integer idx = fontsInverse.get(font); |
277 |
idx = fonts.indexOf(font); |
295 |
if (idx != null) |
|
|
296 |
return idx; |
278 |
} |
297 |
} |
279 |
|
298 |
int idx = fonts.size(); |
280 |
if (idx != -1) { |
299 |
fontsInverse.put(font, idx); |
281 |
return idx; |
|
|
282 |
} |
283 |
|
284 |
idx = fonts.size(); |
285 |
fonts.add(font); |
300 |
fonts.add(font); |
286 |
return idx; |
301 |
return idx; |
287 |
} |
302 |
} |
Lines 300-311
Link Here
|
300 |
return new XSSFCellStyle(idx, styleXfId, this, theme); |
315 |
return new XSSFCellStyle(idx, styleXfId, this, theme); |
301 |
} |
316 |
} |
302 |
public int putStyle(XSSFCellStyle style) { |
317 |
public int putStyle(XSSFCellStyle style) { |
303 |
CTXf mainXF = style.getCoreXf(); |
318 |
return this.putCellXf(style.getCoreXf()); |
304 |
|
|
|
305 |
if(! xfs.contains(mainXF)) { |
306 |
xfs.add(mainXF); |
307 |
} |
308 |
return xfs.indexOf(mainXF); |
309 |
} |
319 |
} |
310 |
|
320 |
|
311 |
public XSSFCellBorder getBorderAt(int idx) { |
321 |
public XSSFCellBorder getBorderAt(int idx) { |
Lines 320-329
Link Here
|
320 |
* @return the index of the added border |
330 |
* @return the index of the added border |
321 |
*/ |
331 |
*/ |
322 |
public int putBorder(XSSFCellBorder border) { |
332 |
public int putBorder(XSSFCellBorder border) { |
323 |
int idx = borders.indexOf(border); |
333 |
Integer idx = bordersInverse.get(border); |
324 |
if (idx != -1) { |
334 |
if (idx != null) { |
325 |
return idx; |
335 |
return idx; |
326 |
} |
336 |
} |
|
|
337 |
bordersInverse.put(border, borders.size()); |
327 |
borders.add(border); |
338 |
borders.add(border); |
328 |
border.setThemesTable(theme); |
339 |
border.setThemesTable(theme); |
329 |
return borders.size() - 1; |
340 |
return borders.size() - 1; |
Lines 357-366
Link Here
|
357 |
* @return the index of the added fill |
368 |
* @return the index of the added fill |
358 |
*/ |
369 |
*/ |
359 |
public int putFill(XSSFCellFill fill) { |
370 |
public int putFill(XSSFCellFill fill) { |
360 |
int idx = fills.indexOf(fill); |
371 |
Integer idx = fillsInverse.get(fill); |
361 |
if (idx != -1) { |
372 |
if (idx != null) { |
362 |
return idx; |
373 |
return idx; |
363 |
} |
374 |
} |
|
|
375 |
fillsInverse.put(fill, fills.size()); |
364 |
fills.add(fill); |
376 |
fills.add(fill); |
365 |
return fills.size() - 1; |
377 |
return fills.size() - 1; |
366 |
} |
378 |
} |
Lines 574-592
Link Here
|
574 |
private void initialize() { |
586 |
private void initialize() { |
575 |
//CTFont ctFont = createDefaultFont(); |
587 |
//CTFont ctFont = createDefaultFont(); |
576 |
XSSFFont xssfFont = createDefaultFont(); |
588 |
XSSFFont xssfFont = createDefaultFont(); |
|
|
589 |
fontsInverse.put(xssfFont, fonts.size()); |
577 |
fonts.add(xssfFont); |
590 |
fonts.add(xssfFont); |
578 |
|
591 |
|
579 |
CTFill[] ctFill = createDefaultFills(); |
592 |
CTFill[] ctFill = createDefaultFills(); |
580 |
fills.add(new XSSFCellFill(ctFill[0])); |
593 |
XSSFCellFill xfill = new XSSFCellFill(ctFill[0]); |
581 |
fills.add(new XSSFCellFill(ctFill[1])); |
594 |
fillsInverse.put(xfill, fills.size()); |
|
|
595 |
fills.add(xfill); |
596 |
xfill = new XSSFCellFill(ctFill[1]); |
597 |
fillsInverse.put(xfill, fills.size()); |
598 |
fills.add(xfill); |
582 |
|
599 |
|
583 |
CTBorder ctBorder = createDefaultBorder(); |
600 |
CTBorder ctBorder = createDefaultBorder(); |
584 |
borders.add(new XSSFCellBorder(ctBorder)); |
601 |
XSSFCellBorder xborder = new XSSFCellBorder(ctBorder); |
|
|
602 |
bordersInverse.put(xborder, borders.size()); |
603 |
borders.add(xborder); |
585 |
|
604 |
|
586 |
CTXf styleXf = createDefaultXf(); |
605 |
CTXf styleXf = createDefaultXf(); |
587 |
styleXfs.add(styleXf); |
606 |
styleXfs.add(styleXf); |
588 |
CTXf xf = createDefaultXf(); |
607 |
CTXf xf = createDefaultXf(); |
589 |
xf.setXfId(0); |
608 |
xf.setXfId(0); |
|
|
609 |
xfsInverse.put(xf, xfs.size()); |
590 |
xfs.add(xf); |
610 |
xfs.add(xf); |
591 |
} |
611 |
} |
592 |
|
612 |
|