// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

package com.google.dart.compiler.util;

import com.google.dart.compiler.DartSource;
import com.google.dart.compiler.LibrarySource;

import java.io.Reader;
import java.io.StringReader;
import java.net.URI;
import java.net.URISyntaxException;

/**
 * Instances of the class <code>DartSourceString</code> represent a source
 * composed from a string rather than an external file.
 */
public class DartSourceString implements DartSource {
  /**
   * The name of the source being represented.
   */
  private String name;

  /**
   * The source being represented.
   */
  private String source;

  /**
   * Initialize a new Dart source to have the given content.
   * 
   * @param source the source being represented
   */
  public DartSourceString(String name, String source) {
    this.name = name;
    this.source = source;
  }

  @Override
  public boolean exists() {
    return true;
  }

  @Override
  public long getLastModified() {
    return 0;
  }

  @Override
  public LibrarySource getLibrary() {
    return null;
  }

  @Override
  public String getName() {
    return name;
  }

  @Override
  public String getRelativePath() {
    return name;
  }

  @Override
  public Reader getSourceReader() {
    return new StringReader(source);
  }

  @Override
  public String getUniqueIdentifier() {
    try {
      return new URI(null, null, getName(), null).normalize().toString();
    } catch (URISyntaxException e) {
      throw new IllegalArgumentException(e);
    }
  }

  @Override
  public URI getUri() {
    try {
      return new URI(null, null, getName(), null).normalize();
    } catch (URISyntaxException e) {
      throw new IllegalArgumentException(e);
    }
  }
}

// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

package com.google.dart.compiler.util;

import com.google.dart.compiler.DartSource;
import com.google.dart.compiler.LibrarySource;

import java.io.Reader;
import java.io.StringReader;
import java.net.URI;
import java.net.URISyntaxException;

/**
 * Instances of the class <code>DartSourceString</code> represent a source
 * composed from a string rather than an external file.
 */
public class DartSourceString implements DartSource {
  /**
   * The name of the source being represented.
   */
  private String name;

  /**
   * The source being represented.
   */
  private String source;

  /**
   * Initialize a new Dart source to have the given content.
   * 
   * @param source the source being represented
   */
  public DartSourceString(String name, String source) {
    this.name = name;
    this.source = source;
  }

  @Override
  public boolean exists() {
    return true;
  }

  @Override
  public long getLastModified() {
    return 0;
  }

  @Override
  public LibrarySource getLibrary() {
    return null;
  }

  @Override
  public String getName() {
    return name;
  }

  @Override
  public String getRelativePath() {
    return name;
  }

  @Override
  public Reader getSourceReader() {
    return new StringReader(source);
  }

  @Override
  public String getUniqueIdentifier() {
    try {
      return new URI(null, null, getName(), null).normalize().toString();
    } catch (URISyntaxException e) {
      throw new IllegalArgumentException(e);
    }
  }

  @Override
  public URI getUri() {
    try {
      return new URI(null, null, getName(), null, null).normalize();
    } catch (URISyntaxException e) {
      throw new IllegalArgumentException(e);
    }
  }
}

fix for dartbug.com/7234 - URI exception for web_audio Review URL: https://codereview.chromium.org//11515006