public void Build(Solution solution, bool onlyResources, bool checkTabularSectionKey = false, bool filtersOnly = false) { String configurationFile = System.IO.Path.Combine(solution.SolutionFolder, @"configuration\configuration.xml"); Factory factory = new Factory(); Dictionary<String, Parameter> globalParameters = factory.GetGlobalParameters(configurationFile); List<Entity> entities = new List<Entity>(); entities.AddRange(factory.GetEntities(configurationFile, checkTabularSectionKey)); entities.AddRange(factory.GetResources(solution.DeviceResourceFolder)); entities.AddRange(factory.GetAdmin()); Dictionary<String, List<Constant>> constants = factory.GetConstants(configurationFile); ConfigVersion configVersion = factory.GetVersion(configurationFile); Config config = new Config(configVersion, solution.DatabaseName, entities, globalParameters, constants); if (onlyResources) BuildResources(config, solution); else { if (filtersOnly) BuildFilters(config, solution); else { BuildAll(config, solution); InsertConstants(solution); } } }
private void BuildFilters(Config config, Solution solution) { //remove existing filters try { using (SqlConnection conn = new SqlConnection(solution.ConnectionString)) { conn.Open(); SqlCommand cmd = new SqlCommand("[admin].RemoveFilters", conn); cmd.CommandType = System.Data.CommandType.StoredProcedure; SqlCommandBuilder.DeriveParameters(cmd); cmd.ExecuteNonQuery(); } } catch { } //create new ones String solutionFolder = solution.SolutionFolder; if (deleteTempFiles) { solutionFolder = System.IO.Path.Combine(System.IO.Path.GetTempPath(), Guid.NewGuid().ToString()); Directory.CreateDirectory(solutionFolder); Directory.CreateDirectory(System.IO.Path.Combine(solutionFolder, @"Database")); Directory.CreateDirectory(System.IO.Path.Combine(solutionFolder, @"configuration")); Directory.CreateDirectory(System.IO.Path.Combine(solutionFolder, @"sqlite")); } solution.Log("Start updating solution"); Dictionary<String, String> tempFiles = GetTempFiles(solutionFolder); DatabaseFactory.DatabaseFactory dbf = new DatabaseFactory.DatabaseFactory(solution.ConnectionString); //filters String filtersScript; if (solution.IsAsured) filtersScript = new FiltersAzure(config).TransformText(); else filtersScript = new Filters(config).TransformText(); System.IO.File.WriteAllText(tempFiles["filters"], filtersScript); dbf.RunScript(filtersScript); solution.Log("Filters ok"); //sync patch String syncPatchScript = new SyncPatch2(config).TransformText(); System.IO.File.WriteAllText(tempFiles["syncpatch"], syncPatchScript); dbf.RunScript(syncPatchScript); solution.Log("Sync patch ok"); solution.Log("Solution has been successfully updated"); }
private static void Inizializzazione() { //Controllo se l'xml è valido if (!XmlValidator.ValidaXml(out _avviso, LocalPath + "\\config.xsd", LocalPath + "\\config.xml")) throw new Exception(_avviso); //Recupero la configurazione try { using (var fileStream = new FileStream(LocalPath + "\\config.xml", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { _config = new XmlSerializer(typeof (Config)).Deserialize(fileStream) as Config; if (_config == null) return; } } catch (Exception) { return; } }
/// <summary> /// Loads Configs and ConsoleCommands /// </summary> public override void Load() { #region Settings Load ConsoleUtils.ShowStatus("Loading config files..."); Config conf = new Config(); bool error = false; if (!conf.Read("conf/auth-server.opt")) error = true; if (!conf.Read("conf/inter-server.opt")) error = true; if (error) { ConsoleUtils.ShowNotice("Fix config errors and restart the server."); return; } Settings.Set(conf.Data); ConsoleUtils.ShowHeader(Settings.WindowTitle); ConsoleUtils.ShowNotice("Config files loaded."); // Apply console filters aftere the notice that config files were loaded, // so if notice is disabled, it avoids the feel that configs were never loaded. if (conf.Data.ContainsKey("console_silent")) { int consoleSilent; if (Int32.TryParse(conf.Data["console_silent"], out consoleSilent)) ConsoleUtils.SetDisplaySettings((ConsoleUtils.MsgType)consoleSilent); else ConsoleUtils.ShowError("Invalid 'console_silent' value. Defaulting to 0..."); } #endregion ConsoleCommands.Load(GetConsoleCommands()); }
/// <summary> /// Uninstalls the plugin. Should reverse all changes made during Install /// </summary> /// <param name="c"/> /// <returns/> public bool Uninstall(Config c) { return false; }
/// <summary> /// Installs the plugin in the specified Config instance. The plugin must handle all the work of loading settings, registering the plugin etc. /// </summary> /// <param name="c"/> /// <returns/> public IPlugin Install(Config c) { documentStore.Initialize(); c.Plugins.add_plugin(this); c.Pipeline.PostAuthorizeRequestStart += delegate(IHttpModule sender2, HttpContext context) { //Only work with database images //This allows us to resize database images without putting ".jpg" after the ID in the path. if (c.Pipeline.PreRewritePath.StartsWith(s.VirtualPathPrefix, StringComparison.OrdinalIgnoreCase)) c.Pipeline.SkipFileTypeCheck = true; //Skip the file extension check. FakeExtensions will still be stripped. }; c.Pipeline.RewriteDefaults += delegate(IHttpModule sender, HttpContext context, ImageResizer.Configuration.IUrlEventArgs e) { //Only work with database images //Non-images will be served as-is //Cache all file types, whether they are processed or not. if (s.CacheUnmodifiedFiles && e.VirtualPath.StartsWith(s.VirtualPathPrefix, StringComparison.OrdinalIgnoreCase)) e.QueryString["cache"] = ServerCacheMode.Always.ToString(); }; c.Pipeline.PostRewrite += delegate(IHttpModule sender, HttpContext context, ImageResizer.Configuration.IUrlEventArgs e) { //Only work with database images //If the data is untrusted, always re-encode each file. if (s.UntrustedData && e.VirtualPath.StartsWith(s.VirtualPathPrefix, StringComparison.OrdinalIgnoreCase)) e.QueryString["process"] = ImageResizer.ProcessWhen.Always.ToString(); }; if (s.RegisterAsVirtualPathProvider) { try { HostingEnvironment.RegisterVirtualPathProvider(this); } catch (SecurityException) { this._failedToRegisterVpp = true; } } return this; }
private void CheckMetaVersion(Config config, Solution solution) { Common.Logon.CheckSupportedMetaVersion(solution.Name, config.ConfigVersion.Version); }
private void BuildResources(Config config, Solution solution) { if (solution.ResourcesExists) { //check if settings.xml exists if (!System.IO.File.Exists(solution.SettingsFile)) throw new Exception("File settings.xml not found in resource folder"); CheckMetaVersion(config, solution); PopulateResources(solution.ConnectionString, solution.DeviceResourceFolder); } }
private void BuildAll(Config config, Solution solution) { String solutionFolder = solution.SolutionFolder; CreateSolutionFolders(solutionFolder); if (deleteTempFiles) { solutionFolder = System.IO.Path.Combine(System.IO.Path.GetTempPath(), Guid.NewGuid().ToString()); Directory.CreateDirectory(solutionFolder); Directory.CreateDirectory(System.IO.Path.Combine(solutionFolder, @"Database")); Directory.CreateDirectory(System.IO.Path.Combine(solutionFolder, @"configuration")); Directory.CreateDirectory(System.IO.Path.Combine(solutionFolder, @"sqlite")); } solution.Log("Start building solution"); Dictionary<String, String> tempFiles = GetTempFiles(solutionFolder); DatabaseFactory.DatabaseFactory dbf = null; //init database dbf = new DatabaseFactory.DatabaseFactory(solution.DatabaseServer); String dropDatabaseScript; if (solution.IsAsured) dropDatabaseScript = new DropDatabaseAzure(config).TransformText(); else dropDatabaseScript = new DropDatabase(config).TransformText(); System.IO.File.WriteAllText(tempFiles["dropdatabase"], dropDatabaseScript); try { dbf.RunScript(dropDatabaseScript); } catch (Exception) { } String createDatabaseScript; if(solution.IsAsured) createDatabaseScript = new CreateDatabaseAzure(config).TransformText(); else createDatabaseScript = new CreateDatabase(config).TransformText(); System.IO.File.WriteAllText(tempFiles["createdatabase"], createDatabaseScript); dbf.RunScript(createDatabaseScript); solution.Log("DB scripts ok"); //create database dbf = new DatabaseFactory.DatabaseFactory(solution.ConnectionString); String dbScript = new Database(config).TransformText(); System.IO.File.WriteAllText(tempFiles["database"], dbScript); dbf.RunScript(dbScript); solution.Log("Database ok"); System.Data.SqlClient.SqlConnection.ClearAllPools(); //sort tables SyncOrder.Initialize(solution.ConnectionString); SyncOrder.Sort(config.Entities); //provisioning String syncConfig = tempFiles["syncconfig"]; System.IO.File.WriteAllText(syncConfig, new SyncConfig(config, solution.ConnectionString).TransformText()); dbf.Provision(new String[] { "/mode:provision", String.Format("/scopeconfig:{0}", syncConfig) }); solution.Log("Provision ok"); //filters String filtersScript; if (solution.IsAsured) filtersScript = new FiltersAzure(config).TransformText(); else filtersScript = new Filters(config).TransformText(); System.IO.File.WriteAllText(tempFiles["filters"], filtersScript); dbf.RunScript(filtersScript); solution.Log("Filters ok"); //sync patch String syncPatchScript = new SyncPatch2(config).TransformText(); System.IO.File.WriteAllText(tempFiles["syncpatch"], syncPatchScript); dbf.RunScript(syncPatchScript); solution.Log("Sync patch ok"); //admin dbScript = new DatabaseAdmin(config).TransformText(); System.IO.File.WriteAllText(tempFiles["admin"], dbScript); dbf.RunScript(dbScript); solution.Log("Admin ok"); //clustered primary keys patch config.BuildClusteredPrimaryKeys(solution.ConnectionString); String keysPatchScript = new KeysPatch(config).TransformText(); System.IO.File.WriteAllText(tempFiles["keyspatch"], keysPatchScript); dbf.RunScript(keysPatchScript); solution.Log("Clustered keys patch ok"); if (solution.IsAsured) { //clustered primary keys patch config.BuildNonClusteredPrimaryKeys(solution.ConnectionString); String azureKeysPatchScript = new AzureKeysPatch(config).TransformText(); System.IO.File.WriteAllText(tempFiles["azurekeyspatch"], azureKeysPatchScript); dbf.RunScript(azureKeysPatchScript); solution.Log("Non clustered keys patch ok"); solution.Log("Default NEWID values on tabular sections ok"); } else { String nonAzureKeysPatchScript = new NonAzureKeysPatch(config).TransformText(); System.IO.File.WriteAllText(tempFiles["azurekeyspatch"], nonAzureKeysPatchScript); dbf.RunScript(nonAzureKeysPatchScript); solution.Log("Default NEWSEQUENTIALID values on tabular sections ok"); } //initial load String dataLoadScript = new DataLoad(config).TransformText(); System.IO.File.WriteAllText(tempFiles["dataload"], dataLoadScript); dbf.RunScript(dataLoadScript); solution.Log("initial data load ok"); //sqlite String sqlieScript = new SQLiteDatabase(config).TransformText(); System.IO.File.WriteAllText(tempFiles["sqlite"], sqlieScript); if(!System.IO.Directory.Exists(System.IO.Path.Combine(solution.SolutionFolder,"sqlite"))) System.IO.Directory.CreateDirectory(System.IO.Path.Combine(solution.SolutionFolder,"sqlite")); String sqlitedb = System.IO.Path.Combine(solution.SolutionFolder, @"sqlite\sqlite.db"); if (System.IO.File.Exists(sqlitedb)) System.IO.File.Delete(sqlitedb); //SQLiteDatabaseFactory dbflite = new SQLiteDatabaseFactory(sqlitedb); //dbflite.CreateDatabase(); //dbflite.RunScript(sqlieScript); //dbflite.InsertMetadata(solution.ConfigurationFile); solution.Log("sqlite ok"); System.IO.File.WriteAllText(System.IO.Path.Combine(solution.SolutionFolder, @"Code\Server.cs"), new Server(config).TransformText()); System.IO.File.WriteAllText(System.IO.Path.Combine(solution.SolutionFolder, @"Code\Client.cs"), new Client(config).TransformText()); System.IO.File.WriteAllText(System.IO.Path.Combine(solution.SolutionFolder, @"Code\ClientMetadata.cs"), new ClientMetadata(config).TransformText()); System.IO.File.WriteAllText(System.IO.Path.Combine(solution.SolutionFolder, @"Code\ClientConstants.cs"), new ClientConstants(config).TransformText()); System.IO.File.WriteAllText(System.IO.Path.Combine(solution.SolutionFolder, @"Code\Fake.cs"), new Fake().TransformText()); System.IO.File.WriteAllText(System.IO.Path.Combine(solution.SolutionFolder, @"Code\DbFake.cs"), new DbFake().TransformText()); solution.Log("Code generation ok"); BuildClientDll(solution.SolutionFolder); solution.Log("Client dll ok"); BuildServerDll(solution.SolutionFolder); solution.Log("Server dll ok"); BuildResources(config, solution); solution.Log("Resources ok"); if (deleteTempFiles) { foreach (var entry in tempFiles) System.IO.File.Delete(entry.Value); } solution.Log("Solution has been successfully built"); }