// ********************************************************************************
// * Copyright (c) 2015-2020 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';
import { environment } from '../../environments/environment';

@Injectable()
export class PropertyService {
  data_host = 'http://sa:sa@localhost:9090/';

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

  getUrl(restUrl: string): string {
    if (environment.apiUrl) {
      return environment.apiUrl + restUrl;
    } else {
      return restUrl;
    }
  }
}
