Exemple #1
0
        public static Query Build(ApplicationSchemaDefinition application, IEnumerable <FilterExpression> filters)
        {
            var filtersAsList = filters as IList <FilterExpression> ?? filters.ToList();
            var parameters    = new List <object>(filtersAsList.Count + 1);
            var sql           = new StringBuilder(filtersAsList.Count * 64);

            sql.Append("select * from DataMap where application = ? ");
            parameters.Add(application.ApplicationName);

            if (filtersAsList.Any())
            {
                sql.Append("and (");

                for (var i = 0; i < filtersAsList.Count; i++)
                {
                    var filter = filtersAsList[i];
                    var suffix = (i < filtersAsList.Count - 1) ? "and " : ") ";

                    sql.AppendFormat("{0} {1}", filter.BuildSql(), suffix);
                    parameters.AddRange(filter.BuildParameters());
                }
            }

            sql.Append(string.Format("limit {0}", MaxRows));
            return(new Query(sql.ToString(), parameters.ToArray()));
        }
Exemple #2
0
        public static PaginatedSearchRequestDto DefaultInstance(ApplicationSchemaDefinition schema)
        {
            var defaultSize       = 30;
            var paginationOptions = DefaultPaginationOptions;

            if (schema != null)
            {
                var defaultSizeSt = schema.GetProperty(ApplicationSchemaPropertiesCatalog.DefaultPaginationSize);
                if (defaultSizeSt != null)
                {
                    defaultSize = Int32.Parse(defaultSizeSt);
                }
                var paginationOptionsSt = schema.GetProperty(ApplicationSchemaPropertiesCatalog.PaginationOptions);
                if (paginationOptionsSt != null)
                {
                    var paginationOptionsAux    = paginationOptionsSt.Split(',');
                    var paginationOptionListAux = new List <int>();
                    foreach (var s in paginationOptionsAux)
                    {
                        int option;
                        if (int.TryParse(s, out option))
                        {
                            paginationOptionListAux.Add(option);
                        }
                    }
                    if (paginationOptionListAux.Count > 0)
                    {
                        paginationOptions = paginationOptionListAux;
                    }
                }
            }
            return(new PaginatedSearchRequestDto(defaultSize, paginationOptions));
        }
Exemple #3
0
        public static T Invoke <T>(ApplicationSchemaDefinition schema, string stringToCheck, params object[] parameters)
        {
            if (stringToCheck.StartsWith("@"))
            {
                stringToCheck = stringToCheck.Substring(1);
            }

            if (stringToCheck.Contains("."))
            {
                //generic simple injector call
                var strings     = stringToCheck.Split('.');
                var serviceName = strings[0];
                var methodName  = strings[1];
                var ob          = SimpleInjectorGenericFactory.Instance.GetObject <object>(serviceName);
                if (ob != null)
                {
                    return((T)ReflectionUtil.Invoke(ob, methodName, parameters));
                }
                //shouldn´t happen as theoretically method should have been checked by existence before
                return(default(T));
            }
            //if no service is defined, applying dataset implementation
            var dataSet = DataSetProvider.GetInstance().LookupDataSet(schema.ApplicationName, schema.SchemaId);

            return((T)ReflectionUtil.Invoke(dataSet, stringToCheck, parameters));
        }
Exemple #4
0
        public static async Task <CompositeDataMap> Expand(ApplicationSchemaDefinition compositeApplication, DataMap compositeDataMap)
        {
            var repository = new DataRepository();
            var components = new List <Component>();

            foreach (var composition in compositeApplication.Compositions)
            {
                var filters = new List <FilterExpression>();

                // Handles the composition criteria, which can
                // be either literals ("hardcoded") values or
                // based on the data map current state.
                foreach (var criterion in composition.EntityAssociation.Attributes)
                {
                    var value = string.IsNullOrEmpty(criterion.Literal)
                        ? compositeDataMap.Value(criterion.From)
                        : criterion.Literal;

                    filters.Add(new Exactly(criterion.To, value));
                }

                // Fetches all data maps ("components") that
                // satisfies the composition criteria.
                var componentApplication = composition.To();
                var componentDataMaps    = (await repository
                                            .LoadAsync(componentApplication, filters))
                                           .ToList();

                components.Add(new Component(componentApplication, componentDataMaps));
            }

            return(new CompositeDataMap(compositeApplication, compositeDataMap, components));
        }
        public ApplicationMetadataDefinition(Guid?id, string name, string title, string entity,
                                             string idFieldName, ApplicationSchemaDefinition schema)
        {
            if (name == null)
            {
                throw new ArgumentNullException("name");
            }
            if (title == null)
            {
                throw new ArgumentNullException("title");
            }
            if (entity == null)
            {
                throw new ArgumentNullException("entity");
            }
            if (idFieldName == null)
            {
                throw new ArgumentNullException("idFieldName");
            }
            if (schema == null)
            {
                throw new ArgumentNullException("schema");
            }

            Id                 = id;
            Name               = name;
            Title              = title;
            Entity             = entity;
            IdFieldName        = idFieldName;
            Schema             = schema;
            Schema.IdFieldName = idFieldName;
        }
        private static IEnumerable <EntityAssociation> HandleCompositions(IEnumerable <ApplicationCompositionDefinition> compositions, EntityMetadata entityMetadata, ApplicationSchemaDefinition appSchema)
        {
            return
                (compositions.Select(
                     composition => {
                var entityAssociation = entityMetadata.Associations.FirstOrDefault(a => a.Qualifier == composition.Relationship);
                if (entityAssociation == null)
                {
                    throw new InvalidOperationException(String.Format(MissingAssociation, composition.Relationship, entityMetadata.Name));
                }
                CompositionBuilder.InitializeCompositionSchemas(appSchema);
                if (composition.Schema.Schemas == null)
                {
                    return entityAssociation;
                }
                ApplicationSchemaDefinition schemaToUse = composition.Collection ? composition.Schema.Schemas.List : composition.Schema.Schemas.Detail;
                if (schemaToUse == null)
                {
                    return entityAssociation;
                }
                var entity = MetadataProvider.Entity(entityAssociation.To);
                var slicedAttributes = entity.Attributes(EntityMetadata.AttributesMode.NoCollections)
                                       .Where(attribute => schemaToUse.Fields
                                              .Any(r => r.Attribute.Equals(attribute.Name)));

                return new SlicedEntityAssociation(entityAssociation, slicedAttributes);
            })
                 .ToList());
        }
Exemple #7
0
        public byte[] ConvertGridToCsv(InMemoryUser user, ApplicationSchemaDefinition schema, IEnumerable <AttributeHolder> rows, Func <AttributeHolder, ApplicationFieldDefinition, string, string> ColumnValueDelegate = null)
        {
            var csv = new StringBuilder();
            var enumerableFields = schema.Fields.Where(ShouldShowField());
            var fields           = enumerableFields as IList <ApplicationFieldDefinition> ?? enumerableFields.ToList();
            // HEADER: line of comma separated labels
            var header = string.Join(",", fields.Select(field => GetI18NLabel(field, schema.Name)));

            csv.AppendLine(header);
            // ROWS
            rows.ForEach(item => {
                var row    = new StringBuilder();
                var values = fields.Select(field => {
                    var data = GetValueAsString(item, field);
                    if (ColumnValueDelegate != null)
                    {
                        data = ColumnValueDelegate(item, field, data);
                    }
                    var displayableData = AsDisplayableData(data, field, user);
                    return(AsCsvCompliantData(displayableData));
                });
                row.Append(string.Join(",", values));
                csv.AppendLine(row.ToString());
            });
            // dump to byte array
            return(Encoding.UTF8.GetBytes(csv.ToString()));
            //            return csv.ToString().GetBytes();
        }
Exemple #8
0
        public static void OnNew(DataMap dataMap, ApplicationSchemaDefinition application, CompositeDataMap composite)
        {
            var context  = new OnNewContext(application, MetadataRepository, User.Current, composite);
            var behavior = GetBehavior(context.Application);

            behavior.OnNew(context, dataMap);
        }
Exemple #9
0
        public static void OnBeforeSave(DataMap dataMap, ApplicationSchemaDefinition application)
        {
            var context  = new OnBeforeSaveContext(application, MetadataRepository, User.Current);
            var behavior = GetBehavior(context.Application);

            behavior.OnBeforeSave(context, dataMap);
        }
Exemple #10
0
        private static bool ShouldFetchFromServer(ApplicationSchemaDefinition detail, ApplicationSchemaDefinition list)
        {
            if (detail == null)
            {
                //sometimes we might need only to see the list
                return(false);
            }
            if (EnumerableExtensions.Any(detail.Associations) || EnumerableExtensions.Any(detail.Compositions))
            {
                return(true);
            }
            foreach (var displayable in detail.Displayables)
            {
                if (!(displayable is IApplicationAttributeDisplayable))
                {
                    return(true);
                }
                var attrDisplayable = (IApplicationAttributeDisplayable)displayable;
                if (list.Fields.All(f => f.Attribute != attrDisplayable.Attribute))
                {
                    return(true);
                }
            }

            //return true, if detail has more data then list
            return(false);
        }
Exemple #11
0
        private static void OverrideReferenceValues(ApplicationSchemaDefinition schema, ReferenceDisplayable reference, IApplicationDisplayable applicationDisplayable)
        {
            if (reference.ShowExpression != null)
            {
                applicationDisplayable.ShowExpression = GetPropertyValue(schema, reference, reference.ShowExpression);
            }

            if (reference.EnableExpression != null)
            {
                applicationDisplayable.EnableExpression = GetPropertyValue(schema, reference, reference.EnableExpression);
            }
            if (reference.Label != null)
            {
                ((IApplicationAttributeDisplayable)applicationDisplayable).Label = GetPropertyValue(schema, reference, reference.Label);
            }
            if (reference.Attribute != null)
            {
                ((IApplicationAttributeDisplayable)applicationDisplayable).Attribute = GetPropertyValue(schema, reference, reference.Attribute);
            }

            if (reference.ReadOnly != null)
            {
                applicationDisplayable.ReadOnly = reference.ReadOnly;
            }
        }
        public static ApplicationSchemaDefinition GetInstance(
            String applicationName, string title, string schemaId, SchemaStereotype stereotype,
            SchemaMode?mode, ClientPlatform?platform, bool @abstract,
            [NotNull] List <IApplicationDisplayable> displayables, [NotNull] IDictionary <string, string> schemaProperties,
            ApplicationSchemaDefinition parentSchema, ApplicationSchemaDefinition printSchema, [NotNull] ApplicationCommandSchema commandSchema,
            string idFieldName, string unionSchema)
        {
            var schema = new ApplicationSchemaDefinition(applicationName, title, schemaId, stereotype, mode, platform,
                                                         @abstract, displayables, schemaProperties, parentSchema, printSchema, commandSchema, idFieldName, unionSchema);

            if (schema.ParentSchema != null)
            {
                schema.Displayables = MergeParentSchemaDisplayables(schema, schema.ParentSchema);
                schema.Mode         = schema.Mode == null || schema.Mode == SchemaMode.None ? schema.ParentSchema.Mode : schema.Mode;
                schema.Stereotype   = schema.Stereotype == SchemaStereotype.None ? schema.ParentSchema.Stereotype : schema.Stereotype;
                MergeWithParentProperties(schema);
                MergeWithParentCommands(schema);
            }
            schema.Title = title ?? BuildDefaultTitle(schema);
            AddHiddenRequiredFields(schema);

            MergeWithStereotypeSchema(schema);


            schema.FkLazyFieldsResolver         = ApplicationSchemaLazyFkHandler.LazyFkResolverDelegate;
            schema.ComponentDisplayableResolver = ReferenceHandler.ComponentDisplayableResolver;

            return(schema);
        }
Exemple #13
0
        private static IList <FieldBinding> BindFields(DataMap dataMap, ApplicationSchemaDefinition application, Func <ApplicationFieldDefinition, IValueProvider> valueProviderFactory)
        {
            var bindings = application
                           .Fields
                           .Select(f => new FieldBinding(f, valueProviderFactory(f)))
                           .ToList();

            foreach (var binding in bindings)
            {
                try
                {
                    var value = dataMap.Value(binding.Metadata);
                    // Formats the raw value to its
                    // appropriate representation;
                    var formattedValue = binding
                                         .Metadata
                                         .Widget()
                                         .Format(value);

                    binding.ValueProvider.Value = formattedValue;
                }
                catch
                {
                    Console.Write(binding.Metadata.Attribute);
                }
            }

            return(bindings);
        }
        private static List <IApplicationDisplayable> OnApplySecurityPolicy(ApplicationSchemaDefinition schema, IEnumerable <Role> userRoles)
        {
            var activeFieldRoles = RoleManager.ActiveFieldRoles();

            if (activeFieldRoles == null || activeFieldRoles.Count == 0)
            {
                return(schema.Displayables);
            }
            var resultingFields = new List <IApplicationDisplayable>();

            foreach (var field in schema.Displayables)
            {
                if (!activeFieldRoles.Contains(field.Role))
                {
                    resultingFields.Add(field);
                }
                else
                {
                    var enumerable = userRoles as IList <Role> ?? userRoles.ToList();
                    if (enumerable.Any(r => r.Name == field.Role))
                    {
                        resultingFields.Add(field);
                    }
                }
            }
            return(resultingFields);
        }
        public void SetFromSearchString(ApplicationSchemaDefinition appSchema, IList <String> searchFields, String searchText)
        {
            var sbParams = new StringBuilder();
            var sbValues = new StringBuilder();

            //First, verify if searchText is datetime...
            var param          = new SearchParameter(searchText);
            var fieldsToSearch =
                appSchema.Fields.Where(f => param.IsDate ? f.RendererType == "datetime" : f.RendererType != "datetime");

            fieldsToSearch = fieldsToSearch.Where(f => searchFields.Contains(f.Attribute));
            var applicationFieldDefinitions = fieldsToSearch as ApplicationFieldDefinition[] ?? fieldsToSearch.ToArray();

            if (!applicationFieldDefinitions.Any())
            {
                return;
            }

            foreach (var field in applicationFieldDefinitions)
            {
                sbParams.Append(field.Attribute);
                sbParams.Append(SearchUtils.SearchParamOrSeparator);

                sbValues.Append(searchText);
                sbValues.Append(SearchUtils.SearchValueSeparator);
            }
            sbParams.Remove(sbParams.Length - 3, 3);
            sbValues.Remove(sbValues.Length - 3, 3);

            SearchParams = sbParams.ToString();
            SearchValues = sbValues.ToString();
        }
Exemple #16
0
        public void TestSchemaTitle()
        {
            ApplicationConfiguration.TestclientName = "hapag";
            MetadataProvider.StubReset();
            var catalogs = _resolver.FetchCatalogs();
            var schemas  = MetadataProvider.Application("servicerequest").Schemas();
            var schema   = schemas[new ApplicationMetadataSchemaKey("list", "input", "web")];
            var value    = _resolver.DoGetI18NSchemaTitle(schema, "de");

            Assert.AreEqual("Service Request Tabelle", value);

            var missingSchema = new ApplicationSchemaDefinition {
                SchemaId        = "fake",
                ApplicationName = "fake",
                Title           = "fake"
            };

            value = _resolver.DoGetI18NSchemaTitle(missingSchema, "de");
            Assert.AreEqual("fake", value);


            missingSchema = new ApplicationSchemaDefinition {
                ApplicationName = "servicerequest",
                SchemaId        = "fake",
                Title           = "fake"
            };
            value = _resolver.DoGetI18NSchemaTitle(missingSchema, "de");
            Assert.AreEqual("fake", value);

            ApplicationConfiguration.TestclientName = "fake";
            _resolver.ClearCache();
            value = _resolver.DoGetI18NSchemaTitle(schema, "de");
            Assert.AreEqual(schema.Title, value);
        }
Exemple #17
0
        /// <summary>
        ///     Returns all data maps that satisfy the specified filter.
        /// </summary>
        /// <param name="application">The application metadata.</param>
        /// <param name="filters">The search criteria.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        public async Task <List <DataMap> > LoadAsync(ApplicationSchemaDefinition application, IEnumerable <FilterExpression> filters, CancellationToken cancellationToken = default(CancellationToken))
        {
            var query = QueryBuilder.Build(application, filters);

            var result = (await Database
                          .GetConnection(cancellationToken)
                          .QueryAsync <PersistableDataMap>(query.Sql, query.Parameters))
                         .Select(map => map.ToDataMap())
                         .ToList();

            //Next and previous are counter-intuitive because the list is ordered on the inverse way
            for (int i = 0; i < result.Count; i++)
            {
                var currentMap = result[i];
                if (i != 0)
                {
                    currentMap.Next = result[i - 1];
                }
                if (i != result.Count - 1)
                {
                    currentMap.Previous = result[i + 1];
                }
                Dispatcher.OnLoad(currentMap, application);
            }
            return(result);
        }
Exemple #18
0
        public async Task <DataMap> NewAsync(ApplicationSchemaDefinition application, CompositeDataMap dataMap = null)
        {
            var newDataMap = new DataMap(application);

            // If we have no composite data map it means
            // a "parent" data map is being created. For
            // the sake of coherence, let's simply wrap
            // it inside a CompositeDataMap structure.
            if (null == dataMap)
            {
                dataMap = CompositeDataMap.Wrap(application, newDataMap);
            }
            else
            {
                // A component data map is being created.
                // Let's link it to the composite root.
                newDataMap.LocalState.ParentId = dataMap.Composite.LocalState.LocalId;
            }

            await Task
            .Factory
            .StartNew(() => Dispatcher.OnNew(newDataMap, application, dataMap));

            return(newDataMap);
        }
Exemple #19
0
        public byte[] ConvertGridToExcel(InMemoryUser user, ApplicationSchemaDefinition schema, IEnumerable <AttributeHolder> rows)
        {
            IEnumerable <ApplicationFieldDefinition> applicationFields = schema.Fields;

            using (var resultStream = new MemoryStream())
                using (var ms = new MemoryStream())
                    using (var xl = SpreadsheetDocument.Create(ms, SpreadsheetDocumentType.Workbook)) {
                        //                var ms = new MemoryStream();

                        // attributes of elements
                        // the xml writer

                        OpenXmlWriter writer;
                        int           rowIdx;
                        var           worksheetpart = Setup(xl, out writer, out rowIdx, schema);

                        // create header row
                        CreateHeaderRow(applicationFields, writer, rowIdx, schema.Name, schema.SchemaId);
                        //count up row
                        rowIdx++;

                        // write data rows
                        DoWriteRows(user, schema, rows, rowIdx, writer, applicationFields);


                        Finish(writer, xl, worksheetpart);

                        return(ms.ToArray());
                    }
        }
Exemple #20
0
        //for testing purposes
        internal string DoGetI18NSchemaTitle(ApplicationSchemaDefinition schema, String language)
        {
            if (_cachedCatalogs == null)
            {
                _cachedCatalogs = FetchCatalogs();
            }
            if (language == null)
            {
                return(schema.Title);
            }
            var catalog = ((JObject)_cachedCatalogs[language]);

            if (catalog == null)
            {
                //client has no catalog
                return(schema.Title);
            }
            var appObject = catalog[schema.ApplicationName];

            if (appObject == null)
            {
                //default
                return(schema.Title);
            }
            var titleObject = appObject["_title"];

            if (titleObject == null)
            {
                return(schema.Title);
            }
            var value = titleObject[schema.SchemaId];

            return(value == null ? schema.Title : value.ToString());
        }
Exemple #21
0
            public static ApplicationBehavior Resolve(ApplicationSchemaDefinition application)
            {
                var platformSpecificNamespace    = string.Format("{0}.{1}", PlatformSpecificProbingNamespace, application.ApplicationName);
                var applicationSpecificNamespace = string.Format("{0}.{1}", typeof(NamespaceAnchor).Namespace, application.ApplicationName);

                // Let's probe for all custom commands
                // eligible for this application behavior.
                var commands = CommandResolver.Resolve(new[] { platformSpecificNamespace, applicationSpecificNamespace });

                // Do we have a behavior specific for this
                // application and platform? e.g. workorder
                // on iOS.
                // ReSharper disable once PossibleMultipleEnumeration
                var platformSpecificBehavior = Instantiate(platformSpecificNamespace, application.ApplicationName, commands);

                if (null != platformSpecificBehavior)
                {
                    return(platformSpecificBehavior);
                }

                // Do we have a behavior specific for this
                // application, but platform-independent?
                // ReSharper disable once PossibleMultipleEnumeration
                var applicationSpecificBehavior = Instantiate(applicationSpecificNamespace, application.ApplicationName, commands);

                if (null != applicationSpecificBehavior)
                {
                    return(applicationSpecificBehavior);
                }

                // Damn it, no luck. Let's return the
                // base application behavior then.
                // ReSharper disable once PossibleMultipleEnumeration
                return(new ApplicationBehavior(commands));
            }
        public static void Init(TestContext testContext)
        {
            ApplicationConfiguration.TestclientName = "hapag";
            MetadataProvider.StubReset();
            var schemas = MetadataProvider.Application("asset").Schemas();

            _schema = schemas[new ApplicationMetadataSchemaKey("detail", "output", "web")];
        }
Exemple #23
0
        public static void Init(TestContext testContext)
        {
            ApplicationConfiguration.TestclientName = "otb";
            MetadataProvider.StubReset();
            var schemas = MetadataProvider.Application("invbalances").Schemas();

            _schema = schemas[new ApplicationMetadataSchemaKey("list", "input", "web")];
        }
Exemple #24
0
 private static Preview SetOrRetrieve(ApplicationSchemaDefinition definition, Preview value, string constValue)
 {
     if (value != null)
     {
         definition.ExtensionParameter(constValue, value);
     }
     return((Preview)definition.ExtensionParameter(constValue));
 }
Exemple #25
0
        public static IDictionary <string, object> OnBeforeUpload(DataMap dataMap, ApplicationSchemaDefinition application)
        {
            var context  = new OnBeforeUploadContext(application, MetadataRepository, User.Current);
            var behavior = GetBehavior(context.Application);

            behavior.OnBeforeUpload(context, dataMap);
            return(context.Content);
        }
        public static ApplicationSchemaDefinition ApplyPolicy(this ApplicationSchemaDefinition schema, [NotNull] IEnumerable <Role> userRoles, ClientPlatform platform)
        {
            if (userRoles == null)
            {
                throw new ArgumentNullException("userRoles");
            }

            return(OnApplyPlatformPolicy(schema, platform, OnApplySecurityPolicy(schema, userRoles)));
        }
 public void Construct(ApplicationSchemaDefinition application, DataMap dataMap, bool isNew, CompositeDataMap composite, DetailController detailController, Action <DetailComponentController.Result> onCompletion)
 {
     _applicationMetadata = application;
     _dataMap             = dataMap;
     _isNew            = isNew;
     _composite        = composite;
     _detailController = detailController;
     _onCompletion     = onCompletion;
 }
 private bool HasActionRedirectionDefinedByProperties(ApplicationSchemaDefinition schema, string operation)
 {
     if (operation == OperationConstants.CRUD_CREATE || operation == OperationConstants.CRUD_UPDATE)
     {
         //TODO: distinguish all kind of operators --> oncreateevent.controller
         return(schema.Properties.ContainsKey(ApplicationSchemaPropertiesCatalog.OnCrudSaveEventAction));
     }
     return(false);
 }
 private static void MergeWithParentCommands(ApplicationSchemaDefinition schema)
 {
     foreach (var parentCommand in schema.ParentSchema.CommandSchema.Commands)
     {
         if (!schema.CommandSchema.Commands.Contains(parentCommand))
         {
             schema.CommandSchema.Commands.Add(parentCommand);
         }
     }
 }
 public ApplicationListResult(int totalCount, PaginatedSearchRequestDto searchDTO,
                              IEnumerable <AttributeHolder> dataMap, ApplicationSchemaDefinition schema)
     : base(dataMap, null)
 {
     Schema        = schema;
     PageResultDto = new PaginatedSearchRequestDto(totalCount, searchDTO.PageNumber, searchDTO.PageSize, searchDTO.SearchValues, searchDTO.PaginationOptions);
     PageResultDto.SearchParams                = searchDTO.SearchParams;
     PageResultDto.FilterFixedWhereClause      = searchDTO.FilterFixedWhereClause;
     PageResultDto.UnionFilterFixedWhereClause = searchDTO.UnionFilterFixedWhereClause;
 }