示例#1
0
            internal ICollection <T> Get <T>(EntityFilter filter) where T : Entity
            {
                // The returned entity type is determined by
                // 1) the filter passed in or 2) the type of T if there is no filter.
                var targetEntityType = filter != null ? filter.EntityType : typeof(T);
                var type             = ResolveAssetType(targetEntityType);
                var query            = new Query(type);

                if (filter != null)
                {
                    var defaultToken = GetDefaultOrderByToken(targetEntityType);
                    IAttributeDefinition defaultOrderBy = null;

                    if (defaultToken != null)
                    {
                        defaultOrderBy = instance.MetaModel.GetAttributeDefinition(defaultToken);
                    }

                    query.Filter    = filter.BuildFilter(type, instance);
                    query.Find      = filter.BuildFind(type);
                    query.OrderBy   = filter.BuildOrderBy(type, defaultOrderBy);
                    query.Selection = filter.BuildSelection(type);
                }

                return(instance.QueryToEntityEnum <T>(query));
            }
示例#2
0
        internal double?GetSum(Entity entity, string multiRelationName, EntityFilter filter, string numericAttributeName)
        {
            var oid = GetOid(entity);

            var multiRelation = oid.AssetType.GetAttributeDefinition(multiRelationName);
            var relatedType   = multiRelation.RelatedAsset;
            var filtered      = multiRelation;

            if (filter != null)
            {
                var term = filter.BuildFilter(relatedType, this);

                if (term != null)
                {
                    filtered = multiRelation.Filter(term);
                }
            }

            var relatedAttribute = relatedType.GetAttributeDefinition(numericAttributeName);
            var joined           = filtered.Join(relatedAttribute);
            var sum = joined.Aggregate(Aggregate.Sum);

            return((double?)RetrieveAttribute(oid, sum, false).Value);
        }
示例#3
0
        public ResourceTableEntry MoveToResource([CanBeNull] EnvDTE.Document document)
        {
            var extension = Path.GetExtension(document?.FullName);

            if (extension == null)
            {
                return(null);
            }

            var fileName = Path.GetFileNameWithoutExtension(document.FullName);

            var configurationItems = _exportProvider.GetExportedValue <DteConfiguration>().MoveToResources.Items;

            var configuration = configurationItems
                                .FirstOrDefault(item => item.ParseExtensions().Contains(extension, StringComparer.OrdinalIgnoreCase));

            if (configuration == null)
            {
                return(null);
            }

            var selection = GetSelection(document);

            if (selection == null)
            {
                return(null);
            }

            IParser parser = new GenericParser();

            var text = !selection.IsEmpty ? selection.Text?.Trim('"') : parser.LocateString(selection, true);

            if (string.IsNullOrEmpty(text))
            {
                return(null);
            }

            var patterns = configuration.ParsePatterns().ToArray();

            var resourceViewModel = _exportProvider.GetExportedValue <ResourceViewModel>();

            resourceViewModel.Reload();

            var resourceManager = _exportProvider.GetExportedValue <ResourceManager>();

            var entities = resourceManager.ResourceEntities
                           .Where(entity => !entity.IsWinFormsDesignerResource)
                           .ToList();

            var filter = EntityFilter.BuildFilter(Settings.Default.ResourceFilter);

            if (filter != null)
            {
                entities.RemoveAll(item => !filter(item.ToString()));
            }

            var projectResources = new HashSet <ResourceEntity>(GetResourceEntiesFromProject(document, entities));

            // put resources from the same project on top
            entities.RemoveAll(entity => projectResources.Contains(entity));
            entities.InsertRange(0, projectResources);

            // put the last used entry on top, if it's in the same project, or the last access was cross-project.
            if (_lastUsedEntity != null)
            {
                if (!_isLastUsedEntityInSameProject || IsInProject(_lastUsedEntity, document))
                {
                    entities.Remove(_lastUsedEntity);
                    entities.Insert(0, _lastUsedEntity);
                }
            }

            var viewModel = new MoveToResourceViewModel(patterns, entities, text, extension, selection.ClassName, selection.FunctionName, fileName);

            var confirmed = ConfirmationDialog.Show(_exportProvider, viewModel, Resources.MoveToResource, null).GetValueOrDefault();

            if (!confirmed || string.IsNullOrEmpty(viewModel.Key))
            {
                return(null);
            }

            ResourceTableEntry entry = null;

            if (!viewModel.ReuseExisiting)
            {
                var entity = _lastUsedEntity = viewModel.SelectedResourceEntity;
                if (entity == null)
                {
                    return(null);
                }

                _isLastUsedEntityInSameProject = IsInProject(entity, document);

                entry = entity.Add(viewModel.Key);
                if (entry == null)
                {
                    return(null);
                }

                entry.Values[null] = viewModel.Value;
                entry.Comment      = viewModel.Comment;
            }

            selection.ReplaceWith(viewModel.Replacement?.Value);

            return(entry);
        }