public static string GetFieldName <TRoot>(Expression <Func <TRoot, object> > sourceProperty) { var propertyChain = PropertyChainFromExp.Get(sourceProperty); List <string> names = new List <string>(); foreach (var prop in propertyChain) { var attrs = (DisplayAttribute[])prop.GetCustomAttributes(typeof(DisplayAttribute), false); string namepart; if ((attrs != null) && (attrs.Length > 0)) { namepart = StringWorks.StringToPascalCase(attrs[0].GetName()); } else { namepart = prop.Name; } foreach (var symb in RemovedSimbols) { namepart = namepart.Replace(symb, ""); } names.Add(namepart); } var name = String.Join(".", names); return(name); }
void ExecuteMicroUpdates() { Version currentDB; if (MainSupport.BaseParameters.All.ContainsKey("micro_updates")) { currentDB = Version.Parse(MainSupport.BaseParameters.All["micro_updates"]); } else { currentDB = Version.Parse(MainSupport.BaseParameters.Version); } while (DBUpdater.microUpdates.Exists(u => u.Source == currentDB)) { var update = DBUpdater.microUpdates.Find(u => u.Source == currentDB); RunOneUpdate(update, String.Format("Устанавливаем микро-обновление {0}", StringWorks.VersionToShortString(update.Destanation))); currentDB = update.Destanation; MainSupport.BaseParameters.UpdateParameter( QSMain.ConnectionDB, "micro_updates", StringWorks.VersionToShortString(currentDB) ); } }
void UpdateSize() { label1.LabelProp = String.Empty; if (File != null) { label1.LabelProp = StringWorks.BytesToIECUnitsString((uint)File.LongLength); } }
void ConfigureDlg() { yentryName.Binding.AddBinding(Entity, e => e.Name, w => w.Text).InitializeFromSource(); ylabelSize.Binding.AddFuncBinding(Entity, e => StringWorks.BytesToIECUnitsString((ulong)e.FileSize), w => w.LabelProp).InitializeFromSource(); ycomboType.ItemsEnum = typeof(ContractType); ycomboType.Binding.AddBinding(Entity, e => e.TemplateType, w => w.SelectedItem).InitializeFromSource(); Entity.PropertyChanged += Entity_PropertyChanged; }
public static void Main(string[] args) { Application.Init(); QSMain.SubscribeToUnhadledExceptions(); QSMain.GuiThread = System.Threading.Thread.CurrentThread; QSSupportLib.MainSupport.Init(); CreateProjectParam(); // Создаем окно входа Login LoginDialog = new Login(); LoginDialog.Logo = Gdk.Pixbuf.LoadFromResource("BioGorod.Icons.logo.png"); LoginDialog.SetDefaultNames("BioGorod"); LoginDialog.DefaultLogin = "******"; LoginDialog.DefaultServer = "localhost"; LoginDialog.UpdateFromGConf(); ResponseType LoginResult; LoginResult = (ResponseType)LoginDialog.Run(); if (LoginResult == ResponseType.DeleteEvent || LoginResult == ResponseType.Cancel) { return; } LoginDialog.Destroy(); //Настройка базы CreateBaseConfig(); //Настрока удаления ConfigureDeletion(); //Настройка карты GMap.NET.MapProviders.GMapProvider.UserAgent = String.Format("{0}/{1} used GMap.Net/{2} ({3})", QSSupportLib.MainSupport.ProjectVerion.Product, StringWorks.VersionToShortString(QSSupportLib.MainSupport.ProjectVerion.Version), StringWorks.VersionToShortString(System.Reflection.Assembly.GetAssembly(typeof(GMap.NET.MapProviders.GMapProvider)).GetName().Version), Environment.OSVersion.VersionString ); GMap.NET.MapProviders.GMapProvider.Language = GMap.NET.LanguageType.Russian; //Запускаем программу MainWin = new MainWindow(); QSMain.ErrorDlgParrent = MainWin; if (QSMain.User.Login == "root") { return; } MainWin.Show(); Application.Run(); }
public void GetOnlyLettersAndDigitsTest() { try { StringWorks sw = new StringWorks(); String retVal = sw.GetOnlyLettersAndDigits("ABC 123*D9"); Assert.IsTrue(retVal.Equals("ABC123D9", StringComparison.CurrentCulture)); } catch (Exception exUnhandled) { Assert.Fail(exUnhandled.Message); } } // END public void GetOnlyLettersAndDigitsTest()
public void ReverseWordTest() { try { StringWorks sw = new StringWorks(); String retVal = sw.ReverseString("my dog has fleas"); Assert.IsTrue(retVal.Equals("saelf sah god ym", StringComparison.CurrentCulture)); } catch (Exception exUnhandled) { Assert.Fail(exUnhandled.Message); } } // END public void ReverseWordltTest()
public DBUpdateProcess(UpdateHop hop) { this.Build(); updateHop = hop; progressbarTotal.Text = String.Format("Обновление: {0} → {1}", StringWorks.VersionToShortString(updateHop.Source), StringWorks.VersionToShortString(updateHop.Destanation) ); string fileName = System.IO.Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Резервные копии", String.Format("{0}{1:yyMMdd-HHmm}.sql", MainSupport.ProjectVerion.Product, DateTime.Now) ); entryFileName.Text = fileName; }
private static void NotAdminErrorAndExit(bool isMicro, Version from, Version to) { MessageDialog md = new MessageDialog(null, DialogFlags.DestroyWithParent, MessageType.Error, ButtonsType.Close, String.Format( "Для работы текущей версии программы необходимо провести{0} обновление базы ({1} -> {2}), " + "но у вас нет для этого прав. Зайдите в программу под администратором.", isMicro ? " микро" : "", StringWorks.VersionToShortString(from), StringWorks.VersionToShortString(to) )); md.Show(); md.Run(); md.Destroy(); Environment.Exit(1); }
protected void OnButtonOkClicked(object sender, EventArgs e) { try { if (checkCreateBackup.Active) { if (ExecuteBackup()) { return; } } logger.Info("Обновляем базу данных до версии {0}", StringWorks.VersionToShortString(updateHop.Destanation)); logger.Info("Проверяем все ли микро обновления установленны."); ExecuteMicroUpdates(); logger.Info("Устанавливаем основное обновление."); RunOneUpdate(updateHop, String.Format("Обновление базы данных до версии {0}", StringWorks.VersionToShortString(updateHop.Destanation) )); if (MainSupport.BaseParameters.All.ContainsKey("micro_updates")) { MainSupport.BaseParameters.RemoveParameter(QSMain.ConnectionDB, "micro_updates"); } MainSupport.LoadBaseParameters(); logger.Info("Доустанавливаем микро обновления."); ExecuteMicroUpdates(); progressbarTotal.Adjustment.Value = progressbarTotal.Adjustment.Upper; logger.Info("Обновление до версии {0}, завершено.", StringWorks.VersionToShortString(updateHop.Destanation)); Success = true; Respond(Gtk.ResponseType.Ok); } catch (Exception ex) { QSMain.ErrorMessageWithLog("Ошибка при обновлении базы..", logger, ex); buttonOk.Sensitive = false; return; } }
private int FillCleanItemsOperation(IDeleteInfo currentDeletion, Operation parentOperation, TreeIter parentIter, EntityDTO masterEntity, ref int totalCount) { int clearCount = 0; foreach (var cleanDepend in currentDeletion.ClearItems) { int groupCount = 0; var childClassInfo = cleanDepend.GetClassInfo(); if (childClassInfo == null) { throw new InvalidOperationException(String.Format("Зависимость очистки у класса {0} ссылается на класс {1} для которого нет описания.", currentDeletion.ObjectClass, cleanDepend.ObjectClass)); } var childList = childClassInfo.GetDependEntities(this, cleanDepend, masterEntity); if (childList.Count == 0) { continue; } TreeIter GroupIter = ObjectsTreeStore.AppendNode(parentIter); var cleanOper = childClassInfo.CreateClearOperation(masterEntity, cleanDepend, childList); parentOperation.ChildBeforeOperations.Add(cleanOper); foreach (var item in childList) { ObjectsTreeStore.AppendValues(GroupIter, item.Title); groupCount++; totalCount++; clearCount++; } CheckDlg.AddLinksCount(groupCount); if (CheckDlg.IsCanceled) { return(0); } ObjectsTreeStore.SetValues(GroupIter, String.Format("{0}({1})", StringWorks.StringToTitleCase(childClassInfo.ObjectsName), groupCount)); } return(clearCount); }
public void IsOnlyLettersAndOrDigits() { try { StringWorks sw = new StringWorks(); Boolean retVal = sw.IsOnlyLettersAndOrDigits("a0Bc9DeF7gH"); Assert.IsTrue(retVal); retVal = sw.IsOnlyLettersAndOrDigits("ABC 123*D9"); Assert.IsFalse(retVal); } catch (Exception exUnhandled) { Assert.Fail(exUnhandled.Message); } } // END public void IsOnlyLettersTest()
void MenuitemSelectFromClient_Activated(object sender, EventArgs e) { equipmentToSetSerial = ytreeEquipment.GetSelectedObject <ReceptionEquipmentItemNode>(); var filter = new ClientBalanceFilter(UoW); filter.SetAndRefilterAtOnce( x => x.RestrictCounterparty = equipmentToSetSerial.ServiceClaim.Counterparty, x => x.RestrictNomenclature = x.UoW.GetById <Nomenclature>(equipmentToSetSerial.NomenclatureId) ); var selectFromClientDlg = new PermissionControlledRepresentationJournal(new Vodovoz.ViewModel.ClientEquipmentBalanceVM(filter)); selectFromClientDlg.CustomTabName( string.Format( "Оборудование у {0}", StringWorks.EllipsizeEnd(equipmentToSetSerial.ServiceClaim.Counterparty.Name, 50) ) ); selectFromClientDlg.ObjectSelected += SelectFromClientDlg_ObjectSelected; MyTab.TabParent.AddSlaveTab(MyTab, selectFromClientDlg); }
public static string GetCollectionName(Expression <Func <TDoc, IList <TRow> > > sourceProperty) { var propertyChain = PropertyChainFromExp.Get(sourceProperty); List <string> names = new List <string>(); foreach (var prop in propertyChain) { var attrs = (DisplayAttribute[])prop.GetCustomAttributes(typeof(DisplayAttribute), false); string namepart; if ((attrs != null) && (attrs.Length > 0)) { namepart = StringWorks.StringToPascalCase(attrs[0].GetName()); } else { namepart = prop.Name; } names.Add(namepart); } var name = String.Join(".", names); return(name); }
public static void CheckMicroUpdates() { Version currentDB = new Version(); if (MainSupport.BaseParameters.All.ContainsKey("micro_updates")) { currentDB = Version.Parse(MainSupport.BaseParameters.All["micro_updates"]); } var dbMainVersion = Version.Parse(MainSupport.BaseParameters.Version); if (currentDB < dbMainVersion) { currentDB = dbMainVersion; } logger.Info("Проверяем микро обновления базы(текущая версия:{0})", StringWorks.VersionToShortString(currentDB)); var beforeUpdates = currentDB; while (microUpdates.Exists(u => u.Source == currentDB)) { var update = microUpdates.Find(u => u.Source == currentDB); if (!QSMain.User.Admin) { NotAdminErrorAndExit(true, update.Source, update.Destanation); } logger.Info("Обновляемся до {0}", StringWorks.VersionToShortString(update.Destanation)); var trans = QSMain.ConnectionDB.BeginTransaction(); try { string sql; using (Stream stream = update.Assembly.GetManifestResourceStream(update.Resource)) { if (stream == null) { throw new InvalidOperationException(String.Format("Ресурс {0} указанный в обновлениях не найден.", update.Resource)); } StreamReader reader = new StreamReader(stream); sql = reader.ReadToEnd(); } var cmd = QSMain.ConnectionDB.CreateCommand(); cmd.CommandText = sql; cmd.Transaction = trans; cmd.ExecuteNonQuery(); trans.Commit(); currentDB = update.Destanation; } catch (Exception ex) { trans.Rollback(); QSMain.ErrorMessageWithLog("Ошибка при обновлении базы..", logger, ex); return; } } if (currentDB != beforeUpdates) { MainSupport.BaseParameters.UpdateParameter( QSMain.ConnectionDB, "micro_updates", StringWorks.VersionToShortString(currentDB) ); MessageDialogWorks.RunInfoDialog("Выполнено микро обновление базы {0} -> {1}.", StringWorks.VersionToShortString(beforeUpdates), StringWorks.VersionToShortString(currentDB)); } }
/// <summary> /// Проверяем версию базы. Можно запускать неоднократно, вернет true если есть сообщение. /// </summary> public static bool Check() { ResultFlags = CheckBaseResult.Ok; if (string.IsNullOrWhiteSpace(MainSupport.BaseParameters.Product)) { ResultFlags |= CheckBaseResult.IncorrectProduct; TextMessage = "Название продукта в базе данных не указано."; return(true); } if (MainSupport.BaseParameters.Product != MainSupport.ProjectVerion.Product) { ResultFlags |= CheckBaseResult.IncorrectProduct; TextMessage = "База данных от другого продукта."; logger.Fatal("База данных от другого продукта. (База: {0} Программа: {1})", MainSupport.BaseParameters.Product, MainSupport.ProjectVerion.Product ); return(true); } Version baseVersion; if (String.IsNullOrWhiteSpace(MainSupport.BaseParameters.Version) || !Version.TryParse(MainSupport.BaseParameters.Version, out baseVersion)) { ResultFlags |= CheckBaseResult.IncorrectVersion; TextMessage = "Версия базы данных не определена."; return(true); } if (MainSupport.ProjectVerion.Version.Major != baseVersion.Major || MainSupport.ProjectVerion.Version.Minor != baseVersion.Minor) { TextMessage = "Версия продукта не совпадает с версией базы данных.\n"; TextMessage += String.Format("Версия продукта: {0}", StringWorks.VersionToShortString(MainSupport.ProjectVerion.Version)); TextMessage += "\nВерсия базы данных: " + MainSupport.BaseParameters.Version; if (MainSupport.ProjectVerion.Version > baseVersion) { ResultFlags |= CheckBaseResult.BaseVersionLess; } else { ResultFlags |= CheckBaseResult.BaseVersionGreater; } return(true); } if (String.IsNullOrWhiteSpace(MainSupport.BaseParameters.Edition)) { TextMessage = "Редакция базы не указана!"; ResultFlags |= CheckBaseResult.UnsupportEdition; return(true); } if (!MainSupport.ProjectVerion.AllowEdition.Contains(MainSupport.BaseParameters.Edition)) { ResultFlags |= CheckBaseResult.UnsupportEdition; TextMessage = "Редакция базы данных не поддерживается.\n"; TextMessage += "Редакция продукта: " + MainSupport.ProjectVerion.Edition + "\nРедакция базы данных: " + MainSupport.BaseParameters.Edition; return(true); } return(false); }
private int FillDeleteItemsOperation(IDeleteInfo currentDeletion, Operation parentOperation, TreeIter parentIter, EntityDTO masterEntity, ref int totalCount) { int deleteCount = 0; foreach (var delDepend in currentDeletion.DeleteItems) { int GroupCount = 0; var childClassInfo = delDepend.GetClassInfo(); if (childClassInfo == null) { throw new InvalidOperationException(String.Format("Зависимость удаления у класса(таблицы) {0}({1}) ссылается на класс(таблицу) {2}({3}) для которого нет описания.", currentDeletion.ObjectClass, currentDeletion is DeleteInfo ? (currentDeletion as DeleteInfo).TableName : String.Empty, delDepend.ObjectClass, delDepend.TableName)); } var childList = childClassInfo.GetDependEntities(this, delDepend, masterEntity).ToList(); if (childList.Count == 0) { continue; } foreach (var chk in DeletedItems.Where(x => x.ItemClass == childClassInfo.ObjectClass)) { childList.RemoveAll(e => e.Id == chk.ItemId); } if (childList.Count == 0) { continue; } TreeIter GroupIter = ObjectsTreeStore.AppendNode(parentIter); var delOper = childClassInfo.CreateDeleteOperation(masterEntity, delDepend, childList); if (delDepend.IsCascade) { parentOperation.ChildAfterOperations.Add(delOper); } else { parentOperation.ChildBeforeOperations.Add(delOper); } foreach (var row in childList) { TreeIter ItemIter = ObjectsTreeStore.AppendValues(GroupIter, row.Title); DeletedItems.Add(new DeletedItem { ItemClass = childClassInfo.ObjectClass, ItemId = row.Id, Title = row.Title }); totalCount += FillChildOperation(childClassInfo, delOper, ItemIter, row); if (CheckDlg.IsCanceled) { return(0); } GroupCount++; totalCount++; deleteCount++; } CheckDlg.AddLinksCount(GroupCount); ObjectsTreeStore.SetValues(GroupIter, String.Format("{0}({1})", StringWorks.StringToTitleCase(childClassInfo.ObjectsName), GroupCount)); } return(deleteCount); }
static void ShowDialog(bool updateRequired) { string message = String.Empty; string tempPath = Path.Combine(Path.GetTempPath(), String.Format(@"QSInstaller-{0}.exe", Guid.NewGuid().ToString().Substring(0, 8))); bool loadingComplete = false; ProgressBar updateProgress; updateProgress = new ProgressBar(); updateProgress.Text = "Новая версия скачивается, подождите..."; VBox vbox = new VBox(); vbox.PackStart(updateProgress, true, true, 0); WebClient webClient = new WebClient(); webClient.DownloadFileCompleted += (sender, e) => Application.Invoke(delegate { loadingComplete = true; var isMapped = updateWindow.IsMapped; updateWindow.Destroy(); if (isMapped && e.Error == null && !e.Cancelled) { logger.Info("Скачивание обновления завершено. Запускаем установку..."); Process File = new Process(); File.StartInfo.FileName = tempPath; try { File.Start(); Environment.Exit(0); } catch (Exception ex) { ShowErrorDialog("Не удалось запустить скачанный файл."); logger.Error(ex, "Не удалось запустить скачанный установщик."); } } else if (e.Error != null) { ShowErrorDialog("Не удалось скачать файл."); } logger.Error(e.Error, "Не удалось скачать файл обновления."); }); webClient.DownloadProgressChanged += (sender, e) => Application.Invoke(delegate { updateProgress.Fraction = e.ProgressPercentage / 100.0; }); updateWindow.SetSizeRequest(300, 25); updateWindow.Resizable = false; updateWindow.SetPosition(WindowPosition.Center); if (updateRequired) { updateWindow.DeleteEvent += delegate { Environment.Exit(0); } } ; updateWindow.Add(vbox); if (updateResult.HasUpdate && !updateRequired) { message = String.Format("<b>Доступна новая версия программы!</b>\n" + "Доступная версия: {0} (У вас установлена версия {1})\n" + "Вы хотите скачать и установить новую версию?\n\n" + (updateResult.UpdateDescription != String.Empty ? "<b>Информация об обновлении:</b>\n{2}" : "{2}"), StringWorks.VersionToShortString(updateResult.NewVersion), StringWorks.VersionToShortString(MainSupport.ProjectVerion.Version), updateResult.UpdateDescription); } else if (updateResult.HasUpdate && updateRequired) { message = String.Format("<b>Доступна новая версия программы!</b>\n" + "Доступная версия: {0} (У вас установлена версия {1})\n" + "<b>Для продолжения работы вам необходимо установить данное обновление.</b>\n\n" + (updateResult.UpdateDescription != String.Empty ? "<b>Информация об обновлении:</b>\n{2}" : "{2}"), StringWorks.VersionToShortString(updateResult.NewVersion), StringWorks.VersionToShortString(MainSupport.ProjectVerion.Version), updateResult.UpdateDescription); } else if (!updateResult.HasUpdate && !updateRequired) { message = String.Format("<b>Ваша версия программного продукта: {0}</b>\n\n" + "На данный момент это самая последняя версия.\n" + "Обновление не требуется.", StringWorks.VersionToShortString(MainSupport.ProjectVerion.Version)); } else if (!updateResult.HasUpdate && updateRequired) { ShowErrorDialog("Необходимое обновление программы не найдено.\n" + CheckBaseVersion.TextMessage); Environment.Exit(1); } try { UpdaterDialog updaterDialog = new UpdaterDialog(message, updateResult, updateRequired); ResponseType result = (ResponseType)updaterDialog.Run(); updaterDialog.Destroy(); if (result == ResponseType.Ok) { updateWindow.ShowAll(); logger.Info("Скачивание обновления началось."); logger.Debug("Скачиваем из {0} в {1}", updateResult.FileLink, tempPath); webClient.DownloadFileAsync(new Uri(updateResult.FileLink), tempPath); // Ждем окончания загрузки файла не возвращая управление, иначе в процессе скачивания продолжется работа, а это не надо во всех случаях while (!loadingComplete) { if (Gtk.Application.EventsPending()) { Gtk.Application.RunIteration(); } else { Thread.Sleep(50); } } } else if (updateRequired) { Environment.Exit(0); } else if (updateResult.HasUpdate) { ConfigFileUpdater(result == ResponseType.Cancel || result == ResponseType.DeleteEvent); } } catch (Exception ex) { logger.Error(ex, "Ошибка доступа к серверу обновления."); ShowErrorDialog("Извините, сервер обновления не работает."); } }
public static void TryUpdate() { logger.Debug(System.Reflection.Assembly.GetCallingAssembly().FullName); Version currentDB = Version.Parse(MainSupport.BaseParameters.Version); var appVersion = MainSupport.ProjectVerion.Version; if (currentDB.Major == appVersion.Major && currentDB.Minor == appVersion.Minor) { return; } var update = updates.Find(u => u.Source == currentDB); if (update != null) { if (!QSMain.User.Admin) { NotAdminErrorAndExit(false, update.Source, update.Destanation); } var dlg = new DBUpdateProcess(update); dlg.Show(); dlg.Run(); if (!dlg.Success) { Environment.Exit(1); } dlg.Destroy(); MainSupport.LoadBaseParameters(); if (appVersion.Major != update.Destanation.Major && appVersion.Minor != update.Destanation.Minor) { TryUpdate(); } } else { logger.Error("Версия базы не соответствует программе, но обновление не найдено"); ShowErrorAndExit(CheckBaseVersion.TextMessage + String.Format("\nОбновление базы для версии {0} не поддерживается.", StringWorks.VersionToShortString(currentDB))); } }