示例#1
0
        /// <summary>
        /// retrieve a clone of the completemetadata, applying evental security restrictions associated for a given user
        /// </summary>
        /// <param name="originalMetadata"></param>
        /// <param name="user"></param>
        /// <returns></returns>
        public static CompleteApplicationMetadataDefinition CloneSecuring(this CompleteApplicationMetadataDefinition originalMetadata,
                                                                          InMemoryUser user)
        {
            var schemas        = originalMetadata.Schemas();
            var securedSchemas = new Dictionary <ApplicationMetadataSchemaKey, ApplicationSchemaDefinition>();

            foreach (var applicationSchema in schemas)
            {
                if (applicationSchema.Value.IsWebPlatform())
                {
                    continue;
                }
                var securedMetadata = originalMetadata.ApplyPolicies(applicationSchema.Key, user, ClientPlatform.Mobile);
                securedSchemas.Add(securedMetadata.Schema.GetSchemaKey(), securedMetadata.Schema);
            }

            return(new CompleteApplicationMetadataDefinition(
                       originalMetadata.Id,
                       originalMetadata.ApplicationName,
                       originalMetadata.Title,
                       originalMetadata.Entity,
                       originalMetadata.IdFieldName,
                       originalMetadata.Parameters, securedSchemas, originalMetadata.DisplayableComponents,
                       originalMetadata.Service));
        }
        private static bool IsAllowedOnApplication(this InMemoryUser user, CompleteApplicationMetadataDefinition application)
        {
            var  appRoles        = RoleManager.ActiveApplicationRoles();
            bool isAppRoleActive = appRoles.Contains(application.Role);

            return(!isAppRoleActive || user.Roles.Any(r => r.Name == application.Role));
        }
示例#3
0
        public static bool IsMobileSupported(this CompleteApplicationMetadataDefinition metadata)
        {
            if (metadata.Parameters.ContainsKey(ApplicationMetadataConstants.MobileDisabled))
            {
                return(false);
            }

            return(metadata.Schemas().Any(s => s.Key.Platform != ClientPlatform.Web));
        }
示例#4
0
        /// <summary>
        /// If there´s a schema named print, use it, otherwise fallback to detail
        /// </summary>
        /// <param name="compositionSchema"></param>
        /// <param name="compositionApplication"></param>
        /// <returns></returns>
        private static ApplicationSchemaDefinition GetPrintSchema(ApplicationCompositionSchema compositionSchema,
                                                                  CompleteApplicationMetadataDefinition compositionApplication, ApplicationSchemaDefinition detailSchema, ApplicationSchemaDefinition listSchema)
        {
            var applicationSchemaDefinitions = compositionApplication.Schemas();
            var printKey = new ApplicationMetadataSchemaKey(compositionSchema.PrintSchema, compositionSchema.RenderMode, ClientPlatform.Web);

            if (applicationSchemaDefinitions.ContainsKey(printKey))
            {
                return(applicationSchemaDefinitions[printKey]);
            }
            return(detailSchema ?? listSchema);
        }
示例#5
0
        public EntityDetailData(CompleteApplicationMetadataDefinition application, string idValue = null)
        {
            this._idValue    = idValue;
            this._idField    = application.IdFieldName;
            this._entityName = application.Entity;

            //TODO: I've hacked this line to use the web schema
            //because currently we don't have an ENTITY METADATA
            //concept. As soons as we have it, the list of ATTRIBUTES
            //should be used instead of the list of FORM FIELDS.
//            this._projectionFields = string.Join(",", application.WebSchema.Fields.Select(f => f.Attribute));
        }
示例#6
0
        //        public bool IsUserInteractionEnabled {
        //            get {
        //                var mobileApplicationSchema = _schema as MobileApplicationSchema;
        //                return mobileApplicationSchema == null || mobileApplicationSchema.IsUserInteractionEnabled;
        //            }
        //        }


        //        public int? FetchLimit {
        //            get { return Schema is MobileApplicationSchema ? ((MobileApplicationSchema)Schema).FetchLimit : (int?)null; }
        //        }


        public static ApplicationMetadata CloneSecuring(CompleteApplicationMetadataDefinition application, ApplicationSchemaDefinition securedSchema)
        {
            return(new ApplicationMetadata(
                       application.Id,
                       application.ApplicationName,
                       application.Title,
                       application.Entity,
                       application.IdFieldName,
                       securedSchema,
                       application.Service
                       ));
        }
示例#7
0
        //        public static ApplicationMetadataDefinition GetMetadata(this CompleteApplicationMetadataDefinition definition) {
        //            var mobileSchema = BuildMobileSchema(definition.Schemas);
        //            return new ApplicationMetadataDefinition(
        //                definition.Id,
        //                definition.Name,
        //                definition.Entity,
        //                definition.Title,
        //                definition.IdFieldName,
        //                mobileSchema);
        //        }

        public static ApplicationSchemaDefinition MobileSchema(this CompleteApplicationMetadataDefinition definition)
        {
            var schema = definition.ExtensionParameter("Schema");

            if (schema != null)
            {
                return((ApplicationSchemaDefinition)schema);
            }
            ApplicationSchemaDefinition mobileSchema = BuildMobileSchema(definition.SchemasList, definition.Parameters);

            definition.ExtensionParameter("Schema", mobileSchema);
            return(mobileSchema);
        }
        public static ApplicationSchemaDefinition SchemaForPlatform([NotNull] this CompleteApplicationMetadataDefinition application, ApplicationMetadataSchemaKey metadataSchemaKey)
        {
            if (application == null)
            {
                throw new ArgumentNullException("application");
            }
            ApplicationSchemaDefinition resultingSchema;

            if (!application.Schemas().TryGetValue(metadataSchemaKey, out resultingSchema))
            {
                throw new InvalidOperationException(String.Format(NoSchemaFound, metadataSchemaKey, application.ApplicationName));
            }
            return((ApplicationSchemaDefinition)resultingSchema);
        }
        public static ApplicationMetadata ApplyPolicies([NotNull] this CompleteApplicationMetadataDefinition application,
                                                        ApplicationMetadataSchemaKey schemaKey, [NotNull] InMemoryUser user, ClientPlatform platform)
        {
            if (application == null)
            {
                throw new ArgumentNullException("application");
            }
            if (user == null)
            {
                throw new ArgumentNullException("user");
            }

            return(new ApplicationMetadataPolicyApplier(application, schemaKey, user, platform).Apply());
        }
        public ApplicationMetadataPolicyApplier([NotNull] CompleteApplicationMetadataDefinition application, ApplicationMetadataSchemaKey schemaKey, [NotNull] InMemoryUser user, ClientPlatform platform)
        {
            if (application == null)
            {
                throw new ArgumentNullException("application");
            }
            if (user == null)
            {
                throw new ArgumentNullException("user");
            }

            _application = application;
            _user        = user;
            _schemaKey   = schemaKey;
            _platform    = platform;
            _result      = new Lazy <ApplicationMetadata>(ApplyImpl);
        }
示例#11
0
        private static ApplicationSchemaDefinition GetDetailSchema(CompleteApplicationMetadataDefinition compositionApplication,
                                                                   ApplicationCompositionSchema compositionSchema)
        {
            if (compositionSchema.DetailSchema == "")
            {
                //This means that the composition is only needed for list visualization
                return(null);
            }
            var detailKey = new ApplicationMetadataSchemaKey(compositionSchema.DetailSchema, compositionSchema.RenderMode, ClientPlatform.Web);
            var applicationSchemaDefinitions = compositionApplication.Schemas();

            if (!applicationSchemaDefinitions.ContainsKey(detailKey))
            {
                throw ExceptionUtil.MetadataException(
                          "detail composition schema {0} not found for application {1}. Use \"\" if you want to specify that this is used only for list", detailKey, compositionApplication.ApplicationName);
            }
            return(applicationSchemaDefinitions[detailKey]);
        }
        public static bool IsSupportedOnPlatform([NotNull] this CompleteApplicationMetadataDefinition application, ClientPlatform platform)
        {
            if (application == null)
            {
                throw new ArgumentNullException("application");
            }

            switch (platform)
            {
            case ClientPlatform.Web:
                return(application.IsWebSupported());

            case ClientPlatform.Mobile:
                return(application.IsMobileSupported());

            default:
                throw new ArgumentOutOfRangeException(platform.ToString());
            }
        }
示例#13
0
        private static ApplicationSchemaDefinition GetListSchema(ApplicationCompositionSchema applicationCompositionSchema, CompleteApplicationMetadataDefinition compositionApplication)
        {
            var collectionSchema = (ApplicationCompositionCollectionSchema)applicationCompositionSchema;
            var listKey          = new ApplicationMetadataSchemaKey(collectionSchema.CollectionProperties.ListSchema,
                                                                    applicationCompositionSchema.RenderMode, ClientPlatform.Web);

            return(compositionApplication.Schemas()[listKey]);
        }
示例#14
0
 public static string ToJson(this CompleteApplicationMetadataDefinition applicationSchemaDefinition)
 {
     return(JsonConvert.SerializeObject(applicationSchemaDefinition, JsonParser.SerializerSettings));
     //            return new JsonApplicationMetadataParser().ToJson(ApplicationSchemaDefinition);
 }
示例#15
0
//        private static ApplicationSchemaDefinition ParseApplication(JObject json)
//        {
//            JsonConvert.DeserializeObject<ApplicationSchemaDefinition>(json, new MetadataConverter());
//
//            var originalMetadata = json.ToObject<ApplicationSchemaDefinition>();
//
//            return originalMetadata;
//
////            return new ApplicationSchemaDefinition(
////                Guid.Parse(json.Value<string>("id")),
////                json.Value<string>("name"),
////                json.Value<string>("title"),
////                json.Value<string>("entity"),
////                json.Value<string>("idFieldName"),
////                ParseSchema(json.Value<JObject>("schema")));
//        }
//
//        class MetadataConverter : CustomCreationConverter<ApplicationSchemaDefinition>
//        {
//            public override ApplicationSchemaDefinition Create(Type objectType)
//            {
//                throw new NotImplementedException();
//            }
//        }
//
//        private static MobileApplicationSchema ParseSchema(JObject mobile)
//        {
//            var isUserInteractionEnabled = mobile.Value<bool>("isUserInteractionEnabled");
//
//            MobileApplicationSchema.Preview title, subtitle, featured, excerpt;
//            title = subtitle = featured = excerpt = null;
//
//            var preview = mobile.Value<JObject>("previewTitle");
//            if (null != preview) title = ParsePreview(preview);
//
//            preview = mobile.Value<JObject>("previewSubtitle");
//            if (null != preview) subtitle = ParsePreview(preview);
//
//            preview = mobile.Value<JObject>("previewFeatured");
//            if (null != preview) featured = ParsePreview(preview);
//
//            preview = mobile.Value<JObject>("previewExcerpt");
//            if (null != preview) excerpt = ParsePreview(preview);
//
//            var fields = ParseFields(mobile.Property("fields").Values());
//            var compositions = ParseCompositions(mobile.Property("compositions").Values());
//
//            return new MobileApplicationSchema(
//                isUserInteractionEnabled,
//                fields,
//                compositions,
//                title,
//                subtitle,
//                featured,
//                excerpt);
//        }
//
//        private static MobileApplicationSchema.Preview ParsePreview(JToken json)
//        {
//            return new MobileApplicationSchema.Preview(
//                    json.Value<string>("label"),
//                    json.Value<string>("attribute"));
//        }
//
//        private static IEnumerable<ApplicationFieldDefinition> ParseFields(IEnumerable<JToken> json)
//        {
//            var tokens = json as IList<JToken> ?? json.ToList();
//
//            return tokens
//                .Cast<JObject>()
//                .Select(j => new ApplicationFieldDefinition(j.Value<string>("attribute"),
//                    j.Value<string>("label"),
//                    j.Value<bool>("isRequired"),
//                    j.Value<bool>("isReadOnly"),
//                    JsonWidgetParser.Parse(j.Value<JObject>("widget"))))
//                .ToList();
//        }
//
//        private static IEnumerable<ApplicationComposition> ParseCompositions(IEnumerable<JToken> json)
//        {
//            var tokens = json as IList<JToken> ?? json.ToList();
//
//            return tokens
//                .Cast<JObject>()
//                .Select(j => new ApplicationComposition(
//                    j.Value<string>("from"),
//                    ParseEntityAssociation(j.Value<JObject>("entityAssociation"))))
//                .ToList();
//        }
//
//        private static EntityAssociation ParseEntityAssociation(JToken json)
//        {
//            return new EntityAssociation(
//                json.Value<string>("to"),
//                ParseEntityAssociationAttributes(json.Value<JArray>("attributes")));
//        }
//
//        private static IEnumerable<EntityAssociationAttribute> ParseEntityAssociationAttributes(IEnumerable<JToken> json)
//        {
//            var tokens = json as IList<JToken> ?? json.ToList();
//
//            return tokens
//                .Cast<JObject>()
//                .Select(j => new EntityAssociationAttribute(
//                    j.Value<string>("to"),
//                    j.Value<string>("from"),
//                    j.Value<string>("literal")))
//                .ToList();
//        }
//
        public string ToJson(CompleteApplicationMetadataDefinition ApplicationSchemaDefinition)
        {
            return(JsonConvert.SerializeObject(ApplicationSchemaDefinition, JsonParser.SerializerSettings()));
        }
 public static ApplicationMetadata ApplyPoliciesWeb([NotNull] this CompleteApplicationMetadataDefinition application,
                                                    ApplicationMetadataSchemaKey schemaKey)
 {
     return(new ApplicationMetadataPolicyApplier(application, schemaKey, SecurityFacade.CurrentUser(), ClientPlatform.Web).Apply());
 }
示例#17
0
 public static bool IsWebSupported(this CompleteApplicationMetadataDefinition metadata)
 {
     return(metadata.Schemas().Any(s => s.Key.Platform != ClientPlatform.Mobile));
 }