/********************************************************************************
 * Copyright (C) 2019 TypeFox and others.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * This Source Code may also be made available under the following Secondary
 * Licenses when the conditions for such availability set forth in the Eclipse
 * Public License v. 2.0 are satisfied: GNU General Public License, version 2
 * with the GNU Classpath Exception which is available at
 * https://www.gnu.org/software/classpath/license.html.
 *
 * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
 ********************************************************************************/ import { injectable , inject , named , interfaces } from 'inversify' ; import URI from '../../common/uri' ; import { ContributionProvider , bindContributionProvider } from '../../common/contribution-provider' ; export const PreferenceConfiguration = Symbol ( 'PreferenceConfiguration' ) ; export interface PreferenceConfiguration { name : string ; } export function bindPreferenceConfigurations ( bind ) { bindContributionProvider ( bind , PreferenceConfiguration ) ; bind ( PreferenceConfigurations ) . toSelf ( ) . inSingletonScope ( ) ; } @ injectable ( ) export class PreferenceConfigurations { @ inject ( ContributionProvider ) @ named ( PreferenceConfiguration ) protected readonly provider : ContributionProvider < PreferenceConfiguration > ; getPaths ( ) { return [ '.theia' , '.vscode' ] ; } getConfigName ( ) { return 'settings' ; } protected sectionNames : string [ ] | undefined ; getSectionNames ( ) { if ( ! this . sectionNames ) { this . sectionNames = this . provider . getContributions ( ) . map ( p => p . name ) ; } return this . sectionNames ; } isSectionName ( name ) { return this . getSectionNames ( ) . indexOf ( name ) !== - 1 ; } isAnyConfig ( name ) { return [ ... this . getSectionNames ( ) , this . getConfigName ( ) ] . includes ( name ) ; } isSectionUri ( configUri ) { return ! ! configUri && this . isSectionName ( this . getName ( configUri ) ) ; } isConfigUri ( configUri ) { return ! ! configUri && this . getName ( configUri ) === this . getConfigName ( ) ; } getName ( configUri ) { return configUri . path . name ; } getPath ( configUri ) { return configUri . parent . path . base ; } createUri ( folder , configPath = this . getPaths ( ) [ 0 ] , configName = this . getConfigName ( ) ) { return folder . resolve ( configPath ) . resolve ( configName + '.json' ) ; } }