// Path: src/main/java/io/jafka/utils/Utils.java
// public static int getInt(Properties props, String name) {
//     if (props.containsKey(name)) {
//         return getInt(props, name, -1);
//     }
//     throw new IllegalArgumentException("Missing required property '" + name + "'");
// }
// 
// Path: src/main/java/io/jafka/utils/Utils.java
// public static Properties getProps(Properties props, String name, Properties defaultProperties) {
//     final String propString = props.getProperty(name);
//     if (propString == null) return defaultProperties;
//     String[] propValues = propString.split(",");
//     if (propValues.length < 1) {
//         throw new IllegalArgumentException("Illegal format of specifying properties '" + propString + "'");
//     }
//     Properties properties = new Properties();
//     for (int i = 0; i < propValues.length; i++) {
//         String[] prop = propValues[i].split("=");
//         if (prop.length != 2) throw new IllegalArgumentException("Illegal format of specifying properties '" + propValues[i] + "'");
//         properties.put(prop[0], prop[1]);
//     }
//     return properties;
// }
// 
// Path: src/main/java/io/jafka/utils/Utils.java
// public static String getString(Properties props, String name, String defaultValue) {
//     return props.containsKey(name) ? props.getProperty(name) : defaultValue;
// }
// 
// Path: src/main/java/io/jafka/producer/SyncProducerConfig.java
// public class SyncProducerConfig implements SyncProducerConfigShared {
// 
//     protected final Properties props;
// 
//     final int bufferSize;
// 
//     final int connectTimeoutMs;
// 
//     final int socketTimeoutMs;
// 
//     final int reconnectInterval;
// 
//     final int reconnectTimeInterval;
// 
//     final int maxMessageSize;
// 
//     public SyncProducerConfig(Properties props) {
//         this.props = props;
//         this.bufferSize = getInt(props, "buffer.size", 100 * 1024);
//         this.connectTimeoutMs = getInt(props, "connect.timeout.ms", 5000);
//         this.socketTimeoutMs = getInt(props, "socket.timeout.ms", 30000);
//         this.reconnectInterval = getInt(props, "reconnect.interval", 100000);
//         this.reconnectTimeInterval = getInt(props, "reconnect.time.interval.ms", 1000 * 1000 * 10);
//         this.maxMessageSize = getInt(props, "max.message.size", 1000 * 1000);//1MB
//         //
//     }
// 
//     /**
//      * @return the host
//      */
//     public String getHost() {
//         return getString(props, "host");
//     }
// 
//     /**
//      * @return the port
//      */
//     public int getPort() {
//         return getInt(props, "port");
//     }
// 
//     public Properties getProperties() {
//         return props;
//     }
// 
//     public int getBufferSize() {
//         return bufferSize;
//     }
// 
//     public int getConnectTimeoutMs() {
//         return connectTimeoutMs;
//     }
// 
//     public int getSocketTimeoutMs() {
//         return socketTimeoutMs;
//     }
// 
// 
//     public int getMaxMessageSize() {
//         return maxMessageSize;
//     }
// 
//     public String getSerializerClass() {
//         return getString(props, "serializer.class", DefaultEncoders.class.getName());
//     }
// }


import static io.jafka.utils.Utils.getInt;
import static io.jafka.utils.Utils.getProps;
import static io.jafka.utils.Utils.getString;
import java.util.Properties;
import io.jafka.producer.SyncProducerConfig;
/**
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 * 
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package io.jafka.producer.async;





/**
 * @author adyliu (imxylz@gmail.com)
 * @since 1.0
 */
public class AsyncProducerConfig extends SyncProducerConfig implements AsyncProducerConfigShared {


    public AsyncProducerConfig(Properties properties) {
        super(properties);
    }


    public int getQueueTime() {
        return getInt(props, "queue.time", 5000);
    }

    public int getQueueSize() {
        return getInt(props, "queue.size", 10000);
    }

    public int getEnqueueTimeoutMs() {
        return getInt(props, "queue.enqueueTimeout.ms", 0);
    }

    public int getBatchSize() {
        return getInt(props, "batch.size", 200);
    }


    public String getCbkHandler() {
        return getString(props, "callback.handler", null);
    }

    public Properties getCbkHandlerProperties() {
        return getProps(props, "callback.handler.props", null);
    }

    public String getEventHandler() {
        return getString(props, "event.handler", null);
    }

    public Properties getEventHandlerProperties() {
// Path: src/main/java/io/jafka/utils/Utils.java
// public static int getInt(Properties props, String name) {
//     if (props.containsKey(name)) {
//         return getInt(props, name, -1);
//     }
//     throw new IllegalArgumentException("Missing required property '" + name + "'");
// }
// 
// Path: src/main/java/io/jafka/utils/Utils.java
// public static Properties getProps(Properties props, String name, Properties defaultProperties) {
//     final String propString = props.getProperty(name);
//     if (propString == null) return defaultProperties;
//     String[] propValues = propString.split(",");
//     if (propValues.length < 1) {
//         throw new IllegalArgumentException("Illegal format of specifying properties '" + propString + "'");
//     }
//     Properties properties = new Properties();
//     for (int i = 0; i < propValues.length; i++) {
//         String[] prop = propValues[i].split("=");
//         if (prop.length != 2) throw new IllegalArgumentException("Illegal format of specifying properties '" + propValues[i] + "'");
//         properties.put(prop[0], prop[1]);
//     }
//     return properties;
// }
// 
// Path: src/main/java/io/jafka/utils/Utils.java
// public static String getString(Properties props, String name, String defaultValue) {
//     return props.containsKey(name) ? props.getProperty(name) : defaultValue;
// }
// 
// Path: src/main/java/io/jafka/producer/SyncProducerConfig.java
// public class SyncProducerConfig implements SyncProducerConfigShared {
// 
//     protected final Properties props;
// 
//     final int bufferSize;
// 
//     final int connectTimeoutMs;
// 
//     final int socketTimeoutMs;
// 
//     final int reconnectInterval;
// 
//     final int reconnectTimeInterval;
// 
//     final int maxMessageSize;
// 
//     public SyncProducerConfig(Properties props) {
//         this.props = props;
//         this.bufferSize = getInt(props, "buffer.size", 100 * 1024);
//         this.connectTimeoutMs = getInt(props, "connect.timeout.ms", 5000);
//         this.socketTimeoutMs = getInt(props, "socket.timeout.ms", 30000);
//         this.reconnectInterval = getInt(props, "reconnect.interval", 100000);
//         this.reconnectTimeInterval = getInt(props, "reconnect.time.interval.ms", 1000 * 1000 * 10);
//         this.maxMessageSize = getInt(props, "max.message.size", 1000 * 1000);//1MB
//         //
//     }
// 
//     /**
//      * @return the host
//      */
//     public String getHost() {
//         return getString(props, "host");
//     }
// 
//     /**
//      * @return the port
//      */
//     public int getPort() {
//         return getInt(props, "port");
//     }
// 
//     public Properties getProperties() {
//         return props;
//     }
// 
//     public int getBufferSize() {
//         return bufferSize;
//     }
// 
//     public int getConnectTimeoutMs() {
//         return connectTimeoutMs;
//     }
// 
//     public int getSocketTimeoutMs() {
//         return socketTimeoutMs;
//     }
// 
// 
//     public int getMaxMessageSize() {
//         return maxMessageSize;
//     }
// 
//     public String getSerializerClass() {
//         return getString(props, "serializer.class", DefaultEncoders.class.getName());
//     }
// }


// Path: src/main/java/io/jafka/producer/async/AsyncProducerConfig.java
import static io.jafka.utils.Utils.getInt;
import static io.jafka.utils.Utils.getProps;
import static io.jafka.utils.Utils.getString;
import java.util.Properties;
import io.jafka.producer.SyncProducerConfig;

/**
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 * 
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package io.jafka.producer.async;





/**
 * @author adyliu (imxylz@gmail.com)
 * @since 1.0
 */
public class AsyncProducerConfig extends SyncProducerConfig implements AsyncProducerConfigShared {


    public AsyncProducerConfig(Properties properties) {
        super(properties);
    }


    public int getQueueTime() {
        return getInt(props, "queue.time", 5000);
    }

    public int getQueueSize() {
        return getInt(props, "queue.size", 10000);
    }

    public int getEnqueueTimeoutMs() {
        return getInt(props, "queue.enqueueTimeout.ms", 0);
    }

    public int getBatchSize() {
        return getInt(props, "batch.size", 200);
    }


    public String getCbkHandler() {
        return getString(props, "callback.handler", null);
    }

    public Properties getCbkHandlerProperties() {
        return getProps(props, "callback.handler.props", null);
    }

    public String getEventHandler() {
        return getString(props, "event.handler", null);
    }

    public Properties getEventHandlerProperties() {
        return getProps(props, "event.handler.props", null);