/// <summary>
        /// Gets the mediator related to the adapter. The mediator should interpret the adapters generic
        /// data and map them to the general event style of the interaction manager events.
        /// </summary>
        /// <param name="adapter">The adapter.</param>
        /// <returns>A mediator for interpreting the adapter buttons</returns>
        public static IBrailleIOButtonMediator GetMediator(IBrailleIOAdapter adapter)
        {
            if (adapter == null) return null;
            BrailleIODevice device = adapter.Device;
            IBrailleIOButtonMediator mediator;
            if (MediatorList.TryGetValue(device.Name, out mediator)) { return mediator; }

            Type mediatorType;
            if (MediatorClassList.TryGetValue(adapter.GetType().ToString(), out mediatorType))
            {
                if (mediatorType != null)
                {
                    try
                    {
                        var obj = (IBrailleIOButtonMediator)Activator.CreateInstance(mediatorType);
                        MediatorList.TryAdd(device.Name, obj);
                        if (obj is AbstractBrailleIOButtonMediatorBase)
                        {
                            ((AbstractBrailleIOButtonMediatorBase)obj).setDevice(device);
                        }
                        return obj;
                    }
                    catch (System.Exception) { }
                }
            }
            return null;
        }