/// <summary>
        /// Sincronizza i valori dei campi del Controllo con i valori della classe dell'oggetto del DB
        /// In caso di passaggio dati verso il database ( false ) restituisce false se i campi obbligatori non sono valorizzati
        /// </summary>
        /// <param name="storage">classe oggetto del db</param>
        /// <param name="fromStorage">true o false per la direzione del sincronismo dati</param>
        /// <returns>bool</returns>
        private bool SyncroMemoryDB(StorageRule storageRule, Boolean fromStorage)
        {
            Boolean campiRequiredPopolati = false;

            if (fromStorage)
            {
                // Popolo i controlli dai valori ottenuti dalla classe dell'oggetto DB
                if (storageRule.Attribute != null)
                {
                    cbArchive.SelectedValue  = storageRule.Attribute.Archive.IdArchive;
                    cbAttribute.DataSource   = attributes.Where(x => x.Archive.IdArchive == (Guid)cbArchive.SelectedValue).ToList();
                    cbAttribute.SelectedItem = storageRule.Attribute;
                }
                txtOrder.Text  = Convert.ToString(storageRule.RuleOrder);
                txtFilter.Text = storageRule.RuleFilter;
                txtFormat.Text = storageRule.RuleFormat;
                cbRuleOperators.SelectedItem = storageRule.RuleOperator;

                campiRequiredPopolati = true;
            }
            else
            {
                // Qui controllo che i campi obbligatori siano valorizzati
                if (String.IsNullOrEmpty(txtFilter.Text) || String.IsNullOrEmpty(txtOrder.Text) || cbAttribute.SelectedValue == null)
                {
                    campiRequiredPopolati = false;
                }
                else
                {
                    // Popolo la classe dell'oggetto DB col valore dei controlli
                    storageRule.Storage      = storage;
                    storageRule.Attribute    = (BiblosDs.Document.AdminCentral.ServiceReferenceAdministration.Attribute)cbAttribute.SelectedItem;
                    storageRule.RuleOrder    = (short)txtOrder.Value;
                    storageRule.RuleFilter   = txtFilter.Text;
                    storageRule.RuleFormat   = txtFormat.Text;
                    storageRule.RuleOperator = (RuleOperator)cbRuleOperators.SelectedItem;
                    campiRequiredPopolati    = true;
                }
            }
            return(campiRequiredPopolati);
        }
        private void AssignAttributes(BindingList <BiblosDs.Document.AdminCentral.ServiceReferenceAdministration.Attribute> attribs)
        {
            attributes = attribs;

            ServiceReferenceAdministration.Attribute attr = attributes.First();

            cbAttribute.DataSource   = attributes;
            cbAttribute.Text         = attr.Name;
            cbAttribute.SelectedItem = attr;

            cbRuleOperators.SelectedIndex = 0;

            if (InputParameters["Action"].ToString().ToLower() == "modify")
            {
                storageRule = Client.GetStorageRule(currentIdStorage, attr.IdAttribute);

                txtFilter.Text = storageRule.RuleFilter;
                txtFormat.Text = storageRule.RuleFormat;
                txtOrder.Value = storageRule.RuleOrder;
                cbRuleOperators.SelectedItem = storageRule.RuleOperator;
                cbRuleOperators.Text         = storageRule.RuleOperator.Descrizione;
            }
        }
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            this.currentIdStorage = (Guid)InputParameters["IdStorage"];

            switch (InputParameters["Action"].ToString().ToLower())
            {
            case "addnew":
                // In inserimento creo uno storage vuoto
                //(DocumentArchive)e.Argument = new DocumentArchive();
                storageRule = new StorageRule();
                if (InputParameters["IdArchive"].ToString() != String.Empty)
                {
                    attributes = Client.GetAttributesFromArchive((Guid)InputParameters["IdArchive"]);
                }
                break;

            case "modify":
                // Se sto modificando carico i dati da modificare
                storageRule = Client.GetStorageRule(this.currentIdStorage, (Guid)InputParameters["IdAttribute"]);
                //attributes = Client.GetAttributesFromArchive((Guid)InputParameters["IdArchive"]);
                break;
            }
            archives = Client.GetArchivesFromStorage(this.currentIdStorage);
            if (archives.Count <= 0)
            {
                RadMessageBox.Show("No archives associated with this storage.",
                                   "Error",
                                   MessageBoxButtons.OK,
                                   RadMessageIcon.Error);
                BackToSenderControl(null, null);
            }

            ruleOperators = Client.GetRuleOperators();

            storage = Client.GetStorage(this.currentIdStorage);

            if (InputParameters["Action"].ToString().ToLower() == "modify")
            {
                BindingList <StorageRule> rules;
                this.attributes = new BindingList <ServiceReferenceAdministration.Attribute>();
                bool    foundedSomething = false, invalidArchive;
                Archive arc;
                for (int i = 0; i < archives.Count; i++)
                {
                    arc            = archives[i];
                    invalidArchive = true;
                    rules          = Client.GetStorageRules(this.currentIdStorage, arc.IdArchive);

                    this.archiveAtributes.Add(arc.IdArchive, new BindingList <ServiceReferenceAdministration.Attribute>());

                    foreach (StorageRule r in rules)
                    {
                        if (r.Attribute != null && (!r.Attribute.IsVisible.HasValue || r.Attribute.IsVisible.Value))
                        {
                            r.Attribute.Archive = arc;
                            this.archiveAtributes[arc.IdArchive].Add(r.Attribute);
                            this.attributes.Add(r.Attribute);
                            foundedSomething = true;
                            invalidArchive   = false;
                        }
                    }
                    if (invalidArchive)
                    {
                        this.archives.RemoveAt(i--);
                    }
                }

                if (!foundedSomething)
                {
                    RadMessageBox.Show("No Archives or Attributes was founded valid for this operation.",
                                       "Error",
                                       MessageBoxButtons.OK,
                                       RadMessageIcon.Error);
                    BackToSenderControl(null, null);
                }
            }
        }