/// <summary>
        /// Builds the criteria for retrieving a document by key.
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        protected ConfigurationDocumentSearchCriteria BuildDocumentKeyCriteria(ConfigurationDocumentKey key)
        {
            var criteria = new ConfigurationDocumentSearchCriteria();

            criteria.DocumentName.EqualTo(key.DocumentName);

            if (!string.IsNullOrEmpty(key.InstanceKey))
            {
                criteria.InstanceKey.EqualTo(key.InstanceKey);
            }
            else
            {
                criteria.InstanceKey.IsNull();
            }

            if (!string.IsNullOrEmpty(key.User))
            {
                criteria.User.EqualTo(key.User);
            }
            else
            {
                criteria.User.IsNull();
            }
            criteria.DocumentVersionString.EqualTo(VersionUtils.ToPaddedVersionString(key.Version, false, false));
            return(criteria);
        }
        protected override IList <ConfigurationDocument> GetItemsForExport(IReadContext context, int firstRow, int maxRows)
        {
            ConfigurationDocumentSearchCriteria where = new ConfigurationDocumentSearchCriteria();
            where.DocumentName.SortAsc(0);
            where.DocumentVersionString.SortAsc(1);
            where.User.SortAsc(2);
            where.InstanceKey.SortAsc(3);

            return(context.GetBroker <IConfigurationDocumentBroker>().Find(where, new SearchResultPage(firstRow, maxRows)));
        }
Esempio n. 3
0
		public IList<ConfigurationDocument> Find(ConfigurationDocumentSearchCriteria documentCriteria, ConfigurationDocumentBodySearchCriteria bodyCriteria, SearchResultPage page)
		{
			var hqlFrom = new HqlFrom(typeof(ConfigurationDocument).Name, "doc");
			hqlFrom.Joins.Add(new HqlJoin("doc.Body", "body"));

			var query = new HqlProjectionQuery(hqlFrom);
			query.Selects.Add(new HqlSelect("doc"));
			query.Conditions.AddRange(HqlCondition.FromSearchCriteria("doc", documentCriteria));
			query.Conditions.AddRange(HqlCondition.FromSearchCriteria("body", bodyCriteria));
			query.Page = page;

			return ExecuteHql<ConfigurationDocument>(query);
		}
Esempio n. 4
0
        public IList <ConfigurationDocument> Find(ConfigurationDocumentSearchCriteria documentCriteria, ConfigurationDocumentBodySearchCriteria bodyCriteria, SearchResultPage page)
        {
            var hqlFrom = new HqlFrom(typeof(ConfigurationDocument).Name, "doc");

            hqlFrom.Joins.Add(new HqlJoin("doc.Body", "body"));

            var query = new HqlProjectionQuery(hqlFrom);

            query.Selects.Add(new HqlSelect("doc"));
            query.Conditions.AddRange(HqlCondition.FromSearchCriteria("doc", documentCriteria));
            query.Conditions.AddRange(HqlCondition.FromSearchCriteria("body", bodyCriteria));
            query.Page = page;

            return(ExecuteHql <ConfigurationDocument>(query));
        }
Esempio n. 5
0
		/// <summary>
		/// Lists documents matching the specified query.
		/// </summary>
		/// <param name="query"></param>
		/// <returns></returns>
		protected ListConfigurationDocumentsResponse ListConfigurationDocumentsHelper(ConfigurationDocumentQuery query)
		{
			Platform.CheckNonNegative(query.FirstResult, "FirstResult");
			Platform.CheckArgumentRange(query.MaxResults, 0, 500, "MaxResults");

			var whereDocument = new ConfigurationDocumentSearchCriteria();
			var whereBody = new ConfigurationDocumentBodySearchCriteria();

			BuildDocumentQueryCriteria(query, whereDocument, whereBody);

			var broker = PersistenceContext.GetBroker<IConfigurationDocumentBroker>();
			var page = new SearchResultPage(query.FirstResult, query.MaxResults);
			var documents = broker.Find(whereDocument, whereBody, page);

			return new ListConfigurationDocumentsResponse(
				CollectionUtils.Map(documents, (ConfigurationDocument doc) => GetDocumentHeader(doc)));
		}
        /// <summary>
        /// Lists documents matching the specified query.
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        protected ListConfigurationDocumentsResponse ListConfigurationDocumentsHelper(ConfigurationDocumentQuery query)
        {
            Platform.CheckNonNegative(query.FirstResult, "FirstResult");
            Platform.CheckArgumentRange(query.MaxResults, 0, 500, "MaxResults");

            var whereDocument = new ConfigurationDocumentSearchCriteria();
            var whereBody     = new ConfigurationDocumentBodySearchCriteria();

            BuildDocumentQueryCriteria(query, whereDocument, whereBody);

            var broker    = PersistenceContext.GetBroker <IConfigurationDocumentBroker>();
            var page      = new SearchResultPage(query.FirstResult, query.MaxResults);
            var documents = broker.Find(whereDocument, whereBody, page);

            return(new ListConfigurationDocumentsResponse(
                       CollectionUtils.Map(documents, (ConfigurationDocument doc) => GetDocumentHeader(doc))));
        }
        private ConfigurationDocument LoadOrCreateDocument(string name, string version, string user, string instanceKey, IPersistenceContext context)
        {
            ConfigurationDocument document = null;

            try
            {
                ConfigurationDocumentSearchCriteria criteria = new ConfigurationDocumentSearchCriteria();
                criteria.DocumentName.EqualTo(name);
                criteria.DocumentVersionString.EqualTo(version);

                if (!string.IsNullOrEmpty(instanceKey))
                {
                    criteria.InstanceKey.EqualTo(instanceKey);
                }
                else
                {
                    criteria.InstanceKey.IsNull();
                }

                if (!string.IsNullOrEmpty(user))
                {
                    criteria.User.EqualTo(user);
                }
                else
                {
                    criteria.User.IsNull();
                }

                IConfigurationDocumentBroker broker = context.GetBroker <IConfigurationDocumentBroker>();
                document = broker.FindOne(criteria);
            }
            catch (EntityNotFoundException)
            {
                document = new ConfigurationDocument(
                    name,
                    version,
                    StringUtilities.NullIfEmpty(user),
                    StringUtilities.NullIfEmpty(instanceKey));
                context.Lock(document, DirtyState.New);
            }
            return(document);
        }
		internal static SystemIdentityStore Load()
		{
			if (_store != null) return _store;

			lock (_syncroot)
			{
				if (_store == null)
				{
					const string userName = "******";
					var serializer = new XmlSerializer(typeof (SystemIdentityStore));
					var documentName = typeof (SystemIdentityStore).FullName;
					var versionString = VersionUtils.ToPaddedVersionString(new Version(0, 0), false, false);

					var criteria = new ConfigurationDocumentSearchCriteria();
					criteria.User.EqualTo(userName);
					criteria.DocumentName.EqualTo(documentName);
					criteria.DocumentVersionString.EqualTo(versionString);

					SystemIdentityStore store = null;
					using (var scope = new PersistenceScope(PersistenceContextType.Read))
					{
						var broker = scope.Context.GetBroker<IConfigurationDocumentBroker>();
						var document = broker.Find(criteria).FirstOrDefault();
						if (document != null)
						{
							try
							{
								using (var reader = new StringReader(document.Body.DocumentText))
									store = (SystemIdentityStore) serializer.Deserialize(reader);
							}
							catch (Exception)
							{
								store = null;
							}
						}
						scope.Complete();
					}

					if (store == null || store.SecretKey == null || store.SecretKey.Length == 0)
					{
						if (store == null) store = new SystemIdentityStore();
						store.SecretKey = new byte[128];
						using (var crng = new RNGCryptoServiceProvider())
							crng.GetBytes(store.SecretKey);

						using (var scope = new PersistenceScope(PersistenceContextType.Update))
						using (var writer = new StringWriter())
						{
							serializer.Serialize(writer, store);

							var broker = scope.Context.GetBroker<IConfigurationDocumentBroker>();
							var document = broker.Find(criteria).FirstOrDefault();
							if (document != null)
							{
								document.Body.DocumentText = writer.ToString();
							}
							else
							{
								document = new ConfigurationDocument(documentName, versionString, userName, null);
								document.Body.DocumentText = writer.ToString();
								scope.Context.Lock(document, DirtyState.New);
							}
							scope.Complete();
						}
					}

					Interlocked.Exchange(ref _store, store);
				}
				return _store;
			}
		}
Esempio n. 9
0
		/// <summary>
		/// Builds criteria for querying documents.
		/// </summary>
		/// <param name="query"></param>
		/// <param name="whereDocument"></param>
		/// <param name="whereBody"></param>
		private static void BuildDocumentQueryCriteria(ConfigurationDocumentQuery query, ConfigurationDocumentSearchCriteria whereDocument, ConfigurationDocumentBodySearchCriteria whereBody)
		{
			var currentUser = Thread.CurrentPrincipal == null ? null : Thread.CurrentPrincipal.Identity.Name;

			// user type
			if (query.UserType == ConfigurationDocumentQuery.DocumentUserType.User)
			{
				// to query for user documents, we must have an authenticated user
				if (string.IsNullOrEmpty(currentUser))
					ThrowNotAuthorized();

				// current users documents only
				whereDocument.User.EqualTo(currentUser);
			}
			else
			{
				// shared documents only!
				// (authentication is irrelevant - shared documents can be queried anonymously)
				whereDocument.User.IsNull();
			}

			// document name
			if (query.DocumentName.IsSet && !string.IsNullOrEmpty(query.DocumentName.Value))
			{
				if (query.DocumentName.Operator == ConfigurationDocumentQuery.StringOperator.StartsWith)
				{
					whereDocument.DocumentName.StartsWith(query.DocumentName.Value);
				}
				else if (query.DocumentName.Operator == ConfigurationDocumentQuery.StringOperator.Exact)
				{
					whereDocument.DocumentName.EqualTo(query.DocumentName.Value);
				}
			}

			// document version
			if (query.Version.IsSet)
			{
				whereDocument.DocumentVersionString.EqualTo(VersionUtils.ToPaddedVersionString(query.Version.Value));
			}

			// instance key
			if (query.InstanceKey.IsSet)
			{
				if (query.InstanceKey.Value == null)
				{
					whereDocument.InstanceKey.IsNull(); // default instances only!
				}
				else
				{
					whereDocument.InstanceKey.EqualTo(query.InstanceKey.Value);
				}
			}

			// creation time
			if (query.CreationTime.IsSet)
			{
				if (query.CreationTime.Operator == ConfigurationDocumentQuery.DateTimeOperator.After)
				{
					whereDocument.CreationTime.MoreThan(query.CreationTime.Value);
				}
				else if (query.CreationTime.Operator == ConfigurationDocumentQuery.DateTimeOperator.Before)
				{
					whereDocument.CreationTime.LessThan(query.CreationTime.Value);
				}
			}

			// modified time
			if (query.ModifiedTime.IsSet)
			{
				if (query.ModifiedTime.Operator == ConfigurationDocumentQuery.DateTimeOperator.After)
				{
					whereBody.ModifiedTime.MoreThan(query.ModifiedTime.Value);
				}
				else if (query.ModifiedTime.Operator == ConfigurationDocumentQuery.DateTimeOperator.Before)
				{
					whereBody.ModifiedTime.LessThan(query.ModifiedTime.Value);
				}
			}
		}
Esempio n. 10
0
		/// <summary>
		/// Builds the criteria for retrieving a document by key.
		/// </summary>
		/// <param name="key"></param>
		/// <returns></returns>
		protected ConfigurationDocumentSearchCriteria BuildDocumentKeyCriteria(ConfigurationDocumentKey key)
		{
			var criteria = new ConfigurationDocumentSearchCriteria();
			criteria.DocumentName.EqualTo(key.DocumentName);

			if (!string.IsNullOrEmpty(key.InstanceKey))
			{
				criteria.InstanceKey.EqualTo(key.InstanceKey);
			}
			else
			{
				criteria.InstanceKey.IsNull();
			}

			if (!string.IsNullOrEmpty(key.User))
			{
				criteria.User.EqualTo(key.User);
			}
			else
			{
				criteria.User.IsNull();
			}
			criteria.DocumentVersionString.EqualTo(VersionUtils.ToPaddedVersionString(key.Version, false, false));
			return criteria;
		}
        /// <summary>
        /// Builds criteria for querying documents.
        /// </summary>
        /// <param name="query"></param>
        /// <param name="whereDocument"></param>
        /// <param name="whereBody"></param>
        private static void BuildDocumentQueryCriteria(ConfigurationDocumentQuery query, ConfigurationDocumentSearchCriteria whereDocument, ConfigurationDocumentBodySearchCriteria whereBody)
        {
            var currentUser = Thread.CurrentPrincipal == null ? null : Thread.CurrentPrincipal.Identity.Name;

            // user type
            if (query.UserType == ConfigurationDocumentQuery.DocumentUserType.User)
            {
                // to query for user documents, we must have an authenticated user
                if (string.IsNullOrEmpty(currentUser))
                {
                    ThrowNotAuthorized();
                }

                // current users documents only
                whereDocument.User.EqualTo(currentUser);
            }
            else
            {
                // shared documents only!
                // (authentication is irrelevant - shared documents can be queried anonymously)
                whereDocument.User.IsNull();
            }

            // document name
            if (query.DocumentName.IsSet && !string.IsNullOrEmpty(query.DocumentName.Value))
            {
                if (query.DocumentName.Operator == ConfigurationDocumentQuery.StringOperator.StartsWith)
                {
                    whereDocument.DocumentName.StartsWith(query.DocumentName.Value);
                }
                else if (query.DocumentName.Operator == ConfigurationDocumentQuery.StringOperator.Exact)
                {
                    whereDocument.DocumentName.EqualTo(query.DocumentName.Value);
                }
            }

            // document version
            if (query.Version.IsSet)
            {
                whereDocument.DocumentVersionString.EqualTo(VersionUtils.ToPaddedVersionString(query.Version.Value));
            }

            // instance key
            if (query.InstanceKey.IsSet)
            {
                if (query.InstanceKey.Value == null)
                {
                    whereDocument.InstanceKey.IsNull();                     // default instances only!
                }
                else
                {
                    whereDocument.InstanceKey.EqualTo(query.InstanceKey.Value);
                }
            }

            // creation time
            if (query.CreationTime.IsSet)
            {
                if (query.CreationTime.Operator == ConfigurationDocumentQuery.DateTimeOperator.After)
                {
                    whereDocument.CreationTime.MoreThan(query.CreationTime.Value);
                }
                else if (query.CreationTime.Operator == ConfigurationDocumentQuery.DateTimeOperator.Before)
                {
                    whereDocument.CreationTime.LessThan(query.CreationTime.Value);
                }
            }

            // modified time
            if (query.ModifiedTime.IsSet)
            {
                if (query.ModifiedTime.Operator == ConfigurationDocumentQuery.DateTimeOperator.After)
                {
                    whereBody.ModifiedTime.MoreThan(query.ModifiedTime.Value);
                }
                else if (query.ModifiedTime.Operator == ConfigurationDocumentQuery.DateTimeOperator.Before)
                {
                    whereBody.ModifiedTime.LessThan(query.ModifiedTime.Value);
                }
            }
        }
Esempio n. 12
0
        internal static SystemIdentityStore Load()
        {
            if (_store != null)
            {
                return(_store);
            }

            lock (_syncroot)
            {
                if (_store == null)
                {
                    const string userName      = "******";
                    var          serializer    = new XmlSerializer(typeof(SystemIdentityStore));
                    var          documentName  = typeof(SystemIdentityStore).FullName;
                    var          versionString = VersionUtils.ToPaddedVersionString(new Version(0, 0), false, false);

                    var criteria = new ConfigurationDocumentSearchCriteria();
                    criteria.User.EqualTo(userName);
                    criteria.DocumentName.EqualTo(documentName);
                    criteria.DocumentVersionString.EqualTo(versionString);

                    SystemIdentityStore store = null;
                    using (var scope = new PersistenceScope(PersistenceContextType.Read))
                    {
                        var broker   = scope.Context.GetBroker <IConfigurationDocumentBroker>();
                        var document = broker.Find(criteria).FirstOrDefault();
                        if (document != null)
                        {
                            try
                            {
                                using (var reader = new StringReader(document.Body.DocumentText))
                                    store = (SystemIdentityStore)serializer.Deserialize(reader);
                            }
                            catch (Exception)
                            {
                                store = null;
                            }
                        }
                        scope.Complete();
                    }

                    if (store == null || store.SecretKey == null || store.SecretKey.Length == 0)
                    {
                        if (store == null)
                        {
                            store = new SystemIdentityStore();
                        }
                        store.SecretKey = new byte[128];
                        using (var crng = new RNGCryptoServiceProvider())
                            crng.GetBytes(store.SecretKey);

                        using (var scope = new PersistenceScope(PersistenceContextType.Update))
                            using (var writer = new StringWriter())
                            {
                                serializer.Serialize(writer, store);

                                var broker   = scope.Context.GetBroker <IConfigurationDocumentBroker>();
                                var document = broker.Find(criteria).FirstOrDefault();
                                if (document != null)
                                {
                                    document.Body.DocumentText = writer.ToString();
                                }
                                else
                                {
                                    document = new ConfigurationDocument(documentName, versionString, userName, null);
                                    document.Body.DocumentText = writer.ToString();
                                    scope.Context.Lock(document, DirtyState.New);
                                }
                                scope.Complete();
                            }
                    }

                    Interlocked.Exchange(ref _store, store);
                }
                return(_store);
            }
        }