0024023: Revamp the OCCT Handle -- general
[occt.git] / src / STEPConstruct / STEPConstruct_AP203Context.cxx
1 // Created on: 1999-11-19
2 // Created by: Andrey BETENEV
3 // Copyright (c) 1999-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
5 //
6 // This file is part of Open CASCADE Technology software library.
7 //
8 // This library is free software; you can redistribute it and/or modify it under
9 // the terms of the GNU Lesser General Public License version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
13 //
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
16
17 #include <STEPConstruct_AP203Context.ixx>
18
19 #ifndef _WIN32
20 # include <pwd.h>
21 # include <netdb.h>
22 #else
23 # include <winsock2.h>
24 #endif
25
26 #include <stdio.h>
27
28 #include <OSD_Process.hxx>
29 #include <Quantity_Date.hxx>
30
31 #include <TCollection_HAsciiString.hxx>
32 #include <TColStd_SequenceOfAsciiString.hxx>
33 #include <Interface_HArray1OfHAsciiString.hxx>
34
35 #include <StepBasic_CalendarDate.hxx>
36 #include <StepBasic_LocalTime.hxx>
37 #include <StepBasic_ApprovalStatus.hxx>
38 #include <StepBasic_CoordinatedUniversalTimeOffset.hxx>
39 #include <StepBasic_AheadOrBehind.hxx>
40 #include <StepBasic_Person.hxx>
41 #include <StepBasic_Organization.hxx>
42 #include <StepBasic_SecurityClassification.hxx>
43 #include <StepBasic_Product.hxx>
44 #include <StepBasic_ProductDefinition.hxx>
45 #include <StepBasic_ProductDefinitionFormation.hxx>
46 #include <StepBasic_ProductRelatedProductCategory.hxx>
47 #include <StepAP203_HArray1OfPersonOrganizationItem.hxx>
48 #include <StepAP203_HArray1OfClassifiedItem.hxx>
49 #include <StepAP203_HArray1OfDateTimeItem.hxx>
50 #include <StepAP203_HArray1OfApprovedItem.hxx>
51 #include <StepBasic_ProductCategory.hxx>
52
53 //=======================================================================
54 //function : STEPConstruct_AP203Context
55 //purpose  : 
56 //=======================================================================
57
58 STEPConstruct_AP203Context::STEPConstruct_AP203Context ()
59 {
60   InitRoles();
61 }
62             
63 //=======================================================================
64 //function : DefaultApproval
65 //purpose  : 
66 //=======================================================================
67
68 Handle(StepBasic_Approval) STEPConstruct_AP203Context::DefaultApproval ()
69 {
70   if ( defApproval.IsNull() ) {
71     Handle(StepBasic_ApprovalStatus) aStatus = new StepBasic_ApprovalStatus;
72     Handle(TCollection_HAsciiString) aName = new TCollection_HAsciiString ("not_yet_approved");
73     aStatus->Init ( aName );
74
75     Handle(TCollection_HAsciiString) aLevel = new TCollection_HAsciiString ("");
76     defApproval = new StepBasic_Approval;
77     defApproval->Init ( aStatus, aLevel );
78   }
79   return defApproval;
80 }
81
82 //=======================================================================
83 //function : SetDefaultApproval
84 //purpose  : 
85 //=======================================================================
86
87 void STEPConstruct_AP203Context::SetDefaultApproval (const Handle(StepBasic_Approval) &app)
88 {
89   defApproval = app;
90 }
91     
92 //=======================================================================
93 //function : DefaultDateAndTime
94 //purpose  : 
95 //=======================================================================
96
97 Handle(StepBasic_DateAndTime) STEPConstruct_AP203Context::DefaultDateAndTime ()
98 {
99   if ( defDateAndTime.IsNull() ) {
100     OSD_Process sys;
101     Quantity_Date date = sys.SystemDate ();
102
103     Handle(StepBasic_CalendarDate) aDate = new StepBasic_CalendarDate;
104     aDate->Init ( date.Year(), date.Day(), date.Month() );
105
106     Handle(StepBasic_CoordinatedUniversalTimeOffset) zone = 
107       new StepBasic_CoordinatedUniversalTimeOffset;
108     Standard_Integer shift = Standard_Integer(timezone);
109     Standard_Integer shifth = abs ( shift ) / 3600;
110     Standard_Integer shiftm = ( abs ( shift ) - shifth * 3600 ) / 60;
111     StepBasic_AheadOrBehind sense = ( shift >0 ? StepBasic_aobBehind : 
112                                       shift <0 ? StepBasic_aobAhead : 
113                                                  StepBasic_aobExact );
114     zone->Init ( shifth, ( shiftm != 0 ), shiftm, sense );
115     
116     Handle(StepBasic_LocalTime) aTime = new StepBasic_LocalTime;
117     aTime->Init ( date.Hour(), Standard_True, date.Minute(), Standard_False, 0., zone );
118
119     defDateAndTime = new StepBasic_DateAndTime;
120     defDateAndTime->Init ( aDate, aTime );
121   }
122   return defDateAndTime;
123 }
124
125 //=======================================================================
126 //function : SetDefaultDateAndTime
127 //purpose  : 
128 //=======================================================================
129
130 void STEPConstruct_AP203Context::SetDefaultDateAndTime (const Handle(StepBasic_DateAndTime) &dt)
131 {
132   defDateAndTime = dt;
133 }
134     
135 //=======================================================================
136 //function : DefaultPersonAndOrganization
137 //purpose  : 
138 //=======================================================================
139
140 Handle(StepBasic_PersonAndOrganization) STEPConstruct_AP203Context::DefaultPersonAndOrganization ()
141 {
142   if ( defPersonAndOrganization.IsNull() ) {
143     // get IP address as a unique id of organization
144 #ifdef WNT // adapted for NT which lacks gethostent()
145     char hostname[1024];
146     hostname[0] = '\0';
147     gethostname ( hostname, 1020 );
148     hostname[1020] = '\0';
149     struct hostent *he = gethostbyname ( hostname );
150 #else // adapted for Sun2.5, which lacks definition of gethostname()
151     struct hostent *he = gethostent();
152     while ( he && he->h_name && (unsigned char)he->h_addr_list[0][0] == 127 )
153       he = gethostent();
154 #endif
155     Handle(TCollection_HAsciiString) orgId = new TCollection_HAsciiString ( "" );
156     if ( he && he->h_addr_list && he->h_length >0 ) {
157       char str[100];
158       unsigned i1 = (unsigned char)he->h_addr_list[0][0];
159       unsigned i2 = (unsigned char)he->h_addr_list[0][1];
160       unsigned i3 = (unsigned char)he->h_addr_list[0][2];
161       sprintf ( str, "IP%03u.%03u.%03u.000", i1, i2, i3 );
162       orgId->AssignCat ( str );
163     }
164     
165     // create organization
166     Handle(StepBasic_Organization) aOrg = new StepBasic_Organization;
167     Handle(TCollection_HAsciiString) oName = new TCollection_HAsciiString ( "Unspecified" );
168     Handle(TCollection_HAsciiString) oDescr = new TCollection_HAsciiString ( "" );
169     aOrg->Init ( Standard_True, orgId, oName, oDescr );
170     
171     // construct person`s name
172     OSD_Process sys;
173     Standard_CString usr = sys.UserName().ToCString();
174 #if !defined(_WIN32) && !defined(__ANDROID__)
175     if ( usr ) {
176       struct passwd *pwd = getpwnam ( usr );
177       if ( pwd ) usr = pwd->pw_gecos;
178     }
179     else usr = "Unknown";
180 #endif
181     TCollection_AsciiString user ( usr );
182     Handle(TCollection_HAsciiString) fname = new TCollection_HAsciiString ("");
183     Handle(TCollection_HAsciiString) lname = new TCollection_HAsciiString ("");
184     Handle(Interface_HArray1OfHAsciiString) mname;
185     TColStd_SequenceOfAsciiString names;
186     Standard_Integer i; // svv Jan11 2000 : porting on DEC
187     for ( i=1; ; i++ ) {
188       TCollection_AsciiString token = user.Token ( " \t", i );
189       if ( ! token.Length() ) break;
190       names.Append ( token );
191     }
192     if ( names.Length() >0 ) fname->AssignCat ( names.Value(1).ToCString() );
193     if ( names.Length() >1 ) lname->AssignCat ( names.Value(names.Length()).ToCString() );
194     if ( names.Length() >2 ) {
195       mname = new Interface_HArray1OfHAsciiString ( 1, names.Length()-2 );
196       for ( i=2; i < names.Length(); i++ ) 
197         mname->SetValue ( i-1, new TCollection_HAsciiString ( names.Value(i) ) );
198     }
199     
200     // create a person
201     Handle(StepBasic_Person) aPerson = new StepBasic_Person;
202     Handle(TCollection_HAsciiString) uid = new TCollection_HAsciiString ( orgId );
203     uid->AssignCat ( "," );
204     uid->AssignCat ( TCollection_AsciiString ( sys.UserId() ).ToCString() );
205     Handle(Interface_HArray1OfHAsciiString) suffix, prefix;
206     aPerson->Init ( uid, Standard_True, lname, Standard_True, fname, ( ! mname.IsNull() ),
207                     mname, Standard_False, suffix, Standard_False, prefix );
208  
209     defPersonAndOrganization = new StepBasic_PersonAndOrganization;
210     defPersonAndOrganization->Init ( aPerson, aOrg );
211   }
212   return defPersonAndOrganization;  
213 }
214
215 //=======================================================================
216 //function : SetDefaultPersonAndOrganization
217 //purpose  : 
218 //=======================================================================
219
220 void STEPConstruct_AP203Context::SetDefaultPersonAndOrganization (const Handle(StepBasic_PersonAndOrganization) &po)
221 {
222   defPersonAndOrganization = po;
223 }
224     
225 //=======================================================================
226 //function : DefaultSecurityClassificationLevel
227 //purpose  : 
228 //=======================================================================
229
230 Handle(StepBasic_SecurityClassificationLevel) STEPConstruct_AP203Context::DefaultSecurityClassificationLevel ()
231 {
232   if ( defSecurityClassificationLevel.IsNull() ) {
233     defSecurityClassificationLevel = new StepBasic_SecurityClassificationLevel;
234     Handle(TCollection_HAsciiString) levName = new TCollection_HAsciiString ( "unclassified" );
235     defSecurityClassificationLevel->Init ( levName );
236   }
237   return defSecurityClassificationLevel;  
238 }
239
240 //=======================================================================
241 //function : SetDefaultSecurityClassificationLevel
242 //purpose  : 
243 //=======================================================================
244
245 void STEPConstruct_AP203Context::SetDefaultSecurityClassificationLevel (const Handle(StepBasic_SecurityClassificationLevel) &scl)
246 {
247   defSecurityClassificationLevel = scl;
248 }
249
250 //=======================================================================
251 //function : RoleCreator
252 //purpose  : 
253 //=======================================================================
254
255 Handle(StepBasic_PersonAndOrganizationRole) STEPConstruct_AP203Context::RoleCreator () const 
256 {
257   return roleCreator;
258 }
259
260 //=======================================================================
261 //function : RoleDesignOwner
262 //purpose  : 
263 //=======================================================================
264
265 Handle(StepBasic_PersonAndOrganizationRole) STEPConstruct_AP203Context::RoleDesignOwner () const
266 {
267   return roleDesignOwner;
268 }
269
270 //=======================================================================
271 //function : RoleDesignSupplier
272 //purpose  : 
273 //=======================================================================
274
275 Handle(StepBasic_PersonAndOrganizationRole) STEPConstruct_AP203Context::RoleDesignSupplier () const
276 {
277   return roleDesignSupplier;
278 }
279
280 //=======================================================================
281 //function : RoleClassificationOfficer
282 //purpose  : 
283 //=======================================================================
284
285 Handle(StepBasic_PersonAndOrganizationRole) STEPConstruct_AP203Context::RoleClassificationOfficer () const
286 {
287   return roleClassificationOfficer;
288 }
289
290 //=======================================================================
291 //function : RoleCreationDate
292 //purpose  : 
293 //=======================================================================
294
295 Handle(StepBasic_DateTimeRole) STEPConstruct_AP203Context::RoleCreationDate () const
296 {
297   return roleCreationDate;
298 }
299
300 //=======================================================================
301 //function : RoleClassificationDate
302 //purpose  : 
303 //=======================================================================
304
305 Handle(StepBasic_DateTimeRole) STEPConstruct_AP203Context::RoleClassificationDate () const
306 {
307   return roleClassificationDate;
308 }
309
310 //=======================================================================
311 //function : RoleApprover
312 //purpose  : 
313 //=======================================================================
314
315 Handle(StepBasic_ApprovalRole) STEPConstruct_AP203Context::RoleApprover () const
316 {
317   return roleApprover;
318 }
319
320 //=======================================================================
321 //function : Init
322 //purpose  : 
323 //=======================================================================
324
325 void STEPConstruct_AP203Context::Init (const Handle(StepShape_ShapeDefinitionRepresentation) &sdr)
326 {
327   Clear();
328   STEPConstruct_Part SDRTool;
329   SDRTool.ReadSDR ( sdr );
330   InitPart ( SDRTool );
331 }
332
333 //=======================================================================
334 //function : Init
335 //purpose  : 
336 //=======================================================================
337
338 void STEPConstruct_AP203Context::Init (const STEPConstruct_Part &SDRTool)
339 {
340   Clear();
341   InitPart ( SDRTool );
342 }
343
344 //=======================================================================
345 //function : Init
346 //purpose  : 
347 //=======================================================================
348
349 //void STEPConstruct_AP203Context::Init (const STEPConstruct_Part &SDRTool, const Handle(Interface_Model) &Model) {}
350
351 //=======================================================================
352 //function : Init
353 //purpose  : 
354 //=======================================================================
355
356 void STEPConstruct_AP203Context::Init (const Handle(StepRepr_NextAssemblyUsageOccurrence) &NAUO)
357 {
358   Clear();
359   InitAssembly ( NAUO );
360 }
361
362 //=======================================================================
363 //function : GetCreator
364 //purpose  : 
365 //=======================================================================
366
367 Handle(StepAP203_CcDesignPersonAndOrganizationAssignment) STEPConstruct_AP203Context::GetCreator () const
368 {
369   return myCreator;
370 }
371
372 //=======================================================================
373 //function : GetDesignOwner
374 //purpose  : 
375 //=======================================================================
376
377 Handle(StepAP203_CcDesignPersonAndOrganizationAssignment) STEPConstruct_AP203Context::GetDesignOwner () const
378 {
379   return myDesignOwner;
380 }
381
382 //=======================================================================
383 //function : GetDesignSupplier
384 //purpose  : 
385 //=======================================================================
386
387 Handle(StepAP203_CcDesignPersonAndOrganizationAssignment) STEPConstruct_AP203Context::GetDesignSupplier () const
388 {
389   return myDesignSupplier;
390 }
391
392 //=======================================================================
393 //function : GetClassificationOfficer
394 //purpose  : 
395 //=======================================================================
396
397 Handle(StepAP203_CcDesignPersonAndOrganizationAssignment) STEPConstruct_AP203Context::GetClassificationOfficer () const
398 {
399   return myClassificationOfficer;
400 }
401
402 //=======================================================================
403 //function : GetSecurity
404 //purpose  : 
405 //=======================================================================
406
407 Handle(StepAP203_CcDesignSecurityClassification) STEPConstruct_AP203Context::GetSecurity () const
408 {
409   return mySecurity;
410 }
411
412 //=======================================================================
413 //function : GetCreationDate
414 //purpose  : 
415 //=======================================================================
416
417 Handle(StepAP203_CcDesignDateAndTimeAssignment) STEPConstruct_AP203Context::GetCreationDate () const
418 {
419   return myCreationDate;
420 }
421
422 //=======================================================================
423 //function : GetClassificationDate
424 //purpose  : 
425 //=======================================================================
426
427 Handle(StepAP203_CcDesignDateAndTimeAssignment) STEPConstruct_AP203Context::GetClassificationDate () const
428 {
429   return myClassificationDate;
430 }
431
432 //=======================================================================
433 //function : GetApproval
434 //purpose  : 
435 //=======================================================================
436
437 Handle(StepAP203_CcDesignApproval) STEPConstruct_AP203Context::GetApproval () const
438 {
439   return myApproval;
440 }
441
442 //=======================================================================
443 //function : GetApprover
444 //purpose  : 
445 //=======================================================================
446
447 Handle(StepBasic_ApprovalPersonOrganization) STEPConstruct_AP203Context::GetApprover () const
448 {
449   return myApprover;
450 }
451
452 //=======================================================================
453 //function : GetApprovalDateTime
454 //purpose  : 
455 //=======================================================================
456
457 Handle(StepBasic_ApprovalDateTime) STEPConstruct_AP203Context::GetApprovalDateTime () const
458 {
459   return myApprovalDateTime;
460 }
461
462 //=======================================================================
463 //function : GetProductCategoryRelationship
464 //purpose  : 
465 //=======================================================================
466
467 Handle(StepBasic_ProductCategoryRelationship) STEPConstruct_AP203Context::GetProductCategoryRelationship () const
468 {
469   return myProductCategoryRelationship;
470 }
471
472 //=======================================================================
473 //function : Clear
474 //purpose  : 
475 //=======================================================================
476
477 void STEPConstruct_AP203Context::Clear ()
478 {
479   myCreator.Nullify();
480   myDesignOwner.Nullify();
481   myDesignSupplier.Nullify();
482   myClassificationOfficer.Nullify();
483   mySecurity.Nullify();
484   myCreationDate.Nullify();
485   myClassificationDate.Nullify();
486   myApproval.Nullify();
487   
488 //  myApprover.Nullify();
489 //  myApprovalDateTime.Nullify();
490   
491   myProductCategoryRelationship.Nullify();
492 }
493
494 //=======================================================================
495 //function : InitRoles
496 //purpose  : 
497 //=======================================================================
498
499 void STEPConstruct_AP203Context::InitRoles ()
500 {
501   roleCreator = new StepBasic_PersonAndOrganizationRole;
502   roleDesignOwner = new StepBasic_PersonAndOrganizationRole;
503   roleDesignSupplier = new StepBasic_PersonAndOrganizationRole;
504   roleClassificationOfficer = new StepBasic_PersonAndOrganizationRole;
505   roleCreationDate = new StepBasic_DateTimeRole;
506   roleClassificationDate = new StepBasic_DateTimeRole;
507   roleApprover = new StepBasic_ApprovalRole;
508   
509   roleCreator->Init ( new TCollection_HAsciiString ( "creator" ) );
510   roleDesignOwner->Init ( new TCollection_HAsciiString ( "design_owner" ) );
511   roleDesignSupplier->Init ( new TCollection_HAsciiString ( "design_supplier" ) );
512   roleClassificationOfficer->Init ( new TCollection_HAsciiString ( "classification_officer" ) );
513   roleCreationDate->Init ( new TCollection_HAsciiString ( "creation_date" ) );
514   roleClassificationDate->Init ( new TCollection_HAsciiString ( "classification_date" ) );
515   roleApprover->Init ( new TCollection_HAsciiString ( "approver" ) );
516 }
517
518 //=======================================================================
519 //function : InitPart
520 //purpose  : 
521 //=======================================================================
522
523 void STEPConstruct_AP203Context::InitPart (const STEPConstruct_Part &SDRTool)
524 {
525   if ( myCreator.IsNull() ) {
526     myCreator = new StepAP203_CcDesignPersonAndOrganizationAssignment;
527     Handle(StepAP203_HArray1OfPersonOrganizationItem) items = 
528       new StepAP203_HArray1OfPersonOrganizationItem (1, 2);
529     items->ChangeValue(1).SetValue ( SDRTool.PDF() );
530     items->ChangeValue(2).SetValue ( SDRTool.PD() );
531     myCreator->Init ( DefaultPersonAndOrganization(), RoleCreator(), items );
532   }
533   
534   if ( myDesignOwner.IsNull() ) {
535     myDesignOwner = new StepAP203_CcDesignPersonAndOrganizationAssignment;
536     Handle(StepAP203_HArray1OfPersonOrganizationItem) items = 
537       new StepAP203_HArray1OfPersonOrganizationItem (1, 1);
538     items->ChangeValue(1).SetValue ( SDRTool.Product() );
539     myDesignOwner->Init ( DefaultPersonAndOrganization(), RoleDesignOwner(), items );
540   }
541   
542   if ( myDesignSupplier.IsNull() ) {
543     myDesignSupplier = new StepAP203_CcDesignPersonAndOrganizationAssignment;
544     Handle(StepAP203_HArray1OfPersonOrganizationItem) items = 
545       new StepAP203_HArray1OfPersonOrganizationItem (1, 1);
546     items->ChangeValue(1).SetValue ( SDRTool.PDF() );
547     myDesignSupplier->Init ( DefaultPersonAndOrganization(), RoleDesignSupplier(), items );
548   }
549   
550   if ( myCreationDate.IsNull() ) {
551     myCreationDate = new StepAP203_CcDesignDateAndTimeAssignment;
552     Handle(StepAP203_HArray1OfDateTimeItem) items = 
553       new StepAP203_HArray1OfDateTimeItem (1, 1);
554     items->ChangeValue(1).SetValue ( SDRTool.PD() );
555     myCreationDate->Init ( DefaultDateAndTime(), RoleCreationDate(), items );
556   }
557   
558   if ( mySecurity.IsNull() ) {
559     
560     Handle(TCollection_HAsciiString) aName = new TCollection_HAsciiString ( "" );
561     Handle(TCollection_HAsciiString) aPurpose = new TCollection_HAsciiString ( "" );
562     Handle(StepBasic_SecurityClassification) sc = new StepBasic_SecurityClassification;
563     sc->Init ( aName, aPurpose, DefaultSecurityClassificationLevel() );
564
565     mySecurity = new StepAP203_CcDesignSecurityClassification;
566     Handle(StepAP203_HArray1OfClassifiedItem) items = 
567       new StepAP203_HArray1OfClassifiedItem (1, 1);
568     items->ChangeValue(1).SetValue ( SDRTool.PDF() );
569     mySecurity->Init ( sc, items );
570   }
571   InitSecurityRequisites();
572   
573   if ( myApproval.IsNull() ) {
574     myApproval = new StepAP203_CcDesignApproval;
575     Handle(StepAP203_HArray1OfApprovedItem) items = 
576       new StepAP203_HArray1OfApprovedItem (1, 3);
577     items->ChangeValue(1).SetValue ( SDRTool.PDF() );
578     items->ChangeValue(2).SetValue ( SDRTool.PD() );
579     items->ChangeValue(3).SetValue ( mySecurity->AssignedSecurityClassification() );
580     myApproval->Init ( DefaultApproval(), items );
581   }
582   InitApprovalRequisites();
583
584   if ( myProductCategoryRelationship.IsNull() ) {
585     Handle(StepBasic_ProductCategory) PC = new StepBasic_ProductCategory;
586     Handle(TCollection_HAsciiString) PCName = new TCollection_HAsciiString ( "part" );
587     PC->Init ( PCName, Standard_False, 0 );
588     
589     myProductCategoryRelationship = new StepBasic_ProductCategoryRelationship;
590     Handle(TCollection_HAsciiString) PCRName = new TCollection_HAsciiString ( "" );
591     Handle(TCollection_HAsciiString) PCRDescr = new TCollection_HAsciiString ( "" );
592     myProductCategoryRelationship->Init ( PCRName, Standard_True, PCRDescr, PC, SDRTool.PRPC() );
593   }
594 }
595
596 //=======================================================================
597 //function : InitAssembly
598 //purpose  : 
599 //=======================================================================
600
601 void STEPConstruct_AP203Context::InitAssembly (const Handle(StepRepr_NextAssemblyUsageOccurrence) &NAUO)
602 {
603   if ( mySecurity.IsNull() ) {
604     
605     Handle(TCollection_HAsciiString) aName = new TCollection_HAsciiString ( "" );
606     Handle(TCollection_HAsciiString) aPurpose = new TCollection_HAsciiString ( "" );
607     Handle(StepBasic_SecurityClassification) sc = new StepBasic_SecurityClassification;
608     sc->Init ( aName, aPurpose, DefaultSecurityClassificationLevel() );
609
610     mySecurity = new StepAP203_CcDesignSecurityClassification;
611     Handle(StepAP203_HArray1OfClassifiedItem) items = 
612       new StepAP203_HArray1OfClassifiedItem (1, 1);
613     items->ChangeValue(1).SetValue ( NAUO );
614     mySecurity->Init ( sc, items );
615   }
616   InitSecurityRequisites();
617   
618   if ( myApproval.IsNull() ) {
619     myApproval = new StepAP203_CcDesignApproval;
620     Handle(StepAP203_HArray1OfApprovedItem) items = 
621       new StepAP203_HArray1OfApprovedItem (1, 1);
622     items->ChangeValue(1).SetValue ( mySecurity->AssignedSecurityClassification() );
623     myApproval->Init ( DefaultApproval(), items );
624   }  
625   InitApprovalRequisites();
626 }
627
628 //=======================================================================
629 //function : InitSecurityRequisites
630 //purpose  : 
631 //=======================================================================
632
633 void STEPConstruct_AP203Context::InitSecurityRequisites ()
634 {
635   if ( myClassificationOfficer.IsNull() ||
636        myClassificationOfficer->Items()->Value(1).Value() != mySecurity->AssignedSecurityClassification() ) {
637     myClassificationOfficer = new StepAP203_CcDesignPersonAndOrganizationAssignment;
638     Handle(StepAP203_HArray1OfPersonOrganizationItem) items = 
639       new StepAP203_HArray1OfPersonOrganizationItem (1, 1);
640     items->ChangeValue(1).SetValue ( mySecurity->AssignedSecurityClassification() );
641     myClassificationOfficer->Init ( DefaultPersonAndOrganization(), RoleClassificationOfficer(), items );
642   }
643   
644   if ( myClassificationDate.IsNull() ||
645        myClassificationDate->Items()->Value(1).Value() != mySecurity->AssignedSecurityClassification() ) {
646     myClassificationDate = new StepAP203_CcDesignDateAndTimeAssignment;
647     Handle(StepAP203_HArray1OfDateTimeItem) items = 
648       new StepAP203_HArray1OfDateTimeItem (1, 1);
649     items->ChangeValue(1).SetValue ( mySecurity->AssignedSecurityClassification() );
650     myClassificationDate->Init ( DefaultDateAndTime(), RoleClassificationDate(), items );
651   }
652 }
653   
654 //=======================================================================
655 //function : InitApprovalRequisites
656 //purpose  : 
657 //=======================================================================
658
659 void STEPConstruct_AP203Context::InitApprovalRequisites ()
660 {
661   if ( myApprover.IsNull() || 
662        myApprover->AuthorizedApproval() != myApproval->AssignedApproval() ) {
663     myApprover = new StepBasic_ApprovalPersonOrganization;
664     StepBasic_PersonOrganizationSelect po;
665     po.SetValue ( DefaultPersonAndOrganization() );
666     myApprover->Init ( po, myApproval->AssignedApproval(), RoleApprover() );
667   }
668   
669   if ( myApprovalDateTime.IsNull() || 
670        myApprovalDateTime->DatedApproval() != myApproval->AssignedApproval() ) {
671     myApprovalDateTime = new StepBasic_ApprovalDateTime;
672     StepBasic_DateTimeSelect dt;
673     dt.SetValue ( DefaultDateAndTime() );
674     myApprovalDateTime->Init ( dt, myApproval->AssignedApproval() );
675   }
676 }