diff --git a/wst/trunk/metadata_repository.pas b/wst/trunk/metadata_repository.pas index e749510b7..38fce6619 100644 --- a/wst/trunk/metadata_repository.pas +++ b/wst/trunk/metadata_repository.pas @@ -67,6 +67,7 @@ type RootAddress : ShortString; ServicesCount : Word; Services : PService; + Properties : PPropertyData; end; IModuleMetadataMngr = interface @@ -75,6 +76,11 @@ type function GetCount():Integer; function GetRepositoryName(const AIndex : Integer):shortstring; procedure SetRepositoryNameSpace(const ARepName,ANameSpace : shortstring); + procedure SetRepositoryCustomData( + const ARepName : shortstring; + const ADataName, + AData : string + ); function LoadRepositoryName( const ARepName,ARootAddress : shortstring; out ARepository : PServiceRepository @@ -316,6 +322,8 @@ begin end; Freemem(ARepository^.Services, c * SizeOf(TService) ); end; + if (ARepository^.Properties <> nil) then + ClearProperties(ARepository^.Properties); Freemem(ARepository,SizeOf(TServiceRepository)); ARepository := nil; end; @@ -493,6 +501,7 @@ begin ADest^.Name := ASource^.Name; ADest^.NameSpace := ASource^.NameSpace; ADest^.RootAddress := ASource^.RootAddress; + ADest^.Properties := CloneProperties(ASource^.Properties); c := ASource^.ServicesCount; if ( c > 0 ) then begin ADest^.Services := wst_GetMem( c * SizeOf(TService) ); @@ -531,6 +540,11 @@ type function GetCount():Integer; function GetRepositoryName(const AIndex : Integer):shortstring; procedure SetRepositoryNameSpace(const ARepName,ANameSpace : shortstring); + procedure SetRepositoryCustomData( + const ARepName : shortstring; + const ADataName, + AData : string + ); function LoadRepositoryName( const ARepName,ARootAddress : shortstring; out ARepository : PServiceRepository @@ -673,6 +687,23 @@ begin FRepositories[i]^.NameSpace := ANameSpace; end; +procedure TModuleMetadataMngr.SetRepositoryCustomData( + const ARepName : shortstring; + const ADataName, + AData : string +); +var + i : Integer; + rp : PServiceRepository; + sp : PService; +begin + i := FindInnerListIndex(ARepName); + if (i < 0) then + i := InternalLoadRepository(ARepName); + rp := FRepositories[i]; + Add(rp^.Properties,ADataName,AData); +end; + function TModuleMetadataMngr.LoadRepositoryName( const ARepName,ARootAddress : shortstring; out ARepository : PServiceRepository diff --git a/wst/trunk/metadata_wsdl.pas b/wst/trunk/metadata_wsdl.pas index 45a16e9a2..1435eecd3 100644 --- a/wst/trunk/metadata_wsdl.pas +++ b/wst/trunk/metadata_wsdl.pas @@ -178,6 +178,9 @@ const sFORMAT_Input_EncodingStyle = 'FORMAT_Input_EncodingStyle'; sFORMAT_Input_EncodingStyleURI = 'FORMAT_Input_EncodingStyleURI'; + sFORM_attributeFormDefault = 'attributeFormDefault'; + sFORM_elementFormDefault = 'elementFormDefault'; + var WsdlTypeHandlerRegistryInst : IWsdlTypeHandlerRegistry; @@ -596,6 +599,7 @@ var defNode, typesNode, schNode : TDOMElement; i, c : Integer; ps : PService; + propData : PPropertyData; begin if not ( Assigned(AMdtdRep) and Assigned(ADoc)) then Exit; @@ -605,6 +609,12 @@ begin schNode := CreateElement(sXSD + ':' + sWSDL_SCHEMA,typesNode,ADoc); schNode.SetAttribute(sXMLNS,sXSD_NS); schNode.SetAttribute(sWSDL_TARGET_NS,AMdtdRep^.NameSpace); + propData := Find(AMdtdRep^.Properties,sFORM_elementFormDefault); + if (propData <> nil) and (propData^.Data <> '') then + schNode.SetAttribute(sFORM_elementFormDefault,Trim(propData^.Data)); + propData := Find(AMdtdRep^.Properties,sFORM_attributeFormDefault); + if (propData <> nil) and (propData^.Data <> '') then + schNode.SetAttribute(sFORM_attributeFormDefault,Trim(propData^.Data)); GenerateServiceTypes(); diff --git a/wst/trunk/ws_helper/generator.pas b/wst/trunk/ws_helper/generator.pas index fc876e077..df7bc137c 100644 --- a/wst/trunk/ws_helper/generator.pas +++ b/wst/trunk/ws_helper/generator.pas @@ -2981,6 +2981,7 @@ procedure TInftGenerator.GenerateCustomMetadatas(); var i : Integer; + s : string; begin SetCurrentStream(FImpStream); IncIndent(); @@ -2992,6 +2993,12 @@ begin WriteLn('begin'); Indent();WriteLn('mm := GetModuleMetadataMngr();'); Indent();WriteLn('mm.SetRepositoryNameSpace(%s, %s);',[sUNIT_NAME,sNAME_SPACE]); + s := Trim(SymbolTable.Properties.GetValue(SymbolTable.CurrentModule,s_elementFormDefault)); + if (s <> '') then + Indent();WriteLn('mm.SetRepositoryCustomData(%s, %s, %s);',[sUNIT_NAME,QuotedStr(s_elementFormDefault),QuotedStr(s)]); + s := Trim(SymbolTable.Properties.GetValue(SymbolTable.CurrentModule,s_attributeFormDefault)); + if (s <> '') then + Indent();WriteLn('mm.SetRepositoryCustomData(%s, %s, %s);',[sUNIT_NAME,QuotedStr(s_attributeFormDefault),QuotedStr(s)]); for i := 0 to Pred(SymbolTable.BindingCount) do begin WriteServiceDatas(SymbolTable.Binding[i]); end;