// Path: core/src/main/java/org/projectodd/wunderboss/Options.java
// public class Options<T> extends HashMap<T, Object> {
// 
//     public Options() {
//         this(null);
//     }
// 
//     public Options(Map<T, Object> options) {
//         if (options != null) {
//             putAll(options);
//         }
//     }
// 
//     /**
//      * Looks up key in the options.
//      *
//      * If key is an Option, its default value will be returned if the key
//      * isn't found.
//      *
//      * @param key
//      * @return
//      */
//     public Object get(Object key) {
//         Object val = super.get(key);
//         if (val == null && key instanceof Option) {
//             val = ((Option)key).defaultValue;
//         }
// 
//         return val;
//     }
// 
//     public Object get(T key, Object defaultValue) {
//         return get(key) != null ? get(key) : defaultValue;
//     }
// 
//     public Boolean getBoolean(T key) {
//         return getBoolean(key, null);
//     }
// 
//     public Boolean getBoolean(T key, Boolean defaultValue) {
//         Object value = get(key);
//         if (value == null) {
//             value = defaultValue;
//         } else if (!(value instanceof Boolean)) {
//             value = Boolean.parseBoolean(value.toString());
//         }
// 
//         return (Boolean)value;
//     }
// 
//     public Integer getInt(T key) {
//         return getInt(key, null);
//     }
// 
//     public Integer getInt(T key, Integer defaultValue) {
//         Object value = get(key);
//         if (value == null) {
//             value = defaultValue;
//         } else if (!(value instanceof Integer)) {
//             value = Integer.parseInt(value.toString());
//         }
// 
//         return (Integer)value;
//     }
// 
//     public Long getLong(T key) {
//         return getLong(key, null);
//     }
// 
//     public Long getLong(T key, Long defaultValue) {
//         Object value = get(key);
//         if (value == null) {
//             value = defaultValue;
//         } else if (!(value instanceof Long)) {
//             value = Long.parseLong(value.toString());
//         }
// 
//         return (Long)value;
//     }
// 
//     public Double getDouble(T key) {
//         return getDouble(key, null);
//     }
// 
//     public Double getDouble(T key, Double defaultValue) {
//         Object value = get(key);
//         if (value == null) {
//             value = defaultValue;
//         } else if (!(value instanceof Double)) {
//             value = Double.parseDouble(value.toString());
//         }
// 
//         return (Double)value;
//     }
// 
//     public String getString(T key) {
//         return getString(key, null);
//     }
// 
//     public String getString(T key, String defaultValue) {
//         return get(key) != null ? get(key).toString() : defaultValue;
//     }
// 
//     public Date getDate(T key) {
//         return getDate(key, null);
//     }
// 
//     public Date getDate(T key, Date defaultValue) {
//         return get(key) != null ? (Date)get(key) : defaultValue;
//     }
// 
//     public List getList(T key) {
//         Object v = get(key);
//         if (v instanceof List || v == null) {
//             return (List) v;
//         }
//         return Arrays.asList(v);
//     }
// 
//     public Options put(T key, Object value) {
//         super.put(key, value);
// 
//         return this;
//     }
// 
//     /**
//      * Returns true if key resolves to a *non-null value* (considering
//      * a possible default), false otherwise.
//      */
//     public boolean has(T key) {
//         return get(key) != null;
//     }
// 
//     public Options<T> merge(Options<T> otherOptions) {
//         Options mergedOptions = new Options();
//         for (T key : this.keySet()) {
//             mergedOptions.put(key, this.get(key));
//         }
//         for (T key : otherOptions.keySet()) {
//             mergedOptions.put(key, otherOptions.get(key));
//         }
//         return mergedOptions;
//     }
// }
// 
// Path: transactions/src/main/java/org/projectodd/wunderboss/transactions/Transaction.java
// public interface Transaction extends Component {
//     TransactionManager manager();
// 
//     Object required(Callable f) throws Exception;
//     Object requiresNew(Callable f) throws Exception;
//     Object notSupported(Callable f) throws Exception;
//     Object supports(Callable f) throws Exception;
//     Object mandatory(Callable f) throws Exception;
//     Object never(Callable f) throws Exception;
// }


import org.projectodd.wunderboss.ComponentProvider;
import org.projectodd.wunderboss.Options;
import org.projectodd.wunderboss.transactions.Transaction;
/*
 * Copyright 2014-2016 Red Hat, Inc, and individual contributors.
 *
 * Licensed 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 org.projectodd.wunderboss.as.transactions;


public class ASTransactionProvider implements ComponentProvider<Transaction> {

    @Override
// Path: core/src/main/java/org/projectodd/wunderboss/Options.java
// public class Options<T> extends HashMap<T, Object> {
// 
//     public Options() {
//         this(null);
//     }
// 
//     public Options(Map<T, Object> options) {
//         if (options != null) {
//             putAll(options);
//         }
//     }
// 
//     /**
//      * Looks up key in the options.
//      *
//      * If key is an Option, its default value will be returned if the key
//      * isn't found.
//      *
//      * @param key
//      * @return
//      */
//     public Object get(Object key) {
//         Object val = super.get(key);
//         if (val == null && key instanceof Option) {
//             val = ((Option)key).defaultValue;
//         }
// 
//         return val;
//     }
// 
//     public Object get(T key, Object defaultValue) {
//         return get(key) != null ? get(key) : defaultValue;
//     }
// 
//     public Boolean getBoolean(T key) {
//         return getBoolean(key, null);
//     }
// 
//     public Boolean getBoolean(T key, Boolean defaultValue) {
//         Object value = get(key);
//         if (value == null) {
//             value = defaultValue;
//         } else if (!(value instanceof Boolean)) {
//             value = Boolean.parseBoolean(value.toString());
//         }
// 
//         return (Boolean)value;
//     }
// 
//     public Integer getInt(T key) {
//         return getInt(key, null);
//     }
// 
//     public Integer getInt(T key, Integer defaultValue) {
//         Object value = get(key);
//         if (value == null) {
//             value = defaultValue;
//         } else if (!(value instanceof Integer)) {
//             value = Integer.parseInt(value.toString());
//         }
// 
//         return (Integer)value;
//     }
// 
//     public Long getLong(T key) {
//         return getLong(key, null);
//     }
// 
//     public Long getLong(T key, Long defaultValue) {
//         Object value = get(key);
//         if (value == null) {
//             value = defaultValue;
//         } else if (!(value instanceof Long)) {
//             value = Long.parseLong(value.toString());
//         }
// 
//         return (Long)value;
//     }
// 
//     public Double getDouble(T key) {
//         return getDouble(key, null);
//     }
// 
//     public Double getDouble(T key, Double defaultValue) {
//         Object value = get(key);
//         if (value == null) {
//             value = defaultValue;
//         } else if (!(value instanceof Double)) {
//             value = Double.parseDouble(value.toString());
//         }
// 
//         return (Double)value;
//     }
// 
//     public String getString(T key) {
//         return getString(key, null);
//     }
// 
//     public String getString(T key, String defaultValue) {
//         return get(key) != null ? get(key).toString() : defaultValue;
//     }
// 
//     public Date getDate(T key) {
//         return getDate(key, null);
//     }
// 
//     public Date getDate(T key, Date defaultValue) {
//         return get(key) != null ? (Date)get(key) : defaultValue;
//     }
// 
//     public List getList(T key) {
//         Object v = get(key);
//         if (v instanceof List || v == null) {
//             return (List) v;
//         }
//         return Arrays.asList(v);
//     }
// 
//     public Options put(T key, Object value) {
//         super.put(key, value);
// 
//         return this;
//     }
// 
//     /**
//      * Returns true if key resolves to a *non-null value* (considering
//      * a possible default), false otherwise.
//      */
//     public boolean has(T key) {
//         return get(key) != null;
//     }
// 
//     public Options<T> merge(Options<T> otherOptions) {
//         Options mergedOptions = new Options();
//         for (T key : this.keySet()) {
//             mergedOptions.put(key, this.get(key));
//         }
//         for (T key : otherOptions.keySet()) {
//             mergedOptions.put(key, otherOptions.get(key));
//         }
//         return mergedOptions;
//     }
// }
// 
// Path: transactions/src/main/java/org/projectodd/wunderboss/transactions/Transaction.java
// public interface Transaction extends Component {
//     TransactionManager manager();
// 
//     Object required(Callable f) throws Exception;
//     Object requiresNew(Callable f) throws Exception;
//     Object notSupported(Callable f) throws Exception;
//     Object supports(Callable f) throws Exception;
//     Object mandatory(Callable f) throws Exception;
//     Object never(Callable f) throws Exception;
// }


// Path: wildfly/transactions/src/main/java/org/projectodd/wunderboss/as/transactions/ASTransactionProvider.java
import org.projectodd.wunderboss.ComponentProvider;
import org.projectodd.wunderboss.Options;
import org.projectodd.wunderboss.transactions.Transaction;

/*
 * Copyright 2014-2016 Red Hat, Inc, and individual contributors.
 *
 * Licensed 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 org.projectodd.wunderboss.as.transactions;


public class ASTransactionProvider implements ComponentProvider<Transaction> {

    @Override
    public Transaction create(String name, Options options) {