Exemplo n.º 1
0
        public async Task SessionReadCycle_Valid()
        {
            using (RedisServer redisServer = new RedisServer())
            {
                string sessionId = ResetRedisConnectionWrapperAndConfiguration();

                // Inserting empty session with "SessionStateActions.InitializeItem" flag into redis server
                RedisSessionStateProvider ssp = new RedisSessionStateProvider();
                await ssp.CreateUninitializedItemAsync(null, sessionId, (int)RedisSessionStateProvider.configuration.SessionTimeout.TotalMinutes, CancellationToken.None);

                // Get write lock and session from cache
                GetItemResult data = await ssp.GetItemAsync(null, sessionId, CancellationToken.None);

                // Get actual connection and varify lock and session timeout
                IDatabase actualConnection = GetRealRedisConnection();
                Assert.True(actualConnection.StringGet(ssp.cache.Keys.LockKey).IsNull);
                Assert.Equal(((int)RedisSessionStateProvider.configuration.SessionTimeout.TotalSeconds).ToString(), actualConnection.HashGet(ssp.cache.Keys.InternalKey, "SessionTimeout").ToString());

                // reset sessions timoue
                await ssp.ResetItemTimeoutAsync(null, sessionId, CancellationToken.None);

                // End request
                await ssp.EndRequestAsync(null);

                // remove data and lock from redis
                DisposeRedisConnectionWrapper();
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// This helper retrieves a projection of the first item of a sequence which satisfies a predicate.
        /// </summary>
        /// <typeparam name="TSource">The type of items inside the source sequence</typeparam>
        /// <typeparam name="TResult">The type of the projection being retrieved from the sequence</typeparam>
        /// <param name="source">The source from which the projection is retrieved</param>
        /// <param name="predicate">The predicate that must be satisfied</param>
        /// <param name="projector"></param>
        /// <returns>The result of the get operation being performed</returns>
        public static GetItemResult <TResult> GetFirst <TSource, TResult>(
            IEnumerable <TSource> source,
            Func <TSource, bool> predicate,
            Func <TSource, TResult> projector)
        {
            if (source == null)
            {
                throw new ArgumentNullException(nameof(source));
            }

            if (predicate == null)
            {
                throw new ArgumentNullException(nameof(predicate));
            }

            if (projector == null)
            {
                throw new ArgumentNullException(nameof(projector));
            }

            var firstMatch = source.FirstOrDefault(predicate);

            var notFound = EqualityComparer <TSource> .Default.Equals(firstMatch, default(TSource));

            if (notFound)
            {
                return(GetItemResult <TResult> .CreateForItemNotFound());
            }

            var projection = projector(firstMatch);

            return(GetItemResult <TResult> .CreateForItemFound(projection));
        }
        public async Task GetItem_RecordLocked()
        {
            Utility.SetConfigUtilityToDefault();
            string              id = "session-id";
            bool                locked;
            TimeSpan            lockAge;
            object              lockId = null;
            SessionStateActions actions;

            object mockLockId = 0;
            ISessionStateItemCollection sessionData = null;
            int sessionTimeout;
            var mockCache = A.Fake <ICacheConnection>();

            A.CallTo(() => mockCache.TryCheckWriteLockAndGetData(out mockLockId, out sessionData, out sessionTimeout)).Returns(false);
            A.CallTo(() => mockCache.GetLockAge(A <object> .Ignored)).Returns(TimeSpan.Zero);

            RedisSessionStateProvider sessionStateStore = new RedisSessionStateProvider();

            sessionStateStore.cache = mockCache;
            SessionStateStoreData sessionStateStoreData;

            GetItemResult data = await sessionStateStore.GetItemAsync(null, id, CancellationToken.None);

            sessionStateStoreData = data.Item;
            locked  = data.Locked;
            lockAge = data.LockAge;
            lockId  = data.LockId;
            actions = data.Actions;
            A.CallTo(() => mockCache.TryCheckWriteLockAndGetData(out mockLockId, out sessionData, out sessionTimeout)).MustHaveHappened();
            A.CallTo(() => mockCache.GetLockAge(A <object> .Ignored)).MustHaveHappened();

            Assert.Null(sessionStateStoreData);
            Assert.True(locked);
        }
        public async Task <GetPointResult> GetPointAsync(GetPointRequest getPointRequest, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (getPointRequest == null)
            {
                throw new ArgumentNullException("getPointRequest");
            }
            var geohash = S2Manager.GenerateGeohash(getPointRequest.GeoPoint);
            var hashKey = S2Manager.GenerateHashKey(geohash, _config.HashKeyLength);

            var getItemRequest = getPointRequest.GetItemRequest;

            getItemRequest.TableName = _config.TableName;

            var hashKeyValue = new AttributeValue
            {
                N = hashKey.ToString(CultureInfo.InvariantCulture)
            };

            getItemRequest.Key[_config.HashKeyAttributeName]  = hashKeyValue;
            getItemRequest.Key[_config.RangeKeyAttributeName] = getPointRequest.RangeKeyValue;

            GetItemResult getItemResult = await _config.DynamoDBClient.GetItemAsync(getItemRequest, cancellationToken).ConfigureAwait(false);

            var getPointResult = new GetPointResult(getItemResult);

            return(getPointResult);
        }
 public GetPointResult(GetItemResult getItemResult)
 {
     if (getItemResult == null)
     {
         throw new ArgumentNullException("getItemResult");
     }
     GetItemResult = getItemResult;
 }
Exemplo n.º 6
0
 private Task <GetItemResult> SanitizeSessionByVersion(
     HttpContextBase context,
     string id,
     GetItemResult result,
     bool isResultExclusivelyLocked,
     CancellationToken cancellationToken)
 {
     return(versionCheckInterceptor.SanitizeSessionByVersion(context, id, result, isResultExclusivelyLocked, cancellationToken));
 }
        public void CreateForItemFound_Creates_Instance_For_Successful_Get_Operation()
        {
            // ACT
            var result = GetItemResult <string> .CreateForItemFound("my string");

            // ASSERT
            Assert.IsNotNull(result);
            Assert.IsTrue(result.Found);
            Assert.AreEqual("my string", result.Item);
        }
        public void CreateForItemNotFound_Creates_Instance_For_Failed_Get_Operation()
        {
            // ACT
            var result = GetItemResult <string> .CreateForItemNotFound();

            // ASSERT
            Assert.IsNotNull(result);
            Assert.IsFalse(result.Found);
            Assert.IsNull(result.Item);
        }
Exemplo n.º 9
0
        public async Task <GetItemResult> SanitizeSessionByVersion(
            HttpContextBase context,
            string id,
            GetItemResult result,
            bool isResultExclusivelyLocked,
            CancellationToken cancellationToken)
        {
            var sessionData = result.Item?.Items;

            if (sessionData == null)
            {
                return(result);
            }

            if (IsSessionVersionValid(sessionData))
            {
                return(result);
            }

            if (!isResultExclusivelyLocked)
            {
                var result2 = await sessionStateStoreProvider.GetItemExclusiveAsync(context, id, cancellationToken)
                              .ConfigureAwait(false);

                if (result2.Locked)
                {
                    return(result);
                }

                result      = result2;
                sessionData = result2.Item.Items;
            }

            sessionData.Clear();

            // We need to call store and get (cleared) session data from Redis session stored
            // so that sessionData.Dirty == false.
            // Otherwise, Microsoft.AspNet.SessionState.SessionStateModuleAsync::InitStateStoreItem(bool addToContext)
            // will clear a dirty flag and we loose information about
            // the need to clear session data at the end of HTTP request
            await sessionStateStoreProvider.SetAndReleaseItemExclusiveAsync(context, id, result.Item, result.LockId, false, cancellationToken)
            .ConfigureAwait(false);

            if (isResultExclusivelyLocked)
            {
                return(await sessionStateStoreProvider.GetItemExclusiveAsync(context, id, cancellationToken)
                       .ConfigureAwait(false));
            }
            else
            {
                return(await sessionStateStoreProvider.GetItemAsync(context, id, cancellationToken)
                       .ConfigureAwait(false));
            }
        }
        protected virtual async Task <GetItemResult <T> > GetMessageProperty <T>(Ideas.Shared.ServiceBus.Message message, string propertyName, bool allowNull = false)
        {
            if (message == null)
            {
                throw new ArgumentNullException("msg");
            }

            var result = new GetItemResult <T>();

            if (!message.MessageProperties.ContainsKey(propertyName))
            {
                string errorMessage = $"{ propertyName } not found in message";
                result.SetMessageDeadLettered(errorMessage);
                await _messageReceiver.DeadLetterAsync(message.LockToken, errorMessage);
            }
            else
            {
                object propertyObj = message.MessageProperties[propertyName];
                if (propertyObj == null)
                {
                    if (!allowNull)
                    {
                        string errorMessage = $"{ propertyName } was null";
                        _logger.Error("{PropertyName} was empty in Service Bus message", propertyName);
                        result.SetMessageDeadLettered(errorMessage);
                        await _messageReceiver.DeadLetterAsync(message.LockToken, errorMessage);
                    }
                    // else return null (or default) and don't dead letter
                }
                else
                {
                    try
                    {
                        result.Item = (T)propertyObj;
                    }
                    catch (Exception)
                    {
                        string errorMessage = $"{ propertyName } was not of type { typeof(T).FullName }";
                        _logger.Error("{PropertyName} had value {Value}, which was not of the expected type '{Type}", propertyName, propertyObj, typeof(T).FullName);
                        result.SetMessageDeadLettered(errorMessage);
                        await _messageReceiver.DeadLetterAsync(message.LockToken, errorMessage);
                    }
                }
            }

            return(result);
        }
Exemplo n.º 11
0
        public GetItemResult <WalletBM> SetupFakeService(bool success)
        {
            GetItemResult <WalletBM> bm = new GetItemResult <WalletBM>();

            if (success)
            {
                bm.Result = GetResultEnum.Success;
                bm.Item   = new WalletBM();
            }
            else
            {
                bm.Result = GetResultEnum.Error;
                bm.Error  = new System.Exception();
            }

            return(bm);
        }
        public async Task GetItemExclusive_RecordFound()
        {
            Utility.SetConfigUtilityToDefault();
            string              id = "session-id";
            bool                locked;
            TimeSpan            lockAge;
            object              lockId = null;
            SessionStateActions actions;

            ISessionStateItemCollection sessionStateItemCollection = Utility.GetChangeTrackingSessionStateItemCollection();

            sessionStateItemCollection["session-key"] = "session-value";
            SessionStateStoreData sssd = new SessionStateStoreData(sessionStateItemCollection, null, 15);

            ISessionStateItemCollection sessionData = Utility.GetChangeTrackingSessionStateItemCollection();

            sessionData["session-key"] = "session-value";

            ISessionStateItemCollection mockSessionData = null;
            object mockLockId = 0;
            int    mockSessionTimeout;
            int    sessionTimeout = (int)RedisSessionStateProvider.configuration.SessionTimeout.TotalMinutes;
            var    mockCache      = A.Fake <ICacheConnection>();

            A.CallTo(() => mockCache.TryTakeWriteLockAndGetData(A <DateTime> .Ignored, 90, out mockLockId, out mockSessionData, out mockSessionTimeout)).Returns(true).AssignsOutAndRefParameters(0, sessionData, (int)RedisSessionStateProvider.configuration.SessionTimeout.TotalMinutes);

            RedisSessionStateProvider sessionStateStore = new RedisSessionStateProvider();

            sessionStateStore.cache = mockCache;
            SessionStateStoreData sessionStateStoreData;

            GetItemResult data = await sessionStateStore.GetItemExclusiveAsync(null, id, CancellationToken.None);

            sessionStateStoreData = data.Item;
            locked  = data.Locked;
            lockAge = data.LockAge;
            lockId  = data.LockId;
            actions = data.Actions;

            A.CallTo(() => mockCache.TryTakeWriteLockAndGetData(A <DateTime> .Ignored, 90, out mockLockId, out sessionData, out sessionTimeout)).MustHaveHappened();

            Assert.True(Utility.CompareSessionStateStoreData(sessionStateStoreData, sssd));
            Assert.False(locked);
            Assert.Equal(TimeSpan.Zero, lockAge);
            Assert.Equal(SessionStateActions.None, actions);
        }
Exemplo n.º 13
0
        public async Task SessionTimoutChangeFromGlobalAspx()
        {
            using (RedisServer redisServer = new RedisServer())
            {
                string sessionId = ResetRedisConnectionWrapperAndConfiguration();

                // Inserting empty session with "SessionStateActions.InitializeItem" flag into redis server
                RedisSessionStateProvider ssp = new RedisSessionStateProvider();
                await ssp.CreateUninitializedItemAsync(null, sessionId, (int)RedisSessionStateProvider.configuration.SessionTimeout.TotalMinutes, CancellationToken.None);

                // Get write lock and session from cache
                GetItemResult data = await ssp.GetItemExclusiveAsync(null, sessionId, CancellationToken.None);

                // Get actual connection and varify lock and session timeout
                IDatabase actualConnection = GetRealRedisConnection();
                Assert.Equal(data.LockId.ToString(), actualConnection.StringGet(ssp.cache.Keys.LockKey).ToString());
                Assert.Equal(((int)RedisSessionStateProvider.configuration.SessionTimeout.TotalSeconds).ToString(), actualConnection.HashGet(ssp.cache.Keys.InternalKey, "SessionTimeout").ToString());

                // setting data as done by any normal session operation
                data.Item.Items["key"] = "value";
                data.Item.Timeout      = 5;

                // session update
                await ssp.SetAndReleaseItemExclusiveAsync(null, sessionId, data.Item, data.LockId, false, CancellationToken.None);

                Assert.Single(actualConnection.HashGetAll(ssp.cache.Keys.DataKey));
                Assert.Equal("300", actualConnection.HashGet(ssp.cache.Keys.InternalKey, "SessionTimeout").ToString());

                // reset sessions timoue
                await ssp.ResetItemTimeoutAsync(null, sessionId, CancellationToken.None);

                // End request
                await ssp.EndRequestAsync(null);

                // Verify that GetItemExclusive returns timeout from redis
                GetItemResult data_1 = await ssp.GetItemExclusiveAsync(null, sessionId, CancellationToken.None);

                Assert.Equal(5, data.Item.Timeout);

                // remove data and lock from redis
                DisposeRedisConnectionWrapper();
            }
        }
Exemplo n.º 14
0
        protected virtual async Task <GetItemResult <ClaimsPrincipal> > GetMessageOwner(Message message)
        {
            if (message == null)
            {
                throw new ArgumentNullException("msg");
            }

            var ownerClaimsResult = await GetMessageString(message, propertyName : "OwnerClaims");

            var result = new GetItemResult <ClaimsPrincipal>();

            if (ownerClaimsResult.WasMessageDeadLettered)
            {
                result.SetMessageDeadLettered(ownerClaimsResult.Errors.FirstOrDefault());
            }
            else
            {
                try
                {
                    result.Item = CreatePrincipal(ownerClaimsResult.Item);
                    _logger.Information("Message owner is {UserName} with email {Email}", result?.Item?.Identity?.Name, result?.Item?.GetEmail());
                }
                catch (Exception err)
                {
                    string errorMessage = $"Unable to get Owner from token { ownerClaimsResult.Item }: { err.Message }";
                    _logger.Error(err, "Unable to get Owner from token {Token}: {ErrorMessage}", ownerClaimsResult.Item, err.Message);
                    result.SetMessageDeadLettered(errorMessage);
                    await _messageReceiver.DeadLetterAsync(message.LockToken, errorMessage);
                }
            }

            // last fail safe
            if (!result.WasMessageDeadLettered && result.Item == null)
            {
                string errorMessage = $"Unable to get Owner, reason unknown";
                _logger.Error(errorMessage);
                result.SetMessageDeadLettered(errorMessage);
                await _messageReceiver.DeadLetterAsync(message.LockToken, errorMessage);
            }

            return(result);
        }
Exemplo n.º 15
0
        protected virtual async Task <GetItemResult <Initiative> > GetMessageInitiative(Message message, ClaimsPrincipal owner = null)
        {
            if (message == null)
            {
                throw new ArgumentNullException("msg");
            }

            var initiativeIdResult = await GetMessageProperty <int>(message, propertyName : "InitiativeId");

            var result = new GetItemResult <Initiative>();

            if (initiativeIdResult.WasMessageDeadLettered)
            {
                result.SetMessageDeadLettered(initiativeIdResult.Errors.FirstOrDefault());
            }
            else
            {
                try
                {
                    _logger.Information("Message is for initiative {InitiativeId}, retrieving initiative...", initiativeIdResult.Item);

                    // if the remote repositoty factory is populated, we'll use that,
                    // otherwise we'll just use the default
                    var ideaRepository = GetInitiativeRepository(owner);

                    result.Item = await ideaRepository.GetInitiativeAsync(initiativeIdResult.Item);

                    _logger.Information("Retrieved initiative {InitiativeId}, has title '{Title}'", initiativeIdResult.Item, result?.Item?.Title);
                }
                catch (Exception err)
                {
                    string errorMessage = $"Unable to get Initiative { initiativeIdResult.Item }: { err.Message }";
                    _logger.Error(err, "Unable to get Initiative {InitiativeId}: {ErrorMessage}", initiativeIdResult.Item, err.Message);
                    result.SetMessageDeadLettered(errorMessage);
                    await _messageReceiver.DeadLetterAsync(message.LockToken, errorMessage);
                }
            }

            return(result);
        }
        public async Task GetItem_NullFromStore()
        {
            Utility.SetConfigUtilityToDefault();
            string              id = "session-id";
            bool                locked;
            TimeSpan            lockAge;
            object              lockId = null;
            SessionStateActions actions;

            object mockLockId = 0;
            ISessionStateItemCollection sessionData = null;
            int sessionTimeout;
            var mockCache = A.Fake <ICacheConnection>();

            A.CallTo(() => mockCache.TryCheckWriteLockAndGetData(out mockLockId, out sessionData, out sessionTimeout)).Returns(true);

            RedisSessionStateProvider sessionStateStore = new Oriflame.Web.Redis.RedisSessionStateProvider();

            sessionStateStore.cache = mockCache;

            SessionStateStoreData sessionStateStoreData = null;
            GetItemResult         data = await sessionStateStore.GetItemAsync(FakeHttpContext, id, CancellationToken.None);

            sessionStateStoreData = data.Item;
            locked  = data.Locked;
            lockAge = data.LockAge;
            lockId  = data.LockId;
            actions = data.Actions;
            A.CallTo(() => mockCache.TryCheckWriteLockAndGetData(out mockLockId, out sessionData, out sessionTimeout)).MustHaveHappened();
            A.CallTo(() => mockCache.TryReleaseLockIfLockIdMatch(mockLockId, A <int> .Ignored)).MustHaveHappened();

            Assert.Equal(null, sessionStateStoreData);
            Assert.Equal(false, locked);
            Assert.Equal(TimeSpan.Zero, lockAge);
            Assert.Equal(0, lockId);
        }
Exemplo n.º 17
0
        static void Main(string[] args)
        {
            RastijaServiceClient client = new RastijaServiceClient();

            List <string> sounds = new List <string>(), pictures = new List <string>();

            //using (System.IO.StreamWriter file = new StreamWriter(@"C:\Users\Mykolas\Downloads\LieposNaujazodziai\LieposNaujazodziai.csv"))
            using (System.IO.StreamWriter file = new StreamWriter(@"C:\Users\Mykolas\Downloads\LieposNaujazodziai\LieposNaujazodziai.owl"))
            {
                //file.WriteLine(@"ID, Key, Sarasine_forma, Pagrindine_forma, Antra_forma, Trecia_forma, Pagrindines_formos_garso_failas, Antros_formos_garso_failas, Trecios_formos_garso_failas, Rusis, Kalbos_dalis_1, Kalbos_dalis_2, Kirciuote, Kilme, Originali_forma, Giminiski_zodziai, Giminiski_zodziai_id, Papildoma_informacija, Reiksmes, Pastabos_vartotojams, Vartosenos_pavyzdziai, Vartojimo_sritys, Sasajos, Sasajos_id, Variantai, Variantai_id");
                file.WriteLine(LieposNaujazodziai.Properties.Resources.OWL_beginning);

                // xmlId => <term, hash>
                //Dictionary<ushort, Tuple<string, string>> allWords = client.GetList(null).Select(nr => client.GetItem(nr.XmlId)).Where(gir => gir.Count > 0).Select(gir => gir[0]).ToDictionary(n => n.Zodzio_id, n => Tuple.Create(n.Sarasine_forma, GetMD5(n.Zodzio_id.ToString()).Substring(0, 25)));
                NaujazodisRastija[]   naujazodziai = client.GetList(null);
                Dictionary <int, int> xmlIds       = naujazodziai.ToDictionary(nr => nr.Id, nr => nr.XmlId);

                foreach (NaujazodisRastija z in naujazodziai)
                {
                    GetItemResult zodis = client.GetItem(z.XmlId);
                    if (zodis.Count == 0)
                    {
                        continue;
                    }
                    Naujazodis n = zodis[0];


                    string key = GetKey(z.XmlId);                                                             // GetMD5(z.XmlId.ToString()).Substring(0, 25);//http://www.rastija.lt/isteklius#zodynas.Lietuvių_kalbos_naujažodžių_tartuvas.Resource
                    string dictionary = "Liepos-tartuvas", resource = "Lietuvių_kalbos_naujažodžių_tartuvas"; //"tartuvas";
                    string commentPattern             = "<!-- http://www.lexinfo.net/lmf#{0}/{1}-{2}-{3} --> ";
                    string namedIndividualOpenPattern = @"<owl:NamedIndividual rdf:about=""&lmf;{0}/{1}-{2}-{3}""> ";
                    string namedIndividualClose       = "</owl:NamedIndividual>";
                    string rdftypePattern             = @"<rdf:type rdf:resource=""&lmf;{0}""/> ";
                    string senseRelationTypePattern   = "<type>{0}</type>";
                    string labelPattern               = TagPattern("rdfs:label", "{0}");
                    string className;

                    string term = RemoveSuffixes(n.Sarasine_forma);//(n.Sarasine_forma.Contains(',') ? n.Sarasine_forma.Substring(0, n.Sarasine_forma.IndexOf(',')) : n.Sarasine_forma).Trim();


                    // ----------------------------------------
                    // ------------ LexicalEntry --------------
                    className = "LexicalEntry";
                    file.Write(commentPattern, dictionary, term, key, className.ToLower());
                    file.Write(namedIndividualOpenPattern, dictionary, term, key, className.ToLower());
                    file.Write(rdftypePattern, className);
                    //file.Write(@"<j.1:lexicon rdf:resource=""http://www.rastija.lt/isteklius#Resource.{0}""/>", resource);
                    file.Write(@"<j.1:lexicon rdf:resource=""http://www.rastija.lt/isteklius#zodynas.{0}.Resource""/>", resource);
                    file.Write(labelPattern, term);
                    file.Write(TagPattern("partOfSpeech", n.Kalbos_dalis_1));
                    for (int j = 1; j <= n.Reiksmes.Count; ++j)
                    {
                        file.Write(HasClassPattern("Sense", dictionary, term, key, j == 1 ? "" : j.ToString()));
                    }
                    file.Write(HasClassPattern("Lemma", dictionary, term, key));
                    file.Write(HasClassPattern("WordForm", dictionary, term, key));
                    file.WriteLine(namedIndividualClose);

                    // <note, rank>
                    List <string> notes = new List <string>();
                    // <related term, rank, related term id>
                    List <Tuple <string, int, int?> > relations = new List <Tuple <string, int, int?> >();
                    // <variant term, rank, variant term id>
                    List <Tuple <string, int, int?> > variants = new List <Tuple <string, int, int?> >();
                    // <example, rank>
                    List <Tuple <string, int> > examples = new List <Tuple <string, int> >();

                    for (int r = 0; r < n.Reiksmes.Count; ++r)
                    {
                        if (n.Reiksmes[r].Pastabos_vartotojams != null && n.Reiksmes[r].Pastabos_vartotojams.Length > 0)
                        {
                            notes.Add(n.Reiksmes[r].Pastabos_vartotojams);
                        }
                        //int t1 = 0, t2 = 0;
                        //if (n.Reiksmes[r].Reiksmes_sasajos != null)
                        //    relations.AddRange(n.Reiksmes[r].Reiksmes_sasajos.Select(rs => Tuple.Create(rs.Sasajos_zodzio_tekstas, ++t1, (int?)rs.Sasajos_zodzio_id)));
                        //if (n.Reiksmes[r].Reiksmes_variantai != null)
                        //    variants.AddRange(n.Reiksmes[r].Reiksmes_variantai.Select(rv => Tuple.Create(rv.Varianto_zodzio_tekstas, ++t2, (int?)rv.Varianto_zodzio_id)));

                        // ----------------------------------------
                        // ---------------- Sense -----------------
                        className = "Sense";
                        file.Write(commentPattern, dictionary, term, key, className.ToLower() + (r == 0 ? "" : (r + 1).ToString()));
                        //file.Write("\t");
                        file.Write(namedIndividualOpenPattern, dictionary, term, key, className.ToLower() + (r == 0 ? "" : (r + 1).ToString()));
                        file.Write(labelPattern, term + "-" + className.ToLower());
                        file.Write(rdftypePattern, className);
                        file.Write(HasClassPattern("SubjectField", dictionary, term, key));
                        file.Write(HasClassPattern("Definition", dictionary, term, key, r == 0 ? "" : (r + 1).ToString()));
                        if (n.Giminiski_zodziai != null)
                        {
                            for (int j = 0; j < n.Giminiski_zodziai.Count; ++j)
                            {
                                file.Write(HasClassPattern("SenseRelation", dictionary, term, key, "-gim-" + (j + 1)));
                            }
                        }
                        if (n.Reiksmes[r].Pastabos_vartotojams != null && n.Reiksmes[r].Pastabos_vartotojams.Length > 0)
                        {
                            file.Write(HasClassPattern("SenseRelation", dictionary, term, key, "-pas-" + notes.Count));
                        }
                        if (n.Reiksmes[r].Reiksmes_sasajos != null)
                        {
                            for (int j = 0; j < n.Reiksmes[r].Reiksmes_sasajos.Count; ++j)
                            {
                                // FIXIT: Galbūt WrittenForm turėtų būt su siffx'u?
                                relations.Add(Tuple.Create(RemoveSuffixes(n.Reiksmes[r].Reiksmes_sasajos[j].Sasajos_zodzio_tekstas), j + 1, (int?)n.Reiksmes[r].Reiksmes_sasajos[j].Sasajos_zodzio_id));
                                file.Write(HasClassPattern("SenseRelation", dictionary, term, key, "-sąs-" + relations.Count));
                            }
                        }
                        if (n.Reiksmes[r].Reiksmes_variantai != null)
                        {
                            for (int j = 0; j < n.Reiksmes[r].Reiksmes_variantai.Count; ++j)
                            {
                                variants.Add(Tuple.Create(RemoveSuffixes(n.Reiksmes[r].Reiksmes_variantai[j].Varianto_zodzio_tekstas), j + 1, (int?)n.Reiksmes[r].Reiksmes_variantai[j].Varianto_zodzio_id));
                                file.Write(HasClassPattern("SenseRelation", dictionary, term, key, "-kit-" + variants.Count));
                            }
                        }
                        int t = 0;
                        if (n.Reiksmes[r].Naujazodzio_vartosenos_pavyzdziai != null && n.Reiksmes[r].Naujazodzio_vartosenos_pavyzdziai.Length > 0)
                        {
                            foreach (string example in n.Reiksmes[r].Naujazodzio_vartosenos_pavyzdziai.Split(new string[] { "<br />" }, StringSplitOptions.RemoveEmptyEntries))
                            {
                                string p = example;
                                Match  m;
                                while ((m = Regex.Match(p, @"#\d+\[([^\]]+)\]")).Success)
                                {
                                    p = p.Remove(m.Index, m.Length).Insert(m.Index, m.Groups[1].Value);
                                }
                                examples.Add(Tuple.Create(p.Trim().Replace("<strong>", "<b>").Replace("</strong>", "</b>"), ++t));
                                file.Write(HasClassPattern("SenseExample", dictionary, term, key, "-" + examples.Count));
                            }
                        }
                        file.WriteLine(namedIndividualClose);

                        // ----------------------------------------
                        // ------------- Definition ---------------
                        className = "Definition";
                        file.Write(commentPattern, dictionary, term, key, className.ToLower() + (r == 0 ? "" : (r + 1).ToString()));
                        //file.Write("\t\t");
                        file.Write(namedIndividualOpenPattern, dictionary, term, key, className.ToLower() + (r == 0 ? "" : (r + 1).ToString()));
                        file.Write(labelPattern, CData(n.Reiksmes[r].Reiksmes_apibreztis));
                        file.Write(rdftypePattern, className);
                        file.Write(HasClassPattern("TextRepresentation", dictionary, term, key, r == 0 ? "" : (r + 1).ToString()));
                        file.WriteLine(namedIndividualClose);

                        // ----------------------------------------
                        // --------- TextRepresentation -----------
                        className = "TextRepresentation";
                        file.Write(commentPattern, dictionary, term, key, className.ToLower() + (r == 0 ? "" : (r + 1).ToString()));
                        //file.Write("\t\t\t");
                        file.Write(namedIndividualOpenPattern, dictionary, term, key, className.ToLower() + (r == 0 ? "" : (r + 1).ToString()));
                        file.Write(labelPattern, CData(n.Reiksmes[r].Reiksmes_apibreztis));
                        file.Write(rdftypePattern, className);
                        file.Write(TagPattern("writtenForm", CData(n.Reiksmes[r].Reiksmes_apibreztis + (n.Reiksmes[r].Vaizdo_failas == null ? "" : string.Format(@"<img src=""{0}"" alt=""{1}"" width=""238"" />", n.Reiksmes[r].Vaizdo_failas, n.Reiksmes[r].Tekstas_vaizdui)))));
                        file.WriteLine(namedIndividualClose);
                    }

                    // ----------------------------------------
                    // ------------ SenseRelation -------------
                    // ----------- Giminiškas žodis -----------
                    className = "SenseRelation";
                    if (n.Giminiski_zodziai != null)
                    {
                        for (int j = 0; j < n.Giminiski_zodziai.Count; ++j)
                        {
                            file.Write(commentPattern, dictionary, term, key, className.ToLower() + "-gim-" + (j + 1).ToString());
                            //file.Write("\t");
                            file.Write(namedIndividualOpenPattern, dictionary, term, key, className.ToLower() + "-gim-" + (j + 1).ToString());
                            // FIXIT: Galbūt WrittenForm turėtų būt su siffx'u?
                            file.Write(labelPattern, RemoveSuffixes(n.Giminiski_zodziai[j].Giminisko_zodzio_tekstas).ToLower());
                            file.Write(rdftypePattern, className);
                            file.Write(senseRelationTypePattern, "Giminiškas žodis");
                            file.Write(TagPattern("writtenForm", RemoveSuffixes(n.Giminiski_zodziai[j].Giminisko_zodzio_tekstas)));
                            file.Write(TagPattern("rank", (j + 1).ToString()));
                            if (n.Giminiski_zodziai[j].Giminisko_zodzio_id != null && xmlIds.ContainsKey((int)n.Giminiski_zodziai[j].Giminisko_zodzio_id))
                            {
                                file.Write(SenseRelatedTo(dictionary, RemoveSuffixes(n.Giminiski_zodziai[j].Giminisko_zodzio_tekstas), xmlIds[(int)n.Giminiski_zodziai[j].Giminisko_zodzio_id]));
                            }
                            file.WriteLine(namedIndividualClose);
                        }
                    }
                    // --------------- Pastabos ---------------
                    for (int j = 0; j < notes.Count; ++j)
                    {
                        file.Write(commentPattern, dictionary, term, key, className.ToLower() + "-pas-" + (j + 1).ToString());
                        //file.Write("\t");
                        file.Write(namedIndividualOpenPattern, dictionary, term, key, className.ToLower() + "-pas-" + (j + 1).ToString());
                        file.Write(labelPattern, CData(notes[j]));
                        file.Write(rdftypePattern, className);
                        file.Write(senseRelationTypePattern, "Pastabos");
                        file.Write(TagPattern("writtenForm", CData(notes[j])));
                        file.WriteLine(namedIndividualClose);
                    }
                    // --------------- Sąsajos ----------------
                    for (int j = 0; j < relations.Count; ++j)
                    {
                        file.Write(commentPattern, dictionary, term, key, className.ToLower() + "-sąs-" + (j + 1).ToString());
                        //file.Write("\t");
                        file.Write(namedIndividualOpenPattern, dictionary, term, key, className.ToLower() + "-sąs-" + (j + 1).ToString());
                        file.Write(labelPattern, relations[j].Item1.ToLower());
                        file.Write(rdftypePattern, className);
                        file.Write(senseRelationTypePattern, "Sąsaja");
                        file.Write(TagPattern("writtenForm", relations[j].Item1));
                        file.Write(TagPattern("rank", relations[j].Item2.ToString()));
                        if (relations[j].Item3 != null && xmlIds.ContainsKey((int)relations[j].Item3))
                        {
                            file.Write(SenseRelatedTo(dictionary, relations[j].Item1, xmlIds[(int)relations[j].Item3]));
                        }
                        file.WriteLine(namedIndividualClose);
                    }
                    // -------------- Variantai ---------------
                    for (int j = 0; j < variants.Count; ++j)
                    {
                        file.Write(commentPattern, dictionary, term, key, className.ToLower() + "-kit-" + (j + 1).ToString());
                        //file.Write("\t");
                        file.Write(namedIndividualOpenPattern, dictionary, term, key, className.ToLower() + "-kit-" + (j + 1).ToString());
                        file.Write(labelPattern, variants[j].Item1.ToLower());
                        file.Write(rdftypePattern, className);
                        file.Write(senseRelationTypePattern, "Kitas variantas");
                        file.Write(TagPattern("writtenForm", variants[j].Item1));
                        file.Write(TagPattern("rank", variants[j].Item2.ToString()));
                        if (variants[j].Item3 != null && xmlIds.ContainsKey((int)variants[j].Item3))
                        {
                            file.Write(SenseRelatedTo(dictionary, variants[j].Item1, xmlIds[(int)variants[j].Item3]));
                        }
                        file.WriteLine(namedIndividualClose);
                    }

                    // ----------------------------------------
                    // ------------- SenseExample -------------
                    className = "SenseExample";
                    for (int j = 0; j < examples.Count; ++j)
                    {
                        file.Write(commentPattern, dictionary, term, key, className.ToLower() + "-" + (j + 1).ToString());
                        //file.Write("\t");
                        file.Write(namedIndividualOpenPattern, dictionary, term, key, className.ToLower() + "-" + (j + 1).ToString());
                        file.Write(labelPattern, CData(examples[j].Item1));
                        file.Write(rdftypePattern, className);
                        file.Write(TagPattern("text", CData(examples[j].Item1)));
                        file.Write(TagPattern("rank", examples[j].Item2.ToString()));
                        file.WriteLine(namedIndividualClose);
                    }

                    // ----------------------------------------
                    // ------------ SubjectField --------------
                    className = "SubjectField";
                    file.Write(commentPattern, dictionary, term, key, className.ToLower());
                    //file.Write("\t\t");
                    file.Write(namedIndividualOpenPattern, dictionary, term, key, className.ToLower());
                    file.Write(labelPattern, n.Rusis);
                    file.Write(rdftypePattern, className);
                    file.Write(TagPattern("status", n.Rusis));
                    file.WriteLine(namedIndividualClose);

                    // ----------------------------------------
                    // ---------------- Lemma -----------------
                    className = "Lemma";
                    file.Write(commentPattern, dictionary, term, key, className.ToLower());
                    //file.Write("\t");
                    file.Write(namedIndividualOpenPattern, dictionary, term, key, className.ToLower());
                    file.Write(labelPattern, term + "-" + className.ToLower());
                    file.Write(rdftypePattern, className);
                    file.Write(TagPattern("writtenForm", term));
                    file.Write(TagPattern("accented_term", n.Pagrindine_forma));
                    if (n.Reiksmes.Any(r => r.Reiksmes_vartojimo_sritys.Count > 0))
                    {
                        file.Write(TagPattern("scope", String.Join(", ", n.Reiksmes.SelectMany(r => r.Reiksmes_vartojimo_sritys).Distinct())));
                    }
                    if (!string.IsNullOrEmpty(n.Kilme) || !string.IsNullOrEmpty(n.Originali_forma))
                    {
                        file.Write(TagPattern("origin", CData(n.Kilme + (!string.IsNullOrEmpty(n.Kilme) && !string.IsNullOrEmpty(n.Originali_forma) ? ", " : "") + n.Originali_forma)));
                    }
                    if (!string.IsNullOrEmpty(n.Papildoma_informacija))
                    {
                        file.Write(TagPattern("comment", CData(n.Papildoma_informacija)));
                    }
                    file.WriteLine(namedIndividualClose);

                    // ----------------------------------------
                    // -------------- WordForm ----------------
                    className = "WordForm";
                    file.Write(commentPattern, dictionary, term, key, className.ToLower());
                    //file.Write("\t");
                    file.Write(namedIndividualOpenPattern, dictionary, term, key, className.ToLower());
                    file.Write(labelPattern, term + "-" + className.ToLower());
                    file.Write(rdftypePattern, className);
                    if (!string.IsNullOrEmpty(n.Kirciuote))
                    {
                        file.Write(TagPattern("accentuation", CData(n.Kirciuote)));
                    }
                    if (!string.IsNullOrEmpty(n.Pagrindines_formos_garso_failas))
                    {
                        file.Write(TagPattern("sound", n.Pagrindines_formos_garso_failas.Replace("http://naujazodziai.lki.lt/garsai/", "https://www.xn--ratija-ckb.lt/dictionaries_media/lietuviu_kalbos_naujazodziu_tartuvas/")));
                    }
                    file.WriteLine(namedIndividualClose);

                    //*/
                    continue;



                    List <string> row = new List <string>();
                    //row.Add(n.Zodzio_id.ToString());
                    //row.Add(GetMD5(z.XmlId.ToString()).Substring(0, 25));
                    //row.Add(n.Sarasine_forma);
                    //row.Add(n.Pagrindine_forma);
                    //row.Add(n.Antra_forma);       // Nenaudojama
                    //row.Add(n.Trecia_forma);      // Nenaudojama
                    //row.Add(n.Pagrindines_formos_garso_failas);
                    //row.Add(n.Antros_formos_garso_failas);        // Nenaudojama
                    //row.Add(n.Trecios_formos_garso_failas);       // Nenaudojama
                    //row.Add(n.Rusis);
                    //row.Add(n.Kalbos_dalis_1);
                    //row.Add(n.Kalbos_dalis_2);      // Nera
                    //row.Add(n.Kirciuote);
                    //row.Add(n.Kilme);
                    //row.Add(n.Originali_forma);
                    //row.Add(n.Giminiski_zodziai == null ? "" : String.Join(";;", n.Giminiski_zodziai.Select(g => g.Giminisko_zodzio_tekstas)));
                    //row.Add(n.Giminiski_zodziai == null ? "" : String.Join(";;", n.Giminiski_zodziai.Select(g => g.Giminisko_zodzio_id)));
                    //row.Add(n.Papildoma_informacija);
                    //row.Add(String.Join(";;", n.Reiksmes.OrderBy(r => r.Reiksmes_nr).Select(r => r.Reiksmes_apibreztis + (r.Vaizdo_failas == null ? "" : " <img src=\"" + r.Vaizdo_failas + "\" alt=\"" + r.Tekstas_vaizdui + "\" />"))));
                    //row.Add(String.Join(";;", n.Reiksmes.OrderBy(r => r.Reiksmes_nr).Select(r => r.Pastabos_vartotojams)));

                    List <string> vartosenosPavyzdiai = new List <string>();
                    foreach (string pvz in n.Reiksmes.OrderBy(r => r.Reiksmes_nr).Select(r => r.Naujazodzio_vartosenos_pavyzdziai))
                    {
                        string p = pvz;
                        if (pvz != null)
                        {
                            MatchCollection mc = Regex.Matches(pvz, @"#\d+\[([^\]]+)\]");
                            for (int i = mc.Count - 1; i >= 0; --i)
                            {
                                p = p.Remove(mc[i].Index, mc[i].Length).Insert(mc[i].Index, mc[i].Groups[1].Value);
                            }
                        }
                        vartosenosPavyzdiai.Add(p);
                    }
                    //row.Add(String.Join(";;", vartosenosPavyzdiai));

                    //row.Add(String.Join(";;", n.Reiksmes.OrderBy(r => r.Reiksmes_nr).Select(r => String.Join("::", r.Reiksmes_vartojimo_sritys))));
                    //row.Add(String.Join(";;", n.Reiksmes.OrderBy(r => r.Reiksmes_nr).Select(r => r.Reiksmes_sasajos == null ? "" : String.Join("::", r.Reiksmes_sasajos.Select(s => s.Sasajos_zodzio_tekstas)))));
                    //row.Add(String.Join(";;", n.Reiksmes.OrderBy(r => r.Reiksmes_nr).Select(r => r.Reiksmes_sasajos == null ? "" : String.Join("::", r.Reiksmes_sasajos.Select(s => s.Sasajos_zodzio_id.ToString())))));
                    //row.Add(String.Join(";;", n.Reiksmes.OrderBy(r => r.Reiksmes_nr).Select(r => r.Reiksmes_variantai == null ? "" : String.Join("::", r.Reiksmes_variantai.Select(s => s.Varianto_zodzio_tekstas)))));
                    //row.Add(String.Join(";;", n.Reiksmes.OrderBy(r => r.Reiksmes_nr).Select(r => r.Reiksmes_variantai == null ? "" : String.Join("::", r.Reiksmes_variantai.Select(s => s.Varianto_zodzio_id.ToString())))));


                    //if (n.Reiksmes.Any(r => !String.IsNullOrEmpty(r.Pastabos_skoliniui)))
                    //    Console.WriteLine("Yra pastabu");
                    //if (n.Reiksmes.Any(r => !String.IsNullOrEmpty(r.Skolinio_vartosenos_pavyzdziai)))
                    //    Console.WriteLine("Yra vartosenos pavyzdziu");

                    //file.WriteLine(String.Join(";", row.Select(item => @"""" + (item == null ? "" : item.Replace(@"""", @"""""")) + @"""")));

                    if (n.Pagrindines_formos_garso_failas != null)
                    {
                        sounds.Add(n.Pagrindines_formos_garso_failas);
                    }
                    if (n.Antros_formos_garso_failas != null)
                    {
                        sounds.Add(n.Antros_formos_garso_failas);
                    }
                    if (n.Trecios_formos_garso_failas != null)
                    {
                        sounds.Add(n.Trecios_formos_garso_failas);
                    }
                    pictures.AddRange(n.Reiksmes.Select(r => r.Vaizdo_failas).Where(f => !String.IsNullOrEmpty(f)));
                }

                file.WriteLine(LieposNaujazodziai.Properties.Resources.OWL_ending);
            }

            /*
             * foreach (string sound in sounds)
             *  using (WebResponse response = WebRequest.Create(sound).GetResponse())
             *      if (response.ContentType.StartsWith("audio/"))
             *          using (FileStream fileStream = File.Create(@"C:\Users\Administrator\Downloads\LieposNaujazodziai\garsai" + sound.Substring(sound.LastIndexOf('/'))))
             *              response.GetResponseStream().CopyTo(fileStream);
             * foreach (string picture in pictures)
             *  using (WebResponse response = WebRequest.Create(picture).GetResponse())
             *      if (response.ContentType.StartsWith("image/"))
             *          using (FileStream fileStream = File.Create(@"C:\Users\Administrator\Downloads\LieposNaujazodziai\vaizdai" + picture.Substring(picture.LastIndexOf('/'))))
             *              response.GetResponseStream().CopyTo(fileStream);
             * //*/

            client.Close();
        }
Exemplo n.º 18
0
 public Task <GetItemResult> SanitizeSessionByVersion(HttpContextBase context, string id, GetItemResult result, bool isResultExclusivelyLocked, CancellationToken cancellationToken)
 {
     return(Task.FromResult(result));
 }