Skip to content

Commit f5e23ba

Browse files
#151 changed data.manager api data.provider lookup to use dataUrl
1 parent d2c10bb commit f5e23ba

File tree

2 files changed

+19
-20
lines changed

2 files changed

+19
-20
lines changed

src/data.manager.ts

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import {window} from 'vscode';
2+
import * as path from 'path';
23
import * as config from './config';
34
import {Logger, LogLevel} from './logger';
45

@@ -20,10 +21,10 @@ import {YamlDataProvider} from './data.providers/yaml.data.provider';
2021
export interface IDataManager {
2122

2223
/**
23-
* Gets IDataProvider instance for the specified data file mime type or extension.
24-
* @param fileType Data file mime type or extension to get IDataProvider instance for.
24+
* Gets IDataProvider instance for the specified data url.
25+
* @param dataUrl Local data file path or remote data url.
2526
*/
26-
getDataProvider(fileType: string): IDataProvider;
27+
getDataProvider(dataUrl: string): IDataProvider;
2728

2829
/**
2930
* Gets local or remote data.
@@ -160,16 +161,19 @@ export class DataManager implements IDataManager {
160161
}
161162

162163
/**
163-
* Gets IDataProvider instance for the specified file mime type or extension.
164-
* @param fileType The data file mime type or extension to get data provider instance for.
164+
* Gets IDataProvider instance for the specified data url.
165+
* @param dataUrl Local data file path or remote data url.
165166
*/
166-
public getDataProvider(fileType: string): IDataProvider {
167-
if (this._dataProviders.has(fileType)) {
167+
public getDataProvider(dataUrl: string): IDataProvider {
168+
const fileName: string = path.basename(dataUrl);
169+
const fileType: string = path.extname(fileName); // file extension
170+
if (fileType.length > 0 && this._dataProviders.has(fileType)) {
168171
return this._dataProviders.get(fileType);
172+
} else if (this._dataProviders.has(fileName)) { // no file extension
173+
// for dockerfile, etc.
174+
return this._dataProviders.get(fileName);
169175
}
170-
const errorMessage: string = `No matching Data Provider found for the File Type: '${fileType}'`;
171-
window.showErrorMessage(errorMessage);
172-
throw new Error(errorMessage);
176+
return this._dataProviders.get('.json'); // default to json.data.provider for now
173177
}
174178

175179
/**
@@ -179,9 +183,7 @@ export class DataManager implements IDataManager {
179183
* @param loadData Load data callback.
180184
*/
181185
public getData(dataUrl: string, parseOptions: any, loadData: Function): void {
182-
// TODO: add mime types later for remote http data loading
183-
const dataFileType: string = dataUrl.substr(dataUrl.lastIndexOf('.')); // file extension
184-
const dataProvider: IDataProvider = this.getDataProvider(dataFileType);
186+
const dataProvider: IDataProvider = this.getDataProvider(dataUrl);
185187
dataProvider.getData(dataUrl, parseOptions, loadData);
186188
}
187189

@@ -190,8 +192,7 @@ export class DataManager implements IDataManager {
190192
* @param dataUrl Local data file path or remote data url.
191193
*/
192194
public getDataTableNames(dataUrl: string): Array<string> {
193-
const dataFileType: string = dataUrl.substr(dataUrl.lastIndexOf('.')); // file extension
194-
const dataProvider: IDataProvider = this.getDataProvider(dataFileType);
195+
const dataProvider: IDataProvider = this.getDataProvider(dataUrl);
195196
return dataProvider.getDataTableNames(dataUrl);
196197
}
197198

@@ -200,8 +201,7 @@ export class DataManager implements IDataManager {
200201
* @param dataUrl Local data file path or remote data url.
201202
*/
202203
public getDataSchema(dataUrl: string): any {
203-
const dataFileType: string = dataUrl.substr(dataUrl.lastIndexOf('.')); // file extension
204-
const dataProvider: IDataProvider = this.getDataProvider(dataFileType);
204+
const dataProvider: IDataProvider = this.getDataProvider(dataUrl);
205205
return dataProvider.getDataSchema(dataUrl);
206206
}
207207

@@ -213,8 +213,7 @@ export class DataManager implements IDataManager {
213213
* @param showData Show saved data callback.
214214
*/
215215
public saveData(filePath: string, fileData: any, tableName: string, showData?: Function): void {
216-
const dataFileType: string = filePath.substr(filePath.lastIndexOf('.')); // file extension
217-
const dataProvider: IDataProvider = this.getDataProvider(dataFileType);
216+
const dataProvider: IDataProvider = this.getDataProvider(filePath);
218217
dataProvider.saveData(filePath, fileData, tableName, showData);
219218
}
220219

src/data.preview.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ export class DataPreview {
148148
this._dataTable = (table !== undefined) ? table: '';
149149
this._dataViews = (views !== undefined) ? views: {};
150150
this._viewConfig = viewConfig;
151-
this._fileName = path.basename(uri.fsPath);
151+
this._fileName = path.basename(uri.fsPath);
152152
this._fileExtension = this._fileName.substr(this._fileName.lastIndexOf('.'));
153153
this._previewUri = this._uri.with({scheme: 'data'});
154154

0 commit comments

Comments
 (0)