public void saveTSFLibrary(dbTSFLibrary library) { if (library.id == null) { library.DataState = BASEBean.eDataState.DS_ADD; library.id = Guid.NewGuid(); } library.save(); }
private void SaveSelectedSignalModel() { HourGlass.Start(); try { SignalDAO dao = DataManager.getSignalDAO(); if (_signalModelLibrary != null) { dao.DeleteTSFLibrary(_signalModelLibrary.TSFLibrary.uuid, _signalModelLibrary.TSFLibrary.targetNamespace); var library = new dbTSFLibrary(); library.IncludeKeyOnInsert = true; library.lastUpdate = DateTime.UtcNow; library.id = Guid.Parse(_signalModelLibrary.TSFLibrary.uuid); library.content = _signalModelLibrary.XmlContent; library.targetNamespace = _signalModelLibrary.TSFLibrary.targetNamespace; library.libraryName = _signalModelLibrary.TSFLibrary.name; library.DataState = (!dao.hasTSFLibrary(_signalModelLibrary.TSFLibrary.uuid)) ? BASEBean.eDataState.DS_ADD : BASEBean.eDataState.DS_EDIT; library.save(); foreach (SignalModel sm in _signalModelLibrary.SignalModels.Values) { TSFType tsf = sm.TSF; dbSignal dataSignal = dao.getSignal(sm.Name, library.targetNamespace); if (dataSignal == null) { //Add Signal to the database string baseSignalName = sm.BaseSignalName; dbSignal baseSignal = dao.getSignal(baseSignalName, sm.BaseSignalNameSpace); dataSignal = new dbSignal(); dataSignal.ParentSignal = baseSignal; dataSignal.signalName = sm.Name; dataSignal.uuid = Guid.Parse(tsf.uuid); dataSignal.xmlns = library.targetNamespace; foreach (SignalAttribute attribute in sm.Attributes) { var a = new dbSignalAttribute(); a.attributeName = attribute.Name; a.defaultValue = attribute.DefaultValue; a.DataState = BASEBean.eDataState.DS_ADD; a.type = attribute.SchemaType; a.fixedValue = attribute.FixedValue; if (dataSignal.Attributes == null) { dataSignal.Attributes = new List <dbSignalAttribute>(); } dataSignal.Attributes.Add(a); } dataSignal.DataState = BASEBean.eDataState.DS_ADD; } else { dataSignal.xmlns = library.targetNamespace; dataSignal.uuid = Guid.Parse(tsf.uuid); List <dbSignalAttribute> attributes = dataSignal.Attributes; var attrMap = new Dictionary <string, SignalAttribute>(); var dbAttrMap = new Dictionary <string, dbSignalAttribute>(); foreach (SignalAttribute sa in sm.Attributes) { attrMap.Add(sa.Name, sa); } foreach (dbSignalAttribute dbAttribute in attributes) { string an = dbAttribute.attributeName; dbAttrMap.Add(an, dbAttribute); if (attrMap.ContainsKey(an)) { SignalAttribute sa = attrMap[an]; dbAttribute.type = sa.SchemaType; dbAttribute.defaultValue = sa.DefaultValue; dbAttribute.fixedValue = sa.FixedValue; dbAttribute.DataState = BASEBean.eDataState.DS_EDIT; } else { dbAttribute.DataState = BASEBean.eDataState.DS_DELETE; } } foreach (SignalAttribute sa in sm.Attributes) { if (!dbAttrMap.ContainsKey(sa.Name)) { var dbAttribute = new dbSignalAttribute(); dbAttribute.type = sa.SchemaType; dbAttribute.defaultValue = sa.DefaultValue; dbAttribute.fixedValue = sa.FixedValue; dbAttribute.DataState = BASEBean.eDataState.DS_ADD; dataSignal.Attributes.Add(dbAttribute); } } dataSignal.DataState = BASEBean.eDataState.DS_EDIT; } dataSignal.xmlns = _signalModelLibrary.TSFLibrary.targetNamespace; dataSignal.save(); } foreach (ListViewItem item in lvSignals.Items) { var model = item.Tag as SignalModel; if (model != null) { var signal = new dbTSFSignal(); signal.signalName = model.Name; signal.id = Guid.Parse(model.TSF.uuid); signal.signalContent = model.TSF.Serialize(); signal.libraryUuid = _signalModelLibrary.TSFLibrary.uuid; signal.DataState = (!dao.hasTSFSignal(model.TSF.uuid) ? BASEBean.eDataState.DS_ADD : BASEBean.eDataState.DS_EDIT); signal.lastUpdate = DateTime.UtcNow; try { signal.save(); } catch (Exception e) { if (e.Message.ToLower().Contains("duplicate")) { TestSignalBean otherSignal = dao.getTSFSignal(model.Name, _signalModelLibrary.TSFLibrary.uuid); LogManager.Error("UUID Conflict between document data and the database for Signal {0} in Signal Library {1} ", model.Name, library.libraryName); if (otherSignal != null) { LogManager.Error("\tDocument signal uuid {0}, Database signal uuid {{{1}}} ", model.TSF.uuid, otherSignal.id.ToString().ToUpper()); if (dao.changeTSFSignalId(otherSignal.id, Guid.Parse(model.TSF.uuid))) { LogManager.Info( "The Database signal uuid has been changed to reflect the Document signal uuid"); signal.DataState = BASEBean.eDataState.DS_EDIT; signal.save(); } } } } } } } } catch (Exception e) { LogManager.Error(e, "An error has occured saving the signal model library: {0}", e.Message); } finally { HourGlass.Stop(); if (_signalModelLibrary == null) { MessageBox.Show(Resources.A_Signal_Model_must_be_selected_to_save_); } else { LogManager.Trace(Resources.Completed_Saving_Selected_Signal_Model); MessageBox.Show(Resources.Completed_Saving_Selected_Signal_Model); } } }