@Override
 public void unregisterContribution(
     Object contribution, String extensionPoint, ComponentInstance contributor) {
   if (contribution instanceof FlavorDescriptor) {
     FlavorDescriptor flavor = (FlavorDescriptor) contribution;
     flavorReg.removeContribution(flavor);
   } else if (contribution instanceof Resource) {
     Resource resource = (Resource) contribution;
     unregisterResource(resource);
   } else if (contribution instanceof SimpleStyle) {
     SimpleStyle style = (SimpleStyle) contribution;
     unregisterResource(getResourceFromStyle(style));
   } else if (contribution instanceof PageDescriptor) {
     PageDescriptor page = (PageDescriptor) contribution;
     if (page.hasResources() && !Framework.getRuntime().isShuttingDown()) {
       WebResourceManager wrm = Framework.getService(WebResourceManager.class);
       wrm.unregisterResourceBundle(page.getComputedResourceBundle());
     }
     pageReg.removeContribution(page);
   } else if (contribution instanceof NegotiationDescriptor) {
     NegotiationDescriptor neg = (NegotiationDescriptor) contribution;
     negReg.removeContribution(neg);
   } else {
     log.error(
         String.format(
             "Unknown contribution to the theme " + "styling service, extension point '%s': '%s",
             extensionPoint, contribution));
   }
 }
 @Override
 public FlavorDescriptor getFlavor(String flavorName) {
   if (flavorReg != null) {
     FlavorDescriptor flavor = flavorReg.getFlavor(flavorName);
     if (flavor != null) {
       FlavorDescriptor clone = flavor.clone();
       clone.setLogo(computeLogo(flavor, new ArrayList<String>()));
       clone.setPalettePreview(computePalettePreview(flavor, new ArrayList<String>()));
       clone.setFavicons(computeIcons(flavor, new ArrayList<String>()));
       return clone;
     }
   }
   return null;
 }
  protected void registerFlavor(FlavorDescriptor flavor, RuntimeContext extensionContext) {
    // set flavor presets files content
    List<FlavorPresets> presets = flavor.getPresets();
    if (presets != null) {
      for (FlavorPresets myPreset : presets) {
        String src = myPreset.getSrc();
        URL url = getUrlFromPath(src, extensionContext);
        if (url == null) {
          log.error(String.format("Could not find resource at '%s'", src));
        } else {
          String content;
          try {
            content = new String(FileUtils.readBytes(url));
          } catch (IOException e) {
            throw new RuntimeException(e);
          }
          myPreset.setContent(content);
        }
      }
    }

    // set flavor sass variables
    List<SassImport> sassVars = flavor.getSassImports();
    if (sassVars != null) {
      for (SassImport var : sassVars) {
        String src = var.getSrc();
        URL url = getUrlFromPath(src, extensionContext);
        if (url == null) {
          log.error(String.format("Could not find resource at '%s'", src));
        } else {
          String content;
          try {
            content = new String(FileUtils.readBytes(url));
          } catch (IOException e) {
            throw new RuntimeException(e);
          }
          var.setContent(content);
        }
      }
    }

    flavorReg.addContribution(flavor);
  }