|
||||
File indexing completed on 2025-01-18 10:04:07
0001 // Created by: Christian CAILLET <cky@phobox> 0002 // Copyright (c) 1992-1999 Matra Datavision 0003 // Copyright (c) 1999-2014 OPEN CASCADE SAS 0004 // 0005 // This file is part of Open CASCADE Technology software library. 0006 // 0007 // This library is free software; you can redistribute it and/or modify it under 0008 // the terms of the GNU Lesser General Public License version 2.1 as published 0009 // by the Free Software Foundation, with special exception defined in the file 0010 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT 0011 // distribution for complete text of the license and disclaimer of any warranty. 0012 // 0013 // Alternatively, this file may be used under the terms of Open CASCADE 0014 // commercial license or contractual agreement. 0015 0016 #ifndef _Interface_InterfaceModel_HeaderFile 0017 #define _Interface_InterfaceModel_HeaderFile 0018 0019 #include <Standard.hxx> 0020 #include <Standard_Type.hxx> 0021 0022 #include <TColStd_IndexedMapOfTransient.hxx> 0023 #include <TColStd_DataMapOfIntegerTransient.hxx> 0024 #include <Standard_Transient.hxx> 0025 #include <Standard_Integer.hxx> 0026 #include <Interface_DataState.hxx> 0027 #include <TColStd_HSequenceOfHAsciiString.hxx> 0028 class Interface_Check; 0029 class TCollection_HAsciiString; 0030 class Interface_GTool; 0031 class Interface_Protocol; 0032 class Interface_ReportEntity; 0033 class Interface_CheckIterator; 0034 class Interface_GeneralLib; 0035 class Interface_EntityIterator; 0036 0037 0038 class Interface_InterfaceModel; 0039 DEFINE_STANDARD_HANDLE(Interface_InterfaceModel, Standard_Transient) 0040 0041 //! Defines an (Indexed) Set of data corresponding to a complete 0042 //! Transfer by a File Interface, i.e. File Header and Transient 0043 //! Entities (Objects) contained in a File. Contained Entities are 0044 //! identified in the Model by unique and consecutive Numbers. 0045 //! 0046 //! In addition, a Model can attach to each entity, a specific 0047 //! Label according to the norm (e.g. Name for VDA, #ident for 0048 //! Step ...), intended to be output on a string or a stream 0049 //! (remark : labels are not obliged to be unique) 0050 //! 0051 //! InterfaceModel itself is not Transient, it is intended to 0052 //! work on a set of Transient Data. The services offered are 0053 //! basic Listing and Identification operations on Transient 0054 //! Entities, storage of Error Reports, Copying. 0055 //! 0056 //! Moreovere, it is possible to define and use templates. These 0057 //! are empty Models, from which copies can be obtained in order 0058 //! to be filled with effective data. This allows to record 0059 //! standard definitions for headers, avoiding to recreate them 0060 //! for each sendings, and assuring customisation of produced 0061 //! files for a given site. 0062 //! A template is attached to a name. It is possible to define a 0063 //! template from another one (get it, edit it then record it 0064 //! under another name). 0065 //! 0066 //! See also Graph, ShareTool, CheckTool for more 0067 class Interface_InterfaceModel : public Standard_Transient 0068 { 0069 0070 public: 0071 0072 0073 //! Clears the list of entities (service WhenDelete) 0074 Standard_EXPORT void Destroy(); 0075 ~Interface_InterfaceModel() 0076 { 0077 Destroy(); 0078 } 0079 0080 //! Sets a Protocol for this Model 0081 //! It is also set by a call to AddWithRefs with Protocol 0082 //! It is used for : DumpHeader (as required), ClearEntities ... 0083 Standard_EXPORT void SetProtocol (const Handle(Interface_Protocol)& proto); 0084 0085 //! Returns the Protocol which has been set by SetProtocol, or 0086 //! AddWithRefs with Protocol 0087 Standard_EXPORT virtual Handle(Interface_Protocol) Protocol() const; 0088 0089 //! Sets a GTool for this model, which already defines a Protocol 0090 Standard_EXPORT void SetGTool (const Handle(Interface_GTool)& gtool); 0091 0092 //! Returns the GTool, set by SetProtocol or by SetGTool 0093 Standard_EXPORT Handle(Interface_GTool) GTool() const; 0094 0095 //! Returns the Dispatch Status, either for get or set 0096 //! A Model which is produced from Dispatch may share entities 0097 //! with the original (according to the Protocol), hence these 0098 //! non-copied entities should not be deleted 0099 Standard_EXPORT Standard_Boolean& DispatchStatus(); 0100 0101 //! Erases contained data; used when a Model is copied to others : 0102 //! the new copied ones begin from clear 0103 //! Clear calls specific method ClearHeader (see below) 0104 Standard_EXPORT virtual void Clear(); 0105 0106 //! Clears the entities; uses the general service WhenDelete, in 0107 //! addition to the standard Memory Manager; can be redefined 0108 Standard_EXPORT virtual void ClearEntities(); 0109 0110 //! Erases information about labels, if any : specific to each 0111 //! norm 0112 Standard_EXPORT virtual void ClearLabels() = 0; 0113 0114 //! Clears Model's header : specific to each norm 0115 Standard_EXPORT virtual void ClearHeader() = 0; 0116 0117 //! Returns count of contained Entities 0118 Standard_EXPORT Standard_Integer NbEntities() const; 0119 0120 //! Returns True if a Model contains an Entity (for a ReportEntity, 0121 //! looks for the ReportEntity itself AND its Concerned Entity) 0122 Standard_EXPORT Standard_Boolean Contains (const Handle(Standard_Transient)& anentity) const; 0123 0124 //! Returns the Number of an Entity in the Model if it contains it. 0125 //! Else returns 0. For a ReportEntity, looks at Concerned Entity. 0126 //! Returns the Directory entry Number of an Entity in 0127 //! the Model if it contains it. Else returns 0. For a 0128 //! ReportEntity, looks at Concerned Entity. 0129 Standard_EXPORT Standard_Integer Number (const Handle(Standard_Transient)& anentity) const; 0130 0131 //! Returns an Entity identified by its number in the Model 0132 //! Each sub-class of InterfaceModel can define its own method 0133 //! Entity to return its specific class of Entity (e.g. for VDA, 0134 //! VDAModel returns a VDAEntity), working by calling Value 0135 //! Remark : For a Reported Entity, (Erroneous, Corrected, Unknown), this 0136 //! method returns this Reported Entity. 0137 //! See ReportEntity for other questions. 0138 Standard_EXPORT const Handle(Standard_Transient)& Value (const Standard_Integer num) const; 0139 0140 //! Returns the count of DISTINCT types under which an entity may 0141 //! be processed. Defined by the Protocol, which gives default as 0142 //! 1 (dynamic Type). 0143 Standard_EXPORT Standard_Integer NbTypes (const Handle(Standard_Transient)& ent) const; 0144 0145 //! Returns a type, given its rank : defined by the Protocol 0146 //! (by default, the first one) 0147 Standard_EXPORT Handle(Standard_Type) Type (const Handle(Standard_Transient)& ent, const Standard_Integer num = 1) const; 0148 0149 //! Returns the type name of an entity, from the list of types 0150 //! (one or more ...) 0151 //! <complete> True (D) gives the complete type, else packages are 0152 //! removed 0153 //! WARNING : buffered, to be immediately copied or printed 0154 Standard_EXPORT Standard_CString TypeName (const Handle(Standard_Transient)& ent, const Standard_Boolean complete = Standard_True) const; 0155 0156 //! From a CDL Type Name, returns the Class part (package dropped) 0157 //! WARNING : buffered, to be immediately copied or printed 0158 Standard_EXPORT static Standard_CString ClassName (const Standard_CString typnam); 0159 0160 //! Returns the State of an entity, given its number 0161 Standard_EXPORT Interface_DataState EntityState (const Standard_Integer num) const; 0162 0163 //! Returns True if <num> identifies a ReportEntity in the Model 0164 //! Hence, ReportEntity can be called. 0165 //! 0166 //! By default, queries main report, if <semantic> is True, it 0167 //! queries report for semantic check 0168 //! 0169 //! Remember that a Report Entity can be defined for an Unknown 0170 //! Entity, or a Corrected or Erroneous (at read time) Entity. 0171 //! The ReportEntity is defined before call to method AddEntity. 0172 Standard_EXPORT Standard_Boolean IsReportEntity (const Standard_Integer num, const Standard_Boolean semantic = Standard_False) const; 0173 0174 //! Returns a ReportEntity identified by its number in the Model, 0175 //! or a Null Handle If <num> does not identify a ReportEntity. 0176 //! 0177 //! By default, queries main report, if <semantic> is True, it 0178 //! queries report for semantic check 0179 Standard_EXPORT Handle(Interface_ReportEntity) ReportEntity (const Standard_Integer num, const Standard_Boolean semantic = Standard_False) const; 0180 0181 //! Returns True if <num> identifies an Error Entity : in this 0182 //! case, a ReportEntity brings Fail Messages and possibly an 0183 //! "undefined" Content, see IsRedefinedEntity 0184 Standard_EXPORT Standard_Boolean IsErrorEntity (const Standard_Integer num) const; 0185 0186 //! Returns True if <num> identifies an Entity which content is 0187 //! redefined through a ReportEntity (i.e. with literal data only) 0188 //! This happens when an entity is syntactically erroneous in the 0189 //! way that its basic content remains empty. 0190 //! For more details (such as content itself), see ReportEntity 0191 Standard_EXPORT Standard_Boolean IsRedefinedContent (const Standard_Integer num) const; 0192 0193 //! Removes the ReportEntity attached to Entity <num>. Returns 0194 //! True if done, False if no ReportEntity was attached to <num>. 0195 //! Warning : the caller must assume that this clearing is meaningful 0196 Standard_EXPORT Standard_Boolean ClearReportEntity (const Standard_Integer num); 0197 0198 //! Sets or Replaces a ReportEntity for the Entity <num>. Returns 0199 //! True if Report is replaced, False if it has been replaced 0200 //! Warning : the caller must assume that this setting is meaningful 0201 Standard_EXPORT Standard_Boolean SetReportEntity (const Standard_Integer num, const Handle(Interface_ReportEntity)& rep); 0202 0203 //! Adds a ReportEntity as such. Returns False if the concerned 0204 //! entity is not recorded in the Model 0205 //! Else, adds it into, either the main report list or the 0206 //! list for semantic checks, then returns True 0207 Standard_EXPORT Standard_Boolean AddReportEntity (const Handle(Interface_ReportEntity)& rep, const Standard_Boolean semantic = Standard_False); 0208 0209 //! Returns True if <num> identifies an Unknown Entity : in this 0210 //! case, a ReportEntity with no Check Messages designates it. 0211 Standard_EXPORT Standard_Boolean IsUnknownEntity (const Standard_Integer num) const; 0212 0213 //! Fills the list of semantic checks. 0214 //! This list is computed (by CheckTool). Hence, it can be stored 0215 //! in the model for later queries 0216 //! <clear> True (D) : new list replaces 0217 //! <clear> False : new list is cumulated 0218 Standard_EXPORT void FillSemanticChecks (const Interface_CheckIterator& checks, const Standard_Boolean clear = Standard_True); 0219 0220 //! Returns True if semantic checks have been filled 0221 Standard_EXPORT Standard_Boolean HasSemanticChecks() const; 0222 0223 //! Returns the check attached to an entity, designated by its 0224 //! Number. 0 for global check 0225 //! <semantic> True : recorded semantic check 0226 //! <semantic> False : recorded syntactic check (see ReportEntity) 0227 //! If no check is recorded for <num>, returns an empty Check 0228 Standard_EXPORT const Handle(Interface_Check)& Check (const Standard_Integer num, const Standard_Boolean syntactic) const; 0229 0230 //! Does a reservation for the List of Entities (for optimized 0231 //! storage management). If it is not called, storage management 0232 //! can be less efficient. <nbent> is the expected count of 0233 //! Entities to store 0234 Standard_EXPORT virtual void Reservate (const Standard_Integer nbent); 0235 0236 //! Internal method for adding an Entity. Used by file reading 0237 //! (defined by each Interface) and Transfer tools. It adds the 0238 //! entity required to be added, not its refs : see AddWithRefs. 0239 //! If <anentity> is a ReportEntity, it is added to the list of 0240 //! Reports, its Concerned Entity (Erroneous or Corrected, else 0241 //! Unknown) is added to the list of Entities. 0242 //! That is, the ReportEntity must be created before Adding 0243 Standard_EXPORT virtual void AddEntity (const Handle(Standard_Transient)& anentity); 0244 0245 //! Adds to the Model, an Entity with all its References, as they 0246 //! are defined by General Services FillShared and ListImplied. 0247 //! Process is recursive (any sub-levels) if <level> = 0 (Default) 0248 //! Else, adds sub-entities until the required sub-level. 0249 //! Especially, if <level> = 1, adds immediate subs and that's all 0250 //! 0251 //! If <listall> is False (Default), an entity (<anentity> itself 0252 //! or one of its subs at any level) which is already recorded in 0253 //! the Model is not analysed, only the newly added ones are. 0254 //! If <listall> is True, all items are analysed (this allows to 0255 //! ensure the consistency of an adding made by steps) 0256 Standard_EXPORT void AddWithRefs (const Handle(Standard_Transient)& anent, const Handle(Interface_Protocol)& proto, const Standard_Integer level = 0, const Standard_Boolean listall = Standard_False); 0257 0258 //! Same as above, but works with the Protocol of the Model 0259 Standard_EXPORT void AddWithRefs (const Handle(Standard_Transient)& anent, const Standard_Integer level = 0, const Standard_Boolean listall = Standard_False); 0260 0261 //! Same as above, but works with an already created GeneralLib 0262 Standard_EXPORT void AddWithRefs (const Handle(Standard_Transient)& anent, const Interface_GeneralLib& lib, const Standard_Integer level = 0, const Standard_Boolean listall = Standard_False); 0263 0264 //! Replace Entity with Number=nument on other entity - "anent" 0265 Standard_EXPORT void ReplaceEntity (const Standard_Integer nument, const Handle(Standard_Transient)& anent); 0266 0267 //! Reverses the Numbers of the Entities, between <after> and the 0268 //! total count of Entities. Thus, the entities : 0269 //! 1,2 ... after, after+1 ... nb-1, nb become numbered as : 0270 //! 1,2 ... after, nb, nb-1 ... after+1 0271 //! By default (after = 0) the whole list of Entities is reversed 0272 Standard_EXPORT void ReverseOrders (const Standard_Integer after = 0); 0273 0274 //! Changes the Numbers of some Entities : <oldnum> is moved to 0275 //! <newnum>, same for <count> entities. Thus : 0276 //! 1,2 ... newnum-1 newnum ... oldnum .. oldnum+count oldnum+count+1 .. gives 0277 //! 1,2 ... newnum-1 oldnum .. oldnum+count newnum ... oldnum+count+1 0278 //! (can be seen as a circular permutation) 0279 Standard_EXPORT void ChangeOrder (const Standard_Integer oldnum, const Standard_Integer newnum, const Standard_Integer count = 1); 0280 0281 //! Gets contents from an EntityIterator, prepared by a 0282 //! Transfer tool (e.g TransferCopy). Starts from clear 0283 Standard_EXPORT void GetFromTransfer (const Interface_EntityIterator& aniter); 0284 0285 //! Gets header (data specific of a defined Interface) from 0286 //! another InterfaceModel; called from TransferCopy 0287 Standard_EXPORT virtual void GetFromAnother (const Handle(Interface_InterfaceModel)& other) = 0; 0288 0289 //! Returns a New Empty Model, same type as <me> (whatever its 0290 //! Type); called to Copy parts a Model into other ones, then 0291 //! followed by a call to GetFromAnother (Header) then filling 0292 //! with specified Entities, themselves copied 0293 Standard_EXPORT virtual Handle(Interface_InterfaceModel) NewEmptyModel() const = 0; 0294 0295 //! Records a category number for an entity number 0296 //! Returns True when done, False if <num> is out of range 0297 Standard_EXPORT Standard_Boolean SetCategoryNumber (const Standard_Integer num, const Standard_Integer val); 0298 0299 //! Returns the recorded category number for a given entity number 0300 //! 0 if none was defined for this entity 0301 Standard_EXPORT Standard_Integer CategoryNumber (const Standard_Integer num) const; 0302 0303 //! Allows an EntityIterator to get a list of Entities 0304 Standard_EXPORT void FillIterator (Interface_EntityIterator& iter) const; 0305 0306 //! Returns the list of all Entities, as an Iterator on Entities 0307 //! (the Entities themselves, not the Reports) 0308 Standard_EXPORT Interface_EntityIterator Entities() const; 0309 0310 //! Returns the list of all ReportEntities, i.e. data about 0311 //! Entities read with Error or Warning information 0312 //! (each item has to be casted to Report Entity then it can be 0313 //! queried for Concerned Entity, Content, Check ...) 0314 //! By default, returns the main reports, is <semantic> is True it 0315 //! returns the list for semantic checks 0316 Standard_EXPORT Interface_EntityIterator Reports (const Standard_Boolean semantic = Standard_False) const; 0317 0318 //! Returns the list of ReportEntities which redefine data 0319 //! (generally, if concerned entity is "Error", a literal content 0320 //! is added to it : this is a "redefined entity" 0321 Standard_EXPORT Interface_EntityIterator Redefineds() const; 0322 0323 //! Returns the GlobalCheck, which memorizes messages global to 0324 //! the file (not specific to an Entity), especially Header 0325 Standard_EXPORT const Handle(Interface_Check)& GlobalCheck (const Standard_Boolean syntactic = Standard_True) const; 0326 0327 //! Allows to modify GlobalCheck, after getting then completing it 0328 //! Remark : it is SYNTACTIC check. Semantics, see FillChecks 0329 Standard_EXPORT void SetGlobalCheck (const Handle(Interface_Check)& ach); 0330 0331 //! Minimum Semantic Global Check on data in model (header) 0332 //! Can only check basic Data. See also GlobalCheck from Protocol 0333 //! for a check which takes the Graph into account 0334 //! Default does nothing, can be redefined 0335 Standard_EXPORT virtual void VerifyCheck (Handle(Interface_Check)& ach) const; 0336 0337 //! Dumps Header in a short, easy to read, form, onto a Stream 0338 //! <level> allows to print more or less parts of the header, 0339 //! if necessary. 0 for basic print 0340 Standard_EXPORT virtual void DumpHeader (Standard_OStream& S, const Standard_Integer level = 0) const = 0; 0341 0342 //! Prints identification of a given entity in <me>, in order to 0343 //! be printed in a list or phrase 0344 //! <mode> < 0 : prints only its number 0345 //! <mode> = 1 : just calls PrintLabel 0346 //! <mode> = 0 (D) : prints its number plus '/' plus PrintLabel 0347 //! If <ent> == <me>, simply prints "Global" 0348 //! If <ent> is unknown, prints "??/its type" 0349 Standard_EXPORT void Print (const Handle(Standard_Transient)& ent, Standard_OStream& s, const Standard_Integer mode = 0) const; 0350 0351 //! Prints label specific to each norm, for a given entity. 0352 //! Must only print label itself, in order to be included in a 0353 //! phrase. Can call the result of StringLabel, but not obliged. 0354 Standard_EXPORT virtual void PrintLabel (const Handle(Standard_Transient)& ent, Standard_OStream& S) const = 0; 0355 0356 //! Prints label specific to each norm in log format, for 0357 //! a given entity. 0358 //! By default, just calls PrintLabel, can be redefined 0359 Standard_EXPORT virtual void PrintToLog (const Handle(Standard_Transient)& ent, Standard_OStream& S) const; 0360 0361 //! Returns a string with the label attached to a given entity. 0362 //! Warning : While this string may be edited on the spot, if it is a read 0363 //! field, the returned value must be copied before. 0364 Standard_EXPORT virtual Handle(TCollection_HAsciiString) StringLabel (const Handle(Standard_Transient)& ent) const = 0; 0365 0366 //! Searches a label which matches with one entity. 0367 //! Begins from <lastnum>+1 (default:1) and scans the entities 0368 //! until <NbEntities>. For the first which matches <label>, 0369 //! this method returns its Number. Returns 0 if nothing found 0370 //! Can be called recursively (labels are not specified as unique) 0371 //! <exact> : if True (default), exact match is required 0372 //! else, checks the END of entity label 0373 //! 0374 //! This method is virtual, hence it can be redefined for a more 0375 //! efficient search (if exact is true). 0376 Standard_EXPORT virtual Standard_Integer NextNumberForLabel (const Standard_CString label, const Standard_Integer lastnum = 0, const Standard_Boolean exact = Standard_True) const; 0377 0378 //! Returns true if a template is attached to a given name 0379 Standard_EXPORT static Standard_Boolean HasTemplate (const Standard_CString name); 0380 0381 //! Returns the template model attached to a name, or a Null Handle 0382 Standard_EXPORT static Handle(Interface_InterfaceModel) Template (const Standard_CString name); 0383 0384 //! Records a new template model with a name. If the name was 0385 //! already recorded, the corresponding template is replaced by 0386 //! the new one. Then, WARNING : test HasTemplate to avoid 0387 //! surprises 0388 Standard_EXPORT static Standard_Boolean SetTemplate (const Standard_CString name, const Handle(Interface_InterfaceModel)& model); 0389 0390 //! Returns the complete list of names attached to template models 0391 Standard_EXPORT static Handle(TColStd_HSequenceOfHAsciiString) ListTemplates(); 0392 0393 0394 0395 DEFINE_STANDARD_RTTIEXT(Interface_InterfaceModel,Standard_Transient) 0396 0397 protected: 0398 0399 0400 //! Defines empty InterfaceModel, ready to be filled 0401 Standard_EXPORT Interface_InterfaceModel(); 0402 0403 0404 0405 private: 0406 0407 0408 TColStd_IndexedMapOfTransient theentities; 0409 TColStd_DataMapOfIntegerTransient thereports; 0410 TColStd_DataMapOfIntegerTransient therepch; 0411 Handle(Interface_Check) thecheckstx; 0412 Handle(Interface_Check) thechecksem; 0413 Standard_Boolean haschecksem; 0414 Standard_Boolean isdispatch; 0415 Handle(TCollection_HAsciiString) thecategory; 0416 Handle(Interface_GTool) thegtool; 0417 0418 0419 }; 0420 0421 0422 0423 0424 0425 0426 0427 #endif // _Interface_InterfaceModel_HeaderFile
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |