blob: df6191655cc3eeede9537800b0a540eb50e6ed00 [file] [log] [blame]
/*******************************************************************************
* Copyright (C) 2021 the Eclipse BaSyx Authors
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
******************************************************************************/
package org.eclipse.basyx.vab.gateway;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
import org.eclipse.basyx.vab.protocol.api.IConnectorProvider;
/**
* Maps an incoming address to an IConnectorProvider based on the protocol used
* in the path<br/>
* E.g. basyx://* can be mapped to the BasyxNative connector, http://* can be
* mapped to the HTTP/REST connector
*
* @author schnicke
*
*/
public class ConnectorProviderMapper implements IConnectorProvider {
private Map<String, IConnectorProvider> providerMap = new HashMap<>();
/**
*
* @param prefix
* assumed without ending colon or slashes, e.g. <i>basyx</i> but not
* <i>basyx://</i>
* @param provider
*/
public void addConnectorProvider(String prefix, IConnectorProvider provider) {
providerMap.put(prefix, provider);
}
public void removeConnectorProvider(String prefix) {
providerMap.remove(prefix);
}
@Override
public IModelProvider getConnector(String addr) {
return providerMap.get(getPrefix(addr)).getConnector(addr);
}
/**
* Returns the prefix, e.g. address <i>basyx://*</i> returns <i>basyx</i>
*
* @param addr
* @return
*/
private String getPrefix(String addr) {
String prefix = addr.split("//")[0];
return prefix.replaceFirst(":", "");
}
}