use of io.cdap.cdap.etl.api.connector.ConnectorContext in project cdap by caskdata.
the class ConnectionHandler method specGenerationLocally.
private void specGenerationLocally(String namespace, SpecGenerationRequest specRequest, Connection conn, HttpServiceResponder responder) throws IOException {
ServicePluginConfigurer pluginConfigurer = getContext().createServicePluginConfigurer(namespace);
ConnectorConfigurer connectorConfigurer = new DefaultConnectorConfigurer(pluginConfigurer);
ConnectorContext connectorContext = new DefaultConnectorContext(new SimpleFailureCollector(), pluginConfigurer);
// use tracked selector to get exact plugin version that gets selected since the passed version can be null
TrackedPluginSelector pluginSelector = new TrackedPluginSelector(new ArtifactSelectorProvider().getPluginSelector(conn.getPlugin().getArtifact()));
try (Connector connector = getConnector(pluginConfigurer, conn.getPlugin(), namespace, pluginSelector)) {
connector.configure(connectorConfigurer);
ConnectorSpecRequest connectorSpecRequest = ConnectorSpecRequest.builder().setPath(specRequest.getPath()).setConnection(conn.getName()).setProperties(specRequest.getProperties()).build();
ConnectorSpec spec = connector.generateSpec(connectorContext, connectorSpecRequest);
ConnectorSpec newSpec = ConnectionUtils.filterSpecWithPluginNameAndType(spec, specRequest.getPluginName(), specRequest.getPluginType());
responder.sendString(GSON.toJson(ConnectionUtils.getConnectorDetail(pluginSelector.getSelectedArtifact(), newSpec)));
}
}
use of io.cdap.cdap.etl.api.connector.ConnectorContext in project hydrator-plugins by cdapio.
the class DBConnectorTest method testTest.
private void testTest(DBConnector connector) {
ConnectorContext context = new MockConnectorContext(new MockConnectorConfigurer());
connector.test(context);
ValidationException validationException = context.getFailureCollector().getOrThrowException();
Assert.assertTrue(validationException.getFailures().isEmpty());
}
use of io.cdap.cdap.etl.api.connector.ConnectorContext in project hydrator-plugins by cdapio.
the class AbstractFileConnector method getInputFormatProvider.
@Override
public InputFormatProvider getInputFormatProvider(ConnectorContext context, SampleRequest sampleRequest) throws IOException {
String fullPath = getFullPath(sampleRequest.getPath());
Map<String, String> sampleRequestProperties = sampleRequest.getProperties();
ValidatingInputFormat inputFormat = getValidatingInputFormat(context, fullPath, sampleRequestProperties);
Job job = JobUtils.createInstance();
Configuration conf = job.getConfiguration();
// set entries here, before FileSystem is used
for (Map.Entry<String, String> entry : getFileSystemProperties(fullPath).entrySet()) {
conf.set(entry.getKey(), entry.getValue());
}
Path path = new Path(fullPath);
// need this to load the extra class loader to avoid ClassNotFoundException for the file system
FileSystem fs = JobUtils.applyWithExtraClassLoader(job, getClass().getClassLoader(), f -> FileSystem.get(path.toUri(), conf));
FileStatus[] fileStatus = fs.globStatus(path);
if (fileStatus == null) {
throw new IOException(String.format("Input path %s does not exist", path));
}
// add input path also needs to create the file system so need to wrap it
JobUtils.applyWithExtraClassLoader(job, getClass().getClassLoader(), (ThrowableFunction<JobContext, Void, IOException>) t -> {
FileInputFormat.addInputPath(job, path);
return null;
});
String inputFormatClassName = inputFormat.getInputFormatClassName();
Configuration hConf = job.getConfiguration();
Map<String, String> inputFormatConfiguration = inputFormat.getInputFormatConfiguration();
for (Map.Entry<String, String> propertyEntry : inputFormatConfiguration.entrySet()) {
hConf.set(propertyEntry.getKey(), propertyEntry.getValue());
}
// set entries here again, in case anything set by PathTrackingInputFormat should be overridden
for (Map.Entry<String, String> entry : getFileSystemProperties(fullPath).entrySet()) {
conf.set(entry.getKey(), entry.getValue());
}
return new SourceInputFormatProvider(inputFormatClassName, conf);
}
use of io.cdap.cdap.etl.api.connector.ConnectorContext in project cdap by cdapio.
the class ConnectionHandler method sampleLocally.
private void sampleLocally(String namespace, String sampleRequestString, Connection conn, HttpServiceResponder responder) throws IOException {
SampleRequest sampleRequest = GSON.fromJson(sampleRequestString, SampleRequest.class);
ServicePluginConfigurer pluginConfigurer = getContext().createServicePluginConfigurer(namespace);
ConnectorConfigurer connectorConfigurer = new DefaultConnectorConfigurer(pluginConfigurer);
ConnectorContext connectorContext = new DefaultConnectorContext(new SimpleFailureCollector(), pluginConfigurer);
PluginInfo plugin = conn.getPlugin();
// use tracked selector to get exact plugin version that gets selected since the passed version can be null
TrackedPluginSelector pluginSelector = new TrackedPluginSelector(new ArtifactSelectorProvider().getPluginSelector(plugin.getArtifact()));
try (Connector connector = getConnector(pluginConfigurer, plugin, namespace, pluginSelector)) {
connector.configure(connectorConfigurer);
ConnectorSpecRequest specRequest = ConnectorSpecRequest.builder().setPath(sampleRequest.getPath()).setConnection(conn.getName()).setProperties(sampleRequest.getProperties()).build();
ConnectorSpec spec = connector.generateSpec(connectorContext, specRequest);
ConnectorDetail detail = ConnectionUtils.getConnectorDetail(pluginSelector.getSelectedArtifact(), spec);
try {
SampleResponse sampleResponse = ConnectionUtils.getSampleResponse(connector, connectorContext, sampleRequest, detail, pluginConfigurer);
responder.sendString(GSON.toJson(sampleResponse));
} catch (ConnectionBadRequestException e) {
// should not happen
responder.sendError(HttpURLConnection.HTTP_BAD_REQUEST, e.getMessage());
}
}
}
use of io.cdap.cdap.etl.api.connector.ConnectorContext in project cdap by cdapio.
the class RemoteConnectionSampleTask method execute.
@Override
public String execute(SystemAppTaskContext systemAppContext, RemoteConnectionRequest request) throws Exception {
String namespace = request.getNamespace();
Connection connection = request.getConnection();
// Plugin selector and configurer
TrackedPluginSelector pluginSelector = new TrackedPluginSelector(new ArtifactSelectorProvider().getPluginSelector(connection.getPlugin().getArtifact()));
ServicePluginConfigurer pluginConfigurer = systemAppContext.createServicePluginConfigurer(namespace);
ConnectorContext connectorContext = ConnectionUtils.getConnectorContext(pluginConfigurer);
SampleRequest sampleRequest = GSON.fromJson(request.getRequest(), SampleRequest.class);
try (Connector connector = getConnector(systemAppContext, pluginConfigurer, connection.getPlugin(), namespace, pluginSelector)) {
connector.configure(new DefaultConnectorConfigurer(pluginConfigurer));
ConnectorSpecRequest specRequest = ConnectorSpecRequest.builder().setPath(sampleRequest.getPath()).setConnection(connection.getName()).setProperties(sampleRequest.getProperties()).build();
ConnectorSpec spec = connector.generateSpec(connectorContext, specRequest);
ConnectorDetail detail = ConnectionUtils.getConnectorDetail(pluginSelector.getSelectedArtifact(), spec);
SampleResponse sampleResponse = ConnectionUtils.getSampleResponse(connector, connectorContext, sampleRequest, detail, pluginConfigurer);
return GSON.toJson(sampleResponse);
}
}
Aggregations