// ********************************************************************************
// * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
// *
// * See the NOTICE file(s) distributed with this work for additional
// * information regarding copyright ownership.
// *
// * 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.
// *
// * SPDX-License-Identifier: EPL-2.0
// *
// ********************************************************************************
 
import {Injectable} from '@angular/core';

@Injectable()
export class PropertyService {
  api_host = '/org.eclipse.mdm.nucleus';
  data_host = 'http://sa:sa@localhost:9090/';

  getDataHost(): string {
      return this.data_host;
  }

  getUrl(restUrl: string): string {
    if (this.api_host) {
      return this.api_host + restUrl;
    }
  }
}
