예제 #1
0
 internal void GetPortIndices(IPipeTicket ticket, IElement srcEl, IElement destEl, out int srcPortIndex, out int destPortIndex)
 {
     // get the port indices
     srcPortIndex = -1;
     destPortIndex = -1;
     srcEl.OutPortMgr.GetPortIndex(ticket.SrcPortId, out srcPortIndex);
     destEl.InPortMgr.GetPortIndex(ticket.DestPortId, out destPortIndex);
 }
예제 #2
0
        internal void LoadNetworkPipeIntoView(INetworkPipe pipe, IPipeTicket ticket)
        {
            // get the element presenters for the source and target elements.
            IElementPresenter srcElPresenter = ElementPresenters[ticket.SrcElementId];
            IElementPresenter destElPresenter = ElementPresenters[ticket.DestElementId];

            // get the elements
            IElement srcEl = srcElPresenter.Element;
            IElement destEl = destElPresenter.Element;

            // get the port indices
            int srcPortIndex = -1;
            int destPortIndex = -1;
            GetPortIndices(ticket, srcEl, destEl, out srcPortIndex, out destPortIndex);

            if (destEl.InPortMgr.IsPortConnected(destPortIndex))
            {
                // TODO
                throw new InvalidOperationException("Input ports can only have 1 pipe connected to them.");
            }

            // get the element views
            IElementView srcElView = srcElPresenter.View;
            IElementView destElView = destElPresenter.View;

            // create the instance of the view
            INetworkPipeView pipeView = CreateNetworkPipeView();

            LoadNetworkPipePresenterAndModel(pipe, pipeView, srcElView, destElView, srcPortIndex, destPortIndex);
        }
예제 #3
0
 /// <summary>
 /// Loads all unpersisted <see cref="IPipe"/> objects in the <see cref="WorkSpace"/> into the view.  
 /// This method creates views and presenters for each pipe model, connects them, and adds them to the view.
 /// </summary>
 public void LoadPipesIntoView(IPipeTicket [] pipeTickets)
 {
     IPipe pipe = null;
     foreach (IPipeTicket ticket in pipeTickets)
     {
         pipe = WorkSpace.PipesMgr[ticket.PipeId];
         if (pipe is IDataPipe)
             LoadDataPipeIntoView((IDataPipe)pipe, ticket);
         else
             LoadNetworkPipeIntoView((INetworkPipe)pipe, ticket);
     }
 }
예제 #4
0
파일: UnpersistMgr.cs 프로젝트: BgRva/Blob1
        public void Unpersist(out IPipeTicket[] pipeTickets)
        {
            pipeTickets = null;
            IWorkSpaceUnpersister persister = null;
            try
            {
                if (Reader == null)
                    InitReader(FileName);

                using (var wpp = _provider.GetUnpersister<IWorkSpaceUnpersisterProvider>())
                {
                    persister = wpp.Create(WorkSpace, Format);

                    persister.UnpersistProgressChanged += new UnpersistProgressChangedEventHandler<IWorkSpaceUnpersister, UnpersistProgressChangedEventArgs>(wsp_UnpersistProgressChanged);
                    persister.UnpersistCompleted += new UnpersistCompletedEventHandler<IWorkSpaceUnpersister, UnpersistCompletedEventArgs>(wsp_UnpersistCompleted);

                    Reader.Read();  // start the read to get to the 1st eleemnt
                    Reader.MoveToContent();
                    persister.UnpersistWorkSpace(WorkSpace, Reader);
                    pipeTickets = new IPipeTicket[WorkSpace.PipesMgr.Count];
                    persister.CopyPipeTicketsTo(pipeTickets, 0);
                }
            }
            catch (Exception ex)
            {
                _logger.Fatal(ex.Message, ex);
                throw;
            }
            finally
            {
                if (Reader != null)
                    Reader.Close();

                if (persister != null)
                {
                    persister.UnpersistProgressChanged -= wsp_UnpersistProgressChanged;
                    persister.UnpersistCompleted -= wsp_UnpersistCompleted;
                    persister.Dispose();
                }

                if (pipeTickets == null)
                    pipeTickets = new IPipeTicket[0];
            }
        }
예제 #5
0
        internal IPipe ReConstitute(IPipeTicket ticket)
        {
            IPipe pipe = null;

            //TODO - should use container here
            using (PipeFactory fac = new PipeFactory())
            {
                if (ticket.ContentType == BlobType.Data)
                    pipe = fac.CreateDataPipe(ticket.PipeId);
                else if (ticket.ContentType == BlobType.Network)
                    pipe = fac.CreateNetworkPipe(ticket.PipeId);
            }

            return pipe;
        }
예제 #6
0
 public void CopyPipeTicketsTo(IPipeTicket[] array, int arrayIndex)
 {
     PipeTickets.Values.CopyTo(array, arrayIndex);
 }
예제 #7
0
파일: AppPresenter.cs 프로젝트: BgRva/Blob1
        internal void UnpersistWorkSpace(IWorkSpace workSpace, string fileName, WorkSpaceFormats format, out IPipeTicket[] pipeTickets)
        {
            pipeTickets = null;
            UnpersistMgr upMgr = new UnpersistMgr(null);
            try
            {
                upMgr.UnpersistProgressChanged += new UnpersistProgressChangedEventHandler<UnpersistMgr, UnpersistProgressChangedEventArgs>(upMgr_UnpersistProgressChanged);
                upMgr.UnpersistCompleted += new UnpersistCompletedEventHandler<UnpersistMgr, UnpersistCompletedEventArgs>(upMgr_UnpersistCompleted);
                upMgr.WorkSpace = workSpace;
                upMgr.FileName = fileName;
                upMgr.Format = format;

                upMgr.Unpersist(out pipeTickets);
            }
            catch (Exception ex)
            {
                _Logger.Fatal(ex.Message, ex);
                throw;
            }
            finally
            {
                if (upMgr != null)
                {
                    upMgr.UnpersistProgressChanged -= upMgr_UnpersistProgressChanged;
                    upMgr.UnpersistCompleted -= upMgr_UnpersistCompleted;
                    ((IDisposable)upMgr).Dispose();
                }
            }
        }