コード例 #1
0
 public void Sync(ObjectClass objectClass, SyncToken token, SyncResultsHandler handler, OperationOptions options)
 {
     if (handler is SyncTokenResultsHandler)
     {
         ((SyncTokenResultsHandler)handler).HandleResult(GetLatestSyncToken(objectClass));
     }
 }
コード例 #2
0
        /// <summary>
        /// Implementation of SynOp.Sync
        /// </summary>
        /// <param name="objClass">Object class</param>
        /// <param name="token">Sync token</param>
        /// <param name="handler">Sync results handler</param>
        /// <param name="options">Operation options</param>
        public void Sync(
            ObjectClass oclass, SyncToken token, SyncResultsHandler handler, OperationOptions options)
        {
            const string operation = "Sync";

            ExchangeUtility.NullCheck(oclass, "oclass", this._configuration);

            LOG.Info("Exchange.Sync method; oclass = {0}, token = {1}", oclass, token);

            SyncOpContext context = new SyncOpContext()
            {
                Connector = this,
                ConnectorConfiguration = _configuration,
                ObjectClass            = oclass,
                OperationName          = operation,
                Options            = options,
                SyncToken          = token,
                SyncResultsHandler = handler
            };

            try {
                _scripting.ExecutePowerShell(context, Scripting.Position.BeforeMain);
                if (!_scripting.ExecutePowerShell(context, Scripting.Position.InsteadOfMain))
                {
                    SyncMain(context);
                }
                _scripting.ExecutePowerShell(context, Scripting.Position.AfterMain);
            } catch (Exception e) {
                LOG.Error(e, "Exception while executing Sync operation: {0}");
                throw;
            }

            // TODO what about executing a script on each returned item?
        }
コード例 #3
0
 public virtual void SyncAllCallFailPattern()
 {
     TestCallPattern(new TestOperationPattern()
     {
         MakeCall = facade =>
         {
             // create an empty results handler..
             SyncResultsHandler rh = new SyncResultsHandler()
             {
                 Handle = obj =>
                 {
                     return(true);
                 }
             };
             // call the sync method..
             var builder = new OperationOptionsBuilder();
             builder.Options["FAIL_DELETE"] = true;
             facade.Sync(ObjectClass.ALL, new SyncToken(1), rh, builder.Build());
         },
         CheckCalls = calls =>
         {
             Assert.AreEqual("Sync", GetAndRemoveMethodName(calls));
         }
     });
 }
コード例 #4
0
 public void Sync(ObjectClass objClass, SyncToken token,
                  SyncResultsHandler handler,
                  OperationOptions options)
 {
     ((SyncApiOp)this.GetOperationCheckSupported(SafeType <APIOperation> .Get <SyncApiOp>()))
     .Sync(objClass, token, handler, options);
 }
コード例 #5
0
        public void Sync(ObjectClass objClass, SyncToken token,
                         SyncResultsHandler handler,
                         OperationOptions options)
        {
            int remaining = _config.numResults;

            for (int i = 0; i < _config.numResults; i++)
            {
                ConnectorObjectBuilder obuilder =
                    new ConnectorObjectBuilder();
                obuilder.SetUid(i.ToString());
                obuilder.SetName(i.ToString());
                obuilder.ObjectClass = (objClass);

                SyncDeltaBuilder builder =
                    new SyncDeltaBuilder();
                builder.Object    = (obuilder.Build());
                builder.DeltaType = (SyncDeltaType.CREATE_OR_UPDATE);
                builder.Token     = (new SyncToken("mytoken"));
                SyncDelta rv = builder.Build();
                if (handler.Handle(rv))
                {
                    remaining--;
                }
                else
                {
                    break;;
                }
            }
            if (handler is SyncTokenResultsHandler)
            {
                ((SyncTokenResultsHandler)handler).HandleResult(new SyncToken(remaining));
            }
        }
コード例 #6
0
 public void Sync(ObjectClass objectClass, SyncToken token, SyncResultsHandler handler, OperationOptions options)
 {
     Assert.IsNotNull(objectClass);
     Assert.IsNotNull(token);
     Assert.IsNotNull(handler);
     Assert.IsNotNull(options);
     AddCall("Sync", objectClass, token, handler, options);
 }
コード例 #7
0
 /// <summary>
 /// Implementation of SynOp.Sync
 /// </summary>
 /// <param name="objClass">Object class</param>
 /// <param name="token">Syncronization token</param>
 /// <param name="handler">Handler for syncronization results</param>
 /// <param name="options">Operation options, can be null</param>
 public override void Sync(
     ObjectClass objClass,
     SyncToken token,
     SyncResultsHandler handler,
     OperationOptions options)
 {
     // TODO: implement Sync
     base.Sync(objClass, token, handler, options);
 }
コード例 #8
0
        /// <summary>
        /// Implementation of SynOp.Sync
        /// </summary>
        /// <param name="objClass">Object class</param>
        /// <param name="token">Sync token</param>
        /// <param name="handler">Sync results handler</param>
        /// <param name="options">Operation options</param>
        public override void Sync(
            ObjectClass objClass, SyncToken token, SyncResultsHandler handler, OperationOptions options)
        {
            ExchangeUtility.NullCheck(objClass, "oclass", this.configuration);

            // we handle accounts only
            if (!objClass.Is(ObjectClass.ACCOUNT_NAME))
            {
                base.Sync(objClass, token, handler, options);
                return;
            }

            ICollection <string> attsToGet = null;

            if (options != null && options.AttributesToGet != null)
            {
                attsToGet = CollectionUtil.NewSet(options.AttributesToGet);
            }

            // delegate to get the exchange attributes if requested
            SyncResultsHandler xchangeHandler = delegate(SyncDelta delta)
            {
                if (delta.DeltaType == SyncDeltaType.DELETE)
                {
                    return(handler(delta));
                }

                // replace the ad attributes with exchange one and add recipient type
                ConnectorObject updated = ExchangeUtility.ReplaceAttributes(delta.Object, attsToGet, AttMapFromAD);
                updated = this.AddExchangeAttributes(objClass, updated, attsToGet);
                if (updated != delta.Object)
                {
                    // build new sync delta, cause we changed the object
                    SyncDeltaBuilder deltaBuilder = new SyncDeltaBuilder
                    {
                        DeltaType = delta.DeltaType,
                        Token     = delta.Token,
                        Uid       = delta.Uid,
                        Object    = updated
                    };
                    delta = deltaBuilder.Build();
                }

                return(handler(delta));
            };

            // call AD sync, use xchangeHandler
            base.Sync(objClass, token, xchangeHandler, options);
        }
コード例 #9
0
        protected void ExecuteSync(String scriptName, ObjectClass objectClass, SyncToken token,
                                   SyncResultsHandler handler, OperationOptions options)
        {
            var arguments = new Dictionary <String, Object>
            {
                { Result, new MsPowerShellSyncResults(objectClass, handler) }
            };

            if (token != null)
            {
                arguments.Add(Token, token.Value);
            }

            ExecuteScript(GetScript(scriptName), CreateBinding(arguments, OperationType.SYNC, objectClass, null, null, options));
        }
コード例 #10
0
        public void Sync(SyncOpContext context)
        {
            ExchangeConnector        exconn = (ExchangeConnector)context.Connector;
            ActiveDirectoryConnector adconn = exconn.ActiveDirectoryConnector;

            ICollection <string> attsToGet = null;

            if (context.Options != null && context.Options.AttributesToGet != null)
            {
                attsToGet = CollectionUtil.NewSet(context.Options.AttributesToGet);
            }

            // delegate to get the exchange attributes if requested
            SyncResultsHandler xchangeHandler = new SyncResultsHandler()
            {
                Handle = delta =>
                {
                    if (delta.DeltaType == SyncDeltaType.DELETE)
                    {
                        return(context.SyncResultsHandler.Handle(delta));
                    }

                    // replace the ad attributes with exchange ones and add recipient type and database (if requested)
                    ConnectorObject updated = ExchangeUtility.ConvertAdAttributesToExchange(delta.Object);
                    //updated = this.AddExchangeAttributes(exconn, context.ObjectClass, updated, attsToGet);
                    if (updated != delta.Object)
                    {
                        // build new sync delta, cause we changed the object
                        SyncDeltaBuilder deltaBuilder = new SyncDeltaBuilder
                        {
                            DeltaType = delta.DeltaType,
                            Token     = delta.Token,
                            Uid       = delta.Uid,
                            Object    = updated
                        };
                        delta = deltaBuilder.Build();
                    }

                    return(context.SyncResultsHandler.Handle(delta));
                }
            };

            // call AD sync, use xchangeHandler
            adconn.SyncInternal(context.ObjectClass,
                                context.SyncToken, xchangeHandler, context.Options,
                                GetAdAttributesToReturn(adconn, context.ObjectClass, context.Options));
        }
コード例 #11
0
ファイル: Sample.cs プロジェクト: yelloweiffel/openicf
        public virtual void Sync(ObjectClass objectClass, SyncToken token, SyncResultsHandler handler,
                                 OperationOptions options)
        {
            if (ObjectClass.ALL.Equals(objectClass))
            {
                //
            }
            else if (ObjectClass.ACCOUNT.Equals(objectClass))
            {
                var builder = new ConnectorObjectBuilder();
                builder.SetUid("3f50eca0-f5e9-11e3-a3ac-0800200c9a66");
                builder.SetName("Foo");
                builder.AddAttribute(ConnectorAttributeBuilder.BuildEnabled(true));

                var deltaBuilder = new SyncDeltaBuilder
                {
                    Object    = builder.Build(),
                    DeltaType = SyncDeltaType.CREATE,
                    Token     = new SyncToken(10)
                };

                foreach (SyncDelta connectorObject in CollectionUtil.NewSet(deltaBuilder.Build()))
                {
                    if (!handler.Handle(connectorObject))
                    {
                        // Stop iterating because the handler stopped processing
                        break;
                    }
                }
            }
            else
            {
                Trace.TraceWarning("Sync of type {0} is not supported",
                                   _configuration.ConnectorMessages.Format(objectClass.GetDisplayNameKey(),
                                                                           objectClass.GetObjectClassValue()));
                throw new NotSupportedException("Sync of type" + objectClass.GetObjectClassValue() + " is not supported");
            }
            ((SyncTokenResultsHandler)handler).HandleResult(new SyncToken(10));
        }
コード例 #12
0
 public virtual void SyncAllCallPattern()
 {
     TestCallPattern(new TestOperationPattern()
     {
         MakeCall = facade =>
         {
             // create an empty results handler..
             SyncResultsHandler rh = new SyncResultsHandler()
             {
                 Handle = obj =>
                 {
                     return(true);
                 }
             };
             // call the sync method..
             facade.Sync(ObjectClass.ALL, new SyncToken(1), rh, null);
         },
         CheckCalls = calls =>
         {
             Assert.AreEqual("Sync", GetAndRemoveMethodName(calls));
         }
     });
 }
コード例 #13
0
        public virtual void Sync(ObjectClass objectClass, SyncToken token,
                                 SyncResultsHandler handler, OperationOptions options)
        {
            Trace.TraceInformation("Invoke Sync ObjectClass:{0}->{1}", objectClass.GetObjectClassValue(), token);

            try
            {
                ExecuteSync(_configuration.SyncScriptFileName, objectClass, token, handler, options);
                Trace.TraceInformation("Sync ok");
            }
            catch (ConnectorException)
            {
                throw;
            }
            catch (Exception e)
            {
                if (e.InnerException != null)
                {
                    throw e.InnerException;
                }
                throw;
            }
        }
コード例 #14
0
 public void Sync(ObjectClass objectClass, SyncToken token, SyncResultsHandler handler, OperationOptions options)
 {
     Assert.IsNotNull(objectClass);
     Assert.IsNotNull(token);
     Assert.IsNotNull(handler);
     Assert.IsNotNull(options);
     AddCall("Sync", objectClass, token, handler, options);
     if (ObjectClass.ALL.Equals(objectClass))
     {
         if (null != CollectionUtil.GetValue(options.Options, "FAIL_DELETE", null))
         {
             //Require ObjectClass when delta is 'delete'
             var builder = new SyncDeltaBuilder();
             builder.DeltaType = SyncDeltaType.DELETE;
             builder.Uid       = new Uid("DELETED");
             builder.Token     = new SyncToken(99);
             handler.Handle(builder.Build());
         }
         else
         {
             ((SyncTokenResultsHandler)handler).HandleResult(new SyncToken(100));
         }
     }
 }
コード例 #15
0
        public void Sync(ObjectClass objClass, SyncToken token,
                         SyncResultsHandler handler,
                         OperationOptions options)
        {
            for (int i = 0; i < _config.numResults; i++)
            {
                ConnectorObjectBuilder obuilder =
                    new ConnectorObjectBuilder();
                obuilder.SetUid(i.ToString());
                obuilder.SetName(i.ToString());
                obuilder.ObjectClass = (objClass);

                SyncDeltaBuilder builder =
                    new SyncDeltaBuilder();
                builder.Object    = (obuilder.Build());
                builder.DeltaType = (SyncDeltaType.CREATE_OR_UPDATE);
                builder.Token     = (new SyncToken("mytoken"));
                SyncDelta rv = builder.Build();
                if (!handler(rv))
                {
                    break;
                }
            }
        }
コード例 #16
0
        public void PostSyncResults(IRequest request, Feed <FeedEntry> feed)
        {
            SyncResultsHandler handler = new SyncResultsHandler(request);

            handler.LogResults(feed);
        }
コード例 #17
0
 public MsPowerShellSyncResults(ObjectClass objectClass, SyncResultsHandler handler)
 {
     _objectClass = objectClass;
     _handler     = handler;
 }