Exemple #1
0
        /// <summary>
        /// Loads the property metadata for the current type into the schema.
        /// </summary>
        /// <param name="type">The type.</param>
        /// <param name="itemTypeMeta">The properties.</param>
        private void LoadProperties(ItemType type, IReadOnlyItem itemTypeMeta)
        {
            var      props   = itemTypeMeta.Relationships("Property");
            Property newProp = null;

            foreach (var prop in props)
            {
                newProp       = new Property(prop.Property("name").Value);
                newProp.Id    = prop.Id();
                newProp.Label = prop.Property("label").Value;
                newProp.SetType(prop.Property("data_type").Value);
                newProp.Precision    = prop.Property("prec").AsInt(-1);
                newProp.Scale        = prop.Property("scale").AsInt(-1);
                newProp.StoredLength = prop.Property("stored_length").AsInt(-1);
                var foreign = prop.Property("foreign_property").AsItem();
                if (foreign.Exists)
                {
                    newProp.ForeignLinkPropName = prop.Property("data_source").KeyedName().Value;
                    newProp.ForeignPropName     = foreign.Property("name").Value;
                    newProp.ForeignTypeName     = foreign.SourceId().KeyedName().Value;
                }
                newProp.DataSource = prop.Property("data_source").Value;
                if (newProp.Type == PropertyType.item && newProp.Name == "data_source" && type.Name == "Property")
                {
                    newProp.Restrictions.AddRange(new string[] { "ItemType", "List", "Property" });
                }
                else if (newProp.Type == PropertyType.item && prop.Property("data_source").Attribute("name").HasValue())
                {
                    newProp.Restrictions.Add(prop.Property("data_source").Attribute("name").Value);
                }
                newProp.Visibility =
                    (prop.Property("is_hidden").AsBoolean(false) ? PropertyVisibility.None : PropertyVisibility.MainGrid)
                    | (prop.Property("is_hidden2").AsBoolean(false) ? PropertyVisibility.None : PropertyVisibility.RelationshipGrid);
                newProp.SortOrder   = prop.Property("sort_order").AsInt(int.MaxValue);
                newProp.ColumnWidth = prop.Property("column_width").AsInt(100);
                newProp.IsRequired  = prop.Property("is_required").AsBoolean(false);
                newProp.ReadOnly    = prop.Property("readonly").AsBoolean(false);

                //default_value,column_width,is_required,readonly

                type.Properties.Add(newProp.Name, newProp);
            }
        }
Exemple #2
0
        internal static Property FromItem(IReadOnlyItem prop, ItemType type)
        {
            var newProp = new Property(prop.Property("name").Value)
            {
                Id           = prop.Id(),
                Label        = prop.Property("label").Value,
                Precision    = prop.Property("prec").AsInt(-1),
                Scale        = prop.Property("scale").AsInt(-1),
                StoredLength = prop.Property("stored_length").AsInt(-1),
                Description  = prop.Property("help_text").AsString(null) ?? prop.Property("help_tooltip").AsString(null)
            };

            newProp.SetType(prop.Property("data_type").Value);
            var foreign = prop.Property("foreign_property").AsItem();

            if (foreign.Exists)
            {
                newProp.ForeignLinkPropName = prop.Property("data_source").KeyedName().Value;
                newProp.ForeignPropName     = foreign.Property("name").Value;
                newProp.ForeignTypeName     = foreign.SourceId().KeyedName().Value;
            }
            newProp.DataSource = prop.Property("data_source").Value;
            if (newProp.Type == PropertyType.item && newProp.Name == "data_source" && type.Name == "Property")
            {
                newProp.Restrictions.AddRange(new string[] { "ItemType", "List", "Property" });
            }
            else if (newProp.Type == PropertyType.item && prop.Property("data_source").Attribute("name").HasValue())
            {
                newProp.Restrictions.Add(prop.Property("data_source").Attribute("name").Value);
            }
            newProp.Visibility =
                (prop.Property("is_hidden").AsBoolean(false) ? PropertyVisibility.None : PropertyVisibility.MainGrid)
                | (prop.Property("is_hidden2").AsBoolean(false) ? PropertyVisibility.None : PropertyVisibility.RelationshipGrid);
            newProp.SortOrder   = prop.Property("sort_order").AsInt(int.MaxValue);
            newProp.ColumnWidth = prop.Property("column_width").AsInt(100);
            newProp.IsRequired  = prop.Property("is_required").AsBoolean(false);
            newProp.ReadOnly    = prop.Property("readonly").AsBoolean(false);

            return(newProp);
        }
Exemple #3
0
        internal static Property FromItem(IReadOnlyItem prop, ItemType type, Func <string, string> getName = null)
        {
            var newProp = new Property()
            {
                Applicable     = true,
                Name           = prop.Property("name").Value,
                Id             = prop.Id(),
                Label          = prop.Property("label").Value,
                Precision      = prop.Property("prec").AsInt(-1),
                Scale          = prop.Property("scale").AsInt(-1),
                StoredLength   = prop.Property("stored_length").AsInt(-1),
                Description    = prop.Property("help_text").AsString(null) ?? prop.Property("help_tooltip").AsString(null),
                ClassPath      = prop.Property("class_path").Value,
                DefaultSearch  = prop.Property("default_search").Value,
                Pattern        = prop.Property("pattern").Value,
                KeyedNameOrder = prop.Property("keyed_name_order").AsInt(),
                OrderBy        = prop.Property("order_by").AsInt(),
            };

            if (_propertyHelp.TryGetValue(newProp.Name, out var stdDescription))
            {
                newProp.Core        = true;
                newProp.Description = newProp.Description ?? stdDescription;
            }
            if (prop.Property("default_value").HasValue())
            {
                newProp.DefaultValue = prop.Property("default_value").Value;
            }

            newProp.SetType(prop.Property("data_type").Value);
            var foreign = prop.Property("foreign_property").AsItem();

            if (foreign.Exists)
            {
                newProp.ForeignLinkPropName = prop.Property("data_source").KeyedName().Value
                                              ?? prop.Property("data_source").AsItem().Property("name").Value;
                newProp.ForeignPropName = foreign.Property("name").Value
                                          ?? foreign.Property("keyed_name").Value;
                newProp.ForeignTypeName = foreign.SourceId().KeyedName().Value
                                          ?? foreign.SourceId().AsItem().Property("name").Value;
            }
            newProp.DataSource = prop.Property("data_source").Value;
            if (newProp.Type == PropertyType.item && newProp.Name == "data_source" && type.Name == "Property")
            {
                newProp.Restrictions.AddRange(new string[] { "ItemType", "List", "Property" });
            }
            else if (prop.Property("data_source").Attribute("name").HasValue() ||
                     prop.Property("data_source").KeyedName().HasValue())
            {
                newProp.Restrictions.Add(prop.Property("data_source").Attribute("name").Value
                                         ?? prop.Property("data_source").KeyedName().Value);
            }
            else if (prop.Property("data_source").HasValue() && !string.IsNullOrEmpty(prop.Property("data_source").Value))
            {
                var name = getName?.Invoke(prop.Property("data_source").Value);
                if (!string.IsNullOrEmpty(name))
                {
                    newProp.Restrictions.Add(name);
                }
            }
            newProp.Visibility =
                (prop.Property("is_hidden").AsBoolean(false) ? PropertyVisibility.None : PropertyVisibility.MainGrid)
                | (prop.Property("is_hidden2").AsBoolean(false) ? PropertyVisibility.None : PropertyVisibility.RelationshipGrid);
            newProp.SortOrder   = prop.Property("sort_order").AsInt(int.MaxValue);
            newProp.ColumnWidth = prop.Property("column_width").AsInt(100);
            newProp.IsRequired  = prop.Property("is_required").AsBoolean(false);
            newProp.ReadOnly    = prop.Property("readonly").AsBoolean(false);

            switch (newProp.Name)
            {
            case "classification":
                newProp.Applicable = type.ClassPaths.Any() || type.IsPolymorphic || type.IsFederated;
                break;

            case "config_id":
            case "generation":
            case "is_current":
            case "major_rev":
            case "minor_rev":
            case "new_version":
            case "release_date":
                newProp.Applicable = type.IsVersionable || type.IsPolymorphic || type.IsFederated;
                break;

            case "current_state":
            case "is_released":
            case "state":
                newProp.Applicable = type.HasLifeCycle || type.IsPolymorphic || type.IsFederated;
                break;

            case "related_id":
                newProp.Applicable = prop.Property("data_source").HasValue();
                break;
            }

            return(newProp);
        }
    /// <summary>
    /// Loads the property metadata for the current type into the schema.
    /// </summary>
    /// <param name="type">The type.</param>
    /// <param name="itemTypeMeta">The properties.</param>
    private void LoadProperties(ItemType type, IReadOnlyItem itemTypeMeta)
    {
      var props = itemTypeMeta.Relationships("Property");
      Property newProp = null;
      foreach (var prop in props)
      {
        newProp = new Property(prop.Property("name").Value);
        newProp.Label = prop.Property("label").Value;
        newProp.SetType(prop.Property("data_type").Value);
        newProp.Precision = prop.Property("prec").AsInt(-1);
        newProp.Scale = prop.Property("scale").AsInt(-1);
        newProp.StoredLength = prop.Property("stored_length").AsInt(-1);
        var foreign = prop.Property("foreign_property").AsItem();
        if (foreign.Exists)
        {
          newProp.ForeignLinkPropName = prop.Property("data_source").KeyedName().Value;
          newProp.ForeignPropName = foreign.Property("name").Value;
          newProp.ForeignTypeName = foreign.SourceId().KeyedName().Value;
        }
        newProp.DataSource = prop.Property("data_source").Value;
        if (newProp.Type == PropertyType.item && prop.Property("data_source").Attribute("name").HasValue())
        {
          newProp.Restrictions.Add(prop.Property("data_source").Attribute("name").Value);
        }
        newProp.Visibility =
          (prop.Property("is_hidden").AsBoolean(false) ? PropertyVisibility.None : PropertyVisibility.MainGrid)
          | (prop.Property("is_hidden2").AsBoolean(false) ? PropertyVisibility.None : PropertyVisibility.RelationshipGrid);
        newProp.SortOrder = prop.Property("sort_order").AsInt(int.MaxValue);
        newProp.ColumnWidth = prop.Property("column_width").AsInt(100);
        newProp.IsRequired = prop.Property("is_required").AsBoolean(false);
        newProp.ReadOnly = prop.Property("readonly").AsBoolean(false);

        //default_value,column_width,is_required,readonly

        type.Properties.Add(newProp.Name, newProp);
      }
    }