private void LoadPowerBiTemplateFile(string path)
        {
            SourceType = ModelSourceType.Pbit;
            Source     = path;

            pbit = new PowerBiTemplate(path);
            InitModelFromJson(pbit.ModelJson);
        }
        /// <summary>
        /// Loads an Analysis Services tabular database (Compatibility Level 1200 or newer) from a file
        /// or folder.
        /// </summary>
        /// <param name="path"></param>
        public TabularModelHandler(string path, TabularModelHandlerSettings settings = null)
        {
            Settings = settings ?? TabularModelHandlerSettings.Default;

            Singleton = this;
            server    = null;

            var    fi = new FileInfo(path);
            string data;

            if (fi.Exists && fi.Extension == ".pbit")
            {
                pbit       = new PowerBiTemplate(path);
                data       = pbit.ModelJson;
                SourceType = ModelSourceType.Pbit;
                Source     = path;
            }
            else

            if (!fi.Exists || fi.Name == "database.json")
            {
                if (fi.Name == "database.json")
                {
                    path = fi.DirectoryName;
                }

                if (Directory.Exists(path))
                {
                    data = CombineFolderJson(path);
                }
                else
                {
                    throw new FileNotFoundException();
                }

                SourceType = ModelSourceType.Folder;
                Source     = path;
            }
            else
            {
                data       = File.ReadAllText(path);
                SourceType = ModelSourceType.File;
                Source     = path;
            }
            database           = TOM.JsonSerializer.DeserializeDatabase(data);
            CompatibilityLevel = database.CompatibilityLevel;

            Status = "File loaded succesfully.";
            Init();

            var serializeOptionsAnnotation = Model.GetAnnotation("TabularEditor_SerializeOptions");

            if (serializeOptionsAnnotation != null)
            {
                SerializeOptions = JsonConvert.DeserializeObject <SerializeOptions>(serializeOptionsAnnotation);
            }

            // Check if translations / perspectives are stored locally in the model:
            if (SourceType == ModelSourceType.Folder && (SerializeOptions.LocalTranslations || SerializeOptions.LocalPerspectives))
            {
                UndoManager.Enabled = false;
                BeginUpdate("Apply translations and perspectives from annotations");

                var translationsJson = Model.GetAnnotation("TabularEditor_Cultures");
                if (SerializeOptions.LocalTranslations && translationsJson != null)
                {
                    Model.Cultures.FromJson(translationsJson);

                    foreach (var item in AllTranslatableObjects)
                    {
                        item.LoadTranslations();
                    }
                }

                var perspectivesJson = Model.GetAnnotation("TabularEditor_Perspectives");
                if (SerializeOptions.LocalPerspectives && perspectivesJson != null)
                {
                    Model.Perspectives.FromJson(perspectivesJson);

                    foreach (var item in AllPerspectiveObjects)
                    {
                        item.LoadPerspectives();
                    }
                }

                EndUpdate();
                UndoManager.Enabled = true;
            }
        }