class MappingProposedListener implements CustomEventListener<MappingProposedMessage> {
        /** {@inheritDoc} */
        @Override public void onCustomEvent(
                AffinityTopologyVersion topVer,
                ClusterNode snd,
                MappingProposedMessage msg
        ) {<FILL_FUNCTION_BODY>}

        /**
         * @param mappingItem Mapping item.
         * @param conflictingClsName Conflicting class name.
         */
        private IgniteCheckedException duplicateMappingException(
                MarshallerMappingItem mappingItem,
                String conflictingClsName
        ) {
            return new IgniteCheckedException("Duplicate ID [platformId="
                    + mappingItem.platformId()
                    + ", typeId="
                    + mappingItem.typeId()
                    + ", oldCls="
                    + conflictingClsName
                    + ", newCls="
                    + mappingItem.className() + "]");
        }
    }

            if (!ctx.isStopping()) {
                if (msg.duplicated())
                    return;

                if (!msg.inConflict()) {
                    MarshallerMappingItem item = msg.mappingItem();
                    MappedName existingName = marshallerCtx.onMappingProposed(item);

                    if (existingName != null) {
                        String existingClsName = existingName.className();

                        if (existingClsName.equals(item.className()) && !existingName.accepted())
                            msg.markDuplicated();
                        else if (!existingClsName.equals(item.className()))
                            msg.conflictingWithClass(existingClsName);
                    }
                }
                else {
                    UUID origNodeId = msg.origNodeId();

                    if (origNodeId.equals(ctx.localNodeId())) {
                        GridFutureAdapter<MappingExchangeResult> fut = mappingExchangeSyncMap.get(msg.mappingItem());

                        assert fut != null : msg;

                        fut.onDone(MappingExchangeResult.createFailureResult(
                                duplicateMappingException(msg.mappingItem(), msg.conflictingClassName())));
                    }
                }
            }
        
<methods>public void collectGridNodeData(org.apache.ignite.spi.discovery.DiscoveryDataBag) ,public void collectJoiningNodeData(org.apache.ignite.spi.discovery.DiscoveryDataBag) ,public org.apache.ignite.internal.GridComponent.DiscoveryDataExchangeType discoveryDataType() ,public void onDisconnected(IgniteFuture<?>) throws org.apache.ignite.IgniteCheckedException,public void onGridDataReceived(org.apache.ignite.spi.discovery.DiscoveryDataBag.GridDiscoveryData) ,public void onJoiningNodeDataReceived(org.apache.ignite.spi.discovery.DiscoveryDataBag.JoiningNodeDiscoveryData) ,public void onKernalStart(boolean) throws org.apache.ignite.IgniteCheckedException,public void onKernalStop(boolean) ,public IgniteInternalFuture<?> onReconnected(boolean) throws org.apache.ignite.IgniteCheckedException,public void printMemoryStats() ,public void start() throws org.apache.ignite.IgniteCheckedException,public void stop(boolean) throws org.apache.ignite.IgniteCheckedException,public java.lang.String toString() ,public org.apache.ignite.spi.IgniteNodeValidationResult validateNode(org.apache.ignite.cluster.ClusterNode) ,public org.apache.ignite.spi.IgniteNodeValidationResult validateNode(org.apache.ignite.cluster.ClusterNode, org.apache.ignite.spi.discovery.DiscoveryDataBag.JoiningNodeDiscoveryData) <variables>private static final java.lang.String DIAGNOSTIC_LOG_CATEGORY,protected final non-sealed org.apache.ignite.internal.GridKernalContext ctx,protected final non-sealed org.apache.ignite.IgniteLogger diagnosticLog,protected final non-sealed org.apache.ignite.IgniteLogger log