// Path: switchyard/switchyard-component-common-knowledge/src/main/java/org/switchyard/component/common/knowledge/config/model/ExtraJaxbClassesModel.java
// public interface ExtraJaxbClassesModel extends Model {
// 
//     /** The "extraJaxbClasses" name. */
//     public static final String EXTRA_JAXB_CLASSES = "extraJaxbClasses";
// 
//     /** Gets the child extraJaxbClass models.
//      * 
//      * @return the child extraJaxbClass models */
//     public List<ExtraJaxbClassModel> getExtraJaxbClasses();
// 
//     /** Adds a child extraJaxbClass model.
//      * 
//      * @param extraJaxbClass the child extraJaxbClass model
//      * @return this ExtraJaxbClassesModel (useful for chaining) */
//     public ExtraJaxbClassesModel addExtraJaxbClass(ExtraJaxbClassModel extraJaxbClass);
// 
// }
// 
// Path: switchyard/switchyard-component-common-knowledge/src/main/java/org/switchyard/component/common/knowledge/config/model/RemoteModel.java
// public interface RemoteModel extends Model {
// 
//     /** Gets the deploymentId attribute.
//      * 
//      * @return the deploymentId attribute */
//     public String getDeploymentId();
// 
//     /** Sets the deploymentId attribute.
//      * 
//      * @param deploymentId the deploymentId attribute
//      * @return this RemoteModel (useful for chaining) */
//     public RemoteModel setDeploymentId(String deploymentId);
// 
//     /** Gets the userName attribute.
//      * 
//      * @return the userName attribute */
//     public String getUserName();
// 
//     /** Sets the userName attribute.
//      * 
//      * @param userName the userName attribute
//      * @return this RemoteModel (useful for chaining) */
//     public RemoteModel setUserName(String userName);
// 
//     /** Gets the password attribute.
//      * 
//      * @return the password attribute */
//     public String getPassword();
// 
//     /** Sets the password attribute.
//      * 
//      * @param password the password attribute
//      * @return this RemoteModel (useful for chaining) */
//     public RemoteModel setPassword(String password);
// 
//     /** Gets the timeout attribute.
//      * 
//      * @return the timeout attribute */
//     public Integer getTimeout();
// 
//     /** Sets the timeout attribute.
//      * 
//      * @param timeout the timeout attribute
//      * @return this RemoteModel (useful for chaining) */
//     public RemoteModel setTimeout(Integer timeout);
// 
//     /** Gets the child extraJaxbClasses model.
//      * 
//      * @return the child extraJaxbClasses model */
//     public ExtraJaxbClassesModel getExtraJaxbClasses();
// 
//     /** Sets the child extraJaxbClasses model.
//      * 
//      * @param extraJaxbClasses the child extraJaxbClasses model
//      * @return this RemoteModel (useful for chaining) */
//     public RemoteModel setExtraJaxbClasses(ExtraJaxbClassesModel extraJaxbClasses);
// 
// }


import java.net.MalformedURLException;
import java.net.URL;
import java.util.LinkedHashSet;
import java.util.Properties;
import java.util.Set;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.kie.api.runtime.manager.RuntimeEngine;
import org.kie.remote.client.api.RemoteJmsRuntimeEngineBuilder;
import org.kie.remote.client.api.RemoteRestRuntimeEngineBuilder;
import org.kie.remote.client.api.RemoteRuntimeEngineBuilder;
import org.kie.services.client.api.RemoteRuntimeEngineFactory;
import org.kie.services.client.api.command.RemoteConfiguration;
import org.kie.services.client.api.command.RemoteRuntimeEngine;
import org.switchyard.common.type.reflect.Access;
import org.switchyard.common.type.reflect.FieldAccess;
import org.switchyard.component.common.knowledge.config.model.ExtraJaxbClassModel;
import org.switchyard.component.common.knowledge.config.model.ExtraJaxbClassesModel;
import org.switchyard.component.common.knowledge.config.model.RemoteJmsModel;
import org.switchyard.component.common.knowledge.config.model.RemoteModel;
import org.switchyard.component.common.knowledge.config.model.RemoteRestModel;
/*
 * Copyright 2014 Red Hat Inc. and/or its affiliates and other 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.switchyard.component.common.knowledge.config.builder;




/** RemoteConfigurationBuilder.
 *
 * @author David Ward &lt;<a href="mailto:dward@jboss.org">dward@jboss.org</a>&gt; &copy; 2014 Red Hat Inc. */
public class RemoteConfigurationBuilder extends KnowledgeBuilder {

    private final RemoteConfiguration _remoteConfiguration;

    /** Creates a new RemoteConfigurationBuilder.
     * 
     * @param classLoader classLoader
     * @param remoteModel remoteModel */
// Path: switchyard/switchyard-component-common-knowledge/src/main/java/org/switchyard/component/common/knowledge/config/model/ExtraJaxbClassesModel.java
// public interface ExtraJaxbClassesModel extends Model {
// 
//     /** The "extraJaxbClasses" name. */
//     public static final String EXTRA_JAXB_CLASSES = "extraJaxbClasses";
// 
//     /** Gets the child extraJaxbClass models.
//      * 
//      * @return the child extraJaxbClass models */
//     public List<ExtraJaxbClassModel> getExtraJaxbClasses();
// 
//     /** Adds a child extraJaxbClass model.
//      * 
//      * @param extraJaxbClass the child extraJaxbClass model
//      * @return this ExtraJaxbClassesModel (useful for chaining) */
//     public ExtraJaxbClassesModel addExtraJaxbClass(ExtraJaxbClassModel extraJaxbClass);
// 
// }
// 
// Path: switchyard/switchyard-component-common-knowledge/src/main/java/org/switchyard/component/common/knowledge/config/model/RemoteModel.java
// public interface RemoteModel extends Model {
// 
//     /** Gets the deploymentId attribute.
//      * 
//      * @return the deploymentId attribute */
//     public String getDeploymentId();
// 
//     /** Sets the deploymentId attribute.
//      * 
//      * @param deploymentId the deploymentId attribute
//      * @return this RemoteModel (useful for chaining) */
//     public RemoteModel setDeploymentId(String deploymentId);
// 
//     /** Gets the userName attribute.
//      * 
//      * @return the userName attribute */
//     public String getUserName();
// 
//     /** Sets the userName attribute.
//      * 
//      * @param userName the userName attribute
//      * @return this RemoteModel (useful for chaining) */
//     public RemoteModel setUserName(String userName);
// 
//     /** Gets the password attribute.
//      * 
//      * @return the password attribute */
//     public String getPassword();
// 
//     /** Sets the password attribute.
//      * 
//      * @param password the password attribute
//      * @return this RemoteModel (useful for chaining) */
//     public RemoteModel setPassword(String password);
// 
//     /** Gets the timeout attribute.
//      * 
//      * @return the timeout attribute */
//     public Integer getTimeout();
// 
//     /** Sets the timeout attribute.
//      * 
//      * @param timeout the timeout attribute
//      * @return this RemoteModel (useful for chaining) */
//     public RemoteModel setTimeout(Integer timeout);
// 
//     /** Gets the child extraJaxbClasses model.
//      * 
//      * @return the child extraJaxbClasses model */
//     public ExtraJaxbClassesModel getExtraJaxbClasses();
// 
//     /** Sets the child extraJaxbClasses model.
//      * 
//      * @param extraJaxbClasses the child extraJaxbClasses model
//      * @return this RemoteModel (useful for chaining) */
//     public RemoteModel setExtraJaxbClasses(ExtraJaxbClassesModel extraJaxbClasses);
// 
// }


// Path: switchyard/switchyard-component-common-knowledge/src/main/java/org/switchyard/component/common/knowledge/config/builder/RemoteConfigurationBuilder.java
import java.net.MalformedURLException;
import java.net.URL;
import java.util.LinkedHashSet;
import java.util.Properties;
import java.util.Set;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.kie.api.runtime.manager.RuntimeEngine;
import org.kie.remote.client.api.RemoteJmsRuntimeEngineBuilder;
import org.kie.remote.client.api.RemoteRestRuntimeEngineBuilder;
import org.kie.remote.client.api.RemoteRuntimeEngineBuilder;
import org.kie.services.client.api.RemoteRuntimeEngineFactory;
import org.kie.services.client.api.command.RemoteConfiguration;
import org.kie.services.client.api.command.RemoteRuntimeEngine;
import org.switchyard.common.type.reflect.Access;
import org.switchyard.common.type.reflect.FieldAccess;
import org.switchyard.component.common.knowledge.config.model.ExtraJaxbClassModel;
import org.switchyard.component.common.knowledge.config.model.ExtraJaxbClassesModel;
import org.switchyard.component.common.knowledge.config.model.RemoteJmsModel;
import org.switchyard.component.common.knowledge.config.model.RemoteModel;
import org.switchyard.component.common.knowledge.config.model.RemoteRestModel;

/*
 * Copyright 2014 Red Hat Inc. and/or its affiliates and other 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.switchyard.component.common.knowledge.config.builder;




/** RemoteConfigurationBuilder.
 *
 * @author David Ward &lt;<a href="mailto:dward@jboss.org">dward@jboss.org</a>&gt; &copy; 2014 Red Hat Inc. */
public class RemoteConfigurationBuilder extends KnowledgeBuilder {

    private final RemoteConfiguration _remoteConfiguration;

    /** Creates a new RemoteConfigurationBuilder.
     * 
     * @param classLoader classLoader
     * @param remoteModel remoteModel */
    public RemoteConfigurationBuilder(ClassLoader classLoader, RemoteModel remoteModel) {