PageRenderTime 44ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 0ms

/DICOM/Network/DicomPresentationContextCollection.cs

https://github.com/petnet/fo-dicom
C# | 87 lines | 69 code | 18 blank | 0 comment | 16 complexity | fae287c56173f128bbf53581fe19d58a MD5 | raw file
Possible License(s): BSD-3-Clause
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace Dicom.Network {
  6. public class DicomPresentationContextCollection : ICollection<DicomPresentationContext> {
  7. private SortedList<byte, DicomPresentationContext> _pc;
  8. public DicomPresentationContextCollection() {
  9. _pc = new SortedList<byte, DicomPresentationContext>();
  10. }
  11. public DicomPresentationContext this[byte id] {
  12. get { return _pc[id]; }
  13. }
  14. private byte GetNextPresentationContextID() {
  15. if (_pc.Count == 0)
  16. return 1;
  17. return (byte)(_pc.Max(x => x.Key) + 2);
  18. }
  19. public void Add(DicomUID abstractSyntax, params DicomTransferSyntax[] transferSyntaxes) {
  20. var pc = new DicomPresentationContext(GetNextPresentationContextID(), abstractSyntax);
  21. foreach (var tx in transferSyntaxes)
  22. pc.AddTransferSyntax(tx);
  23. Add(pc);
  24. }
  25. public void Add(DicomPresentationContext item) {
  26. _pc.Add(item.ID, item);
  27. }
  28. public void AddFromRequest(DicomRequest request) {
  29. if (request is DicomCStoreRequest) {
  30. var cstore = request as DicomCStoreRequest;
  31. var pc = _pc.Values.FirstOrDefault(x => x.AbstractSyntax == request.AffectedSOPClassUID && x.AcceptedTransferSyntax == cstore.TransferSyntax);
  32. if (pc == null) {
  33. if (cstore.TransferSyntax != DicomTransferSyntax.ImplicitVRLittleEndian)
  34. Add(cstore.AffectedSOPClassUID, cstore.TransferSyntax, DicomTransferSyntax.ExplicitVRLittleEndian, DicomTransferSyntax.ImplicitVRLittleEndian);
  35. else
  36. Add(cstore.AffectedSOPClassUID, cstore.TransferSyntax);
  37. }
  38. } else {
  39. var pc = _pc.Values.FirstOrDefault(x => x.AbstractSyntax == request.AffectedSOPClassUID);
  40. if (pc == null)
  41. Add(request.AffectedSOPClassUID, DicomTransferSyntax.ExplicitVRLittleEndian, DicomTransferSyntax.ImplicitVRLittleEndian);
  42. }
  43. }
  44. public void Clear() {
  45. _pc.Clear();
  46. }
  47. public bool Contains(DicomPresentationContext item) {
  48. return _pc.ContainsKey(item.ID) && _pc[item.ID].AbstractSyntax == item.AbstractSyntax;
  49. }
  50. public void CopyTo(DicomPresentationContext[] array, int arrayIndex) {
  51. throw new NotImplementedException();
  52. }
  53. public int Count {
  54. get { return _pc.Count; }
  55. }
  56. public bool IsReadOnly {
  57. get { return false; }
  58. }
  59. public bool Remove(DicomPresentationContext item) {
  60. return _pc.Remove(item.ID);
  61. }
  62. public IEnumerator<DicomPresentationContext> GetEnumerator() {
  63. return _pc.Values.GetEnumerator();
  64. }
  65. System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() {
  66. return GetEnumerator();
  67. }
  68. }
  69. }