예제 #1
0
        private static void CreateSection(CrudOperationData jsonObject, StringBuilder sb,
                                          ApplicationSection section)
        {
            if (section.Parameters.ContainsKey("nodescription"))
            {
                return;
            }

            var sectionHeader = OpenSection(section);
            var displayables  = DisplayableUtil.GetDisplayable <IApplicationAttributeDisplayable>(
                typeof(IApplicationAttributeDisplayable), section.Displayables, true, true);

            if (section.Id == "specification")
            {
                sb.Append(sectionHeader);
                HandleSpecifications(sb, (string)jsonObject.GetAttribute(section.Id), section);
                return;
            }
            var st = DoHandleDisplayables(jsonObject, displayables);

            if (!String.IsNullOrEmpty(st))
            {
                sb.Append(sectionHeader);
                sb.Append(st);
            }
        }
예제 #2
0
        public MobileApplicationSchema(

            bool isUserInteractionEnabled,
            IEnumerable <IApplicationDisplayable> fields,
            Preview previewTitle, Preview previewSubtitle, Preview previewFeatured, Preview previewExcerpt)
        {
            _isUserInteractionEnabled = isUserInteractionEnabled;
            _fields          = DisplayableUtil.GetDisplayable <ApplicationFieldDefinition>(typeof(ApplicationFieldDefinition), fields);
            Compositions     = DisplayableUtil.GetDisplayable <ApplicationCompositionDefinition>(typeof(ApplicationCompositionDefinition), fields);
            _previewTitle    = previewTitle;
            _previewSubtitle = previewSubtitle;
            _previewFeatured = previewFeatured;
            _previewExcerpt  = previewExcerpt;
        }
        private static List <IApplicationDisplayable> MergeParentSchemaDisplayables(ApplicationSchemaDefinition childSchema, IApplicationDisplayableContainer parentContainer)
        {
            var resultingDisplayables = new List <IApplicationDisplayable>();
            var parentDisplayables    = parentContainer.Displayables;
            var childSections         = DisplayableUtil.GetDisplayable <ApplicationSection>(typeof(ApplicationSection), childSchema.Displayables);

            foreach (var dis in parentDisplayables)
            {
                var parentSection = dis as ApplicationSection;
                if (parentSection == null)
                {
                    //just adding the non-section displayable, on the child schema
                    resultingDisplayables.Add(dis);
                    continue;
                }

                var concreteSection = childSections.FirstOrDefault(s => s.Id == parentSection.Id);
                if (concreteSection == null)
                {
                    //put the abstract anyway so that eventual subclasses of this can use it as well
                    var cloneable          = dis as IPCLCloneable;
                    var clonedSection      = (ApplicationSection)cloneable.Clone();
                    var resultDisplayables = MergeParentSchemaDisplayables(childSchema, clonedSection);
                    clonedSection.Displayables = resultDisplayables;
                    resultingDisplayables.Add(clonedSection);
                }
                else
                {
                    if (concreteSection.OrientationEnum == ApplicationSectionOrientation.horizontal)
                    {
                        resultingDisplayables.Add(concreteSection);
                    }
                    else if (concreteSection.OrientationEnum == ApplicationSectionOrientation.vertical)
                    {
                        foreach (var sectionDisplayable in concreteSection.Displayables)
                        {
                            resultingDisplayables.Add(sectionDisplayable);
                        }
                    }
                }
            }
            return(resultingDisplayables);
        }
예제 #4
0
        private static object CloneAndResolve([NotNull] IPCLCloneable declaredDisplayable, ApplicationSchemaDefinition schema, ReferenceDisplayable reference)
        {
            var clonedDisplayable = (declaredDisplayable).Clone();

            if (clonedDisplayable == null)
            {
                throw ExceptionUtil.InvalidOperation("wrong clone implementation of component. returnin null", declaredDisplayable.GetType().Name);
            }

            foreach (var propertyInfo in clonedDisplayable.GetType().GetProperties())
            {
                if (!propertyInfo.CanRead && propertyInfo.CanWrite)
                {
                    continue;
                }
                var componentValue = propertyInfo.GetValue(clonedDisplayable);
                var stringValue    = componentValue as string;
                if (stringValue == null || !stringValue.StartsWith(PropReference))
                {
                    //nothing to do
                    continue;
                }
                var value = GetPropertyValue(schema, reference, stringValue);
                propertyInfo.SetValue(clonedDisplayable, value);
            }

            if (clonedDisplayable is IApplicationDisplayableContainer)
            {
                //sections
                var innerDisplayables = ((IApplicationDisplayableContainer)clonedDisplayable).Displayables;
                ((IApplicationDisplayableContainer)clonedDisplayable).Displayables = DisplayableUtil.PerformReferenceReplacement(innerDisplayables, schema,
                                                                                                                                 ComponentDisplayableResolver);

                var section = clonedDisplayable as ApplicationSection;
                if (section != null && section.Header != null)
                {
                    section.Header = (ApplicationHeader)CloneAndResolve(section.Header, schema, reference);
                }
            }
            return(clonedDisplayable);
        }
예제 #5
0
 public IList <T> GetDisplayable <T>(Type displayableType, bool fetchInner = true)
 {
     return(DisplayableUtil.GetDisplayable <T>(displayableType, Displayables, fetchInner));
 }
예제 #6
0
 protected IList <T> GetDisplayable <T>(Type displayableType)
 {
     return(DisplayableUtil.GetDisplayable <T>(displayableType, Displayables));
 }