/// <summary>
        ///
        /// </summary>
        /// <param name="id"></param>
        /// <param name="descp"></param>
        /// <param name="?"></param>
        /// <returns></returns>
        /// <exception cref="ParametersException">Parameters Exception</exception>
        /// <exception cref="MasterDataIdentityExists">Duplicated master data identity exists </exception>
        /// <exception cref="MasterDataIdentityNotDefined">Master data identity is not defined</exception>
        /// <exception cref="ArgumentNullException">Argument is null</exception>
        /// <exception cref="SystemException">Bug</exception>
        public override MasterDataBase CreateNewMasterDataBase(MasterDataIdentity id,
                                                               String descp, params Object[] objects)
        {
            // check parameters
            if (id == null ||
                descp == null)
            {
                throw new ArgumentNullException();
            }
            if (objects.Length != 0)
            {
                throw new ParametersException(0, objects.Length);
            }

            // check identity is duplicated
            if (_list.ContainsKey(id))
            {
                throw new MasterDataIdentityExists();
            }

            CustomerMasterData customer = new CustomerMasterData(_coreDriver, _management, id, descp);

            this._containDirtyData = true;
            this._list.Add(id, customer);

            // raise create master data
            _coreDriver.ListenerMgmt.CreateMasterData(this, customer);
            _coreDriver.logDebugInfo(this.GetType(), 84,
                                     String.Format("Create customer (%s).", customer.Identity.ToString()),
                                     MessageType.INFO);
            return(customer);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="id"></param>
        /// <param name="descp"></param>
        /// <param name="?"></param>
        /// <returns></returns>
        /// <exception cref="ParametersException">Parameters Exception</exception>
        /// <exception cref="MasterDataIdentityExists">Duplicated master data identity exists </exception>
        /// <exception cref="MasterDataIdentityNotDefined">Master data identity is not defined</exception>
        /// <exception cref="ArgumentNullException">Argument is null</exception>
        /// <exception cref="SystemException">Bug</exception>
        public override MasterDataBase CreateNewMasterDataBase(MasterDataIdentity id,
                String descp, params Object[] objects)
        {
            // check parameters
            if (id == null
                || descp == null)
            {
                throw new ArgumentNullException();
            }
            if (objects.Length != 0)
            {
                throw new ParametersException(0, objects.Length);
            }

            // check identity is duplicated
            if (_list.ContainsKey(id))
            {
                throw new MasterDataIdentityExists();
            }

            CustomerMasterData customer = new CustomerMasterData(_coreDriver, _management, id, descp);

            this._containDirtyData = true;
            this._list.Add(id, customer);

            // raise create master data
            _coreDriver.ListenerMgmt.CreateMasterData(this, customer);
            _coreDriver.logDebugInfo(this.GetType(), 84,
                    String.Format("Create customer (%s).", customer.Identity.ToString()),
                    MessageType.INFO);
            return customer;
        }
        /// <summary>
        /// Parse master data from XElement
        /// </summary>
        /// <param name="coreDriver"></param>
        /// <param name="elem"></param>
        /// <returns></returns>
        /// <exception cref="MasterDataFileFormatException">Master Data file exception</exception>
        /// <exception cref="ArgumentNullException">Argument is null.</exception>
        /// <exception cref="SystemException">Bug</exception>
        public override MasterDataBase ParseMasterData(CoreDriver coreDriver, XElement elem)
        {
            if (coreDriver == null ||
                elem == null)
            {
                throw new ArgumentNullException();
            }
            XAttribute idAttr    = elem.Attribute(MasterDataUtils.XML_ID);
            XAttribute descpAttr = elem.Attribute(MasterDataUtils.XML_DESCP);

            try
            {
                MasterDataIdentity identity = new MasterDataIdentity(
                    idAttr.Value);

                CustomerMasterData customer = (CustomerMasterData)this
                                              .CreateNewMasterDataBase(identity, descpAttr.Value);

                _coreDriver.logDebugInfo(this.GetType(), 130,
                                         String.Format("Parse customer ({0}).", customer.Identity.ToString()),
                                         MessageType.INFO);
                return(customer);
            }
            catch (IdentityTooLong e)
            {
                _coreDriver.logDebugInfo(this.GetType(), 150, e.Message, MessageType.ERRO);
                throw new MasterDataFileFormatException(MasterDataType.CUSTOMER);
            }
            catch (IdentityNoData e)
            {
                _coreDriver
                .logDebugInfo(this.GetType(), 154, e.Message,
                              MessageType.ERRO);
                throw new MasterDataFileFormatException(MasterDataType.CUSTOMER);
            }
            catch (IdentityInvalidChar e)
            {
                _coreDriver.logDebugInfo(this.GetType(), 160,
                                         e.Message, MessageType.ERRO);
                throw new MasterDataFileFormatException(MasterDataType.CUSTOMER);
            }
            catch (ParametersException e)
            {
                _coreDriver.logDebugInfo(this.GetType(), 164, e.Message,
                                         MessageType.ERRO);
                throw new SystemException(e);
            }
            catch (MasterDataIdentityExists e)
            {
                _coreDriver.logDebugInfo(this.GetType(), 168, e.Message, MessageType.ERRO);
                throw new MasterDataFileFormatException(MasterDataType.CUSTOMER);
            }
        }