@SuppressWarnings("unchecked")
  private static URI createNewResource(
      Resource projectResource, String projectPath, ProjectElement projectElement) {
    int i = 0;
    List<Resource> list = projectResource.getResourceSet().getResources();
    URIConverter uriConverter = projectResource.getResourceSet().getURIConverter();
    URI uri = null;
    boolean found = false;
    do {
      found = false;
      i++;
      // TODO Add file extension name to ProjectElement
      uri = generateResourceName(projectPath, projectElement, i);

      URI normalizedURI = uriConverter.normalize(uri);
      for (Resource resource2 : list) {
        if (uriConverter.normalize(resource2.getURI()).equals(normalizedURI)) {
          found = true;
          break;
        }
      }
      if (!found) {
        File file = new File(uri.toFileString());
        if (file.exists()) found = true;
      }
    } while (found);
    uri.deresolve(projectResource.getURI(), true, true, true);
    return uri;
  }
  public static String createBuildPathRelativeReference(URI sourceURI, URI targetURI) {
    if (sourceURI == null || targetURI == null) throw new IllegalArgumentException();

    // BaseURI source = new BaseURI(sourceURI);
    // return source.getRelativeURI(targetURI);
    // TODO: this is probably bogus.
    if (targetURI.isFile()) {
      return targetURI.lastSegment();
    }
    String result = targetURI.deresolve(sourceURI, true, true, true).toFileString();
    // When absolute URLs
    return (result == null ? targetURI.toString() : result);
  }
  /**
   * Gets the relative URI of a method element in the managed method library.
   *
   * @param element a method element
   * @return a relative URI
   */
  public URI getElementRelativeURI(MethodElement element) {
    if (debug) {
      DebugTrace.print(
          this, "getElementRelativeURI", "element=" + element); // $NON-NLS-1$ //$NON-NLS-2$
    }

    if (element != null) {
      Resource resource = library.eResource();
      if (resource != null) {
        URI libraryURI = resource.getURI();
        URI elementURI = element.eResource().getURI();
        return elementURI.deresolve(libraryURI);
      }
    }
    return null;
  }