11import { window } from 'vscode' ;
2+ import * as path from 'path' ;
23import * as config from './config' ;
34import { Logger , LogLevel } from './logger' ;
45
@@ -20,10 +21,10 @@ import {YamlDataProvider} from './data.providers/yaml.data.provider';
2021export 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
0 commit comments