protected Map<String, PackageDefinition> getDistributionDefinitions(List<String> md5Filenames) {
   Map<String, PackageDefinition> allDefinitions = new HashMap<String, PackageDefinition>();
   if (md5Filenames == null) {
     return allDefinitions;
   }
   for (String md5Filename : md5Filenames) {
     File md5File = new File(distributionMPDir, md5Filename);
     if (!md5File.exists()) {
       // distribution file has been deleted
       continue;
     }
     ZipFile zipFile;
     try {
       zipFile = new ZipFile(md5File);
     } catch (ZipException e) {
       log.warn("Unzip error reading file " + md5File, e);
       continue;
     } catch (IOException e) {
       log.warn("Could not read file " + md5File, e);
       continue;
     }
     try {
       ZipEntry zipEntry = zipFile.getEntry("package.xml");
       InputStream in = zipFile.getInputStream(zipEntry);
       PackageDefinition pd = NuxeoConnectClient.getPackageUpdateService().loadPackage(in);
       allDefinitions.put(md5Filename, pd);
     } catch (Exception e) {
       log.error("Could not read package description", e);
       continue;
     } finally {
       try {
         zipFile.close();
       } catch (IOException e) {
         log.warn("Unexpected error closing file " + md5File, e);
       }
     }
   }
   return allDefinitions;
 }
  // Wrap connect client services as Nuxeo Services
  public <T> T getAdapter(Class<T> adapter) {

    if (adapter.getCanonicalName().equals(ConnectConnector.class.getCanonicalName())) {
      return adapter.cast(NuxeoConnectClient.getConnectConnector());
    }

    if (adapter.getCanonicalName().equals(ConnectRegistrationService.class.getCanonicalName())) {
      return adapter.cast(NuxeoConnectClient.getConnectRegistrationService());
    }

    if (adapter.getCanonicalName().equals(ConnectDownloadManager.class.getCanonicalName())) {
      return adapter.cast(NuxeoConnectClient.getDownloadManager());
    }

    if (adapter.getCanonicalName().equals(PackageManager.class.getCanonicalName())) {
      return adapter.cast(NuxeoConnectClient.getPackageManager());
    }

    if (adapter.getCanonicalName().equals(PackageUpdateService.class.getCanonicalName())) {
      return adapter.cast(NuxeoConnectClient.getPackageUpdateService());
    }

    return adapter.cast(this);
  }