예제 #1
0
        private ShardedSubcriteriaImpl CreateSubCriteria(ISubcriteriaFactory factory)
        {
            // first build our sharded subcrit
            var subCrit = new ShardedSubcriteriaImpl(shards, parent);

            foreach (IShard shard in shards)
            {
                // see if we already have a concreate Criteria object for each shard
                if (shardToCriteriaMap[shard] != null)
                {
                    // we already have a concreate Criteria for this shard, so create
                    // a subcrit for it using the provided factory
                    factory.CreateSubcriteria(this, shardToEventListMap[shard]);
                }
                else
                {
                    // we do not yet have a concrete Criteria object for this shard
                    // so register an event that will create a proper subcrit when we do
                    ICriteriaEvent subCriteriaEvent = new CreateSubcriteriaEvent(factory,
                                                                                 subCrit.SubcriteriaRegistrar(
                                                                                     shard), shardToCriteriaMap,
                                                                                 shardToEventListMap);
                    shardToEventListMap[shard].Add(subCriteriaEvent);
                }
            }
            return(subCrit);
        }
 public CreateSubcriteriaEvent(ISubcriteriaFactory subCriteriaFactory, ISubcriteriaRegistrar subCriteriaRegistrar,
     IDictionary<IShard, ICriteria> shardToCriteriaMap,
     IDictionary<IShard, IList<ICriteriaEvent>> shardToCriteriaEventListMap)
 {
     this.subcriteriaFactory = subCriteriaFactory;
     this.subCriteriaRegistrar = subCriteriaRegistrar;
     this.shardToCriteriaMap = shardToCriteriaMap;
     this.shardToCriteriaEventListMap = shardToCriteriaEventListMap;
 }
 public CreateSubcriteriaEvent(ISubcriteriaFactory subCriteriaFactory, ISubcriteriaRegistrar subCriteriaRegistrar,
                               IDictionary <IShard, ICriteria> shardToCriteriaMap,
                               IDictionary <IShard, IList <ICriteriaEvent> > shardToCriteriaEventListMap)
 {
     this.subcriteriaFactory          = subCriteriaFactory;
     this.subCriteriaRegistrar        = subCriteriaRegistrar;
     this.shardToCriteriaMap          = shardToCriteriaMap;
     this.shardToCriteriaEventListMap = shardToCriteriaEventListMap;
 }
예제 #4
0
 public void EstablishSubCriteria(ICriteria parentCriteria, ISubcriteriaFactory subcriteriaFactory, IDictionary<IShard, ICriteria> shardToCriteriaMap, IDictionary<IShard, IList<ICriteriaEvent>> shardToCriteriaEventListMap)
 {
     IList<ICriteriaEvent> criteriaEvents = shardToCriteriaEventListMap[shard];
     // create the subcrit with the proper list of events
     ICriteria newCrit = subcriteriaFactory.CreateSubcriteria(parentCriteria, criteriaEvents);
     // clear the list of events
     criteriaEvents.Clear();
     // add it to our map
     shardToCriteriaMap[shard] = newCrit;
 }
예제 #5
0
        public void EstablishSubCriteria(ICriteria parentCriteria, ISubcriteriaFactory subcriteriaFactory, IDictionary <IShard, ICriteria> shardToCriteriaMap, IDictionary <IShard, IList <ICriteriaEvent> > shardToCriteriaEventListMap)
        {
            IList <ICriteriaEvent> criteriaEvents = shardToCriteriaEventListMap[shard];
            // create the subcrit with the proper list of events
            ICriteria newCrit = subcriteriaFactory.CreateSubcriteria(parentCriteria, criteriaEvents);

            // clear the list of events
            criteriaEvents.Clear();
            // add it to our map
            shardToCriteriaMap[shard] = newCrit;
        }
예제 #6
0
        /**
         * Creating sharded subcriteria is tricky.  We need to give the client a
         * reference to a ShardedSubcriteriaImpl (which to the client just looks like
         * a Criteria object).  Then, for each shard where the Criteria has already been
         * established we need to create the actual subcriteria, and for each shard
         * where the Criteria has not yet been established we need to register an
         * event that will create the Subcriteria when the Criteria is established.
         */
        private ShardedSubcriteriaImpl CreateSubcriteria(ISubcriteriaFactory factory)
        {
            var subCrit = new ShardedSubcriteriaImpl(shards, this);

            foreach (IShard shard in shards)
            {
                ICriteria crit = shard.GetCriteriaById(criteriaId);
                if (crit != null)
                {
                    factory.CreateSubcriteria(crit, NoCriteriaEvents);
                }
                else
                {
                    var subCriteriaEvent = new CreateSubcriteriaEvent(factory,
                                                                      subCrit.SubcriteriaRegistrar(
                                                                          shard),
                                                                      subCrit.ShardToCriteriaMap,
                                                                      subCrit.ShardToEventListMap);
                    shard.AddCriteriaEvent(criteriaId, subCriteriaEvent);
                }
            }
            return(subCrit);
        }