private List <RevisionStoreObjectGroup> ParseObjectGroup(CellID objectGroupCellID, MSOneStorePackage package) { StorageIndexCellMapping storageIndexCellMapping = package.FindStorageIndexCellMapping(objectGroupCellID); CellManifestDataElementData cellManifest = this.FindCellManifest(storageIndexCellMapping.CellMappingExtendedGUID); List <RevisionStoreObjectGroup> objectGroups = new List <RevisionStoreObjectGroup>(); package.CellManifests.Add(cellManifest); StorageIndexRevisionMapping revisionMapping = package.FindStorageIndexRevisionMapping(cellManifest.CellManifestCurrentRevision.CellManifestCurrentRevisionExtendedGUID); RevisionManifestDataElementData revisionManifest = this.FindRevisionManifestDataElement(revisionMapping.RevisionMappingExtendedGUID); package.RevisionManifests.Add(revisionManifest); RevisionManifestRootDeclare encryptionKeyRoot = revisionManifest.RevisionManifestRootDeclareList.Where(r => r.RootExtendedGUID.Equals(new ExGuid(3, Guid.Parse("4A3717F8-1C14-49E7-9526-81D942DE1741")))).SingleOrDefault(); bool isEncryption = encryptionKeyRoot != null; foreach (RevisionManifestObjectGroupReferences objRef in revisionManifest.RevisionManifestObjectGroupReferencesList) { ObjectGroupDataElementData dataObject = objectGroupDataElements.Where(d => d.DataElementExtendedGUID.Equals( objRef.ObjectGroupExtendedGUID)).Single().Data as ObjectGroupDataElementData; RevisionStoreObjectGroup objectGroup = RevisionStoreObjectGroup.CreateInstance(objRef.ObjectGroupExtendedGUID, dataObject, isEncryption); objectGroups.Add(objectGroup); } return(objectGroups); }
public static RevisionStoreObjectGroup CreateInstance(ExGuid objectGroupId, ObjectGroupDataElementData dataObject, bool isEncryption) { RevisionStoreObjectGroup objectGroup = new RevisionStoreObjectGroup(objectGroupId); Dictionary <ExGuid, RevisionStoreObject> objectDict = new Dictionary <ExGuid, RevisionStoreObject>(); if (isEncryption == false) { RevisionStoreObject revisionObject = null; for (int i = 0; i < dataObject.ObjectGroupDeclarations.ObjectDeclarationList.Count; i++) { ObjectGroupObjectDeclare objectDeclaration = dataObject.ObjectGroupDeclarations.ObjectDeclarationList[i]; ObjectGroupObjectData objectData = dataObject.ObjectGroupData.ObjectGroupObjectDataList[i]; if (!objectDict.ContainsKey(objectDeclaration.ObjectExtendedGUID)) { revisionObject = new RevisionStoreObject(); revisionObject.ObjectGroupID = objectGroupId; revisionObject.ObjectID = objectDeclaration.ObjectExtendedGUID; objectDict.Add(objectDeclaration.ObjectExtendedGUID, revisionObject); } else { revisionObject = objectDict[objectDeclaration.ObjectExtendedGUID]; } if (objectDeclaration.ObjectPartitionID.DecodedValue == 4) { revisionObject.JCID = new JCIDObject(objectDeclaration, objectData); } else if (objectDeclaration.ObjectPartitionID.DecodedValue == 1) { revisionObject.PropertySet = new PropertySetObject(objectDeclaration, objectData); if (Convert.ToBoolean(revisionObject.JCID.JCID.IsFileData) == false) { revisionObject.ReferencedObjectID = objectData.ObjectExGUIDArray; revisionObject.ReferencedObjectSpacesID = objectData.CellIDArray; } } } for (int i = 0; i < dataObject.ObjectGroupDeclarations.ObjectGroupObjectBLOBDataDeclarationList.Count; i++) { ObjectGroupObjectBLOBDataDeclaration objectGroupObjectBLOBDataDeclaration = dataObject.ObjectGroupDeclarations.ObjectGroupObjectBLOBDataDeclarationList[i]; ObjectGroupObjectDataBLOBReference objectGroupObjectDataBLOBReference = dataObject.ObjectGroupData.ObjectGroupObjectDataBLOBReferenceList[i]; if (!objectDict.ContainsKey(objectGroupObjectBLOBDataDeclaration.ObjectExGUID)) { revisionObject = new RevisionStoreObject(); objectDict.Add(objectGroupObjectBLOBDataDeclaration.ObjectExGUID, revisionObject); } else { revisionObject = objectDict[objectGroupObjectBLOBDataDeclaration.ObjectExGUID]; } if (objectGroupObjectBLOBDataDeclaration.ObjectPartitionID.DecodedValue == 2) { revisionObject.FileDataObject = new FileDataObject(); revisionObject.FileDataObject.ObjectDataBLOBDeclaration = objectGroupObjectBLOBDataDeclaration; revisionObject.FileDataObject.ObjectDataBLOBReference = objectGroupObjectDataBLOBReference; } } objectGroup.Objects.AddRange(objectDict.Values.ToArray()); } else { for (int i = 0; i < dataObject.ObjectGroupDeclarations.ObjectDeclarationList.Count; i++) { ObjectGroupObjectDeclare objectDeclaration = dataObject.ObjectGroupDeclarations.ObjectDeclarationList[i]; ObjectGroupObjectData objectData = dataObject.ObjectGroupData.ObjectGroupObjectDataList[i]; if (objectDeclaration.ObjectPartitionID.DecodedValue == 1) { EncryptionObject encrypObject = new EncryptionObject(); encrypObject.ObjectDeclaration = objectDeclaration; encrypObject.ObjectData = objectData.Data.Content.ToArray(); objectGroup.EncryptionObjects.Add(encrypObject); } } } return(objectGroup); }