1 /*  $Id: bioseq_set_handle.cpp 576286 2018-12-12 19:07:08Z vasilche $
2 * ===========================================================================
3 *
4 *                            PUBLIC DOMAIN NOTICE
5 *               National Center for Biotechnology Information
6 *
7 *  This software/database is a "United States Government Work" under the
8 *  terms of the United States Copyright Act.  It was written as part of
9 *  the author's official duties as a United States Government employee and
10 *  thus cannot be copyrighted.  This software/database is freely available
11 *  to the public for use. The National Library of Medicine and the U.S.
12 *  Government have not placed any restriction on its use or reproduction.
13 *
14 *  Although all reasonable efforts have been taken to ensure the accuracy
15 *  and reliability of the software and data, the NLM and the U.S.
16 *  Government do not and cannot warrant the performance or results that
17 *  may be obtained by using this software or data. The NLM and the U.S.
18 *  Government disclaim all warranties, express or implied, including
19 *  warranties of performance, merchantability or fitness for any particular
20 *  purpose.
21 *
22 *  Please cite the author in any work or product based on this material.
23 *
24 * ===========================================================================
25 *
26 * Author: Aleksey Grichenko, Eugene Vasilchenko
27 *
28 * File Description:
29 *    Handle to Seq-entry object
30 *
31 */
32 
33 #include <ncbi_pch.hpp>
34 #include <objmgr/bioseq_set_handle.hpp>
35 
36 #include <objmgr/scope.hpp>
37 #include <objmgr/bio_object_id.hpp>
38 
39 #include <objmgr/impl/scope_impl.hpp>
40 #include <objmgr/impl/bioseq_set_info.hpp>
41 #include <objmgr/impl/tse_info.hpp>
42 
43 #include <objmgr/impl/bioseq_set_edit_commands.hpp>
44 
45 #include <objects/seqset/Bioseq_set.hpp>
46 #include <objects/seqset/Seq_entry.hpp>
47 #include <objects/seq/Seqdesc.hpp>
48 
49 BEGIN_NCBI_SCOPE
BEGIN_SCOPE(objects)50 BEGIN_SCOPE(objects)
51 
52 
53 CBioseq_set_Handle::CBioseq_set_Handle(const CBioseq_set_Info& info,
54                                        const CTSE_Handle& tse)
55     : m_Info(tse.x_GetScopeInfo().GetScopeLock(tse, info))
56 {
57 }
58 
59 
CBioseq_set_Handle(const TLock & lock)60 CBioseq_set_Handle::CBioseq_set_Handle(const TLock& lock)
61     : m_Info(lock)
62 {
63 }
64 
65 
Reset(void)66 void CBioseq_set_Handle::Reset(void)
67 {
68     m_Info.Reset();
69 }
70 
71 
x_GetInfo(void) const72 const CBioseq_set_Info& CBioseq_set_Handle::x_GetInfo(void) const
73 {
74     return m_Info->GetObjectInfo();
75 }
76 
77 
GetCompleteBioseq_set(void) const78 CConstRef<CBioseq_set> CBioseq_set_Handle::GetCompleteBioseq_set(void) const
79 {
80     return x_GetInfo().GetCompleteBioseq_set();
81 }
82 
83 
GetBioseq_setCore(void) const84 CConstRef<CBioseq_set> CBioseq_set_Handle::GetBioseq_setCore(void) const
85 {
86     return x_GetInfo().GetBioseq_setCore();
87 }
88 
89 
IsEmptySeq_set(void) const90 bool CBioseq_set_Handle::IsEmptySeq_set(void) const
91 {
92     return x_GetInfo().IsEmptySeq_set();
93 }
94 
GetBioObjectId(void) const95 const CBioObjectId& CBioseq_set_Handle::GetBioObjectId(void) const
96 {
97     return x_GetInfo().GetBioObjectId();
98 }
99 
GetParentEntry(void) const100 CSeq_entry_Handle CBioseq_set_Handle::GetParentEntry(void) const
101 {
102     CSeq_entry_Handle ret;
103     const CBioseq_set_Info& info = x_GetInfo();
104     if ( info.HasParent_Info() ) {
105         ret = CSeq_entry_Handle(info.GetParentSeq_entry_Info(),
106                                 GetTSE_Handle());
107     }
108     return ret;
109 }
110 
111 
GetParentBioseq_set(void) const112 CBioseq_set_Handle CBioseq_set_Handle::GetParentBioseq_set(void) const
113 {
114     CBioseq_set_Handle ret;
115     const CBioseq_set_Info& info = x_GetInfo();
116     if ( info.HasParent_Info() ) {
117         const CSeq_entry_Info& entry = info.GetParentSeq_entry_Info();
118         if ( entry.HasParent_Info() ) {
119             ret = CBioseq_set_Handle(entry.GetParentBioseq_set_Info(),
120                                      GetTSE_Handle());
121         }
122     }
123     return ret;
124 }
125 
126 
GetTopLevelEntry(void) const127 CSeq_entry_Handle CBioseq_set_Handle::GetTopLevelEntry(void) const
128 {
129     return GetTSE_Handle();
130 }
131 
132 
GetEditHandle(void) const133 CBioseq_set_EditHandle CBioseq_set_Handle::GetEditHandle(void) const
134 {
135     return GetScope().GetEditHandle(*this);
136 }
137 
138 
IsSetId(void) const139 bool CBioseq_set_Handle::IsSetId(void) const
140 {
141     return x_GetInfo().IsSetId();
142 }
143 
144 
CanGetId(void) const145 bool CBioseq_set_Handle::CanGetId(void) const
146 {
147     return *this  &&  x_GetInfo().CanGetId();
148 }
149 
150 
GetId(void) const151 const CBioseq_set::TId& CBioseq_set_Handle::GetId(void) const
152 {
153     return x_GetInfo().GetId();
154 }
155 
156 
IsSetColl(void) const157 bool CBioseq_set_Handle::IsSetColl(void) const
158 {
159     return x_GetInfo().IsSetColl();
160 }
161 
162 
CanGetColl(void) const163 bool CBioseq_set_Handle::CanGetColl(void) const
164 {
165     return *this  &&  x_GetInfo().CanGetColl();
166 }
167 
168 
GetColl(void) const169 const CBioseq_set::TColl& CBioseq_set_Handle::GetColl(void) const
170 {
171     return x_GetInfo().GetColl();
172 }
173 
174 
IsSetLevel(void) const175 bool CBioseq_set_Handle::IsSetLevel(void) const
176 {
177     return x_GetInfo().IsSetLevel();
178 }
179 
180 
CanGetLevel(void) const181 bool CBioseq_set_Handle::CanGetLevel(void) const
182 {
183     return *this  &&  x_GetInfo().CanGetLevel();
184 }
185 
186 
GetLevel(void) const187 CBioseq_set::TLevel CBioseq_set_Handle::GetLevel(void) const
188 {
189     return x_GetInfo().GetLevel();
190 }
191 
192 
IsSetClass(void) const193 bool CBioseq_set_Handle::IsSetClass(void) const
194 {
195     return x_GetInfo().IsSetClass();
196 }
197 
198 
CanGetClass(void) const199 bool CBioseq_set_Handle::CanGetClass(void) const
200 {
201     return *this  &&  x_GetInfo().CanGetClass();
202 }
203 
204 
GetClass(void) const205 CBioseq_set::TClass CBioseq_set_Handle::GetClass(void) const
206 {
207     return x_GetInfo().GetClass();
208 }
209 
210 
IsSetRelease(void) const211 bool CBioseq_set_Handle::IsSetRelease(void) const
212 {
213     return x_GetInfo().IsSetRelease();
214 }
215 
216 
CanGetRelease(void) const217 bool CBioseq_set_Handle::CanGetRelease(void) const
218 {
219     return *this  &&  x_GetInfo().CanGetRelease();
220 }
221 
222 
GetRelease(void) const223 const CBioseq_set::TRelease& CBioseq_set_Handle::GetRelease(void) const
224 {
225     return x_GetInfo().GetRelease();
226 }
227 
228 
IsSetDate(void) const229 bool CBioseq_set_Handle::IsSetDate(void) const
230 {
231     return x_GetInfo().IsSetDate();
232 }
233 
234 
CanGetDate(void) const235 bool CBioseq_set_Handle::CanGetDate(void) const
236 {
237     return *this  &&  x_GetInfo().CanGetDate();
238 }
239 
240 
GetDate(void) const241 const CBioseq_set::TDate& CBioseq_set_Handle::GetDate(void) const
242 {
243     return x_GetInfo().GetDate();
244 }
245 
246 
IsSetDescr(void) const247 bool CBioseq_set_Handle::IsSetDescr(void) const
248 {
249     return x_GetInfo().IsSetDescr();
250 }
251 
252 
CanGetDescr(void) const253 bool CBioseq_set_Handle::CanGetDescr(void) const
254 {
255     return *this  &&  x_GetInfo().CanGetDescr();
256 }
257 
258 
GetDescr(void) const259 const CBioseq_set::TDescr& CBioseq_set_Handle::GetDescr(void) const
260 {
261     return x_GetInfo().GetDescr();
262 }
263 
264 
HasAnnots(void) const265 bool CBioseq_set_Handle::HasAnnots(void) const
266 {
267     return x_GetInfo().HasAnnots();
268 }
269 
270 
271 CBioseq_set_Handle::TComplexityTable
272 CBioseq_set_Handle::sm_ComplexityTable = {
273     0, // not-set (0)
274     3, // nuc-prot (1)
275     2, // segset (2)
276     2, // conset (3)
277     1, // parts (4)
278     1, // gibb (5)
279     1, // gi (6)
280     5, // genbank (7)
281     3, // pir (8)
282     4, // pub-set (9)
283     4, // equiv (10)
284     3, // swissprot (11)
285     3, // pdb-entry (12)
286     4, // mut-set (13)
287     4, // pop-set (14)
288     4, // phy-set (15)
289     4, // eco-set (16)
290     4, // gen-prod-set (17)
291     4, // wgs-set (18)
292     4, // named-annot (19)
293     4, // named-annot-prod (20)
294     4, // read-set (21)
295     4, // paired-end-reads (22)
296     4, // small-genome-set (23)
297     0, // other (255 - processed separately)
298 };
299 
300 
301 const CBioseq_set_Handle::TComplexityTable&
sx_GetComplexityTable(void)302 CBioseq_set_Handle::sx_GetComplexityTable(void)
303 {
304     return sm_ComplexityTable;
305 }
306 
307 
308 CSeq_entry_Handle
GetComplexityLevel(CBioseq_set::EClass cls) const309 CBioseq_set_Handle::GetComplexityLevel(CBioseq_set::EClass cls) const
310 {
311     const TComplexityTable& ctab = sx_GetComplexityTable();
312     if (cls == CBioseq_set::eClass_other) {
313         // adjust 255 to the correct value
314         cls = CBioseq_set::EClass(sizeof(ctab) - 1);
315     }
316     CSeq_entry_Handle e = GetParentEntry();
317     CSeq_entry_Handle last = e;
318     _ASSERT(e && e.IsSet());
319     while ( e ) {
320         _ASSERT(e.IsSet());
321         // Found good level
322         if (ctab[e.GetSet().GetClass()] == ctab[cls]) {
323             last = e;
324             break;
325         }
326         // Gone too high
327         if ( ctab[e.GetSet().GetClass()] > ctab[cls] ) {
328             break;
329         }
330         // Go up one level
331         last = e;
332         e = e.GetParentEntry();
333     }
334     return last;
335 }
336 
337 
338 CSeq_entry_Handle
GetExactComplexityLevel(CBioseq_set::EClass cls) const339 CBioseq_set_Handle::GetExactComplexityLevel(CBioseq_set::EClass cls) const
340 {
341     CSeq_entry_Handle ret = GetComplexityLevel(cls);
342     if ( ret  &&
343          (!ret.GetSet().IsSetClass()  ||
344          ret.GetSet().GetClass() != cls) ) {
345         ret.Reset();
346     }
347     return ret;
348 }
349 
GetSeq_entry_Index(const CSeq_entry_Handle & entry) const350 int CBioseq_set_Handle::GetSeq_entry_Index(const CSeq_entry_Handle& entry) const
351 {
352     return x_GetInfo().GetEntryIndex(entry.x_GetInfo());
353 }
354 
355 /////////////////////////////////////////////////////////////////////////////
356 // CBioseq_set_EditHandle
357 
CBioseq_set_EditHandle(const CBioseq_set_Handle & h)358 CBioseq_set_EditHandle::CBioseq_set_EditHandle(const CBioseq_set_Handle& h)
359     : CBioseq_set_Handle(h)
360 {
361     if ( !h.GetTSE_Handle().CanBeEdited() ) {
362         NCBI_THROW(CObjMgrException, eInvalidHandle,
363                    "object is not in editing mode");
364     }
365 }
366 
367 
CBioseq_set_EditHandle(CBioseq_set_Info & info,const CTSE_Handle & tse)368 CBioseq_set_EditHandle::CBioseq_set_EditHandle(CBioseq_set_Info& info,
369                                                const CTSE_Handle& tse)
370     : CBioseq_set_Handle(info, tse)
371 {
372 }
373 
374 
GetParentEntry(void) const375 CSeq_entry_EditHandle CBioseq_set_EditHandle::GetParentEntry(void) const
376 {
377     CSeq_entry_EditHandle ret;
378     CBioseq_set_Info& info = x_GetInfo();
379     if ( info.HasParent_Info() ) {
380         ret = CSeq_entry_EditHandle(info.GetParentSeq_entry_Info(),
381                                     GetTSE_Handle());
382     }
383     return ret;
384 }
385 
386 
x_GetInfo(void) const387 CBioseq_set_Info& CBioseq_set_EditHandle::x_GetInfo(void) const
388 {
389     return const_cast<CBioseq_set_Info&>(CBioseq_set_Handle::x_GetInfo());
390 }
391 
392 
ResetId(void) const393 void CBioseq_set_EditHandle::ResetId(void) const
394 {
395     typedef CReset_BioseqSetId_EditCommand TCommand;
396     CCommandProcessor processor(x_GetScopeImpl());
397     processor.run(new TCommand(*this));
398     //x_GetInfo().ResetId();
399 }
400 
401 
SetId(TId & v) const402 void CBioseq_set_EditHandle::SetId(TId& v) const
403 {
404     typedef CSet_BioseqSetId_EditCommand TCommand;
405     CCommandProcessor processor(x_GetScopeImpl());
406     processor.run(new TCommand(*this,v));
407     //    x_GetInfo().SetId(v);
408 }
409 
410 
ResetColl(void) const411 void CBioseq_set_EditHandle::ResetColl(void) const
412 {
413     typedef CReset_BioseqSetColl_EditCommand TCommand;
414     CCommandProcessor processor(x_GetScopeImpl());
415     processor.run(new TCommand(*this));
416     //x_GetInfo().ResetColl();
417 }
418 
419 
SetColl(TColl & v) const420 void CBioseq_set_EditHandle::SetColl(TColl& v) const
421 {
422     typedef CSet_BioseqSetColl_EditCommand TCommand;
423     CCommandProcessor processor(x_GetScopeImpl());
424     processor.run(new TCommand(*this, v));
425     //x_GetInfo().SetColl(v);
426 }
427 
428 
ResetLevel(void) const429 void CBioseq_set_EditHandle::ResetLevel(void) const
430 {
431     typedef CReset_BioseqSetLevel_EditCommand TCommand;
432     CCommandProcessor processor(x_GetScopeImpl());
433     processor.run(new TCommand(*this));
434     //    x_GetInfo().ResetLevel();
435 }
436 
437 
SetLevel(TLevel v) const438 void CBioseq_set_EditHandle::SetLevel(TLevel v) const
439 {
440     typedef CSet_BioseqSetLevel_EditCommand TCommand;
441     CCommandProcessor processor(x_GetScopeImpl());
442     processor.run(new TCommand(*this, v));
443     //x_GetInfo().SetLevel(v);
444 }
445 
446 
ResetClass(void) const447 void CBioseq_set_EditHandle::ResetClass(void) const
448 {
449     typedef CReset_BioseqSetClass_EditCommand TCommand;
450     CCommandProcessor processor(x_GetScopeImpl());
451     processor.run(new TCommand(*this));
452     //x_GetInfo().ResetClass();
453 }
454 
455 
SetClass(TClass v) const456 void CBioseq_set_EditHandle::SetClass(TClass v) const
457 {
458     typedef CSet_BioseqSetClass_EditCommand TCommand;
459     CCommandProcessor processor(x_GetScopeImpl());
460     processor.run(new TCommand(*this, v));
461     //x_GetInfo().SetClass(v);
462 }
463 
464 
ResetRelease(void) const465 void CBioseq_set_EditHandle::ResetRelease(void) const
466 {
467     typedef CReset_BioseqSetRelease_EditCommand TCommand;
468     CCommandProcessor processor(x_GetScopeImpl());
469     processor.run(new TCommand(*this));
470     //    x_GetInfo().ResetRelease();
471 }
472 
473 
SetRelease(TRelease & v) const474 void CBioseq_set_EditHandle::SetRelease(TRelease& v) const
475 {
476     typedef CSet_BioseqSetRelease_EditCommand TCommand;
477     CCommandProcessor processor(x_GetScopeImpl());
478     processor.run(new TCommand(*this, v));
479     //    x_GetInfo().SetRelease(v);
480 }
481 
482 
ResetDate(void) const483 void CBioseq_set_EditHandle::ResetDate(void) const
484 {
485     typedef CReset_BioseqSetDate_EditCommand TCommand;
486     CCommandProcessor processor(x_GetScopeImpl());
487     processor.run(new TCommand(*this));
488     //x_GetInfo().ResetDate();
489 }
490 
491 
SetDate(TDate & v) const492 void CBioseq_set_EditHandle::SetDate(TDate& v) const
493 {
494     typedef CSet_BioseqSetDate_EditCommand TCommand;
495     CCommandProcessor processor(x_GetScopeImpl());
496     processor.run(new TCommand(*this,v));
497     //    x_GetInfo().SetDate(v);
498 }
499 
500 
ResetDescr(void) const501 void CBioseq_set_EditHandle::ResetDescr(void) const
502 {
503     typedef CResetValue_EditCommand<CBioseq_set_EditHandle,TDescr> TCommand;
504     CCommandProcessor processor(x_GetScopeImpl());
505     processor.run(new TCommand(*this));
506     //    x_GetInfo().ResetDescr();
507 }
508 
509 
SetDescr(TDescr & v) const510 void CBioseq_set_EditHandle::SetDescr(TDescr& v) const
511 {
512     typedef CSetValue_EditCommand<CBioseq_set_EditHandle,TDescr> TCommand;
513     CCommandProcessor processor(x_GetScopeImpl());
514     processor.run(new TCommand(*this,v));
515     //    x_GetInfo().SetDescr(v);
516 }
517 
518 
SetDescr(void) const519 CBioseq_set_EditHandle::TDescr& CBioseq_set_EditHandle::SetDescr(void) const
520 {
521     if (x_GetScopeImpl().IsTransactionActive()
522         || GetTSE_Handle().x_GetTSE_Info().GetEditSaver() )  {
523         NCBI_THROW(CObjMgrException, eTransaction,
524                        "TDescr& CBioseq_set_EditHandle::SetDescr(): "
525                        "method can not be called if a transaction is required");
526     }
527     return x_GetInfo().SetDescr();
528 }
529 
530 
AddSeqdesc(CSeqdesc & d) const531 bool CBioseq_set_EditHandle::AddSeqdesc(CSeqdesc& d) const
532 {
533     typedef CDesc_EditCommand<CBioseq_set_EditHandle,true> TCommand;
534     CCommandProcessor processor(x_GetScopeImpl());
535     return processor.run(new TCommand(*this, d));
536     //    return x_GetInfo().AddSeqdesc(d);
537 }
538 
539 
RemoveSeqdesc(const CSeqdesc & d) const540 CRef<CSeqdesc> CBioseq_set_EditHandle::RemoveSeqdesc(const CSeqdesc& d) const
541 {
542     typedef CDesc_EditCommand<CBioseq_set_EditHandle,false> TCommand;
543     CCommandProcessor processor(x_GetScopeImpl());
544     return processor.run(new TCommand(*this, d));
545     //return x_GetInfo().RemoveSeqdesc(d);
546 }
547 
548 
ReplaceSeqdesc(const CSeqdesc & old_desc,CSeqdesc & new_desc) const549 CRef<CSeqdesc> CBioseq_set_EditHandle::ReplaceSeqdesc(const CSeqdesc& old_desc, CSeqdesc& new_desc) const
550 {
551     return x_RealReplaceSeqdesc(old_desc, new_desc);
552 }
553 
554 
AddSeq_descr(TDescr & v) const555 void CBioseq_set_EditHandle::AddSeq_descr(TDescr& v) const
556 {
557     typedef CAddDescr_EditCommand<CBioseq_set_EditHandle> TCommand;
558     CCommandProcessor processor(x_GetScopeImpl());
559     processor.run(new TCommand(*this, v));
560     //    x_GetInfo().AddSeq_descr(v);
561 }
562 
563 
AddNewEntry(int index) const564 CSeq_entry_EditHandle CBioseq_set_EditHandle::AddNewEntry(int index) const
565 {
566     return AttachEntry(*new CSeq_entry, index);
567 }
568 
569 
570 CBioseq_EditHandle
AttachBioseq(CBioseq & seq,int index) const571 CBioseq_set_EditHandle::AttachBioseq(CBioseq& seq, int index) const
572 {
573     CRef<IScopeTransaction_Impl> tr(x_GetScopeImpl().CreateTransaction());
574     CBioseq_EditHandle ret = AddNewEntry(index).SelectSeq(seq);
575     tr->Commit();
576     return ret;
577 }
578 
579 
580 CBioseq_EditHandle
CopyBioseq(const CBioseq_Handle & seq,int index) const581 CBioseq_set_EditHandle::CopyBioseq(const CBioseq_Handle& seq,
582                                    int index) const
583 {
584     CRef<IScopeTransaction_Impl> tr(x_GetScopeImpl().CreateTransaction());
585     CBioseq_EditHandle ret = AddNewEntry(index).CopySeq(seq);
586     tr->Commit();
587     return ret;
588 }
589 
590 
591 CBioseq_EditHandle
TakeBioseq(const CBioseq_EditHandle & seq,int index) const592 CBioseq_set_EditHandle::TakeBioseq(const CBioseq_EditHandle& seq,
593                                    int index) const
594 {
595     CRef<IScopeTransaction_Impl> tr(x_GetScopeImpl().CreateTransaction());
596     CBioseq_EditHandle ret = AddNewEntry(index).TakeSeq(seq);
597     tr->Commit();
598     return ret;
599 }
600 
601 
602 CSeq_entry_EditHandle
AttachEntry(CSeq_entry & entry,int index) const603 CBioseq_set_EditHandle::AttachEntry(CSeq_entry& entry, int index) const
604 {
605     return AttachEntry(Ref(new CSeq_entry_Info(entry)), index);
606     //    return x_GetScopeImpl().AttachEntry(*this, entry, index);
607 }
608 
609 CSeq_entry_EditHandle
AttachEntry(CRef<CSeq_entry_Info> entry,int index) const610 CBioseq_set_EditHandle::AttachEntry(CRef<CSeq_entry_Info> entry, int index) const
611 {
612     typedef CAttachEntry_EditCommand<CRef<CSeq_entry_Info> > TCommand;
613     CCommandProcessor processor(x_GetScopeImpl());
614     return processor.run(new TCommand(*this, entry, index, x_GetScopeImpl()));
615 }
616 
617 
618 CSeq_entry_EditHandle
CopyEntry(const CSeq_entry_Handle & entry,int index) const619 CBioseq_set_EditHandle::CopyEntry(const CSeq_entry_Handle& entry,
620                                   int index) const
621 {
622     return AttachEntry(Ref(new CSeq_entry_Info(entry.x_GetInfo(), 0)),
623                        index);
624     //return x_GetScopeImpl().CopyEntry(*this, entry, index);
625 }
626 
627 
628 CSeq_entry_EditHandle
TakeEntry(const CSeq_entry_EditHandle & entry,int index) const629 CBioseq_set_EditHandle::TakeEntry(const CSeq_entry_EditHandle& entry,
630                                   int index) const
631 {
632     CRef<IScopeTransaction_Impl> tr(x_GetScopeImpl().CreateTransaction());
633     entry.Remove();
634     CSeq_entry_EditHandle handle = AttachEntry(entry, index);
635     tr->Commit();
636     return handle;
637     //return x_GetScopeImpl().TakeEntry(*this, entry, index);
638 }
639 
640 
641 CSeq_entry_EditHandle
AttachEntry(const CSeq_entry_EditHandle & entry,int index) const642 CBioseq_set_EditHandle::AttachEntry(const CSeq_entry_EditHandle& entry,
643                                     int index) const
644 {
645     typedef CAttachEntry_EditCommand<CSeq_entry_EditHandle> TCommand;
646     CCommandProcessor processor(x_GetScopeImpl());
647     return processor.run(new TCommand(*this, entry, index, x_GetScopeImpl()));
648     //    return x_GetScopeImpl().AttachEntry(*this, entry, index);
649 }
650 
651 
652 CSeq_annot_EditHandle
AttachAnnot(CSeq_annot & annot) const653 CBioseq_set_EditHandle::AttachAnnot(CSeq_annot& annot) const
654 {
655     return GetParentEntry().AttachAnnot(annot);
656 }
657 
658 
659 CSeq_annot_EditHandle
CopyAnnot(const CSeq_annot_Handle & annot) const660 CBioseq_set_EditHandle::CopyAnnot(const CSeq_annot_Handle& annot) const
661 {
662     return GetParentEntry().CopyAnnot(annot);
663 }
664 
665 
666 CSeq_annot_EditHandle
TakeAnnot(const CSeq_annot_EditHandle & annot) const667 CBioseq_set_EditHandle::TakeAnnot(const CSeq_annot_EditHandle& annot) const
668 {
669     return GetParentEntry().TakeAnnot(annot);
670 }
671 
672 
Remove(CBioseq_set_EditHandle::ERemoveMode mode) const673 void CBioseq_set_EditHandle::Remove(CBioseq_set_EditHandle::ERemoveMode mode) const
674 {
675     if (mode == eKeepSeq_entry)
676         x_Detach();
677     else {
678         CRef<IScopeTransaction_Impl> tr(x_GetScopeImpl().CreateTransaction());
679         CSeq_entry_EditHandle parent = GetParentEntry();
680         x_Detach();
681         parent.Remove();
682         tr->Commit();
683     }
684 }
x_Detach(void) const685 void CBioseq_set_EditHandle::x_Detach(void) const
686 {
687     typedef CRemoveBioseq_set_EditCommand TCommand;
688     CCommandProcessor processor(x_GetScopeImpl());
689     processor.run(new TCommand(*this, x_GetScopeImpl()));
690     //    x_GetScopeImpl().RemoveBioseq_set(*this);
691 }
692 
693 //////////////////////////////////////////////////////////////////////////
x_RealResetDescr(void) const694 void CBioseq_set_EditHandle::x_RealResetDescr(void) const
695 {
696     x_GetInfo().ResetDescr();
697 }
698 
699 
x_RealSetDescr(TDescr & v) const700 void CBioseq_set_EditHandle::x_RealSetDescr(TDescr& v) const
701 {
702     x_GetInfo().SetDescr(v);
703 }
704 
x_RealAddSeqdesc(CSeqdesc & d) const705 bool CBioseq_set_EditHandle::x_RealAddSeqdesc(CSeqdesc& d) const
706 {
707     return x_GetInfo().AddSeqdesc(d);
708 }
709 
710 
x_RealRemoveSeqdesc(const CSeqdesc & d) const711 CRef<CSeqdesc> CBioseq_set_EditHandle::x_RealRemoveSeqdesc(const CSeqdesc& d) const
712 {
713     return x_GetInfo().RemoveSeqdesc(d);
714 }
715 
716 
x_RealReplaceSeqdesc(const CSeqdesc & old_desc,CSeqdesc & new_desc) const717 CRef<CSeqdesc> CBioseq_set_EditHandle::x_RealReplaceSeqdesc(const CSeqdesc& old_desc, CSeqdesc& new_desc) const
718 {
719     return x_GetInfo().ReplaceSeqdesc(old_desc, new_desc);
720 }
721 
722 
x_RealAddSeq_descr(TDescr & v) const723 void CBioseq_set_EditHandle::x_RealAddSeq_descr(TDescr& v) const
724 {
725     x_GetInfo().AddSeq_descr(v);
726 }
727 
x_RealResetId(void) const728 void CBioseq_set_EditHandle::x_RealResetId(void) const
729 {
730     x_GetInfo().ResetId();
731 }
732 
733 
x_RealSetId(TId & v) const734 void CBioseq_set_EditHandle::x_RealSetId(TId& v) const
735 {
736     x_GetInfo().SetId(v);
737 }
738 
739 
x_RealResetColl(void) const740 void CBioseq_set_EditHandle::x_RealResetColl(void) const
741 {
742     x_GetInfo().ResetColl();
743 }
744 
745 
x_RealSetColl(TColl & v) const746 void CBioseq_set_EditHandle::x_RealSetColl(TColl& v) const
747 {
748     x_GetInfo().SetColl(v);
749 }
750 
751 
x_RealResetLevel(void) const752 void CBioseq_set_EditHandle::x_RealResetLevel(void) const
753 {
754     x_GetInfo().ResetLevel();
755 }
756 
757 
x_RealSetLevel(TLevel v) const758 void CBioseq_set_EditHandle::x_RealSetLevel(TLevel v) const
759 {
760     x_GetInfo().SetLevel(v);
761 }
762 
763 
x_RealResetClass(void) const764 void CBioseq_set_EditHandle::x_RealResetClass(void) const
765 {
766     x_GetInfo().ResetClass();
767 }
768 
769 
x_RealSetClass(TClass v) const770 void CBioseq_set_EditHandle::x_RealSetClass(TClass v) const
771 {
772     x_GetInfo().SetClass(v);
773 }
774 
775 
x_RealResetRelease(void) const776 void CBioseq_set_EditHandle::x_RealResetRelease(void) const
777 {
778     x_GetInfo().ResetRelease();
779 }
780 
781 
x_RealSetRelease(TRelease & v) const782 void CBioseq_set_EditHandle::x_RealSetRelease(TRelease& v) const
783 {
784     x_GetInfo().SetRelease(v);
785 }
786 
787 
x_RealResetDate(void) const788 void CBioseq_set_EditHandle::x_RealResetDate(void) const
789 {
790     x_GetInfo().ResetDate();
791 }
792 
793 
x_RealSetDate(TDate & v) const794 void CBioseq_set_EditHandle::x_RealSetDate(TDate& v) const
795 {
796     x_GetInfo().SetDate(v);
797 }
798 
799 
800 END_SCOPE(objects)
801 END_NCBI_SCOPE
802