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 6 : LwpObjectFactory::LwpObjectFactory(LwpSvStream* pSvStream)
105 6 : : m_nNumObjs(0), m_pSvStream(pSvStream)
106 : {
107 6 : m_IdToObjList.clear();
108 6 : }
109 :
110 12 : LwpObjectFactory::~LwpObjectFactory()
111 : {
112 6 : if(!m_IdToObjList.empty())
113 4 : ClearObjectMap();
114 6 : }
115 :
116 : /**
117 : * @descr clear object map and delete all objects
118 : */
119 4 : void LwpObjectFactory::ClearObjectMap()
120 : {
121 4 : m_IdToObjList.clear();
122 4 : }
123 : /**
124 : * @descr read the index manager
125 : */
126 6 : void LwpObjectFactory::ReadIndex(LwpSvStream* pStrm)
127 : {
128 6 : m_IndexMgr.Read(pStrm);
129 6 : }
130 :
131 : /**
132 : * @descr create all kinds of objects except lwp7
133 : */
134 914 : rtl::Reference<LwpObject> LwpObjectFactory::CreateObject(sal_uInt32 type, LwpObjectHeader &objHdr)
135 : {
136 914 : rtl::Reference<LwpObject> newObj;
137 914 : m_nNumObjs++;
138 : SAL_WARN_IF(type>=300, "lwp", "invalid type: " << type);
139 914 : switch(type)
140 : {
141 : case VO_DOCUMENT:
142 : {
143 11 : newObj = new LwpDocument(objHdr, m_pSvStream);
144 9 : break;
145 : }
146 : case VO_DOCSOCK:
147 : {
148 8 : newObj = new LwpDocSock(objHdr, m_pSvStream);
149 8 : break;
150 : }
151 : case VO_DIVISIONINFO:
152 : {
153 8 : newObj = new LwpDivInfo(objHdr, m_pSvStream);
154 8 : break;
155 : }
156 : case VO_DIVOPTS:
157 : {
158 0 : newObj = new LwpDivisionOptions(objHdr, m_pSvStream);
159 0 : break;
160 : }
161 : case VO_HEADCONTENT:
162 : {
163 8 : newObj = new LwpHeadContent(objHdr, m_pSvStream);
164 8 : break;
165 : }
166 : case VO_HEADLAYOUT:
167 : {
168 32 : newObj = new LwpHeadLayout(objHdr, m_pSvStream);
169 32 : break;
170 : }
171 : case VO_PAGELAYOUT:
172 : {
173 8 : newObj = new LwpPageLayout(objHdr, m_pSvStream);
174 8 : break;
175 : }
176 : case VO_STORY:
177 : {
178 48 : newObj = new LwpStory(objHdr, m_pSvStream);
179 48 : break;
180 : }
181 : case VO_PARA:
182 : {
183 262 : newObj = new LwpPara(objHdr, m_pSvStream);
184 262 : break;
185 : }
186 : case VO_HEADERLAYOUT:
187 : {
188 12 : newObj = new LwpHeaderLayout(objHdr, m_pSvStream);
189 12 : break;
190 : }
191 : case VO_FOOTERLAYOUT:
192 : {
193 12 : newObj = new LwpFooterLayout(objHdr, m_pSvStream);
194 12 : break;
195 : }
196 : case VO_FRAMELAYOUT:
197 : {
198 32 : newObj = new LwpFrameLayout(objHdr, m_pSvStream);
199 32 : break;
200 : }
201 : case VO_LAYOUTGEOMETRY:
202 : {
203 46 : newObj = new LwpLayoutGeometry(objHdr, m_pSvStream);
204 46 : break;
205 : }
206 : case VO_LAYOUTSCALE:
207 : {
208 14 : newObj = new LwpLayoutScale(objHdr, m_pSvStream);
209 14 : break;
210 : }
211 : case VO_LAYOUTMARGINS:
212 : {
213 36 : newObj = new LwpLayoutMargins(objHdr, m_pSvStream);
214 36 : break;
215 : }
216 : case VO_LAYOUTBORDERSTUFF:
217 : {
218 10 : newObj = new LwpLayoutBorder(objHdr, m_pSvStream);
219 10 : break;
220 : }
221 : case VO_LAYOUTBACKGROUNDSTUFF:
222 : {
223 8 : newObj = new LwpLayoutBackground(objHdr, m_pSvStream);
224 8 : break;
225 : }
226 : case VO_LAYOUTEXTERNALBORDERSTUFF:
227 : {
228 0 : newObj = new LwpLayoutExternalBorder(objHdr, m_pSvStream);
229 0 : break;
230 : }
231 : case VO_LAYOUTCOLUMNS:
232 : {
233 12 : newObj = new LwpLayoutColumns(objHdr, m_pSvStream);
234 12 : break;
235 : }
236 : case VO_LAYOUTGUTTERSTUFF:
237 : {
238 0 : newObj = new LwpLayoutGutters(objHdr, m_pSvStream);
239 0 : break;
240 : }
241 : case VO_LAYOUTJOINSTUFF:
242 : {
243 0 : newObj = new LwpLayoutJoins(objHdr, m_pSvStream);
244 0 : break;
245 : }
246 : case VO_LAYOUTSHADOW:
247 : {
248 4 : newObj = new LwpLayoutShadow(objHdr, m_pSvStream);
249 4 : break;
250 : }
251 : // 01/12/2005
252 : case VO_PARASTYLE:
253 : {
254 68 : newObj = new LwpParaStyle(objHdr, m_pSvStream);
255 68 : break;
256 : }
257 : case VO_CHARACTERSTYLE:
258 : {
259 0 : newObj = new LwpCharacterStyle(objHdr, m_pSvStream);
260 0 : break;
261 : }
262 : case VO_SILVERBULLET:
263 : {
264 13 : newObj = new LwpSilverBullet(objHdr, m_pSvStream);
265 13 : break;
266 : }
267 : case VO_ALIGNMENTPIECE:
268 : {
269 17 : newObj = new LwpAlignmentPiece(objHdr, m_pSvStream);
270 17 : break;
271 : }
272 : case VO_INDENTPIECE:
273 : {
274 24 : newObj = new LwpIndentPiece(objHdr, m_pSvStream);
275 24 : break;
276 : }
277 : case VO_SPACINGPIECE:
278 : {
279 26 : newObj = new LwpSpacingPiece(objHdr, m_pSvStream);
280 26 : break;
281 : }
282 : case VO_CHARBORDERPIECE:
283 : {
284 0 : newObj = new LwpCharacterBorderPiece(objHdr, m_pSvStream);
285 0 : break;
286 : }
287 : case VO_AMIKAKEPIECE:
288 : {
289 0 : newObj = new LwpAmikakePiece(objHdr, m_pSvStream);
290 0 : break;
291 : }
292 : // end
293 :
294 : case VO_HEADHOLDER:
295 : {
296 17 : newObj = new LwpDLVListHeadHolder(objHdr, m_pSvStream);
297 17 : break;
298 : }
299 :
300 : // start
301 : case VO_PARABORDERPIECE:
302 : {
303 6 : newObj = new LwpParaBorderPiece(objHdr, m_pSvStream);
304 6 : break;
305 : }
306 : case VO_BREAKSPIECE:
307 : {
308 20 : newObj = new LwpBreaksPiece(objHdr, m_pSvStream);
309 20 : break;
310 : }
311 : case VO_NUMBERINGPIECE:
312 : {
313 5 : newObj = new LwpNumberingPiece(objHdr, m_pSvStream);
314 5 : break;
315 : }
316 : case VO_TABRACK:
317 : {
318 3 : newObj = new LwpTabRack(objHdr, m_pSvStream);
319 3 : break;
320 : }
321 : case VO_TABPIECE:
322 : {
323 4 : newObj = new LwpTabPiece(objHdr, m_pSvStream);
324 4 : break;
325 : }
326 : case VO_PARABACKGROUNDPIECE: //perhaps wrong.
327 : {
328 3 : newObj = new LwpBackgroundPiece(objHdr, m_pSvStream);
329 3 : break;
330 : }
331 : // end.
332 : case VO_SECTION:
333 : {
334 0 : newObj = new LwpSection(objHdr, m_pSvStream);
335 0 : break;
336 : }
337 : case VO_INDEXSECTION:
338 : {
339 0 : newObj = new LwpIndexSection(objHdr, m_pSvStream);
340 0 : break;
341 : }
342 : case VO_HEADTAILHOLDER:
343 : {
344 0 : newObj = new LwpDLVListHeadTailHolder(objHdr, m_pSvStream);
345 0 : break;
346 : }
347 : case VO_PAGEHINT:
348 : {
349 0 : newObj = new LwpPageHint(objHdr, m_pSvStream);
350 0 : break;
351 : }
352 : case VO_OLEOBJECT:
353 : {
354 18 : newObj = new LwpOleObject(objHdr, m_pSvStream);
355 18 : break;
356 : }
357 :
358 : case VO_GRAPHIC:
359 : {
360 7 : newObj = new LwpGraphicObject(objHdr, m_pSvStream);
361 7 : break;
362 : }
363 : case VO_DOCDATA:
364 : {
365 4 : newObj = new LwpDocData(objHdr, m_pSvStream);
366 4 : break;
367 : }
368 :
369 : case VO_DROPCAPLAYOUT:
370 : {
371 4 : newObj = new LwpDropcapLayout(objHdr, m_pSvStream);
372 4 : break;
373 : }
374 : case VO_LAYOUTRELATIVITY:
375 : {
376 44 : newObj = new LwpLayoutRelativity(objHdr, m_pSvStream);
377 44 : break;
378 : }
379 : // for table
380 : case VO_TABLE:
381 : {
382 1 : newObj = new LwpTable(objHdr, m_pSvStream);
383 1 : break;
384 : }
385 : case VO_TABLELAYOUT:
386 : {
387 1 : newObj = new LwpTableLayout(objHdr, m_pSvStream);
388 1 : break;
389 : }
390 : case VO_SUPERTABLE:
391 : {
392 1 : newObj = new LwpSuperTable(objHdr, m_pSvStream);
393 1 : break;
394 : }
395 : case VO_SUPERTABLELAYOUT:
396 : {
397 2 : newObj = new LwpSuperTableLayout(objHdr, m_pSvStream);
398 2 : break;
399 : }
400 : case VO_CELLLAYOUT:
401 : {
402 21 : newObj = new LwpCellLayout(objHdr, m_pSvStream);
403 21 : break;
404 : }
405 : case VO_ROWLAYOUT:
406 : {
407 5 : newObj = new LwpRowLayout(objHdr, m_pSvStream);
408 5 : break;
409 : }
410 : case VO_LAYOUTNUMERICS:
411 : {
412 6 : newObj = new LwpLayoutNumerics(objHdr, m_pSvStream);
413 6 : break;
414 : }
415 : case VO_NUMERICVALUE:
416 : {
417 0 : newObj = new LwpNumericValue(objHdr, m_pSvStream);
418 0 : break;
419 : }
420 : case VO_FORMULAINFO:
421 : {
422 0 : newObj = new LwpFormulaInfo(objHdr, m_pSvStream);
423 0 : break;
424 : }
425 : case VO_COLUMNLAYOUT:
426 : {
427 0 : newObj = new LwpColumnLayout(objHdr, m_pSvStream);
428 0 : break;
429 : }
430 : case VO_ROWLIST:
431 : {
432 0 : newObj = new LwpRowList(objHdr, m_pSvStream);
433 0 : break;
434 : }
435 : case VO_CELLLIST:
436 : {
437 0 : newObj = new LwpCellList(objHdr, m_pSvStream);
438 0 : break;
439 : }
440 : case VO_TABLERANGE:
441 : {
442 0 : newObj = new LwpTableRange(objHdr, m_pSvStream);
443 0 : break;
444 : }
445 : case VO_CELLRANGE:
446 : {
447 0 : newObj = new LwpCellRange(objHdr, m_pSvStream);
448 0 : break;
449 : }
450 : case VO_FOLDER:
451 : {
452 0 : newObj = new LwpFolder(objHdr, m_pSvStream);
453 0 : break;
454 : }
455 : case VO_DEPENDENT:
456 : {
457 0 : newObj = new LwpDependent(objHdr, m_pSvStream);
458 0 : break;
459 : }
460 : case VO_CONNECTEDCELLLAYOUT:
461 : {
462 0 : newObj = new LwpConnectedCellLayout(objHdr, m_pSvStream);
463 0 : break;
464 : }
465 : case VO_HIDDENCELLLAYOUT:
466 : {
467 0 : newObj = new LwpHiddenCellLayout(objHdr, m_pSvStream);
468 0 : break;
469 : }
470 : case VO_TABLEHEADINGLAYOUT:
471 : {
472 0 : newObj = new LwpTableHeadingLayout(objHdr, m_pSvStream);
473 0 : break;
474 : }
475 : case VO_ROWHEADINGLAYOUT:
476 : {
477 0 : newObj = new LwpRowHeadingLayout(objHdr, m_pSvStream);
478 0 : break;
479 : }
480 : case VO_TABLEHEADING:
481 : {
482 0 : newObj = new LwpTableHeading(objHdr, m_pSvStream);
483 0 : break;
484 : }
485 : case VO_CHBLKMARKER:
486 : {
487 0 : newObj = new LwpCHBlkMarker(objHdr, m_pSvStream);
488 0 : break;
489 : }
490 : case VO_PROPLIST:
491 : {
492 0 : newObj = new LwpPropListElement(objHdr, m_pSvStream);
493 0 : break;
494 : }
495 : case VO_BOOKMARK:
496 : {
497 0 : newObj = new LwpBookMark(objHdr, m_pSvStream);
498 0 : break;
499 : }
500 : case VO_FIELDMARKER:
501 : {
502 2 : newObj = new LwpFieldMark(objHdr, m_pSvStream);
503 2 : break;
504 : }
505 : case VO_OBJECTHOLDER:
506 : {
507 0 : newObj = new LwpObjectHolder(objHdr, m_pSvStream);
508 0 : break;
509 : }
510 : case VO_POBJECTHOLDER:
511 : {
512 0 : newObj = new LwpObjectHolder(objHdr, m_pSvStream);
513 0 : break;
514 : }
515 : case VO_VERGTR: //fall through
516 : case VO_VERQTR:
517 : {
518 8 : newObj = new LwpVersionedPointer(objHdr, m_pSvStream);
519 8 : break;
520 : }
521 : case VO_FOOTNOTE:
522 : {
523 1 : newObj = new LwpFootnote(objHdr, m_pSvStream);
524 1 : break;
525 : }
526 : case VO_FOOTNOTETABLE:
527 : {
528 1 : newObj = new LwpFootnoteTable(objHdr, m_pSvStream);
529 1 : break;
530 : }
531 : case VO_FOOTNOTEOPTS:
532 : {
533 4 : newObj = new LwpFootnoteOptions(objHdr, m_pSvStream);
534 4 : break;
535 : }
536 : case VO_FOOTNOTELAYOUT:
537 : {
538 1 : newObj = new LwpFootnoteLayout(objHdr, m_pSvStream);
539 1 : break;
540 : }
541 : case VO_FNROWLAYOUT:
542 : {
543 1 : newObj = new LwpFnRowLayout(objHdr, m_pSvStream);
544 1 : break;
545 : }
546 : case VO_FNCELLLAYOUT:
547 : {
548 2 : newObj = new LwpFnCellLayout(objHdr, m_pSvStream);
549 2 : break;
550 : }
551 : case VO_ENDNOTELAYOUT:
552 : {
553 0 : newObj = new LwpEndnoteLayout(objHdr, m_pSvStream);
554 0 : break;
555 : }
556 : case VO_ENSUPERTABLELAYOUT:
557 : {
558 0 : newObj = new LwpEnSuperTableLayout(objHdr, m_pSvStream);
559 0 : break;
560 : }
561 : case VO_FNSUPERTABLELAYOUT:
562 : {
563 0 : newObj = new LwpFnSuperTableLayout(objHdr, m_pSvStream);
564 0 : break;
565 : }
566 : case VO_CONTONLAYOUT:
567 : {
568 0 : newObj = new LwpContOnLayout(objHdr, m_pSvStream);
569 0 : break;
570 : }
571 : case VO_CONTFROMLAYOUT:
572 : {
573 0 : newObj = new LwpContFromLayout(objHdr, m_pSvStream);
574 0 : break;
575 : }
576 : case VO_GROUPLAYOUT:
577 : {
578 0 : newObj = new LwpGroupLayout(objHdr, m_pSvStream);
579 0 : break;
580 : }
581 : case VO_GROUPFRAME:
582 : {
583 0 : newObj = new LwpGroupFrame(objHdr, m_pSvStream);
584 0 : break;
585 : }
586 : case VO_TOCSUPERTABLELAYOUT:
587 : {
588 0 : newObj = new LwpTocSuperLayout(objHdr, m_pSvStream);
589 0 : break;
590 : }
591 : case VO_LISTLIST:
592 : {
593 0 : newObj = new LwpListList(objHdr, m_pSvStream);
594 0 : break;
595 : }
596 : case VO_TOCLEVELDATA:
597 : {
598 0 : newObj = new LwpTocLevelData(objHdr, m_pSvStream);
599 0 : break;
600 : }
601 : case VO_NOTELAYOUT:
602 : {
603 0 : newObj = new LwpNoteLayout(objHdr, m_pSvStream);
604 0 : break;
605 : }
606 : case VO_NOTEHEADERLAYOUT:
607 : {
608 0 : newObj = new LwpNoteHeaderLayout(objHdr, m_pSvStream);
609 0 : break;
610 : }
611 : case VO_NOTETEXTLAYOUT:
612 : {
613 0 : newObj = new LwpNoteTextLayout(objHdr, m_pSvStream);
614 0 : break;
615 : }
616 : case VO_VPLAYOUT:
617 : {
618 0 : newObj = new LwpViewportLayout(objHdr, m_pSvStream);
619 0 : break;
620 : }
621 : case VO_PCOLBLOCK:
622 : {
623 0 : newObj = new LwpParallelColumnsBlock(objHdr, m_pSvStream);
624 0 : break;
625 : }
626 : case VO_SUPERPARALLELCOLUMNLAYOUT:
627 : {
628 0 : newObj = new LwpSuperParallelColumnLayout(objHdr, m_pSvStream);
629 0 : break;
630 : }
631 : case VO_PCOLLAYOUT:
632 : {
633 0 : newObj = new LwpParallelColumnsLayout(objHdr, m_pSvStream);
634 0 : break;
635 : }
636 : case VO_PARALLELCOLUMNS:
637 : {
638 0 : newObj = new LwpParallelColumns(objHdr, m_pSvStream);
639 0 : break;
640 : }
641 : case VO_RUBYMARKER:
642 : {
643 0 : newObj = new LwpRubyMarker(objHdr, m_pSvStream);
644 0 : break;
645 : }
646 : case VO_RUBYLAYOUT:
647 : {
648 0 : newObj = new LwpRubyLayout(objHdr, m_pSvStream);
649 0 : break;
650 : }
651 : case VO_GLOSSARY:
652 : {
653 0 : newObj = new LwpGlossary(objHdr, m_pSvStream);
654 0 : break;
655 : }
656 : case VO_SUPERGLOSSARYLAYOUT:
657 : {
658 0 : newObj = new LwpSuperGlossaryLayout(objHdr, m_pSvStream);
659 0 : break;
660 : }
661 : case VO_VERDOCUMENT:
662 : {
663 4 : newObj = new LwpVerDocument(objHdr, m_pSvStream);
664 4 : break;
665 : }
666 : default:
667 : {
668 : //Unknown object type
669 0 : newObj = NULL;
670 0 : break;
671 : }
672 : }
673 913 : if(newObj.is())
674 : {
675 913 : newObj->QuickRead();
676 911 : m_IdToObjList.insert(LwpIdToObjMap::value_type(objHdr.GetID(), newObj));
677 : }
678 :
679 911 : return newObj;
680 : }
681 : /**
682 : * @descr query object by object id
683 : * object is created if not in the factory
684 : */
685 12168 : rtl::Reference<LwpObject> LwpObjectFactory::QueryObject(const LwpObjectID &objID)
686 : {
687 12168 : rtl::Reference<LwpObject> obj = FindObject( objID );
688 12168 : if(!obj.is())
689 : {
690 : //Read the object from file
691 914 : sal_uInt32 nStreamOffset = m_IndexMgr.GetObjOffset(objID);
692 914 : if(nStreamOffset == BAD_OFFSET) //does not find the offset in index manager
693 0 : return NULL;
694 :
695 914 : sal_Int64 nDesiredPos = nStreamOffset + LwpSvStream::LWP_STREAM_BASE;
696 914 : if (nDesiredPos != m_pSvStream->Seek(nDesiredPos))
697 0 : return NULL;
698 914 : LwpObjectHeader objHdr;
699 914 : if (!objHdr.Read(*m_pSvStream))
700 0 : return NULL;
701 :
702 914 : LwpObjectID& rId = objHdr.GetID();
703 914 : if (rId != objID)
704 : {
705 : OSL_FAIL("apparently incorrect objid, invalidating");
706 0 : return NULL;
707 : }
708 :
709 914 : obj = CreateObject(objHdr.GetTag(), objHdr);
710 : }
711 12168 : return obj;
712 : }
713 :
714 : /**
715 : * @descr find object in the factory per the object id
716 : */
717 12168 : rtl::Reference<LwpObject> LwpObjectFactory::FindObject(const LwpObjectID &objID)
718 : {
719 12168 : LwpIdToObjMap::const_iterator it = m_IdToObjList.find(objID);
720 12168 : if (it != m_IdToObjList.end()) {
721 11254 : return (*it).second;
722 : }
723 : else
724 : {
725 914 : return NULL;
726 : }
727 : }
728 : /**
729 : * @descr release object in the factory per the object id
730 : */
731 146 : void LwpObjectFactory::ReleaseObject(const LwpObjectID &objID)
732 : {
733 146 : m_IdToObjList.erase(objID);
734 158 : }
735 :
736 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|