public void Expand(Profile.ProfileStructureComponent structure) { if (structure.Differential == null) throw Error.Argument("structure", "structure does not contain a differential specification"); var differential = structure.Differential; var baseStructure = _loader.LocateBaseStructure(structure.TypeElement); if (baseStructure == null) throw Error.InvalidOperation("Could not locate the base profile for type {0}", structure.TypeElement.ToString()); if(baseStructure.Snapshot == null) throw Error.InvalidOperation("Base definition to use for expansion lacks a snapshot representation"); // var baseUri = StructureLoader.BuildBaseStructureUri(structure.TypeElement).ToString(); var snapshot = (Profile.ConstraintComponent)baseStructure.Snapshot.DeepCopy(); //DSTU1 //snapshot.SetStructureForm(StructureForm.Snapshot); //snapshot.SetStructureBaseUri(baseUri.ToString()); //mergeStructure(snapshot, differential); var fullDifferential = new DifferentialTreeConstructor(differential).MakeTree(); var snapNav = new ElementNavigator(snapshot); snapNav.MoveToFirstChild(); var diffNav = new ElementNavigator(fullDifferential); diffNav.MoveToFirstChild(); merge(snapNav, diffNav); //TODO: Merge search params? snapNav.CommitChanges(); structure.Snapshot = snapNav.Elements; }
public void Generate(StructureDefinition structure) { if (structure.Differential == null) throw Error.Argument("structure", "structure does not contain a differential specification"); if (structure.ConstrainedType != null) throw Error.Argument("structure", "structure is not a constraint or extension"); if(structure.Base == null) throw Error.Argument("structure", "structure is a constraint, but no base has been specified"); var differential = structure.Differential; var baseStructure = _resolver.GetStructureDefinition(structure.Base); if (baseStructure == null) throw Error.InvalidOperation("Could not locate the base StructureDefinition for url " + structure.Base); if (baseStructure.Snapshot == null) throw Error.InvalidOperation("Snapshot generator required the base at {0} to have a snapshot representation", structure.Base); var snapshot = (StructureDefinition.StructureDefinitionSnapshotComponent)baseStructure.Snapshot.DeepCopy(); var snapNav = new ElementNavigator(snapshot.Element); snapNav.MoveToFirstChild(); // Fill out the gaps (mostly missing parents) in the differential representation var fullDifferential = new DifferentialTreeConstructor(differential.Element).MakeTree(); var diffNav = new ElementNavigator(fullDifferential); diffNav.MoveToFirstChild(); merge(snapNav, diffNav); structure.Snapshot = new StructureDefinition.StructureDefinitionSnapshotComponent() { Element = snapNav.ToListOfElements() }; }
public void Generate(StructureDefinition structure) { if (structure.Differential == null) { throw Error.Argument("structure", "structure does not contain a differential specification"); } if (structure.ConstrainedType != null) { throw Error.Argument("structure", "structure is not a constraint or extension"); } if (structure.Base == null) { throw Error.Argument("structure", "structure is a constraint, but no base has been specified"); } var differential = structure.Differential; var baseStructure = _resolver.GetStructureDefinition(structure.Base); if (baseStructure == null) { throw Error.InvalidOperation("Could not locate the base StructureDefinition for url " + structure.Base); } if (baseStructure.Snapshot == null) { throw Error.InvalidOperation("Snapshot generator required the base at {0} to have a snapshot representation", structure.Base); } var snapshot = (StructureDefinition.StructureDefinitionSnapshotComponent)baseStructure.Snapshot.DeepCopy(); var snapNav = new ElementNavigator(snapshot.Element); snapNav.MoveToFirstChild(); // Fill out the gaps (mostly missing parents) in the differential representation var fullDifferential = new DifferentialTreeConstructor(differential.Element).MakeTree(); var diffNav = new ElementNavigator(fullDifferential); diffNav.MoveToFirstChild(); merge(snapNav, diffNav); structure.Snapshot = new StructureDefinition.StructureDefinitionSnapshotComponent() { Element = snapNav.ToListOfElements() }; }
public void Expand(Profile.ProfileStructureComponent structure) { if (structure.Differential == null) { throw Error.Argument("structure", "structure does not contain a differential specification"); } var differential = structure.Differential; var baseStructure = _loader.LocateBaseStructure(structure.TypeElement); if (baseStructure == null) { throw Error.InvalidOperation("Could not locate the base profile for type {0}", structure.TypeElement.ToString()); } if (baseStructure.Snapshot == null) { throw Error.InvalidOperation("Base definition to use for expansion lacks a snapshot representation"); } // var baseUri = StructureLoader.BuildBaseStructureUri(structure.TypeElement).ToString(); var snapshot = (Profile.ConstraintComponent)baseStructure.Snapshot.DeepCopy(); //DSTU1 //snapshot.SetStructureForm(StructureForm.Snapshot); //snapshot.SetStructureBaseUri(baseUri.ToString()); //mergeStructure(snapshot, differential); var fullDifferential = new DifferentialTreeConstructor(differential).MakeTree(); var snapNav = new ElementNavigator(snapshot); snapNav.MoveToFirstChild(); var diffNav = new ElementNavigator(fullDifferential); diffNav.MoveToFirstChild(); merge(snapNav, diffNav); //TODO: Merge search params? snapNav.CommitChanges(); structure.Snapshot = snapNav.Elements; }