/**
  * Recursively gets the ID of required features of this feature and adds them to the list
  *
  * @param model feature model to get requirements of
  * @param requiredFeatureList collector for the required features
  */
 private void getFeatureDependencies(
     IFeatureModel model, IFeatureModel[] allFeatures, ArrayList requiredFeatureList) {
   IFeature feature = model.getFeature();
   IFeatureImport[] featureImports = feature.getImports();
   for (int i = 0; i < featureImports.length; i++) {
     if (featureImports[i].getType() == IFeatureImport.FEATURE) {
       for (int j = 0; j < allFeatures.length; j++) {
         if (allFeatures[j].getFeature().getId().equals(featureImports[i].getId())) {
           requiredFeatureList.add(allFeatures[j]);
           getFeatureDependencies(allFeatures[j], allFeatures, requiredFeatureList);
           break;
         }
       }
     }
   }
   IFeatureChild[] featureIncludes = feature.getIncludedFeatures();
   for (int i = 0; i < featureIncludes.length; i++) {
     requiredFeatureList.add(featureIncludes[i].getId());
     for (int j = 0; j < allFeatures.length; j++) {
       if (allFeatures[j].getFeature().getId().equals(featureIncludes[i].getId())) {
         requiredFeatureList.add(allFeatures[j]);
         getFeatureDependencies(allFeatures[j], allFeatures, requiredFeatureList);
         break;
       }
     }
   }
 }
 public void setFeatureModels(List<IModule> modules) {
   for (IModule module : modules) {
     IFile featureFile = (IFile) module.getProject().findMember("feature.xml");
     WorkspaceFeatureModel wfModel = new WorkspaceFeatureModel(featureFile);
     addWfModel(wfModel);
     IFeature feature = wfModel.getFeature();
     setIuId(module, module.getName() + ".feature.group");
     setIuVersion(module, feature.getVersion());
   }
 }
  private boolean canAdd(IFeatureModel candidate) {
    ISiteFeature[] features = fModel.getSite().getFeatures();
    IFeature cfeature = candidate.getFeature();

    for (int i = 0; i < features.length; i++) {
      ISiteFeature bfeature = features[i];
      if (bfeature.getId().equals(cfeature.getId())
          && bfeature.getVersion().equals(cfeature.getVersion())) return false;
    }
    return true;
  }
 private static boolean isFeaturePatch(IFeature feature) {
   IFeatureImport[] imports = feature.getImports();
   for (int i = 0; i < imports.length; i++) {
     if (imports[i].isPatch()) return true;
   }
   return false;
 }
 public static ISiteFeature createSiteFeature(ISiteModel model, IFeatureModel featureModel)
     throws CoreException {
   IFeature feature = featureModel.getFeature();
   ISiteFeature sfeature = model.getFactory().createFeature();
   sfeature.setId(feature.getId());
   sfeature.setVersion(feature.getVersion());
   // sfeature.setURL(model.getBuildModel().getSiteBuild().getFeatureLocation()
   // + "/" + feature.getId() + "_" + feature.getVersion() + ".jar");
   // //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
   sfeature.setURL(
       "features/"
           + feature.getId()
           + "_"
           + formatVersion(feature.getVersion())
           + ".jar"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
   sfeature.setOS(feature.getOS());
   sfeature.setWS(feature.getWS());
   sfeature.setArch(feature.getArch());
   sfeature.setNL(feature.getNL());
   sfeature.setIsPatch(isFeaturePatch(feature));
   return sfeature;
 }