project.pas 5.4 KB

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