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 0 : LwpObjectFactory::LwpObjectFactory(LwpSvStream* pSvStream)
105 0 : : m_nNumObjs(0), m_pSvStream(pSvStream)
106 : {
107 0 : m_IdToObjList.clear();
108 0 : }
109 :
110 0 : LwpObjectFactory::~LwpObjectFactory()
111 : {
112 0 : if(!m_IdToObjList.empty())
113 0 : ClearObjectMap();
114 0 : }
115 :
116 : /**
117 : * @descr clear object map and delete all objects
118 : */
119 0 : void LwpObjectFactory::ClearObjectMap()
120 : {
121 0 : LwpIdToObjMap::iterator it = m_IdToObjList.begin();
122 0 : while( it!=m_IdToObjList.end() )
123 : {
124 0 : delete it->second;
125 0 : it->second = NULL;
126 0 : ++it;
127 : }
128 0 : m_IdToObjList.clear();
129 0 : }
130 : /**
131 : * @descr read the index manager
132 : */
133 0 : void LwpObjectFactory::ReadIndex(LwpSvStream* pStrm)
134 : {
135 0 : m_IndexMgr.Read(pStrm);
136 0 : }
137 :
138 : /**
139 : * @descr create all kinds of objects except lwp7
140 : */
141 0 : LwpObject* LwpObjectFactory::CreateObject(sal_uInt32 type, LwpObjectHeader &objHdr)
142 : {
143 0 : LwpObject* newObj = NULL;
144 0 : m_nNumObjs++;
145 : assert(type<300);
146 0 : switch(type)
147 : {
148 : case VO_DOCUMENT:
149 : {
150 0 : newObj = new LwpDocument(objHdr, m_pSvStream);
151 0 : break;
152 : }
153 : case VO_DOCSOCK:
154 : {
155 0 : newObj = new LwpDocSock(objHdr, m_pSvStream);
156 0 : break;
157 : }
158 : case VO_DIVISIONINFO:
159 : {
160 0 : newObj = new LwpDivInfo(objHdr, m_pSvStream);
161 0 : 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 0 : newObj = new LwpHeadContent(objHdr, m_pSvStream);
171 0 : break;
172 : }
173 : case VO_HEADLAYOUT:
174 : {
175 0 : newObj = new LwpHeadLayout(objHdr, m_pSvStream);
176 0 : break;
177 : }
178 : case VO_PAGELAYOUT:
179 : {
180 0 : newObj = new LwpPageLayout(objHdr, m_pSvStream);
181 0 : break;
182 : }
183 : case VO_STORY:
184 : {
185 0 : newObj = new LwpStory(objHdr, m_pSvStream);
186 0 : break;
187 : }
188 : case VO_PARA:
189 : {
190 0 : newObj = new LwpPara(objHdr, m_pSvStream);
191 0 : break;
192 : }
193 : case VO_HEADERLAYOUT:
194 : {
195 0 : newObj = new LwpHeaderLayout(objHdr, m_pSvStream);
196 0 : break;
197 : }
198 : case VO_FOOTERLAYOUT:
199 : {
200 0 : newObj = new LwpFooterLayout(objHdr, m_pSvStream);
201 0 : break;
202 : }
203 : case VO_FRAMELAYOUT:
204 : {
205 0 : newObj = new LwpFrameLayout(objHdr, m_pSvStream);
206 0 : break;
207 : }
208 : case VO_LAYOUTGEOMETRY:
209 : {
210 0 : newObj = new LwpLayoutGeometry(objHdr, m_pSvStream);
211 0 : break;
212 : }
213 : case VO_LAYOUTSCALE:
214 : {
215 0 : newObj = new LwpLayoutScale(objHdr, m_pSvStream);
216 0 : break;
217 : }
218 : case VO_LAYOUTMARGINS:
219 : {
220 0 : newObj = new LwpLayoutMargins(objHdr, m_pSvStream);
221 0 : break;
222 : }
223 : case VO_LAYOUTBORDERSTUFF:
224 : {
225 0 : newObj = new LwpLayoutBorder(objHdr, m_pSvStream);
226 0 : break;
227 : }
228 : case VO_LAYOUTBACKGROUNDSTUFF:
229 : {
230 0 : newObj = new LwpLayoutBackground(objHdr, m_pSvStream);
231 0 : 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 0 : newObj = new LwpLayoutColumns(objHdr, m_pSvStream);
241 0 : 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 0 : newObj = new LwpLayoutShadow(objHdr, m_pSvStream);
256 0 : break;
257 : }
258 : // 01/12/2005
259 : case VO_PARASTYLE:
260 : {
261 0 : newObj = new LwpParaStyle(objHdr, m_pSvStream);
262 0 : 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 0 : newObj = new LwpSilverBullet(objHdr, m_pSvStream);
272 0 : break;
273 : }
274 : case VO_ALIGNMENTPIECE:
275 : {
276 0 : newObj = new LwpAlignmentPiece(objHdr, m_pSvStream);
277 0 : break;
278 : }
279 : case VO_INDENTPIECE:
280 : {
281 0 : newObj = new LwpIndentPiece(objHdr, m_pSvStream);
282 0 : break;
283 : }
284 : case VO_SPACINGPIECE:
285 : {
286 0 : newObj = new LwpSpacingPiece(objHdr, m_pSvStream);
287 0 : 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 0 : newObj = new LwpDLVListHeadHolder(objHdr, m_pSvStream);
304 0 : break;
305 : }
306 :
307 : // start
308 : case VO_PARABORDERPIECE:
309 : {
310 0 : newObj = new LwpParaBorderPiece(objHdr, m_pSvStream);
311 0 : break;
312 : }
313 : case VO_BREAKSPIECE:
314 : {
315 0 : newObj = new LwpBreaksPiece(objHdr, m_pSvStream);
316 0 : break;
317 : }
318 : case VO_NUMBERINGPIECE:
319 : {
320 0 : newObj = new LwpNumberingPiece(objHdr, m_pSvStream);
321 0 : break;
322 : }
323 : case VO_TABRACK:
324 : {
325 0 : newObj = new LwpTabRack(objHdr, m_pSvStream);
326 0 : break;
327 : }
328 : case VO_TABPIECE:
329 : {
330 0 : newObj = new LwpTabPiece(objHdr, m_pSvStream);
331 0 : break;
332 : }
333 : case VO_PARABACKGROUNDPIECE: //perhaps wrong.
334 : {
335 0 : newObj = new LwpBackgroundPiece(objHdr, m_pSvStream);
336 0 : 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 0 : newObj = new LwpOleObject(objHdr, m_pSvStream);
362 0 : break;
363 : }
364 :
365 : case VO_GRAPHIC:
366 : {
367 0 : newObj = new LwpGraphicObject(objHdr, m_pSvStream);
368 0 : break;
369 : }
370 : case VO_DOCDATA:
371 : {
372 0 : newObj = new LwpDocData(objHdr, m_pSvStream);
373 0 : break;
374 : }
375 :
376 : case VO_DROPCAPLAYOUT:
377 : {
378 0 : newObj = new LwpDropcapLayout(objHdr, m_pSvStream);
379 0 : break;
380 : }
381 : case VO_LAYOUTRELATIVITY:
382 : {
383 0 : newObj = new LwpLayoutRelativity(objHdr, m_pSvStream);
384 0 : break;
385 : }
386 : // for table
387 : case VO_TABLE:
388 : {
389 0 : newObj = new LwpTable(objHdr, m_pSvStream);
390 0 : break;
391 : }
392 : case VO_TABLELAYOUT:
393 : {
394 0 : newObj = new LwpTableLayout(objHdr, m_pSvStream);
395 0 : break;
396 : }
397 : case VO_SUPERTABLE:
398 : {
399 0 : newObj = new LwpSuperTable(objHdr, m_pSvStream);
400 0 : break;
401 : }
402 : case VO_SUPERTABLELAYOUT:
403 : {
404 0 : newObj = new LwpSuperTableLayout(objHdr, m_pSvStream);
405 0 : break;
406 : }
407 : case VO_CELLLAYOUT:
408 : {
409 0 : newObj = new LwpCellLayout(objHdr, m_pSvStream);
410 0 : break;
411 : }
412 : case VO_ROWLAYOUT:
413 : {
414 0 : newObj = new LwpRowLayout(objHdr, m_pSvStream);
415 0 : break;
416 : }
417 : case VO_LAYOUTNUMERICS:
418 : {
419 0 : newObj = new LwpLayoutNumerics(objHdr, m_pSvStream);
420 0 : 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 0 : newObj = new LwpFieldMark(objHdr, m_pSvStream);
510 0 : 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 0 : newObj = new LwpVersionedPointer(objHdr, m_pSvStream);
526 0 : break;
527 : }
528 : case VO_FOOTNOTE:
529 : {
530 0 : newObj = new LwpFootnote(objHdr, m_pSvStream);
531 0 : break;
532 : }
533 : case VO_FOOTNOTETABLE:
534 : {
535 0 : newObj = new LwpFootnoteTable(objHdr, m_pSvStream);
536 0 : break;
537 : }
538 : case VO_FOOTNOTEOPTS:
539 : {
540 0 : newObj = new LwpFootnoteOptions(objHdr, m_pSvStream);
541 0 : break;
542 : }
543 : case VO_FOOTNOTELAYOUT:
544 : {
545 0 : newObj = new LwpFootnoteLayout(objHdr, m_pSvStream);
546 0 : break;
547 : }
548 : case VO_FNROWLAYOUT:
549 : {
550 0 : newObj = new LwpFnRowLayout(objHdr, m_pSvStream);
551 0 : break;
552 : }
553 : case VO_FNCELLLAYOUT:
554 : {
555 0 : newObj = new LwpFnCellLayout(objHdr, m_pSvStream);
556 0 : 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 0 : newObj = new LwpVerDocument(objHdr, m_pSvStream);
671 0 : break;
672 : }
673 : default:
674 : {
675 : //Unknown object type
676 : assert(false);
677 0 : newObj = NULL;
678 0 : break;
679 : }
680 : }
681 0 : if(newObj)
682 : {
683 0 : newObj->QuickRead();
684 0 : m_IdToObjList.insert(LwpIdToObjMap::value_type(*objHdr.GetID(), newObj));
685 : }
686 :
687 0 : return(newObj);
688 : }
689 : /**
690 : * @descr query object by object id
691 : * object is created if not in the factory
692 : */
693 0 : LwpObject* LwpObjectFactory::QueryObject(const LwpObjectID &objID)
694 : {
695 0 : LwpObject* obj = FindObject( objID );
696 0 : if(!obj)
697 : {
698 : //Read the object from file
699 0 : sal_uInt32 nStreamOffset = m_IndexMgr.GetObjOffset(objID);
700 0 : if(nStreamOffset == BAD_OFFSET) //does not find the offset in index manager
701 0 : return NULL;
702 :
703 0 : sal_Int64 nDesiredPos = nStreamOffset + LwpSvStream::LWP_STREAM_BASE;
704 0 : if (nDesiredPos != m_pSvStream->Seek(nDesiredPos))
705 0 : return NULL;
706 0 : LwpObjectHeader objHdr;
707 0 : if (!objHdr.Read(*m_pSvStream))
708 0 : return NULL;
709 :
710 0 : LwpObjectID* pId = objHdr.GetID();
711 0 : if (pId && (*pId != objID))
712 : {
713 : OSL_FAIL("apparently incorrect objid, invalidating");
714 0 : return NULL;
715 : }
716 :
717 0 : obj = CreateObject(objHdr.GetTag(), objHdr);
718 : }
719 0 : return obj;
720 : }
721 :
722 : /**
723 : * @descr find object in the factory per the object id
724 : */
725 0 : LwpObject* LwpObjectFactory::FindObject(const LwpObjectID &objID)
726 : {
727 0 : LwpIdToObjMap::const_iterator it = m_IdToObjList.find(objID);
728 0 : if (it != m_IdToObjList.end()) {
729 0 : return((*it).second);
730 : }
731 : else
732 : {
733 0 : return NULL;
734 : }
735 : }
736 : /**
737 : * @descr release object in the factory per the object id
738 : */
739 0 : void LwpObjectFactory::ReleaseObject(const LwpObjectID &objID)
740 : {
741 0 : LwpObject* obj = FindObject( objID );
742 0 : m_IdToObjList.erase(objID);
743 0 : if( obj )
744 0 : delete obj;
745 0 : }
746 :
747 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|