Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * The Contents of this file are made available subject to the terms of
5 : : * either of the following licenses
6 : : *
7 : : * - GNU Lesser General Public License Version 2.1
8 : : * - Sun Industry Standards Source License Version 1.1
9 : : *
10 : : * Sun Microsystems Inc., October, 2000
11 : : *
12 : : * GNU Lesser General Public License Version 2.1
13 : : * =============================================
14 : : * Copyright 2000 by Sun Microsystems, Inc.
15 : : * 901 San Antonio Road, Palo Alto, CA 94303, USA
16 : : *
17 : : * This library is free software; you can redistribute it and/or
18 : : * modify it under the terms of the GNU Lesser General Public
19 : : * License version 2.1, as published by the Free Software Foundation.
20 : : *
21 : : * This library is distributed in the hope that it will be useful,
22 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
23 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
24 : : * Lesser General Public License for more details.
25 : : *
26 : : * You should have received a copy of the GNU Lesser General Public
27 : : * License along with this library; if not, write to the Free Software
28 : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
29 : : * MA 02111-1307 USA
30 : : *
31 : : *
32 : : * Sun Industry Standards Source License Version 1.1
33 : : * =================================================
34 : : * The contents of this file are subject to the Sun Industry Standards
35 : : * Source License Version 1.1 (the "License"); You may not use this file
36 : : * except in compliance with the License. You may obtain a copy of the
37 : : * License at http://www.openoffice.org/license.html.
38 : : *
39 : : * Software provided under this License is provided on an "AS IS" basis,
40 : : * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
41 : : * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
42 : : * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
43 : : * See the License for the specific provisions governing your rights and
44 : : * obligations concerning the Software.
45 : : *
46 : : * The Initial Developer of the Original Code is: IBM Corporation
47 : : *
48 : : * Copyright: 2008 by IBM Corporation
49 : : *
50 : : * All Rights Reserved.
51 : : *
52 : : * Contributor(s): _______________________________________
53 : : *
54 : : *
55 : : ************************************************************************/
56 : : /*************************************************************************
57 : : * @file
58 : : * For LWP filter architecture prototype
59 : : ************************************************************************/
60 : : /*************************************************************************
61 : : * Change History
62 : : Jan 2005 Created
63 : : ************************************************************************/
64 : :
65 : : #include "lwpobjfactory.hxx"
66 : : #include "lwpdefs.hxx"
67 : : #include "lwpdoc.hxx"
68 : : #include "lwpstory.hxx"
69 : : #include "lwplayout.hxx"
70 : : #include "lwppara.hxx"
71 : : #include "lwpparastyle.hxx"
72 : : #include "lwpcharacterstyle.hxx"
73 : : #include "lwppiece.hxx"
74 : : #include "lwptabrack.hxx"
75 : : #include "lwpsilverbullet.hxx"
76 : : #include "lwpdivinfo.hxx"
77 : : #include "lwpholder.hxx"
78 : : #include "lwpdivopts.hxx"
79 : : #include "lwplaypiece.hxx"
80 : : #include "lwpsection.hxx"
81 : : #include "lwppagehint.hxx"
82 : : #include "lwpoleobject.hxx"
83 : : #include "lwpgrfobj.hxx"
84 : : #include "lwptable.hxx"
85 : : #include "lwptblcell.hxx"
86 : : #include "lwpmarker.hxx"
87 : : #include "lwpproplist.hxx"
88 : : #include <new>
89 : : #include "lwpframelayout.hxx"
90 : : #include "lwptablelayout.hxx"
91 : : #include "lwppagelayout.hxx"
92 : : #include "lwptblformula.hxx"
93 : : #include "lwpvpointer.hxx"
94 : : #include "lwpfootnote.hxx"
95 : : #include "lwpnumericfmt.hxx"
96 : : #include "lwpfnlayout.hxx"
97 : : #include "lwptoc.hxx"
98 : : #include "lwpdocdata.hxx"
99 : : #include "lwpnotes.hxx"
100 : : #include "lwpverdocument.hxx"
101 : :
102 : : //LwpObjectFactory* LwpObjectFactory::m_pMgr = NULL;
103 : :
104 : 18 : LwpObjectFactory::LwpObjectFactory(LwpSvStream* pSvStream)
105 [ + - ][ + - ]: 18 : : m_nNumObjs(0), m_pSvStream(pSvStream)
106 : : {
107 [ + - ]: 18 : m_IdToObjList.clear();
108 : 18 : }
109 : :
110 [ + - ]: 18 : LwpObjectFactory::~LwpObjectFactory()
111 : : {
112 [ + + ]: 18 : if(!m_IdToObjList.empty())
113 [ + - ]: 12 : ClearObjectMap();
114 : 18 : }
115 : :
116 : : /**
117 : : * @descr clear object map and delete all objects
118 : : */
119 : 12 : void LwpObjectFactory::ClearObjectMap()
120 : : {
121 [ + - ]: 12 : LwpIdToObjMap::iterator it = m_IdToObjList.begin();
122 [ + - ][ + + ]: 2316 : while( it!=m_IdToObjList.end() )
123 : : {
124 [ + - ][ + - ]: 2304 : delete it->second;
[ + - ]
125 [ + - ]: 2304 : it->second = NULL;
126 : 2304 : ++it;
127 : : }
128 [ + - ]: 12 : m_IdToObjList.clear();
129 : 12 : }
130 : : /**
131 : : * @descr read the index manager
132 : : */
133 : 18 : void LwpObjectFactory::ReadIndex(LwpSvStream* pStrm)
134 : : {
135 : 18 : m_IndexMgr.Read(pStrm);
136 : 18 : }
137 : :
138 : : /**
139 : : * @descr create all kinds of objects except lwp7
140 : : */
141 : 2760 : LwpObject* LwpObjectFactory::CreateObject(sal_uInt32 type, LwpObjectHeader &objHdr)
142 : : {
143 : 2760 : LwpObject* newObj = NULL;
144 : 2760 : m_nNumObjs++;
145 : : assert(type<300);
146 [ + + + - : 2760 : switch(type)
+ + + + +
+ + + + +
+ + + - +
- - + + -
+ + + + -
- + + + +
+ + + - -
- - + + +
+ + + + +
+ + + + -
- - - - -
- - - - -
- - - - -
- + - - +
+ + + + +
+ - - - -
- - - - -
- - - - -
- - - - -
- - - +
- ]
147 : : {
148 : : case VO_DOCUMENT:
149 : : {
150 [ + - ][ + + ]: 30 : newObj = new LwpDocument(objHdr, m_pSvStream);
151 : 27 : break;
152 : : }
153 : : case VO_DOCSOCK:
154 : : {
155 [ + - ][ + - ]: 24 : newObj = new LwpDocSock(objHdr, m_pSvStream);
156 : 24 : break;
157 : : }
158 : : case VO_DIVISIONINFO:
159 : : {
160 [ + - ][ + - ]: 24 : newObj = new LwpDivInfo(objHdr, m_pSvStream);
161 : 24 : break;
162 : : }
163 : : case VO_DIVOPTS:
164 : : {
165 [ # # ][ # # ]: 0 : newObj = new LwpDivisionOptions(objHdr, m_pSvStream);
166 : 0 : break;
167 : : }
168 : : case VO_HEADCONTENT:
169 : : {
170 [ + - ][ + - ]: 24 : newObj = new LwpHeadContent(objHdr, m_pSvStream);
171 : 24 : break;
172 : : }
173 : : case VO_HEADLAYOUT:
174 : : {
175 [ + - ][ + - ]: 96 : newObj = new LwpHeadLayout(objHdr, m_pSvStream);
176 : 96 : break;
177 : : }
178 : : case VO_PAGELAYOUT:
179 : : {
180 [ + - ][ + - ]: 24 : newObj = new LwpPageLayout(objHdr, m_pSvStream);
181 : 24 : break;
182 : : }
183 : : case VO_STORY:
184 : : {
185 [ + - ][ + - ]: 153 : newObj = new LwpStory(objHdr, m_pSvStream);
186 : 153 : break;
187 : : }
188 : : case VO_PARA:
189 : : {
190 [ + - ][ + - ]: 795 : newObj = new LwpPara(objHdr, m_pSvStream);
191 : 795 : break;
192 : : }
193 : : case VO_HEADERLAYOUT:
194 : : {
195 [ + - ][ + - ]: 36 : newObj = new LwpHeaderLayout(objHdr, m_pSvStream);
196 : 36 : break;
197 : : }
198 : : case VO_FOOTERLAYOUT:
199 : : {
200 [ + - ][ + - ]: 36 : newObj = new LwpFooterLayout(objHdr, m_pSvStream);
201 : 36 : break;
202 : : }
203 : : case VO_FRAMELAYOUT:
204 : : {
205 [ + - ][ + - ]: 96 : newObj = new LwpFrameLayout(objHdr, m_pSvStream);
206 : 96 : break;
207 : : }
208 : : case VO_LAYOUTGEOMETRY:
209 : : {
210 [ + - ][ + - ]: 138 : newObj = new LwpLayoutGeometry(objHdr, m_pSvStream);
211 : 138 : break;
212 : : }
213 : : case VO_LAYOUTSCALE:
214 : : {
215 [ + - ][ + - ]: 42 : newObj = new LwpLayoutScale(objHdr, m_pSvStream);
216 : 42 : break;
217 : : }
218 : : case VO_LAYOUTMARGINS:
219 : : {
220 [ + - ][ + - ]: 108 : newObj = new LwpLayoutMargins(objHdr, m_pSvStream);
221 : 108 : break;
222 : : }
223 : : case VO_LAYOUTBORDERSTUFF:
224 : : {
225 [ + - ][ + - ]: 30 : newObj = new LwpLayoutBorder(objHdr, m_pSvStream);
226 : 30 : break;
227 : : }
228 : : case VO_LAYOUTBACKGROUNDSTUFF:
229 : : {
230 [ + - ][ + - ]: 24 : newObj = new LwpLayoutBackground(objHdr, m_pSvStream);
231 : 24 : break;
232 : : }
233 : : case VO_LAYOUTEXTERNALBORDERSTUFF:
234 : : {
235 [ # # ][ # # ]: 0 : newObj = new LwpLayoutExternalBorder(objHdr, m_pSvStream);
236 : 0 : break;
237 : : }
238 : : case VO_LAYOUTCOLUMNS:
239 : : {
240 [ + - ][ + - ]: 36 : newObj = new LwpLayoutColumns(objHdr, m_pSvStream);
241 : 36 : break;
242 : : }
243 : : case VO_LAYOUTGUTTERSTUFF:
244 : : {
245 [ # # ][ # # ]: 0 : newObj = new LwpLayoutGutters(objHdr, m_pSvStream);
246 : 0 : break;
247 : : }
248 : : case VO_LAYOUTJOINSTUFF:
249 : : {
250 [ # # ][ # # ]: 0 : newObj = new LwpLayoutJoins(objHdr, m_pSvStream);
251 : 0 : break;
252 : : }
253 : : case VO_LAYOUTSHADOW:
254 : : {
255 [ + - ][ + - ]: 12 : newObj = new LwpLayoutShadow(objHdr, m_pSvStream);
256 : 12 : break;
257 : : }
258 : : // 01/12/2005
259 : : case VO_PARASTYLE:
260 : : {
261 [ + - ][ + - ]: 204 : newObj = new LwpParaStyle(objHdr, m_pSvStream);
262 : 204 : break;
263 : : }
264 : : case VO_CHARACTERSTYLE:
265 : : {
266 [ # # ][ # # ]: 0 : newObj = new LwpCharacterStyle(objHdr, m_pSvStream);
267 : 0 : break;
268 : : }
269 : : case VO_SILVERBULLET:
270 : : {
271 [ + - ][ + - ]: 39 : newObj = new LwpSilverBullet(objHdr, m_pSvStream);
272 : 39 : break;
273 : : }
274 : : case VO_ALIGNMENTPIECE:
275 : : {
276 [ + - ][ + - ]: 51 : newObj = new LwpAlignmentPiece(objHdr, m_pSvStream);
277 : 51 : break;
278 : : }
279 : : case VO_INDENTPIECE:
280 : : {
281 [ + - ][ + - ]: 72 : newObj = new LwpIndentPiece(objHdr, m_pSvStream);
282 : 72 : break;
283 : : }
284 : : case VO_SPACINGPIECE:
285 : : {
286 [ + - ][ + - ]: 78 : newObj = new LwpSpacingPiece(objHdr, m_pSvStream);
287 : 78 : break;
288 : : }
289 : : case VO_CHARBORDERPIECE:
290 : : {
291 [ # # ][ # # ]: 0 : newObj = new LwpCharacterBorderPiece(objHdr, m_pSvStream);
292 : 0 : break;
293 : : }
294 : : case VO_AMIKAKEPIECE:
295 : : {
296 [ # # ][ # # ]: 0 : newObj = new LwpAmikakePiece(objHdr, m_pSvStream);
297 : 0 : break;
298 : : }
299 : : // end
300 : :
301 : : case VO_HEADHOLDER:
302 : : {
303 [ + - ][ + - ]: 51 : newObj = new LwpDLVListHeadHolder(objHdr, m_pSvStream);
304 : 51 : break;
305 : : }
306 : :
307 : : // start
308 : : case VO_PARABORDERPIECE:
309 : : {
310 [ + - ][ + - ]: 18 : newObj = new LwpParaBorderPiece(objHdr, m_pSvStream);
311 : 18 : break;
312 : : }
313 : : case VO_BREAKSPIECE:
314 : : {
315 [ + - ][ + - ]: 60 : newObj = new LwpBreaksPiece(objHdr, m_pSvStream);
316 : 60 : break;
317 : : }
318 : : case VO_NUMBERINGPIECE:
319 : : {
320 [ + - ][ + - ]: 15 : newObj = new LwpNumberingPiece(objHdr, m_pSvStream);
321 : 15 : break;
322 : : }
323 : : case VO_TABRACK:
324 : : {
325 [ + - ][ + - ]: 9 : newObj = new LwpTabRack(objHdr, m_pSvStream);
326 : 9 : break;
327 : : }
328 : : case VO_TABPIECE:
329 : : {
330 [ + - ][ + - ]: 12 : newObj = new LwpTabPiece(objHdr, m_pSvStream);
331 : 12 : break;
332 : : }
333 : : case VO_PARABACKGROUNDPIECE: //perhaps wrong.
334 : : {
335 [ + - ][ + - ]: 9 : newObj = new LwpBackgroundPiece(objHdr, m_pSvStream);
336 : 9 : break;
337 : : }
338 : : // end.
339 : : case VO_SECTION:
340 : : {
341 [ # # ][ # # ]: 0 : newObj = new LwpSection(objHdr, m_pSvStream);
342 : 0 : break;
343 : : }
344 : : case VO_INDEXSECTION:
345 : : {
346 [ # # ][ # # ]: 0 : newObj = new LwpIndexSection(objHdr, m_pSvStream);
347 : 0 : break;
348 : : }
349 : : case VO_HEADTAILHOLDER:
350 : : {
351 [ # # ][ # # ]: 0 : newObj = new LwpDLVListHeadTailHolder(objHdr, m_pSvStream);
352 : 0 : break;
353 : : }
354 : : case VO_PAGEHINT:
355 : : {
356 [ # # ][ # # ]: 0 : newObj = new LwpPageHint(objHdr, m_pSvStream);
357 : 0 : break;
358 : : }
359 : : case VO_OLEOBJECT:
360 : : {
361 [ + - ][ + - ]: 54 : newObj = new LwpOleObject(objHdr, m_pSvStream);
362 : 54 : break;
363 : : }
364 : : //
365 : : case VO_GRAPHIC:
366 : : {
367 [ + - ][ + - ]: 21 : newObj = new LwpGraphicObject(objHdr, m_pSvStream);
368 : 21 : break;
369 : : }
370 : : case VO_DOCDATA:
371 : : {
372 [ + - ][ + - ]: 12 : newObj = new LwpDocData(objHdr, m_pSvStream);
373 : 12 : break;
374 : : }
375 : : //
376 : : case VO_DROPCAPLAYOUT:
377 : : {
378 [ + - ][ + - ]: 12 : newObj = new LwpDropcapLayout(objHdr, m_pSvStream);
379 : 12 : break;
380 : : }
381 : : case VO_LAYOUTRELATIVITY:
382 : : {
383 [ + - ][ + - ]: 132 : newObj = new LwpLayoutRelativity(objHdr, m_pSvStream);
384 : 132 : break;
385 : : }
386 : : // for table
387 : : case VO_TABLE:
388 : : {
389 [ + - ][ + - ]: 3 : newObj = new LwpTable(objHdr, m_pSvStream);
390 : 3 : break;
391 : : }
392 : : case VO_TABLELAYOUT:
393 : : {
394 [ + - ][ + - ]: 3 : newObj = new LwpTableLayout(objHdr, m_pSvStream);
395 : 3 : break;
396 : : }
397 : : case VO_SUPERTABLE:
398 : : {
399 [ + - ][ + - ]: 3 : newObj = new LwpSuperTable(objHdr, m_pSvStream);
400 : 3 : break;
401 : : }
402 : : case VO_SUPERTABLELAYOUT:
403 : : {
404 [ + - ][ + - ]: 6 : newObj = new LwpSuperTableLayout(objHdr, m_pSvStream);
405 : 6 : break;
406 : : }
407 : : case VO_CELLLAYOUT:
408 : : {
409 [ + - ][ + - ]: 63 : newObj = new LwpCellLayout(objHdr, m_pSvStream);
410 : 63 : break;
411 : : }
412 : : case VO_ROWLAYOUT:
413 : : {
414 [ + - ][ + - ]: 15 : newObj = new LwpRowLayout(objHdr, m_pSvStream);
415 : 15 : break;
416 : : }
417 : : case VO_LAYOUTNUMERICS:
418 : : {
419 [ + - ][ + - ]: 18 : newObj = new LwpLayoutNumerics(objHdr, m_pSvStream);
420 : 18 : break;
421 : : }
422 : : case VO_NUMERICVALUE:
423 : : {
424 [ # # ][ # # ]: 0 : newObj = new LwpNumericValue(objHdr, m_pSvStream);
425 : 0 : break;
426 : : }
427 : : case VO_FORMULAINFO:
428 : : {
429 [ # # ][ # # ]: 0 : newObj = new LwpFormulaInfo(objHdr, m_pSvStream);
430 : 0 : break;
431 : : }
432 : : case VO_COLUMNLAYOUT:
433 : : {
434 [ # # ][ # # ]: 0 : newObj = new LwpColumnLayout(objHdr, m_pSvStream);
435 : 0 : break;
436 : : }
437 : : case VO_ROWLIST:
438 : : {
439 [ # # ][ # # ]: 0 : newObj = new LwpRowList(objHdr, m_pSvStream);
440 : 0 : break;
441 : : }
442 : : case VO_CELLLIST:
443 : : {
444 [ # # ][ # # ]: 0 : newObj = new LwpCellList(objHdr, m_pSvStream);
445 : 0 : break;
446 : : }
447 : : case VO_TABLERANGE:
448 : : {
449 [ # # ][ # # ]: 0 : newObj = new LwpTableRange(objHdr, m_pSvStream);
450 : 0 : break;
451 : : }
452 : : case VO_CELLRANGE:
453 : : {
454 [ # # ][ # # ]: 0 : newObj = new LwpCellRange(objHdr, m_pSvStream);
455 : 0 : break;
456 : : }
457 : : case VO_FOLDER:
458 : : {
459 [ # # ][ # # ]: 0 : newObj = new LwpFolder(objHdr, m_pSvStream);
460 : 0 : break;
461 : : }
462 : : case VO_DEPENDENT:
463 : : {
464 [ # # ][ # # ]: 0 : newObj = new LwpDependent(objHdr, m_pSvStream);
465 : 0 : break;
466 : : }
467 : : case VO_CONNECTEDCELLLAYOUT:
468 : : {
469 [ # # ][ # # ]: 0 : newObj = new LwpConnectedCellLayout(objHdr, m_pSvStream);
470 : 0 : break;
471 : : }
472 : : case VO_HIDDENCELLLAYOUT:
473 : : {
474 [ # # ][ # # ]: 0 : newObj = new LwpHiddenCellLayout(objHdr, m_pSvStream);
475 : 0 : break;
476 : : }
477 : : case VO_TABLEHEADINGLAYOUT:
478 : : {
479 [ # # ][ # # ]: 0 : newObj = new LwpTableHeadingLayout(objHdr, m_pSvStream);
480 : 0 : break;
481 : : }
482 : : case VO_ROWHEADINGLAYOUT:
483 : : {
484 [ # # ][ # # ]: 0 : newObj = new LwpRowHeadingLayout(objHdr, m_pSvStream);
485 : 0 : break;
486 : : }
487 : : case VO_TABLEHEADING:
488 : : {
489 [ # # ][ # # ]: 0 : newObj = new LwpTableHeading(objHdr, m_pSvStream);
490 : 0 : break;
491 : : }
492 : : case VO_CHBLKMARKER:
493 : : {
494 [ # # ][ # # ]: 0 : newObj = new LwpCHBlkMarker(objHdr, m_pSvStream);
495 : 0 : break;
496 : : }
497 : : case VO_PROPLIST:
498 : : {
499 [ # # ][ # # ]: 0 : newObj = new LwpPropListElement(objHdr, m_pSvStream);
500 : 0 : break;
501 : : }
502 : : case VO_BOOKMARK:
503 : : {
504 [ # # ][ # # ]: 0 : newObj = new LwpBookMark(objHdr, m_pSvStream);
505 : 0 : break;
506 : : }
507 : : case VO_FIELDMARKER:
508 : : {
509 [ + - ][ + - ]: 6 : newObj = new LwpFieldMark(objHdr, m_pSvStream);
510 : 6 : break;
511 : : }
512 : : case VO_OBJECTHOLDER:
513 : : {
514 [ # # ][ # # ]: 0 : newObj = new LwpObjectHolder(objHdr, m_pSvStream);
515 : 0 : break;
516 : : }
517 : : case VO_POBJECTHOLDER:
518 : : {
519 [ # # ][ # # ]: 0 : newObj = new LwpObjectHolder(objHdr, m_pSvStream);
520 : 0 : break;
521 : : }
522 : : case VO_VERGTR: //fall through
523 : : case VO_VERQTR:
524 : : {
525 [ + - ][ + - ]: 24 : newObj = new LwpVersionedPointer(objHdr, m_pSvStream);
526 : 24 : break;
527 : : }
528 : : case VO_FOOTNOTE:
529 : : {
530 [ + - ][ + - ]: 3 : newObj = new LwpFootnote(objHdr, m_pSvStream);
531 : 3 : break;
532 : : }
533 : : case VO_FOOTNOTETABLE:
534 : : {
535 [ + - ][ + - ]: 3 : newObj = new LwpFootnoteTable(objHdr, m_pSvStream);
536 : 3 : break;
537 : : }
538 : : case VO_FOOTNOTEOPTS:
539 : : {
540 [ + - ][ + - ]: 12 : newObj = new LwpFootnoteOptions(objHdr, m_pSvStream);
541 : 12 : break;
542 : : }
543 : : case VO_FOOTNOTELAYOUT:
544 : : {
545 [ + - ][ + - ]: 3 : newObj = new LwpFootnoteLayout(objHdr, m_pSvStream);
546 : 3 : break;
547 : : }
548 : : case VO_FNROWLAYOUT:
549 : : {
550 [ + - ][ + - ]: 3 : newObj = new LwpFnRowLayout(objHdr, m_pSvStream);
551 : 3 : break;
552 : : }
553 : : case VO_FNCELLLAYOUT:
554 : : {
555 [ + - ][ + - ]: 6 : newObj = new LwpFnCellLayout(objHdr, m_pSvStream);
556 : 6 : break;
557 : : }
558 : : case VO_ENDNOTELAYOUT:
559 : : {
560 [ # # ][ # # ]: 0 : newObj = new LwpEndnoteLayout(objHdr, m_pSvStream);
561 : 0 : break;
562 : : }
563 : : case VO_ENSUPERTABLELAYOUT:
564 : : {
565 [ # # ][ # # ]: 0 : newObj = new LwpEnSuperTableLayout(objHdr, m_pSvStream);
566 : 0 : break;
567 : : }
568 : : case VO_FNSUPERTABLELAYOUT:
569 : : {
570 [ # # ][ # # ]: 0 : newObj = new LwpFnSuperTableLayout(objHdr, m_pSvStream);
571 : 0 : break;
572 : : }
573 : : case VO_CONTONLAYOUT:
574 : : {
575 [ # # ][ # # ]: 0 : newObj = new LwpContOnLayout(objHdr, m_pSvStream);
576 : 0 : break;
577 : : }
578 : : case VO_CONTFROMLAYOUT:
579 : : {
580 [ # # ][ # # ]: 0 : newObj = new LwpContFromLayout(objHdr, m_pSvStream);
581 : 0 : break;
582 : : }
583 : : case VO_GROUPLAYOUT:
584 : : {
585 [ # # ][ # # ]: 0 : newObj = new LwpGroupLayout(objHdr, m_pSvStream);
586 : 0 : break;
587 : : }
588 : : case VO_GROUPFRAME:
589 : : {
590 [ # # ][ # # ]: 0 : newObj = new LwpGroupFrame(objHdr, m_pSvStream);
591 : 0 : break;
592 : : }
593 : : case VO_TOCSUPERTABLELAYOUT:
594 : : {
595 [ # # ][ # # ]: 0 : newObj = new LwpTocSuperLayout(objHdr, m_pSvStream);
596 : 0 : break;
597 : : }
598 : : case VO_LISTLIST:
599 : : {
600 [ # # ][ # # ]: 0 : newObj = new LwpListList(objHdr, m_pSvStream);
601 : 0 : break;
602 : : }
603 : : case VO_TOCLEVELDATA:
604 : : {
605 [ # # ][ # # ]: 0 : newObj = new LwpTocLevelData(objHdr, m_pSvStream);
606 : 0 : break;
607 : : }
608 : : case VO_NOTELAYOUT:
609 : : {
610 [ # # ][ # # ]: 0 : newObj = new LwpNoteLayout(objHdr, m_pSvStream);
611 : 0 : break;
612 : : }
613 : : case VO_NOTEHEADERLAYOUT:
614 : : {
615 [ # # ][ # # ]: 0 : newObj = new LwpNoteHeaderLayout(objHdr, m_pSvStream);
616 : 0 : break;
617 : : }
618 : : case VO_NOTETEXTLAYOUT:
619 : : {
620 [ # # ][ # # ]: 0 : newObj = new LwpNoteTextLayout(objHdr, m_pSvStream);
621 : 0 : break;
622 : : }
623 : : case VO_VPLAYOUT:
624 : : {
625 [ # # ][ # # ]: 0 : newObj = new LwpViewportLayout(objHdr, m_pSvStream);
626 : 0 : break;
627 : : }
628 : : case VO_PCOLBLOCK:
629 : : {
630 [ # # ][ # # ]: 0 : newObj = new LwpParallelColumnsBlock(objHdr, m_pSvStream);
631 : 0 : break;
632 : : }
633 : : case VO_SUPERPARALLELCOLUMNLAYOUT:
634 : : {
635 [ # # ][ # # ]: 0 : newObj = new LwpSuperParallelColumnLayout(objHdr, m_pSvStream);
636 : 0 : break;
637 : : }
638 : : case VO_PCOLLAYOUT:
639 : : {
640 [ # # ][ # # ]: 0 : newObj = new LwpParallelColumnsLayout(objHdr, m_pSvStream);
641 : 0 : break;
642 : : }
643 : : case VO_PARALLELCOLUMNS:
644 : : {
645 [ # # ][ # # ]: 0 : newObj = new LwpParallelColumns(objHdr, m_pSvStream);
646 : 0 : break;
647 : : }
648 : : case VO_RUBYMARKER:
649 : : {
650 [ # # ][ # # ]: 0 : newObj = new LwpRubyMarker(objHdr, m_pSvStream);
651 : 0 : break;
652 : : }
653 : : case VO_RUBYLAYOUT:
654 : : {
655 [ # # ][ # # ]: 0 : newObj = new LwpRubyLayout(objHdr, m_pSvStream);
656 : 0 : break;
657 : : }
658 : : case VO_GLOSSARY:
659 : : {
660 [ # # ][ # # ]: 0 : newObj = new LwpGlossary(objHdr, m_pSvStream);
661 : 0 : break;
662 : : }
663 : : case VO_SUPERGLOSSARYLAYOUT:
664 : : {
665 [ # # ][ # # ]: 0 : newObj = new LwpSuperGlossaryLayout(objHdr, m_pSvStream);
666 : 0 : break;
667 : : }
668 : : case VO_VERDOCUMENT:
669 : : {
670 [ + - ][ + - ]: 12 : newObj = new LwpVerDocument(objHdr, m_pSvStream);
671 : 12 : break;
672 : : }
673 : : default:
674 : : {
675 : : //Unknown object type
676 : : assert(false);
677 : 0 : newObj = NULL;
678 : 0 : break;
679 : : }
680 : : }
681 [ + - ]: 2757 : if(newObj)
682 : : {
683 [ + + ]: 2757 : newObj->QuickRead();
684 [ + - ]: 2760 : m_IdToObjList.insert(LwpIdToObjMap::value_type(*objHdr.GetID(), newObj));
685 : : }
686 : :
687 : 2751 : return(newObj);
688 : : }
689 : : /**
690 : : * @descr query object by object id
691 : : * object is created if not in the factory
692 : : */
693 : 37221 : LwpObject* LwpObjectFactory::QueryObject(const LwpObjectID &objID)
694 : : {
695 : 37221 : LwpObject* obj = FindObject( objID );
696 [ + + ]: 37221 : if(!obj)
697 : : {
698 : : //Read the object from file
699 [ + - ]: 2760 : sal_uInt32 nStreamOffset = m_IndexMgr.GetObjOffset(objID);
700 [ - + ]: 2760 : if(nStreamOffset == BAD_OFFSET) //does not find the offset in index manager
701 : 0 : return NULL;
702 : :
703 : 2760 : sal_Int64 nDesiredPos = nStreamOffset + LwpSvStream::LWP_STREAM_BASE;
704 [ + - ][ - + ]: 2760 : if (nDesiredPos != m_pSvStream->Seek(nDesiredPos))
705 : 0 : return NULL;
706 [ + - ]: 2760 : LwpObjectHeader objHdr;
707 [ + - ][ - + ]: 2760 : if (!objHdr.Read(*m_pSvStream))
708 : 0 : return NULL;
709 : :
710 : 2760 : LwpObjectID* pId = objHdr.GetID();
711 [ - + ][ - + ]: 2760 : if (pId && (*pId != objID))
[ + - ]
712 : : {
713 : : OSL_FAIL("apparently incorrect objid, invalidating");
714 : 0 : return NULL;
715 : : }
716 : :
717 [ + + ]: 2760 : obj = CreateObject(objHdr.GetTag(), objHdr);
718 : : }
719 : 37221 : return obj;
720 : : }
721 : :
722 : : /**
723 : : * @descr find object in the factory per the object id
724 : : */
725 : 37668 : LwpObject* LwpObjectFactory::FindObject(const LwpObjectID &objID)
726 : : {
727 [ + - ]: 37668 : LwpIdToObjMap::const_iterator it = m_IdToObjList.find(objID);
728 [ + + ][ + - ]: 37668 : if (it != m_IdToObjList.end()) {
729 [ + - ]: 34908 : return((*it).second);
730 : : }
731 : : else
732 : : {
733 : 37668 : return NULL;
734 : : }
735 : : }
736 : : /**
737 : : * @descr release object in the factory per the object id
738 : : */
739 : 447 : void LwpObjectFactory::ReleaseObject(const LwpObjectID &objID)
740 : : {
741 : 447 : LwpObject* obj = FindObject( objID );
742 : 447 : m_IdToObjList.erase(objID);
743 [ + - ]: 447 : if( obj )
744 [ + - ]: 447 : delete obj;
745 : 447 : }
746 : :
747 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|