Cim.Eap.Tx.CreateProcessJobRequest.CreateCarrierFromElm C# (CSharp) Method

CreateCarrierFromElm() static private method

static private CreateCarrierFromElm ( System.Xml.Linq.XElement carrierElm ) : Carrier
carrierElm System.Xml.Linq.XElement
return Cim.Eap.Data.Carrier
        static Carrier CreateCarrierFromElm(XElement carrierElm) {
            string carrierId = carrierElm.Attribute("CarrierID").Value;
            string loadPurposeType = carrierElm.Attribute("LoadPurposeType").Value;
            string loadPortId = carrierElm.Attribute("LoadPortID").Value;

            XElement mSlotsElm = carrierElm.Element("MeasurementSlots");
            if (mSlotsElm == null) {
                return new Carrier {
                    Id = carrierId,
                    LoadPurposeType = loadPurposeType,
                    LoadPortId = loadPortId,
                    SlotMap = from slotElm in carrierElm.Element("SlotMap").Elements("Slot")
                              select new SlotInfo {
                                  SlotNo = (byte)(int)slotElm.Attribute("SlotNo"),
                                  WaferID = slotElm.Value,
                              }
                };
            }

            var mSlots = (from slotElm in mSlotsElm.Elements("MeasurementSlot")
                          select (byte)(int)slotElm.Attribute("SlotNo")).ToList();

            var slotmap = (from slotElm in carrierElm.Element("SlotMap").Elements("Slot")
                           select new {
                               SlotNo = (byte)(int)slotElm.Attribute("SlotNo"),
                               WaferID = slotElm.Value,
                           }).ToList();

            var selected = new Dictionary<byte, byte>(mSlots.Count);//<實際slot,帳上slot>
            foreach (var mslot in mSlots) {
                //尋找實際量測slot
                if (slotmap.FindIndex(s => s.SlotNo == mslot) != -1
                    && !selected.ContainsKey(mslot)) {
                    selected[mslot] = mslot;
                } else {
                    for (byte up = (byte)(mslot - 1), down = (byte)(mslot + 1); up > 0 || down <= 25; up--, down++) {
                        if (slotmap.FindIndex(s => s.SlotNo == up) != -1
                           && !selected.ContainsKey(up)) {
                            selected[up] = mslot;
                            break;
                        }
                        if (slotmap.FindIndex(s => s.SlotNo == down) != -1
                            && !selected.ContainsKey(down)) {
                            selected[down] = mslot;
                            break;
                        }
                    }
                }
            }

            return new Carrier {
                Id = carrierId,
                LoadPurposeType = loadPurposeType,
                LoadPortId = loadPortId,
                SlotMap = (from s in slotmap
                           select new SlotInfo {
                               SlotNo = s.SlotNo,
                               WaferID = s.WaferID,
                               Measure = selected.ContainsKey(s.SlotNo)
                           }).ToList(),
                _MeasurementSlots = selected
            };
        }
    }
CreateProcessJobRequest