/**
   * Find a resource from its url and add it to the map
   *
   * @param url the resources url
   * @param progressMonitor
   * @param addPosition the position into which to put it, 0 is most lower
   * @param map the map to which to add the resource to
   */
  public static void addResourceFromUrlToMap(
      URL url, IProgressMonitor progressMonitor, int addPosition, IMap map) {

    synchronized (url) {
      ICatalog catalog = CatalogPlugin.getDefault().getLocalCatalog();
      // first search the local catalog.
      List<IResolve> matches = catalog.find(url, new SubProgressMonitor(progressMonitor, 2));

      for (IResolve resolve : matches) {
        List<IResolve> members = null;
        try {
          List<IGeoResource> geoResources = new ArrayList<IGeoResource>();
          members = resolve.members(progressMonitor);
          if (members.size() < 1 && resolve.canResolve(IGeoResource.class)) {
            // if it is a map, it has no members
            geoResources.add(resolve.resolve(IGeoResource.class, progressMonitor));
          } else if (members.get(0).canResolve(IGeoResource.class)) {
            for (IResolve tmp : members) {
              IGeoResource finalResolve = tmp.resolve(IGeoResource.class, progressMonitor);
              geoResources.add(finalResolve);
            }
          }
          List<? extends ILayer> addedLayers =
              ApplicationGIS.addLayersToMap(map, geoResources, addPosition);
          if (addedLayers.size() == 0) {
            System.out.println("strange");
          }
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    }
  }