public List <VariableSave> GetExposedVariablesForThisInstance(DataTypes.InstanceSave instance, string parentInstanceName,
                                                                      List <ElementWithState> elementStack, string requiredName)
        {
            List <VariableSave> exposedVariables = new List <VariableSave>();

            if (elementStack.Count > 1)
            {
                ElementWithState containerOfVariables = elementStack[elementStack.Count - 2];
                ElementWithState definerOfVariables   = elementStack[elementStack.Count - 1];

                foreach (VariableSave variable in definerOfVariables.Element.DefaultState.Variables.Where(
                             item => !string.IsNullOrEmpty(item.ExposedAsName) && item.GetRootName() == requiredName))
                {
                    if (variable.SourceObject == instance.Name)
                    {
                        // This variable is exposed, let's see if the container does anything with it

                        VariableSave foundVariable = containerOfVariables.StateSave.GetVariableRecursive(
                            parentInstanceName + "." + variable.ExposedAsName);

                        if (foundVariable != null)
                        {
                            if (!string.IsNullOrEmpty(foundVariable.ExposedAsName))
                            {
                                // This variable is itself exposed, so we should go up one level to see
                                // what's going on.
                                var instanceInParent         = containerOfVariables.Element.GetInstance(parentInstanceName);
                                var parentparentInstanceName = containerOfVariables.InstanceName;

                                List <ElementWithState> stackWithLastRemoved = new List <ElementWithState>();
                                stackWithLastRemoved.AddRange(elementStack);
                                stackWithLastRemoved.RemoveAt(stackWithLastRemoved.Count - 1);

                                var exposedExposed = GetExposedVariablesForThisInstance(instanceInParent, parentparentInstanceName,
                                                                                        stackWithLastRemoved,
                                                                                        // This used to be this:
                                                                                        //foundVariable.ExposedAsName
                                                                                        // But it should be this:
                                                                                        variable.ExposedAsName
                                                                                        );

                                if (exposedExposed.Count != 0)
                                {
                                    foundVariable = exposedExposed.First();
                                }
                            }

                            VariableSave variableToAdd = new VariableSave();
                            variableToAdd.Type      = variable.Type;
                            variableToAdd.Value     = foundVariable.Value;
                            variableToAdd.SetsValue = foundVariable.SetsValue;
                            variableToAdd.Name      = variable.Name.Substring(variable.Name.IndexOf('.') + 1);
                            exposedVariables.Add(variableToAdd);
                        }
                    }
                }
            }

            return(exposedVariables);
        }
Example #2
0
 public List <VariableSave> GetExposedVariablesForThisInstance(DataTypes.InstanceSave instance, string parentInstanceName,
                                                               List <ElementWithState> elementStack)
 {
     return(GetExposedVariablesForThisInstance(instance, parentInstanceName, elementStack, null));
 }