Exemple #1
0
        public static ExcelBindingDefinitionWithFormula CreateInstance(ExcelTemplateDefinition templateDefinition, BindingDefinitionDescription definition)
        {
            try
            {
                IBindingDefinition formulaBindingDefinition = null;
                IBindingDefinition targetBindingDefinition  = null;

                if (!string.IsNullOrEmpty(definition.Formula))
                {
                    BindingDefinitionDescription formulaBindingDefinitionDescription = BindingDefinitionDescription.CreateBindingDescription(templateDefinition, definition.Formula, definition.Formula);
                    formulaBindingDefinition = BindingDefinitionFactory.CreateInstances(templateDefinition, formulaBindingDefinitionDescription);
                }

                if (!string.IsNullOrEmpty(definition.BindingExpression))
                {
                    string bindingExpression = $"{{{definition.BindingExpression}}}";
                    BindingDefinitionDescription targetBindingDefinitionDescription = BindingDefinitionDescription.CreateBindingDescription(templateDefinition, bindingExpression, bindingExpression);
                    targetBindingDefinition = BindingDefinitionFactory.CreateInstances(templateDefinition, targetBindingDefinitionDescription);
                }

                ExcelBindingDefinitionWithFormula ret = new ExcelBindingDefinitionWithFormula(definition, targetBindingDefinition, formulaBindingDefinition);
                return(ret);
            }
            catch (Exception ex)
            {
                string message = $"Cannot create the 'ExcelBindingDefinitionWithFormula' from '{definition.BindingExpression ?? string.Empty}'. {ex.Message}";
                throw new EtkException(message);
            }
        }
 public static ExcelBindingDefinitionNamedRange CreateInstance(ExcelTemplateDefinitionPart templateDefinition, ExcelNamedRangeDefinition definition, IBindingDefinition nestedBindingDefinition)
 {
     try
     {
         string             trimmedName           = definition.Name.Trim();
         IBindingDefinition nameBindingDefinition = null;
         string             rootName = null;
         int pos = trimmedName.IndexOf('{');
         if (pos != -1)
         {
             rootName = trimmedName.Remove(pos);
             string expression = trimmedName.Substring(pos);
             BindingDefinitionDescription bindingDefinitionDescription = BindingDefinitionDescription.CreateBindingDescription(templateDefinition.Parent, expression, expression);
             if (bindingDefinitionDescription != null && !string.IsNullOrEmpty(bindingDefinitionDescription.BindingExpression))
             {
                 if (bindingDefinitionDescription.BindingExpression.Contains(ALL_POS_KEYWORD) || bindingDefinitionDescription.BindingExpression.Contains(POS_KEYWORD))
                 {
                     throw new ArgumentException($"Cannot mixte the keywords '{POS_KEYWORD}' and '{ALL_POS_KEYWORD}' with binding dataAccessor");
                 }
                 nameBindingDefinition = BindingDefinitionFactory.CreateInstances(templateDefinition.Parent as ExcelTemplateDefinition, bindingDefinitionDescription);
             }
         }
         return(new ExcelBindingDefinitionNamedRange(definition, rootName, nestedBindingDefinition, nameBindingDefinition));
     }
     catch (Exception ex)
     {
         string message = $"Cannot create create the named caller binding dataAccessor '{definition.Name}'. {ex.Message}";
         throw new EtkException(message);
     }
 }
 private ExcelBindingDefinitionButton(BindingDefinitionDescription definitionDescription, ExcelTemplateDefinition templateDefinition, ExcelButtonDefinition definition)
     : base(definitionDescription)
 {
     TemplateDefinition = templateDefinition;
     Definition         = definition;
     if (!string.IsNullOrEmpty(definition.Label))
     {
         LabelBindingDefinition = BindingDefinitionFactory.CreateInstances(templateDefinition, DefinitionDescription);
         CanNotify = LabelBindingDefinition.CanNotify;
     }
     RetrieveOnClickMethod();
     RetrieveEnableProperty();
 }
        public LinkedTemplateDefinition(ITemplateDefinition parent, ITemplateDefinition templateDefinition, TemplateLink linkDefinition)
        {
            try
            {
                Parent             = parent;
                TemplateDefinition = templateDefinition;
                Positioning        = linkDefinition.Positioning;
                if (!string.IsNullOrEmpty(linkDefinition.With))
                {
                    Type type = parent.MainBindingDefinition != null ? parent.MainBindingDefinition.BindingType : null;
                    BindingDefinitionDescription definitionDescription = new BindingDefinitionDescription()
                    {
                        BindingExpression = linkDefinition.With,
                        Description       = linkDefinition.Description,
                        Name       = linkDefinition.Name,
                        IsReadOnly = true
                    };
                    BindingDefinition = BindingDefinitionFactory.CreateInstance(type, definitionDescription);
                }

                if (!string.IsNullOrEmpty(linkDefinition.MinOccurencesMethod))
                {
                    try
                    {
                        if (templateDefinition.Header != null && ((TemplateDefinitionPart)templateDefinition.Header).HasLinkedTemplates ||
                            templateDefinition.Body != null && ((TemplateDefinitionPart)templateDefinition.Body).HasLinkedTemplates ||
                            templateDefinition.Footer != null && ((TemplateDefinitionPart)templateDefinition.Footer).HasLinkedTemplates)
                        {
                            throw new Exception("'MinOccurencesMethod' is not supported with templates linked with other templates");
                        }

                        Type type = TemplateDefinition.MainBindingDefinition == null ? null : TemplateDefinition.MainBindingDefinition.BindingType;
                        MinOccurencesMethod = TypeHelpers.GetMethod(type, linkDefinition.MinOccurencesMethod);
                        if (MinOccurencesMethod.GetParameters().Length > 2)
                        {
                            throw new Exception("The min occurences resolver method signature must be 'int <MethodName>([instance of element of the collection that owned the link declaration])'");
                        }
                    }
                    catch (Exception ex)
                    {
                        throw new Exception($"Cannot retrieve the min occurences resolver method:{ex.Message}");
                    }
                }
            }
            catch (Exception ex)
            {
                string message = $"Cannot resolve linked template definition 'To={linkDefinition.To}, With='{linkDefinition.With}'";
                throw new Exception(message, ex);
            }
        }
        private ExcelBindingDefinitionPicture(BindingDefinitionDescription definitionDescription, ExcelTemplateDefinition templateDefinition, ExcelPictureDefinition definition)
            : base(definitionDescription)
        {
            TemplateDefinition = templateDefinition;
            Definition         = definition;
            if (!string.IsNullOrEmpty(definition.Value))
            {
                ValueBindingDefinition = BindingDefinitionFactory.CreateInstances(templateDefinition, DefinitionDescription);
                if (!ValueBindingDefinition.BindingType.Equals(typeof(bool)))
                {
                    throw new EtkException("A 'CheckBox' must be bound with RetrieveContextualMethodInfo boolean value");
                }

                CanNotify = ValueBindingDefinition.CanNotify;
            }
        }
        /// <summary>Create a binding definition from a cell value</summary>
        private IBindingDefinition CreateBindingDefinition(ExcelTemplateDefinitionPart templateDefinitionPart, string value, string trimmedValue)
        {
            ExcelTemplateDefinition excelTemplateDefinition = templateDefinitionPart.Parent as ExcelTemplateDefinition;

            IBindingDefinition ret = null;

            if (trimmedValue.StartsWith(ExcelBindingDefinitionButton.BUTTON_TEMPLATE_PREFIX))
            {
                ret = ExcelBindingDefinitionButton.CreateInstance(excelTemplateDefinition, trimmedValue);
            }
            else if (trimmedValue.StartsWith(ExcelBindingDefinitionCheckBox.CHECKBOX_TEMPLATE_PREFIX))
            {
                ret = ExcelBindingDefinitionCheckBox.CreateInstance(excelTemplateDefinition, trimmedValue);
            }
            else if (trimmedValue.StartsWith(ExcelBindingDefinitionFormulaResult.FORMULA_RESULT_PREFIX))
            {
                ret = ExcelBindingDefinitionFormulaResult.CreateInstance(excelTemplateDefinition, trimmedValue);
            }
            else if (trimmedValue.StartsWith(ExcelBindingDefinitionNamedRange.NAMEDRANGE_TEMPLATE_PREFIX))
            {
                ExcelNamedRangeDefinition excelNamedRangeDefinition = ExcelBindingDefinitionNamedRange.RetrieveNamedRangeDefinition(trimmedValue);
                if (excelNamedRangeDefinition != null)
                {
                    BindingDefinition nestedBindingDefinition = null;
                    if (!string.IsNullOrEmpty(excelNamedRangeDefinition.Value))
                    {
                        nestedBindingDefinition = CreateBindingDefinition(templateDefinitionPart, excelNamedRangeDefinition.Value, excelNamedRangeDefinition.Value.Trim()) as BindingDefinition;
                    }
                    ret = ExcelBindingDefinitionNamedRange.CreateInstance(templateDefinitionPart, excelNamedRangeDefinition, nestedBindingDefinition);
                }
            }
            else
            {
                BindingDefinitionDescription bindingDefinitionDescription = BindingDefinitionDescription.CreateBindingDescription(templateDefinitionPart.Parent, value, trimmedValue);
                if (bindingDefinitionDescription.Formula != null)
                {
                    ret = ExcelBindingDefinitionWithFormula.CreateInstance(excelTemplateDefinition, bindingDefinitionDescription);
                }
                else
                {
                    ret = BindingDefinitionFactory.CreateInstances(excelTemplateDefinition, bindingDefinitionDescription);
                }
            }
            return(ret);
        }
Exemple #7
0
        public static ExcelBindingDefinitionFormulaResult CreateInstance(ExcelTemplateDefinition templateDefinition, string definition)
        {
            try
            {
                definition = definition.Replace(FORMULA_RESULT_PREFIX, string.Empty);
                definition = definition.TrimEnd('}');

                //UseFormulaBindingDefinition
                string[] parts = definition.Split(';');
                if (parts.Count() > 2)
                {
                    throw new ArgumentException($"dataAccessor '{definition}' is invalid.");
                }

                string useFormulaDefinition = null;
                string underlyingDefinition;
                if (parts.Count() == 1)
                {
                    underlyingDefinition = $"{{{parts[0].Trim()}}}";
                }
                else
                {
                    useFormulaDefinition = $"{{{parts[0].Trim()}}}";
                    underlyingDefinition = $"{{{parts[1].Trim()}}}";
                }

                BindingDefinitionDescription bindingDefinitionDescription = BindingDefinitionDescription.CreateBindingDescription(templateDefinition, underlyingDefinition, underlyingDefinition);
                IBindingDefinition           underlyingBindingDefinition  = BindingDefinitionFactory.CreateInstances(templateDefinition, bindingDefinitionDescription);

                IBindingDefinition useFormulaBindingDefinition = null;
                if (!string.IsNullOrEmpty(useFormulaDefinition))
                {
                    bindingDefinitionDescription = BindingDefinitionDescription.CreateBindingDescription(templateDefinition, useFormulaDefinition, useFormulaDefinition);
                    useFormulaBindingDefinition  = BindingDefinitionFactory.CreateInstances(templateDefinition, bindingDefinitionDescription);
                }
                ExcelBindingDefinitionFormulaResult ret = new ExcelBindingDefinitionFormulaResult(bindingDefinitionDescription, underlyingBindingDefinition, useFormulaBindingDefinition);
                return(ret);
            }
            catch (Exception ex)
            {
                string message = $"Cannot retrieve the formula result binding dataAccessor '{definition.EmptyIfNull()}'. {ex.Message}";
                throw new EtkException(message);
            }
        }
Exemple #8
0
        public static IEnumerable <IModelProperty> CreateInstances(IModelType parent, Type type)
        {
            List <IModelProperty> ret = new List <IModelProperty>();

            if (type != null)
            {
                foreach (PropertyInfo pi in type.GetProperties())
                {
                    IBindingDefinition bindingDefinition = BindingDefinitionFactory.CreateInstance(pi);
                    if (bindingDefinition != null)
                    {
                        if (pi.PropertyType.Namespace.Equals("System"))
                        {
                            ret.Add(new ModelLeafProperty(parent, bindingDefinition));
                        }
                        else
                        {
                            ret.Add(new ModelProperty(parent, bindingDefinition));
                        }
                    }
                }
            }
            return(ret);
        }