project.pas 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. program sample;
  2. {$mode objfpc}{$H+}
  3. uses
  4. SysUtils,
  5. sdo, sdo_consts, sdo_datafactory, sdo_serialization,
  6. sdo_serialization_xml, sdo_xsd_helper;
  7. const
  8. s_manager = 'Manager';
  9. s_is_manager = 'IsManager';
  10. s_member = 'Member';
  11. s_name = 'Name';
  12. s_person_type = 'Person';
  13. s_project_leader = 'ProjectLeader';
  14. s_project_list_type = 'ProjectList';
  15. s_project_name = 'ProjectName';
  16. s_project = 'Project';
  17. s_project_type = 'ProjectType';
  18. s_uri = 'uri:sample';
  19. procedure PopulateFactoryByCode(AFactory : ISDODataFactory);
  20. begin
  21. // add the types
  22. AFactory.AddType(s_uri,s_project_list_type,[]);
  23. AFactory.AddType(s_uri,s_project_type,[]);
  24. AFactory.AddType(s_uri,s_person_type,[]);
  25. // Fill the informations of the project list type
  26. AFactory.addProperty(s_uri,s_project_list_type,s_project,s_uri,s_project_type,[pfIsMany,pfIsContainment]);
  27. AFactory.addProperty(s_uri,s_project_list_type,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
  28. // Fill the informations of the project type
  29. AFactory.addProperty(s_uri,s_project_type,s_project_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  30. AFactory.addProperty(s_uri,s_project_type,s_member,s_uri,s_person_type,[pfIsMany,pfIsContainment]);
  31. AFactory.addProperty(s_uri,s_project_type,s_project_leader,s_uri,s_person_type,[]);
  32. // Fill the informations of the person type
  33. AFactory.addProperty(s_uri,s_person_type,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  34. AFactory.addProperty(s_uri,s_person_type,s_is_manager,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsAttribute]);
  35. AFactory.addProperty(s_uri,s_person_type,s_manager,s_uri,s_person_type,[]);
  36. end;
  37. procedure GenerateSchemaFileFromFactory(AFactory : ISDODataFactory; AFileName : string);
  38. var
  39. xsdHelper : IXSDHelper;
  40. begin
  41. xsdHelper := TXSDHelper.Create(AFactory);
  42. xsdHelper.Generate(AFactory.getTypes(),s_uri,AFileName);
  43. end;
  44. procedure MainProc();
  45. var
  46. fact : ISDODataFactory;
  47. projList, proj, pers,b : ISDODataObject;
  48. serializer : ISDOSerializer;
  49. locSchemaFileName : string;
  50. begin
  51. fact := TSDODataFactory.Create();
  52. locSchemaFileName := ExpandFileName('.' + PathDelim + 'schema.xsd');
  53. PopulateFactoryByCode(fact);
  54. GenerateSchemaFileFromFactory(fact,locSchemaFileName);
  55. WriteLn('Schema file generated !');
  56. projList := fact.createNew(s_uri,s_project_list_type);
  57. // stop changes tracking
  58. projList.getChangeSummary().endLogging();
  59. //Add some data
  60. proj := projList.createDataObject(s_project);
  61. //add the project object to the list
  62. projList.getList(s_project).append(proj);
  63. proj.setString(s_project_name,'WST');
  64. pers := proj.createDataObject(s_member);
  65. proj.getList(s_member).append(pers);
  66. pers.setString(s_name,'Inoussa O.');
  67. pers.setBoolean(s_is_manager,True);
  68. //Add some data
  69. proj := projList.createDataObject(s_project);
  70. //add the project object to the list
  71. projList.getList(s_project).append(proj);
  72. proj.setString(s_project_name,'sample project');
  73. pers := proj.createDataObject(s_member);
  74. proj.getList(s_member).append(pers);
  75. pers.setString(s_name,'Inoussa O.');
  76. pers.setBoolean(s_is_manager,True);
  77. pers := proj.createDataObject(s_member);
  78. proj.getList(s_member).append(pers);
  79. pers.setString(s_name,'David KIS');
  80. // this demonstrates object finding by sdo xpath expression
  81. pers.setDataObject(s_manager,proj.getDataObject('Member[Name="Inoussa O."]'));
  82. // start changes trackink now
  83. projList.getChangeSummary.beginLogging();
  84. proj.setString(s_project_name,'Object Pascal Project');
  85. pers.setString(s_name,'D.K.');
  86. pers := proj.createDataObject(s_member);
  87. proj.getList(s_member).append(pers);
  88. pers.setString(s_name,'Kis');
  89. pers.setBoolean(s_is_manager,False);
  90. // this demonstrates object finding by sdo xpath expression
  91. pers.setDataObject(s_manager,projList.getDataObject('Project[0]/Member[Name="Inoussa O."]'));
  92. projList.setDataObject('Project[0]/ProjectLeader',projList.getDataObject('Project[0]/Member[Name="Inoussa O."]'));
  93. proj := projList.createDataObject(s_project);
  94. projList.getList(s_project).append(proj);
  95. proj.setString(s_project_name,'SDO');
  96. pers := proj.createDataObject(s_member);
  97. proj.getList(s_member).append(pers);
  98. pers.setString(s_name,'SDO dev manager');
  99. pers.setBoolean(s_is_manager,True);
  100. pers := proj.createDataObject(s_member);
  101. proj.getList(s_member).append(pers);
  102. pers.setString(s_name,'SDO dev 1');
  103. pers.setDataObject(s_manager,projList.getDataObject('Project[2]/Member[Name="SDO dev manager"]'));
  104. pers := proj.createDataObject(s_member);
  105. proj.getList(s_member).append(pers);
  106. pers.setString(s_name,'SDO dev 2');
  107. pers.setDataObject(s_manager,projList.getDataObject('Project[2]/Member[Name="SDO dev manager"]'));
  108. proj.setDataObject('ProjectLeader',proj.getDataObject('Member[Name="SDO dev manager"]'));
  109. projList.getList(s_project).delete(0);
  110. //save it now to file
  111. serializer := TSDOSerializer.Create(fact,TSDOSerializerStreamXML.Create());
  112. serializer.save(s_project_list_type,projList,'data.xml');
  113. WriteLn('Data file created.');
  114. //revert changes
  115. projList.getChangeSummary.undoChanges();
  116. serializer := TSDOSerializer.Create(fact,TSDOSerializerStreamXML.Create());
  117. serializer.save(s_project_list_type,projList,'data-original.xml');
  118. WriteLn('Original Data file created.');
  119. end;
  120. begin
  121. MainProc();
  122. end.