Handle(TCollection_HAsciiString) CPPJini_InterfaceName;
Handle(TCollection_HAsciiString) CPPJini_ErrorArgument = new TCollection_HAsciiString("%error%");
+Handle( TCollection_HAsciiString ) CPPJini_DotReplace ( char*, char = '_' );
+
+class CPPJini_ClientInfo {
+
+ public:
+
+ CPPJini_ClientInfo (
+ const Handle( MS_MetaSchema )&,
+ const Handle( TCollection_HAsciiString )&
+ );
+ ~CPPJini_ClientInfo () {};
+
+ int HasComplete ( const Handle( TCollection_HAsciiString )& name ) const {
+ return myMaps[ 0 ].Contains ( name );
+ }
+
+ int HasIncomplete ( const Handle( TCollection_HAsciiString )& name ) const {
+ return myMaps[ 1 ].Contains ( name );
+ }
+
+ int HasSemicomplete ( const Handle( TCollection_HAsciiString )& name ) const {
+ return myMaps[ 2 ].Contains ( name );
+ }
+
+ const Handle( TCollection_HAsciiString )& Name () const { return myName; }
+
+ private:
+
+ Handle( TCollection_HAsciiString ) myName;
+ WOKTools_MapOfHAsciiString myMaps[ 3 ];
+};
+
+CPPJini_ClientInfo :: CPPJini_ClientInfo (
+ const Handle( MS_MetaSchema )& ms,
+ const Handle( TCollection_HAsciiString )& name
+ ) {
+
+ Handle( MS_Client ) clt = ms -> GetClient ( name );
+
+ if ( clt.IsNull () )
+
+ ErrorMsg << "CPPJini" << "Client " << name << " was not found" << endm;
+
+ else {
+
+ Handle( MS_HSequenceOfExternMet ) xtern = new MS_HSequenceOfExternMet ();
+ Handle( MS_HSequenceOfMemberMet ) membr = new MS_HSequenceOfMemberMet ();
+
+ clt -> ComputeTypes (
+ xtern, membr, myMaps[ 0 ], myMaps[ 1 ], myMaps[ 2 ]
+ );
+
+ InfoMsg << "CPPJini" << "Using client: " << name << endm;
+
+ } // end else
+
+ myName = new TCollection_HAsciiString ( name );
+
+} // end CPPJini_ClientInfo :: CPPJini_ClientInfo
+
+static Standard_Integer s_Length;
+static CPPJini_ClientInfo** s_CltInfo;
+
+static Standard_Boolean CPPJini_CheckClients (
+ const Handle( TCollection_HAsciiString )& className,
+ Standard_Integer idx,
+ Handle( TCollection_HAsciiString )& cltName,
+ Standard_Boolean& fDuplicate
+ ) {
+
+ Standard_Boolean retVal = Standard_False;
+ Standard_Boolean fCond;
+ Standard_Integer i;
+
+ fDuplicate = Standard_False;
+
+ for ( i = 0; i < s_Length; ++i ) {
+
+ switch ( idx ) {
+
+ case 0:
+
+ fCond = s_CltInfo[ i ] -> HasComplete ( className );
+
+ break;
+
+ case 1:
+
+ fCond = s_CltInfo[ i ] -> HasIncomplete ( className );
+
+ break;
+
+ default:
+
+ fCond = s_CltInfo[ i ] -> HasSemicomplete ( className );
+
+ } // end switch
+
+ if ( fCond ) {
+
+ if ( !retVal ) {
+
+ cltName = new TCollection_HAsciiString ( s_CltInfo[ i ] -> Name () );
+ retVal = Standard_True;
+
+ } else {
+
+ fDuplicate = Standard_True;
+ break;
+
+ } // end else
+
+ } // end if
+
+ } // end for
+ return retVal;
+
+} // end CPPJini_CheckClients
+
+Standard_Boolean CPPJini_HasComplete (
+ const Handle( TCollection_HAsciiString )& className,
+ Handle( TCollection_HAsciiString )& cltName,
+ Standard_Boolean& fDuplicate
+ ) {
+
+ return CPPJini_CheckClients ( className, 0, cltName, fDuplicate );
+
+} // end CPPJini_HasIncomplete
+
+Standard_Boolean CPPJini_HasIncomplete (
+ const Handle( TCollection_HAsciiString )& className,
+ Handle( TCollection_HAsciiString )& cltName,
+ Standard_Boolean& fDuplicate
+ ) {
+
+ return CPPJini_CheckClients ( className, 1, cltName, fDuplicate );
+
+} // end CPPJini_HasIncomplete
+
+Standard_Boolean CPPJini_HasSemicomplete (
+ const Handle( TCollection_HAsciiString )& className,
+ Handle( TCollection_HAsciiString )& cltName,
+ Standard_Boolean& fDuplicate
+ ) {
+
+ return CPPJini_CheckClients ( className, 2, cltName, fDuplicate );
+
+} // end CPPJini_HasIncomplete
+
// Standard Extractor API : list the EDL files used by this program
//
Handle(TColStd_HSequenceOfHAsciiString) CPPJini_TemplatesUsed()
void CPPJini_Init(const Handle(MS_MetaSchema)& aMeta,
const Handle(TCollection_HAsciiString)& aName,
const Handle(MS_HSequenceOfExternMet)& SeqOfEM,
- const Handle(MS_HSequenceOfMemberMet)& SeqOfMM)
-{
+ const Handle(MS_HSequenceOfMemberMet)& SeqOfMM,
+ const Handle(TColStd_HSequenceOfHAsciiString)& use
+ ) {
+
Handle(MS_Client) client;
SeqOfMemberMet = SeqOfMM;
ErrorMsg << "CPPJini" << "Init : Client " << aName << " not found..." << endm;
Standard_NoSuchObject::Raise();
}
+
+ Standard_Integer i;
+ Standard_Integer useLen = use -> Length ();
+
+ if ( s_Length ) {
+
+ for ( i = 0; i < s_Length; ++i ) delete s_CltInfo[ i ];
+
+ delete [] s_CltInfo;
+
+ } // end if
+
+ s_Length = useLen;
+ s_CltInfo = new CPPJini_ClientInfo*[ s_Length ];
+
+ for ( i = 0; i < s_Length; ++i )
+
+ s_CltInfo[ i ] = new CPPJini_ClientInfo ( aMeta, use -> Value ( i + 1 ) );
+
}
Handle(TCollection_HAsciiString)& CPPJini_TransientRootName()
ArgsInCall->AssignCat("the_");
ArgsInCall->AssignCat(aSeqP->Value(i)->Name());
if (aSeqP->Value(i)->IsOut()) {
+ api -> AddVariable (
+ "%FromInterface",
+ CPPJini_DotReplace (
+ CPPJini_InterfaceName -> ToCString (), '/'
+ ) -> ToCString ()
+ );
api->Apply("%MetOut","TransientSetValue");
ArgsOut->AssignCat(api->GetVariableValue("%MetOut"));
}
api->AddVariable("%FromInterface","jcas");
}
else {
- api->AddVariable("%FromInterface",CPPJini_InterfaceName->ToCString());
+ api -> AddVariable (
+ "%FromInterface",
+ CPPJini_DotReplace (
+ CPPJini_InterfaceName -> ToCString (), '/'
+ ) -> ToCString ()
+ );
}
if (aClass->IsTransient()) {
api->Apply("%Return","ReturnHandle");
api->AddVariable("%FromInterface","jcas");
}
else {
- api->AddVariable("%FromInterface",CPPJini_InterfaceName->ToCString());
+ api -> AddVariable (
+ "%FromInterface",
+ CPPJini_DotReplace (
+ CPPJini_InterfaceName -> ToCString (), '/'
+ ) -> ToCString ()
+ );
}
if (m->IsRefReturn()) {
api->Apply("%Return","ReturnValueRef");
api->AddVariable("%ClassName",className->ToCString());
- api->AddVariable("%MethodName",methodName->ToCString());
+ api -> AddVariable (
+ "%MethodName",
+ CPPJini_DotReplace ( methodName -> ToCString () ) -> ToCString ()
+ );;
if ((m->IsKind(STANDARD_TYPE(MS_InstMet))) ||
(m->IsKind(STANDARD_TYPE(MS_Construc)))) {
- api->AddVariable("%MethodName",metname->ToCString());
+ api -> AddVariable (
+ "%MethodName",
+ CPPJini_DotReplace ( metname -> ToCString () ) -> ToCString ()
+ );
api->AddVariable("%Return",RetInDecl->ToCString());
api->AddVariable("%ClassName",className->ToCString());
const Standard_CString Mode)
{
- InfoMsg << "CPPJini" << "Extract " << aName->ToCString() << endm;
+// InfoMsg << "CPPJini" << "Extract " << aName->ToCString() << endm;
Handle(MS_Type) srcType;
Handle(MS_Package) srcPackage;
Standard_NoSuchObject::Raise();
}
+ Standard_Boolean fDuplicate;
+ Handle( TCollection_HAsciiString ) cltName;
+
+ if ( theMode == CPPJini_INCOMPLETE ) {
+
+ if ( CPPJini_HasIncomplete ( aTypeName, cltName, fDuplicate ) ) {
+
+ InfoMsg << "CPPJini" << "Skipping " << aTypeName
+ << " (already defined in " << cltName << ")" << endm;
+
+ if ( fDuplicate )
+
+ WarningMsg << "CPPJini" << cltName << " defined in more than one client declared in 'usues' statement"
+ << endm;
+
+ return;
+
+ } // end if
+
+ } else if ( theMode == CPPJini_COMPLETE ) {
+
+ if ( CPPJini_HasComplete ( aTypeName, cltName, fDuplicate ) ) {
+
+ InfoMsg << "CPPJini" << "Skipping " << aTypeName
+ << " (already defined in " << cltName << ")" << endm;
+
+ if ( fDuplicate )
+
+ WarningMsg << "CPPJini" << cltName << " defined in more than one client declared in 'uses' statement"
+ << endm;
+
+ return;
+
+ } // end if
+
+ } // end if
+
CPPJini_TypeExtract(aMeta,aTypeName,edlsfullpath,outdir,outfile,theMode,Mode);
}
else {
}
}
+Handle( TCollection_HAsciiString ) CPPJini_DotReplace ( char* str, char c ) {
+
+ Handle( TCollection_HAsciiString ) retVal = new TCollection_HAsciiString ( str );
+
+ retVal -> ChangeAll ( '.', c );
+
+ return retVal;
+
+} // end CPPJini_DotReplace
+
void Standard_EXPORT CPPJini_Init(const Handle(MS_MetaSchema)&,
const Handle(TCollection_HAsciiString)&,
const Handle(MS_HSequenceOfExternMet)&,
- const Handle(MS_HSequenceOfMemberMet)&);
-
+ const Handle(MS_HSequenceOfMemberMet)&,
+ const Handle( TColStd_HSequenceOfHAsciiString )&
+ );
+
void Standard_EXPORT CPPJini_Extract(const Handle(MS_MetaSchema)& ams,
const Handle(TCollection_HAsciiString)& atypename,
const Handle(TColStd_HSequenceOfHAsciiString)& edlsfullpath,
+#define CPPJini_CREATE_EMPTY_JAVA_CONSTRUCTOR 0
// CLE
//
// 10/1995
#include <WOKTools_Messages.hxx>
+extern Standard_Boolean CPPJini_HasComplete (
+ const Handle( TCollection_HAsciiString )&,
+ Handle( TCollection_HAsciiString )&,
+ Standard_Boolean&
+ );
+
+extern Standard_Boolean CPPJini_HasIncomplete (
+ const Handle( TCollection_HAsciiString )&,
+ Handle( TCollection_HAsciiString )&,
+ Standard_Boolean&
+ );
+
+extern Standard_Boolean CPPJini_HasSemicomplete (
+ const Handle( TCollection_HAsciiString )&,
+ Handle( TCollection_HAsciiString )&,
+ Standard_Boolean&
+ );
+
Handle(TCollection_HAsciiString)& CPPJini_MPVRootName();
+extern Handle( TCollection_HAsciiString ) CPPJini_DotReplace ( char*, char = '_' );
+
void CPPJini_MethodUsedTypes(const Handle(MS_MetaSchema)& aMeta,
const Handle(MS_Method)& aMethod,
const Handle(TColStd_HSequenceOfHAsciiString)& List,
methods = theClass->GetMethods();
}
-
+#if CPPJini_CREATE_EMPTY_JAVA_CONSTRUCTOR
Standard_Boolean mustCreateEmptyConst = !CPPJini_HaveEmptyConstructor(aMeta,theClass->FullName(),methods);
-
+#endif // CPPJini_CREATE_EMPTY_JAVA_CONSTRUCTOR
if (MustBeComplete != CPPJini_INCOMPLETE) {
CPPJini_DataMapOfAsciiStringInteger mapnames;
}
api->AddVariable("%Class",theClass->FullName()->ToCString());
-
+#if CPPJini_CREATE_EMPTY_JAVA_CONSTRUCTOR
if (mustCreateEmptyConst) {
api->Apply(VJMethod,"EmptyConstructorHeader");
publics->AssignCat(api->GetVariableValue(VJMethod));
}
-
+#endif // CPPJini_CREATE_EMPTY_JAVA_CONSTRUCTOR
Handle(TCollection_HAsciiString) namefinal = new TCollection_HAsciiString("Java_");
namefinal->AssignCat(CPPJini_InterfaceName);
namefinal->AssignCat(CPPJini_UnderScoreReplace(theClass->FullName()));
namefinal->AssignCat("_FinalizeValue");
- api->AddVariable("%MethodName",namefinal->ToCString());
+ api -> AddVariable (
+ "%MethodName",
+ CPPJini_DotReplace ( namefinal -> ToCString () ) -> ToCString ()
+ );
api->Apply(VJMethod,"FinalizeForValue");
Supplement->Append(api->GetVariableValue(VJMethod));
api->Apply("%Includes","IncludeJCas");
}
else {
- api->Apply("%Includes","Include");
+
+ Handle( TCollection_HAsciiString ) aClt;
+ Standard_Boolean fDup;
+ Standard_Boolean fPush = Standard_False;
+
+ if ( CPPJini_HasComplete (
+ List -> Value ( i ), aClt, fDup
+ ) ||
+ CPPJini_HasIncomplete (
+ List -> Value ( i ), aClt, fDup
+ ) ||
+ CPPJini_HasSemicomplete (
+ List -> Value ( i ), aClt, fDup
+ )
+ ) {
+
+ fPush = Standard_True;
+ api -> AddVariable ( "%Interface", aClt -> ToCString () );
+
+ } // end if
+
+ api->Apply("%Includes","Include");
+
+ if ( fPush )
+
+ api -> AddVariable (
+ "%Interface", CPPJini_InterfaceName -> ToCString ()
+ );
+
}
publics->AssignCat(api->GetVariableValue("%Includes"));
}
api->Apply("%Includes","ShortDecJCas");
}
else {
- api->Apply("%Includes","ShortDec");
+ Handle( TCollection_HAsciiString ) aClt;
+ Standard_Boolean fDup;
+ Standard_Boolean fPush = Standard_False;
+
+ if ( CPPJini_HasComplete (
+ List -> Value ( i ), aClt, fDup
+ ) ||
+ CPPJini_HasIncomplete (
+ List -> Value ( i ), aClt, fDup
+ ) ||
+ CPPJini_HasSemicomplete (
+ List -> Value ( i ), aClt, fDup
+ )
+ ) {
+
+ fPush = Standard_True;
+ api -> AddVariable ( "%Interface", aClt -> ToCString () );
+
+ } // end if
+
+ api->Apply("%Includes","ShortDec");
+
+ if ( fPush )
+
+ api -> AddVariable (
+ "%Interface", CPPJini_InterfaceName -> ToCString ()
+ );
+
}
publics->AssignCat(api->GetVariableValue("%Includes"));
}
// we create the inheritance
//
- if (theClass->GetInheritsNames()->Length() == 0) {
- api->AddVariable("%Inherits",CPPJini_MPVRootName()->ToCString());
- }
- else {
- api->AddVariable("%Inherits",CPPJini_GetFullJavaType(theClass->GetInheritsNames()->Value(1))->ToCString());
- }
+ Handle( TCollection_HAsciiString ) aClt;
+ Standard_Boolean fDup;
+
+ if ( CPPJini_HasComplete (
+ theClass -> FullName (), aClt, fDup
+ ) ||
+ CPPJini_HasIncomplete (
+ theClass -> FullName (), aClt, fDup
+ ) ||
+ CPPJini_HasSemicomplete (
+ theClass -> FullName (), aClt, fDup
+ )
+ ) {
+
+ aClt -> AssignCat ( "." );
+ aClt -> AssignCat ( theClass -> FullName () );
+ api -> AddVariable ( "%Inherits", aClt -> ToCString () );
+
+ } else {
+
+ if (theClass->GetInheritsNames()->Length() == 0) {
+ api->AddVariable("%Inherits",CPPJini_MPVRootName()->ToCString());
+ }
+ else {
+ api->AddVariable("%Inherits",CPPJini_GetFullJavaType(theClass->GetInheritsNames()->Value(1))->ToCString());
+ }
+
+ } // end else
api->AddVariable("%Class",theClass->FullName()->ToCString());
-- out argument
-@template TransientSetValue(%ClassName,%ArgName) is
-$Handle(%ClassName)* theprevious_%ArgName = (Handle(%ClassName)*) jcas_GetHandle(env,%ArgName);
-$if (theprevious_%ArgName) delete theprevious_%ArgName;
-$Handle(%ClassName)* thenew_%ArgName = new Handle(%ClassName);
-$(*thenew_%ArgName) = the_%ArgName;
+@template TransientSetValue(%ClassName,%ArgName,%FromInterface) is
+$if ( !%ArgName ) %ArgName = jcas_CreateObject (
+$ env, "%FromInterface/%ClassName", %ArgName
+$ );
$jcas_SetHandle(env,%ArgName,thenew_%ArgName);
@end;
+#define CPPJini_CREATE_EMPTY_JAVA_CONSTRUCTOR 0
// CLE
//
// 10/1995
#include <CPPJini_DataMapOfAsciiStringInteger.hxx>
#include <TColStd_Array1OfInteger.hxx>
+extern Standard_Boolean CPPJini_HasComplete (
+ const Handle( TCollection_HAsciiString )&,
+ Handle( TCollection_HAsciiString )&,
+ Standard_Boolean&
+ );
+
+extern Standard_Boolean CPPJini_HasIncomplete (
+ const Handle( TCollection_HAsciiString )&,
+ Handle( TCollection_HAsciiString )&,
+ Standard_Boolean&
+ );
+
+extern Standard_Boolean CPPJini_HasSemicomplete (
+ const Handle( TCollection_HAsciiString )&,
+ Handle( TCollection_HAsciiString )&,
+ Standard_Boolean&
+ );
+
void CPPJini_MethodUsedTypes(const Handle(MS_MetaSchema)& aMeta,
const Handle(MS_Method)& aMethod,
const Handle(TColStd_HSequenceOfHAsciiString)& List,
else if (MustBeComplete == CPPJini_COMPLETE){
methods = theClass->GetMethods();
}
-
+#if CPPJini_CREATE_EMPTY_JAVA_CONSTRUCTOR
Standard_Boolean mustCreateEmptyConst = !CPPJini_HaveEmptyConstructor(aMeta,theClass->FullName(),methods);
-
+#endif
if (MustBeComplete != CPPJini_INCOMPLETE) {
if (methods->Length() > 0) {
CPPJini_DataMapOfAsciiStringInteger mapnames;
}
}
}
-
+#if CPPJini_CREATE_EMPTY_JAVA_CONSTRUCTOR
if (mustCreateEmptyConst) {
api->Apply(VJMethod,"EmptyConstructorHeader");
publics->AssignCat(api->GetVariableValue(VJMethod));
}
-
+#endif
api->AddVariable("%Methods",publics->ToCString());
publics->Clear();
api->Apply("%Includes","IncludeJCas");
}
else {
- api->Apply("%Includes","Include");
+ Handle( TCollection_HAsciiString ) aClt;
+ Standard_Boolean fDup;
+ Standard_Boolean fPush = Standard_False;
+
+ if ( CPPJini_HasComplete (
+ List -> Value ( i ), aClt, fDup
+ ) ||
+ CPPJini_HasIncomplete (
+ List -> Value ( i ), aClt, fDup
+ ) ||
+ CPPJini_HasSemicomplete (
+ List -> Value ( i ), aClt, fDup
+ )
+ ) {
+
+ fPush = Standard_True;
+ api -> AddVariable ( "%Interface", aClt -> ToCString () );
+
+ } // end if
+
+ api->Apply("%Includes","Include");
+
+ if ( fPush )
+
+ api -> AddVariable (
+ "%Interface", CPPJini_InterfaceName -> ToCString ()
+ );
}
publics->AssignCat(api->GetVariableValue("%Includes"));
}
api->Apply("%Includes","ShortDecJCas");
}
else {
+ Handle( TCollection_HAsciiString ) aClt;
+ Standard_Boolean fDup;
+ Standard_Boolean fPush = Standard_False;
+
+ if ( CPPJini_HasComplete (
+ List -> Value ( i ), aClt, fDup
+ ) ||
+ CPPJini_HasIncomplete (
+ List -> Value ( i ), aClt, fDup
+ ) ||
+ CPPJini_HasSemicomplete (
+ List -> Value ( i ), aClt, fDup
+ )
+ ) {
+
+ fPush = Standard_True;
+ api -> AddVariable ( "%Interface", aClt -> ToCString () );
+
+ } // end if
+
api->Apply("%Includes","ShortDec");
+
+ if ( fPush )
+
+ api -> AddVariable (
+ "%Interface", CPPJini_InterfaceName -> ToCString ()
+ );
}
publics->AssignCat(api->GetVariableValue("%Includes"));
}
// we create the inheritance
//
- api->AddVariable("%Inherits",CPPJini_GetFullJavaType(theClass->GetInheritsNames()->Value(1))->ToCString());
+ Handle( TCollection_HAsciiString ) aClt;
+ Standard_Boolean fDup;
+
+ if ( CPPJini_HasComplete (
+ theClass -> GetInheritsNames ()-> Value ( 1 ), aClt, fDup
+ ) ||
+ CPPJini_HasIncomplete (
+ theClass -> GetInheritsNames ()-> Value ( 1 ), aClt, fDup
+ ) ||
+ CPPJini_HasSemicomplete (
+ theClass -> GetInheritsNames () -> Value ( 1 ), aClt, fDup
+ )
+ ) {
+
+ aClt -> AssignCat ( "." );
+ aClt -> AssignCat ( theClass -> GetInheritsNames () -> Value ( 1 ) );
+ api -> AddVariable ( "%Inherits", aClt -> ToCString () );
+
+ } else
+
+ api->AddVariable("%Inherits",CPPJini_GetFullJavaType(theClass->GetInheritsNames()->Value(1))->ToCString());
api->AddVariable("%Class",theClass->FullName()->ToCString());