public EquinoxObjectClassDefinition getObjectClassDefinition(String id, String locale) {
   if (_bundle.getState() != Bundle.ACTIVE) return null; // return none if not active
   MetaTypeProviderWrapper[] wrappers = getMetaTypeProviders();
   for (int i = 0; i < wrappers.length; i++) {
     if (id.equals(wrappers[i].pid))
       // found a matching pid now call the actual provider
       return wrappers[i].getObjectClassDefinition(id, locale);
   }
   return null;
 }
 private String[] getPids(boolean factory) {
   if (_bundle.getState() != Bundle.ACTIVE) return new String[0]; // return none if not active
   MetaTypeProviderWrapper[] wrappers = getMetaTypeProviders();
   ArrayList<String> results = new ArrayList<String>();
   for (int i = 0; i < wrappers.length; i++) {
     // return only the correct type of pids (regular or factory)
     if (factory == wrappers[i].factory) results.add(wrappers[i].pid);
   }
   return results.toArray(new String[results.size()]);
 }
 public String[] getLocales() {
   if (_bundle.getState() != Bundle.ACTIVE) return new String[0]; // return none if not active
   MetaTypeProviderWrapper[] wrappers = getMetaTypeProviders();
   ArrayList<String> locales = new ArrayList<String>();
   // collect all the unique locales from all providers we found
   for (int i = 0; i < wrappers.length; i++) {
     String[] wrappedLocales = wrappers[i].getLocales();
     if (wrappedLocales == null) continue;
     for (int j = 0; j < wrappedLocales.length; j++)
       if (!locales.contains(wrappedLocales[j])) locales.add(wrappedLocales[j]);
   }
   return locales.toArray(new String[locales.size()]);
 }