Exemplo n.º 1
0
    public override void ProcessFrame(Playable playable, FrameData info, object playerData)
    {
        // playerData はTrackでbindしたobject。
        // このプロジェクトはbindしていないので Null となる。

        if (asset.enableProcessEvent && owner != null)
        {
            EventTrack track = (EventTrack)info.output.GetReferenceObject();
            normalizedTime = (float)(playable.GetTime() / playable.GetDuration());
            Process(track.name, normalizedTime);
        }
    }
Exemplo n.º 2
0
 public ActionResult Edit([Bind(Include = "EventTrackID,EventID,TrackID,TrackVenue,TrackDate,TrackStartTime,TrackEndTime,TrackSeating,TrackOwner")] EventTrack eventTrack)
 {
     if (ModelState.IsValid)
     {
         db.Entry(eventTrack).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Browse", new { id = eventTrack.EventID }));
     }
     ViewBag.EventID = new SelectList(db.Events, "EventID", "EventName", eventTrack.EventID);
     ViewBag.TrackID = new SelectList(db.Tracks, "TrackID", "TrackDisplayName", eventTrack.TrackID);
     return(View(eventTrack));
 }
Exemplo n.º 3
0
 public override void SetTrack(ITrack newTrack)
 {
     base.SetTrack(newTrack);
     if (newTrack is EventTrack)
     {
         this.eventTrack = (EventTrack)newTrack;
     }
     else
     {
         this.eventTrack = null;
     }
 }
Exemplo n.º 4
0
    // Called when the state of the playable is set to Play
    public override void OnBehaviourPlay(Playable playable, FrameData info)
    {
        //var resolver = playable.GetGraph().GetResolver();
        // track
        if (owner != null)
        {
            EventTrack track = (EventTrack)info.output.GetReferenceObject();

            normalizedTime = 0;
            Process(track.name, normalizedTime);
            owner.OnEnter(track.name, asset);
        }
    }
Exemplo n.º 5
0
        public ActionResult Create([Bind(Include = "EventTrackID,EventID,TrackID,TrackVenue,TrackDate,TrackStartTime,TrackEndTime,TrackSeating,TrackOwner")] EventTrack eventTrack)
        {
            if (ModelState.IsValid)
            {
                db.EventTracks.Add(eventTrack);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            ViewBag.EventID = new SelectList(db.Events, "EventID", "EventName", eventTrack.EventID);
            ViewBag.TrackID = new SelectList(db.Tracks, "TrackID", "TrackDisplayName", eventTrack.TrackID);
            return(View(eventTrack));
        }
Exemplo n.º 6
0
        // GET: EventTracks/Details/5
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            EventTrack eventTrack = db.EventTracks.Find(id);

            if (eventTrack == null)
            {
                return(HttpNotFound());
            }
            return(View(eventTrack));
        }
Exemplo n.º 7
0
 public ActionResult DeleteConfirmed(int id)
 {
     try
     {
         EventTrack eventTrack = db.EventTracks.Find(id);
         db.EventTracks.Remove(eventTrack);
         db.SaveChanges();
         return(RedirectToAction("/Browse/6"));
     }
     catch (Exception e)
     {
     }
     return(RedirectToAction("/Browse/6"));
 }
Exemplo n.º 8
0
        // GET: EventTracks/Edit/5
        public ActionResult Edit(int?id, int?eventid)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            EventTrack eventTrack = db.EventTracks.Find(id);

            if (eventTrack == null)
            {
                return(HttpNotFound());
            }
            ViewBag.EventID = new SelectList(db.Events.Where(e => e.EventID == eventid), "EventID", "EventName", eventTrack.EventID);
            ViewBag.TrackID = new SelectList(db.Tracks, "TrackID", "TrackDisplayName", eventTrack.TrackID);
            return(View(eventTrack));
        }
Exemplo n.º 9
0
        public ActionResult AddTracks(int?id, [Bind(Include = "EventTrackID,EventID,TrackID,TrackVenue,TrackStartTime,TrackEndTime,TrackSeating,TrackOwner")] EventTrack eventTrack)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    db.EventTracks.Add(eventTrack);
                    db.SaveChanges();
                    return(RedirectToAction("Browse", new { id = eventTrack.EventID }));
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    return(RedirectToAction("Browse", new { id = eventTrack.EventID }));
                }
            }

            ViewBag.EventID = new SelectList(db.Events.Where(e => e.EventID == id), "EventID", "EventName", eventTrack.EventID);
            ViewBag.TrackID = new SelectList(db.Tracks, "TrackID", "TrackDisplayName", eventTrack.TrackID);
            return(View(eventTrack));
        }
Exemplo n.º 10
0
        //private EventTrack _EventTrack;

        /// <summary>
        /// Create a SoundTrackBar
        /// </summary>
        /// <param name="track"> SoundTrack to edit</param>
        public EventTrackBar(EventTrack track)
            : base(track)
        {
            //_EventTrack = track;
            this.ContextMenu = EventTrackBarContextMenu.Instance;
        }
Exemplo n.º 11
0
        IEnumerator DoConvertTake(AMTakeData oldTake, Take newTake, bool isMeta, string assetPath)
        {
            newTake.name            = oldTake.name;
            newTake.frameRate       = oldTake.frameRate;
            newTake.endFramePadding = oldTake.endFramePadding;
            newTake.numLoop         = oldTake.numLoop;
            newTake.loopMode        = oldTake.loopMode;
            newTake.loopBackToFrame = oldTake.loopBackToFrame;
            newTake.trackCounter    = oldTake.track_count;
            newTake.groupCounter    = oldTake.group_count;

            //go through groups
            newTake.rootGroup            = new Group();
            newTake.rootGroup.group_name = oldTake.rootGroup.group_name;
            newTake.rootGroup.group_id   = oldTake.rootGroup.group_id;
            newTake.rootGroup.elements   = new List <int>(oldTake.rootGroup.elements);
            newTake.rootGroup.foldout    = oldTake.rootGroup.foldout;

            newTake.groupValues = new List <Group>();
            foreach (var oldGroup in oldTake.groupValues)
            {
                var newGroup = new Group();
                newGroup.group_name = oldGroup.group_name;
                newGroup.group_id   = oldGroup.group_id;
                newGroup.elements   = new List <int>(oldGroup.elements);
                newGroup.foldout    = oldGroup.foldout;

                newTake.groupValues.Add(newGroup);
            }

            //go through tracks
            newTake.trackValues = new List <Track>();
            foreach (var oldTrack in oldTake.trackValues)
            {
                AddMessage("  - convert track: " + oldTrack.name);

                Track newTrack = null;

                if (oldTrack is AMAnimationTrack)
                {
                    newTrack = new UnityAnimationTrack();

                    ConvertTrackCommonFields(oldTrack, newTrack, true, isMeta);

                    newTrack.keys = new List <Key>();
                    foreach (AMAnimationKey oldKey in oldTrack.keys)
                    {
                        var newKey = new UnityAnimationKey();

                        ConvertKeyCommonFields(oldKey, newKey);

                        newKey.wrapMode      = oldKey.wrapMode;
                        newKey.amClip        = oldKey.amClip;
                        newKey.crossfade     = oldKey.crossfade;
                        newKey.crossfadeTime = oldKey.crossfadeTime;

                        newTrack.keys.Add(newKey);
                    }
                }
                else if (oldTrack is AMAudioTrack)
                {
                    newTrack = new AudioTrack();

                    ConvertTrackCommonFields(oldTrack, newTrack, true, isMeta);

                    newTrack.keys = new List <Key>();
                    foreach (AMAudioKey oldKey in oldTrack.keys)
                    {
                        var newKey = new AudioKey();

                        ConvertKeyCommonFields(oldKey, newKey);

                        newKey.audioClip = oldKey.audioClip;
                        newKey.loop      = oldKey.loop;
                        newKey.oneShot   = oldKey.oneShot;

                        newTrack.keys.Add(newKey);
                    }
                }
                else if (oldTrack is AMCameraSwitcherTrack)
                {
                    newTrack = new CameraSwitcherTrack();

                    ConvertTrackCommonFields(oldTrack, newTrack, true, isMeta);

                    newTrack.keys = new List <Key>();
                    for (int i = 0; i < oldTrack.keys.Count; i++)
                    {
                        var oldKey = (AMCameraSwitcherKey)oldTrack.keys[i];
                        var newKey = new CameraSwitcherKey();

                        ConvertKeyCommonFields(oldKey, newKey);

                        newKey.type                 = oldKey.type;
                        newKey.typeEnd              = oldKey.typeEnd;
                        newKey.color                = oldKey.color;
                        newKey.colorEnd             = oldKey.colorEnd;
                        newKey.cameraFadeType       = oldKey.cameraFadeType;
                        newKey.cameraFadeParameters = new List <float>(oldKey.cameraFadeParameters);
                        newKey.irisShape            = oldKey.irisShape;
                        newKey.still                = oldKey.still;
                        newKey.endFrame             = oldKey.endFrame;

                        if (isMeta)
                        {
                            newKey.SetCameraDirect(null, oldKey.cameraTargetPath);
                            newKey.SetCameraEndDirect(null, oldKey.cameraEndTargetPath);
                        }
                        else
                        {
                            newKey.SetCameraDirect(oldKey.getCamera(null), "");
                            newKey.SetCameraDirect(oldKey.getCameraEnd(null), "");
                        }

                        newTrack.keys.Add(newKey);
                    }
                }
                else if (oldTrack is AMEventTrack)
                {
                    var newEventTrack = new EventTrack();
                    newTrack = newEventTrack;

                    ConvertTrackCommonFields(oldTrack, newTrack, false, isMeta);

                    newTrack.keys = new List <Key>();

                    string eventCompName = null;

                    //TODO: create new tracks per different components from keys
                    //for now we only allow conversion of one component, so the first key will be used.
                    foreach (AMEventKey oldKey in oldTrack.keys)
                    {
                        string keyCompName = oldKey.getComponentName();

                        if (string.IsNullOrEmpty(eventCompName))
                        {
                            if (!string.IsNullOrEmpty(keyCompName))
                            {
                                eventCompName = keyCompName;

                                AddMessage("   - EventTrack using component: " + eventCompName);

                                if (isMeta)
                                {
                                    newEventTrack.SetTargetAsComponentDirect(oldTrack.targetPath, null, eventCompName);
                                }
                                else
                                {
                                    newEventTrack.SetTargetAsComponentDirect("", oldKey.getComponentRef(), eventCompName);
                                }
                            }
                        }

                        //only add if component matched
                        if (string.IsNullOrEmpty(eventCompName) || keyCompName != eventCompName)
                        {
                            AddMessage("   - Cannot add EventKey with Component: " + eventCompName, Color.yellow);
                            continue;
                        }

                        var newKey = new EventKey();

                        ConvertKeyCommonFields(oldKey, newKey);

                        newKey.useSendMessage = oldKey.useSendMessage;
                        newKey.methodName     = oldKey.methodName;

                        newKey.parameters = new List <EventParameter>(oldKey.parameters.Count);
                        for (int i = 0; i < oldKey.parameters.Count; i++)
                        {
                            var oldParm = oldKey.parameters[i];
                            var newParm = new EventParameter();

                            ConvertEventParameter(oldParm, newParm);

                            newKey.parameters.Add(newParm);
                        }

                        newTrack.keys.Add(newKey);
                    }
                }
                else if (oldTrack is AMGOSetActiveTrack)
                {
                    var oldGOTrack = (AMGOSetActiveTrack)oldTrack;
                    var newGOTrack = new GOSetActiveTrack();

                    newTrack = newGOTrack;

                    ConvertTrackCommonFields(oldTrack, newTrack, true, isMeta);

                    newGOTrack.startActive = oldGOTrack.startActive;

                    newTrack.keys = new List <Key>();
                    foreach (AMGOSetActiveKey oldKey in oldTrack.keys)
                    {
                        var newKey = new GOSetActiveKey();

                        ConvertKeyCommonFields(oldKey, newKey);

                        newKey.setActive = oldKey.setActive;
                        newKey.endFrame  = oldKey.endFrame;

                        newTrack.keys.Add(newKey);
                    }
                }
                else if (oldTrack is AMMaterialTrack)
                {
                    var oldMatTrack = (AMMaterialTrack)oldTrack;
                    var newMatTrack = new MaterialTrack();

                    newTrack = newMatTrack;

                    ConvertTrackCommonFields(oldTrack, newTrack, true, isMeta);

                    newMatTrack.materialIndex = oldMatTrack.materialIndex;
                    newMatTrack.property      = oldMatTrack.property;
                    newMatTrack.propertyType  = (MaterialTrack.ValueType)oldMatTrack.propertyType;

                    newTrack.keys = new List <Key>();
                    foreach (AMMaterialKey oldKey in oldTrack.keys)
                    {
                        var newKey = new MaterialKey();

                        ConvertKeyCommonFields(oldKey, newKey);

                        newKey.endFrame = oldKey.endFrame;
                        newKey.texture  = oldKey.texture;
                        newKey.vector   = oldKey.vector;

                        newTrack.keys.Add(newKey);
                    }
                }
                else if (oldTrack is AMOrientationTrack)
                {
                    newTrack = new OrientationTrack();

                    ConvertTrackCommonFields(oldTrack, newTrack, true, isMeta);

                    newTrack.keys = new List <Key>();
                    foreach (AMOrientationKey oldKey in oldTrack.keys)
                    {
                        var newKey = new OrientationKey();

                        ConvertKeyCommonFields(oldKey, newKey);

                        if (isMeta)
                        {
                            newKey.SetTargetDirect(null, oldKey.GetTargetPath());
                        }
                        else
                        {
                            newKey.SetTargetDirect(oldKey.GetTarget(null), "");
                        }

                        newKey.endFrame = oldKey.endFrame;

                        newTrack.keys.Add(newKey);
                    }
                }
                else if (oldTrack is AMPropertyTrack)
                {
                    var oldPropTrack = (AMPropertyTrack)oldTrack;
                    var newPropTrack = new PropertyTrack();

                    newTrack = newPropTrack;

                    ConvertTrackCommonFields(oldTrack, newTrack, true, isMeta);

                    newPropTrack.valueType = (PropertyTrack.ValueType)oldPropTrack.valueType;

                    if (oldPropTrack.isPropertySet())
                    {
                        Component comp      = oldPropTrack.GetTargetComp(null);
                        string    compName  = oldPropTrack.getComponentName();
                        bool      isField   = oldPropTrack.isField;
                        string    fieldName = oldPropTrack.getMemberName();

                        if (isMeta)
                        {
                            newPropTrack.SetTargetCompDirect(null, compName, isField, fieldName);
                        }
                        else
                        {
                            newPropTrack.SetTargetCompDirect(comp, compName, isField, fieldName);
                        }
                    }

                    newTrack.keys = new List <Key>();
                    foreach (AMPropertyKey oldKey in oldTrack.keys)
                    {
                        var newKey = new PropertyKey();

                        ConvertKeyCommonFields(oldKey, newKey);

                        newKey.endFrame  = oldKey.endFrame;
                        newKey.val       = oldKey.val;
                        newKey.valString = oldKey.valString;
                        newKey.valObj    = oldKey.valObj;
                        newKey.vect4     = oldKey.vect4;

                        newTrack.keys.Add(newKey);
                    }
                }
                else if (oldTrack is AMRotationEulerTrack)
                {
                    var oldRotEulerTrack = (AMRotationEulerTrack)oldTrack;
                    var newRotEulerTrack = new RotationEulerTrack();

                    newTrack = newRotEulerTrack;

                    ConvertTrackCommonFields(oldTrack, newTrack, true, isMeta);

                    newRotEulerTrack.axis = (AxisFlags)oldRotEulerTrack.axis;

                    newTrack.keys = new List <Key>();
                    foreach (AMRotationEulerKey oldKey in oldTrack.keys)
                    {
                        var newKey = new RotationEulerKey();

                        ConvertKeyCommonFields(oldKey, newKey);

                        newKey.rotation = oldKey.rotation;
                        newKey.endFrame = oldKey.endFrame;

                        newTrack.keys.Add(newKey);
                    }
                }
                else if (oldTrack is AMRotationTrack)
                {
                    newTrack = new RotationTrack();

                    ConvertTrackCommonFields(oldTrack, newTrack, true, isMeta);

                    newTrack.keys = new List <Key>();
                    foreach (AMRotationKey oldKey in oldTrack.keys)
                    {
                        var newKey = new RotationKey();

                        ConvertKeyCommonFields(oldKey, newKey);

                        newKey.rotation = oldKey.rotation;
                        newKey.endFrame = oldKey.endFrame;

                        newTrack.keys.Add(newKey);
                    }
                }
                else if (oldTrack is AMTranslationTrack)
                {
                    var oldTransTrack = (AMTranslationTrack)oldTrack;
                    var newTransTrack = new TranslationTrack();

                    newTrack = newTransTrack;

                    ConvertTrackCommonFields(oldTrack, newTrack, true, isMeta);

                    newTransTrack.pixelPerUnit = oldTransTrack.pixelPerUnit;
                    newTransTrack.pixelSnap    = oldTransTrack.pixelSnap;

                    newTrack.keys = new List <Key>();
                    foreach (AMTranslationKey oldKey in oldTrack.keys)
                    {
                        var newKey = new TranslationKey();

                        ConvertKeyCommonFields(oldKey, newKey);

                        newKey.position     = oldKey.position;
                        newKey.endFrame     = oldKey.endFrame;
                        newKey.isConstSpeed = oldKey.isConstSpeed;

                        newKey.path = new Vector3[oldKey.path.Length];
                        System.Array.Copy(oldKey.path, newKey.path, newKey.path.Length);

                        newTrack.keys.Add(newKey);
                    }
                }
                else if (oldTrack is AMTriggerTrack)  //convert TriggerTrack to EventTrack with TriggerSignal
                {
                    var newTriggerTrack = new EventTrack();

                    newTrack = newTriggerTrack;

                    ConvertTrackCommonFields(oldTrack, newTrack, false, isMeta);

                    //grab/create signal for this trigger
                    string signalPath = GetTriggerSignalPath(assetPath);

                    TriggerSignal triggerSignal;
                    if (!mTriggerSignalLookup.TryGetValue(signalPath, out triggerSignal))
                    {
                        //try to load it if it exists
                        triggerSignal = AssetDatabase.LoadAssetAtPath <TriggerSignal>(signalPath);
                        if (!triggerSignal)
                        {
                            AddMessage("  - Creating Trigger Signal: " + signalPath);

                            triggerSignal = ScriptableObject.CreateInstance <TriggerSignal>();
                            AssetDatabase.CreateAsset(triggerSignal, signalPath);
                            AssetDatabase.SaveAssets();

                            yield return(new WaitForFixedUpdate());
                        }

                        mTriggerSignalLookup.Add(signalPath, triggerSignal);
                    }

                    newTriggerTrack.SetTargetAsObject(triggerSignal);

                    newTrack.keys = new List <Key>();
                    foreach (AMTriggerKey oldKey in oldTrack.keys)
                    {
                        var newKey = new EventKey();

                        ConvertKeyCommonFields(oldKey, newKey);

                        newKey.useSendMessage = false;
                        newKey.methodName     = "Invoke";

                        newKey.parameters = new List <EventParameter>(3);
                        newKey.parameters.Add(new EventParameter()
                        {
                            valueType = EventData.ValueType.String, val_string = oldKey.valueString
                        });
                        newKey.parameters.Add(new EventParameter()
                        {
                            valueType = EventData.ValueType.Integer, val_int = oldKey.valueInt
                        });
                        newKey.parameters.Add(new EventParameter()
                        {
                            valueType = EventData.ValueType.Float, val_float = oldKey.valueFloat
                        });

                        newTrack.keys.Add(newKey);
                    }
                }

                newTake.trackValues.Add(newTrack);

                yield return(new WaitForFixedUpdate());
            }
        }
Exemplo n.º 12
0
        //[ValidateAntiForgeryToken]
        public String CreateEvent(EventInfoModel eventInfo)
        {
            if (eventInfo.Event.EventTypeObj != null)
            {
                eventInfo.Event.EventType = (EventType)eventInfo.Event.EventTypeObj.Key;  // map key to enum type.
            }

            if (eventInfo.Event.EventStatusObj != null)
            {
                eventInfo.Event.EventStatus = (EventStatus)eventInfo.Event.EventStatusObj.Key; // map key to enum type.
            }


            if (eventInfo.Event.EventVisibilityObj != null)
            {
                eventInfo.Event.EventVisibility = (EventVisibility)eventInfo.Event.EventVisibilityObj.Key; // map key to from enum type.
            }


            if (eventInfo.Event.EventScEligibilityObj != null)
            {
                eventInfo.Event.ScEligibility = (scEligibility)eventInfo.Event.EventScEligibilityObj.Key; // map key to enum type.
            }

            if (ModelState.IsValid)
            {
                if (eventInfo.Event.EventID == 0)                                                                                           //if new event.
                {
                    db.Events.Add(eventInfo.Event);                                                                                         //add new event.
                    if (eventInfo.EventTracks == null && (eventInfo.EventTechnologTags == null || eventInfo.EventAudienceTypeTags == null)) //event technolog tags does not exist and event tracks are also empty.
                    {
                        return(JsonConvert.SerializeObject(new { responseCode = 003 }));
                    }
                    db.SaveChanges();
                    if (eventInfo.EventTracks != null)              //event tracks if exists.
                    {
                        foreach (var eventTrack in eventInfo.EventTracks)
                        {
                            eventTrack.EventID = eventInfo.Event.EventID;

                            db.EventTracks.Add(eventTrack);
                        }
                        if (eventInfo.EventTechnologTags != null)       //event log tags in event if exist.
                        {
                            var @event = db.Events.Where(x => x.EventID == eventInfo.Event.EventID).FirstOrDefault();
                            foreach (var eventLog in eventInfo.EventTechnologTags)
                            {
                                @event.EventTechnologTags.Remove(eventLog);
                            }
                        }
                        if (eventInfo.EventAudienceTypeTags != null)
                        {
                            var @event = db.Events.Where(x => x.EventID == eventInfo.Event.EventID).FirstOrDefault();
                            foreach (var eventLog in eventInfo.EventAudienceTypeTags)
                            {
                                @event.EventAudienceTypeTags.Remove(eventLog);
                            }
                        }
                    }
                    else
                    {
                        var @event = db.Events.Where(x => x.EventID == eventInfo.Event.EventID).FirstOrDefault();
                        @event.EventTechnologTags = new List <PrimaryTechnology>();
                        foreach (var eventLog in eventInfo.EventTechnologTags)          //event techno log tags exist.
                        {
                            var existingEventLog = db.PrimaryTechnologies.Where(x => x.PrimaryTechnologyID == eventLog.PrimaryTechnologyID).FirstOrDefault();
                            @event.EventTechnologTags.Add(existingEventLog);        //add to event.
                        }

                        @event.EventAudienceTypeTags = new List <AudienceType>();
                        foreach (var eventLog in eventInfo.EventAudienceTypeTags)          //event techno log tags exist.
                        {
                            var existingEventLog = db.AudienceTypes.Where(x => x.AudienceTypeID == eventLog.AudienceTypeID).FirstOrDefault();
                            @event.EventAudienceTypeTags.Add(existingEventLog);        //add to event.
                        }
                    }
                }
                else
                {
                    var existingEvent = db.Events
                                        .Where(p => p.EventID == eventInfo.Event.EventID)
                                        .Include("EventTracks.TrackAgendas")
                                        .SingleOrDefault();

                    if (existingEvent != null)                                            //event already exist.
                    {
                        db.Entry(existingEvent).CurrentValues.SetValues(eventInfo.Event); //update existing event values.

                        // Delete children
                        foreach (var existingChild in existingEvent.EventTracks.ToList())
                        {
                            if (eventInfo.EventTracks == null || !eventInfo.EventTracks.Any(c => c.EventTrackID == existingChild.EventTrackID))
                            {
                                existingChild.TrackAgendas.ToList().ForEach(p => db.TrackAgendas.Remove(p));
                                db.EventTracks.Remove(existingChild);
                            }
                        }


                        if (eventInfo.EventTracks != null)
                        {
                            // Update and Insert children
                            foreach (var childModel in eventInfo.EventTracks)
                            {
                                var existingChild = existingEvent.EventTracks
                                                    .Where(c => c.EventTrackID == childModel.EventTrackID)
                                                    .SingleOrDefault();

                                if (existingChild != null)
                                {
                                    // Update child

                                    db.Entry(existingChild).CurrentValues.SetValues(childModel);

                                    // Delete children
                                    foreach (var existingGrandChild in existingChild.TrackAgendas.ToList())
                                    {
                                        if (!existingChild.TrackAgendas.Any(c => c.TrackAgendaID == existingGrandChild.TrackAgendaID))
                                        {
                                            db.TrackAgendas.Remove(existingGrandChild);
                                        }
                                    }

                                    // Update and Insert children
                                    foreach (var grandChildModel in existingChild.TrackAgendas)
                                    {
                                        var existingGrandChild = existingChild.TrackAgendas
                                                                 .Where(c => c.TrackAgendaID == grandChildModel.TrackAgendaID)
                                                                 .SingleOrDefault();

                                        if (existingGrandChild != null)
                                        {
                                            // Update child

                                            db.Entry(existingGrandChild).CurrentValues.SetValues(grandChildModel);
                                        }
                                        else
                                        {
                                            // Insert child
                                            var newChild = new TrackAgenda()
                                            {
                                                EndTime      = grandChildModel.EndTime,
                                                SpeakerID    = grandChildModel.SpeakerID,
                                                EventTrackID = grandChildModel.EventTrackID,
                                                FavCount     = grandChildModel.FavCount,
                                                QRCode       = grandChildModel.QRCode,
                                                SessionID    = grandChildModel.SessionID,
                                                StartTime    = grandChildModel.StartTime
                                            };
                                            existingChild.TrackAgendas.Add(newChild);
                                        }
                                    }
                                }
                                else
                                {
                                    // Insert child
                                    var newChild = new EventTrack()
                                    {
                                        EventID        = childModel.EventID,
                                        TrackEndTime   = childModel.TrackEndTime,
                                        TrackID        = childModel.TrackID,
                                        TrackOwner     = childModel.TrackOwner,
                                        TrackSeating   = childModel.TrackSeating,
                                        TrackVenue     = childModel.TrackVenue,
                                        TrackStartTime = childModel.TrackStartTime,
                                        TrackAgendas   = childModel.TrackAgendas
                                    };
                                    existingEvent.EventTracks.Add(newChild);
                                }
                            }
                            if (existingEvent.EventTechnologTags != null)
                            {
                                var existingTags = existingEvent.EventTechnologTags.ToList();
                                foreach (var eventLog in existingTags)
                                {
                                    existingEvent.EventTechnologTags.Remove(
                                        existingEvent.EventTechnologTags.FirstOrDefault(
                                            x => x.PrimaryTechnologyID == eventLog.PrimaryTechnologyID));
                                }
                            }
                            if (existingEvent.EventAudienceTypeTags != null)
                            {
                                var existingTags = existingEvent.EventAudienceTypeTags.ToList();
                                foreach (var eventLog in existingTags)
                                {
                                    existingEvent.EventAudienceTypeTags.Remove(
                                        existingEvent.EventAudienceTypeTags.FirstOrDefault(
                                            x => x.AudienceTypeID == eventLog.AudienceTypeID));
                                }
                            }
                        }
                        else
                        {
                            if (eventInfo.EventTechnologTags == null)
                            {
                                return(JsonConvert.SerializeObject(new { responseCode = 003 }));
                            }
                            else
                            {
                                if (existingEvent.EventTechnologTags != null)
                                {
                                    var existingTags = existingEvent.EventTechnologTags.ToList();
                                    foreach (var eventLog in existingTags)
                                    {
                                        existingEvent.EventTechnologTags.Remove(eventLog);
                                    }
                                }
                                existingEvent.EventTechnologTags = new List <PrimaryTechnology>();
                                foreach (var eventLog in eventInfo.EventTechnologTags)
                                {
                                    var existingEventLog = db.PrimaryTechnologies.Where(x => x.PrimaryTechnologyID == eventLog.PrimaryTechnologyID).FirstOrDefault();
                                    existingEvent.EventTechnologTags.Add(existingEventLog);         //add new techno log tags of event.
                                }
                            }

                            if (eventInfo.EventAudienceTypeTags == null)
                            {
                                return(JsonConvert.SerializeObject(new { responseCode = 003 }));
                            }
                            else
                            {
                                if (existingEvent.EventAudienceTypeTags != null)
                                {
                                    var existingTags = existingEvent.EventAudienceTypeTags.ToList();
                                    foreach (var eventLog in existingTags)
                                    {
                                        existingEvent.EventAudienceTypeTags.Remove(eventLog);
                                    }
                                }
                                existingEvent.EventAudienceTypeTags = new List <AudienceType>();
                                foreach (var eventLog in eventInfo.EventAudienceTypeTags)
                                {
                                    var existingEventLog = db.AudienceTypes.Where(x => x.AudienceTypeID == eventLog.AudienceTypeID).FirstOrDefault();
                                    existingEvent.EventAudienceTypeTags.Add(existingEventLog);         //add new techno log tags of event.
                                }
                            }
                        }
                    }
                }
                db.SaveChanges();

                return(JsonConvert.SerializeObject(new { responseCode = 001 }));
            }
            return(JsonConvert.SerializeObject(new { responseCode = 002 }));
        }
        public static Event CreateDxEvent(DbModel.Event ev)
        {
            Event dxEvent = new Event()
            {
                EventStatus   = ev.EventStatus.ToString(),
                EventFromDate = ev.EventFromDate,
                EventToDate   = ev.EventToDate,
                EventAbstract = ev.EventAbstract,
                CityName      = ev.CityName,
                EventId       = ev.EventID,
                EventName     = ev.EventName,
                EventRegLink  = ev.RegLink,
                EventType     = ev.EventType.ToString(),
                EventVenue    = ev.EventVenue,
                Tracks        = new List <EventTrack>(),
                GlobalEvent   = ev.IsGlobal
            };



            foreach (var et in ev.EventTracks)
            {
                var dxEventTrack = new EventTrack()
                {
                    AudienceType     = et.Track.AudType.TypeOfAudience,
                    AudienceTypeId   = et.Track.AudienceTypeID,
                    EventTrackId     = et.EventTrackID,
                    Format           = et.Track.Format.ToString(),
                    TrackAbstract    = et.Track.TrackAbstract,
                    TrackEndTime     = et.TrackEndTime,
                    TrackStartTime   = et.TrackStartTime,
                    TrackId          = et.Track.TrackID,
                    TrackVenue       = et.TrackVenue,
                    TrackDisplayName = et.Track.TrackDisplayName,
                    Sessions         = new List <TrackSession>()
                };
                dxEvent.Tracks.Add(dxEventTrack);


                foreach (var ets in et.Track.Session)
                {
                    var eta = (from c in et.TrackAgendas
                               where c.SessionID == ets.SessionID
                               select c).FirstOrDefault();

                    var dxEventSession = new TrackSession()
                    {
                        Abstract              = ets.Abstract,
                        Posrequisites         = ets.PostRequisites,
                        Prerequisites         = ets.PreRequisites,
                        PrimaryTechnologyId   = ets.PrimaryTechnologyID,
                        PrimaryTechnologyName = ets.PrimaryTechnology.PrimaryTech,
                        Product = ets.Product,
                        SecondaryTechnologyId   = ets.SecondaryTechnologyID,
                        SecondaryTechnologyName = ets.SecondaryTechnology.SecondaryTech,
                        SessionEndTime          = eta.EndTime,
                        SessionNo        = ets.SessionNo,
                        SessionStartTime = eta.StartTime,
                        Speaker          = new TrackSpeaker()
                        {
                            Affiliation  = eta.Speaker.Affiliation.ToString(),
                            Email        = eta.Speaker.Email,
                            PicUrl       = eta.Speaker.PicUrl,
                            Profile      = eta.Speaker.Profile,
                            SpeakerId    = eta.SpeakerID,
                            SpeakerName  = eta.Speaker.SpeakerName,
                            SpeakerType  = eta.Speaker.Type.ToString(),
                            Title        = eta.Speaker.Title,
                            BlogLink     = eta.Speaker.BlogLink,
                            FacebookLink = eta.Speaker.FacebookLink,
                            LinkedinLink = eta.Speaker.LinkedInLink,
                            Location     = eta.Speaker.Location,
                            TwitterLink  = eta.Speaker.TwitterHandle
                        },
                        Title         = ets.Title,
                        TechLevel     = ets.TechLevel,
                        TrackAgendaId = eta.TrackAgendaID
                    };

                    dxEventTrack.Sessions.Add(dxEventSession);
                }
            }

            return(dxEvent);
        }