/**
  * Finds a feature with the same id and version as a site feature. If feature is not found, but
  * feature with a M.m.s.qualifier exists it will be returned.
  *
  * @param siteFeature
  * @return IFeature or null
  */
 public static IFeature findFeature(ISiteFeature siteFeature) {
   IFeatureModel model =
       PDECore.getDefault()
           .getFeatureModelManager()
           .findFeatureModelRelaxed(siteFeature.getId(), siteFeature.getVersion());
   if (model != null) return model.getFeature();
   return null;
 }
  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 ISiteFeature findRealFeature(SiteFeatureAdapter adapter) {
   ISiteFeature featureCopy = adapter.feature;
   ISiteFeature[] features = fModel.getSite().getFeatures();
   for (int i = 0; i < features.length; i++) {
     if (features[i].getId().equals(featureCopy.getId())
         && features[i].getVersion().equals(featureCopy.getVersion())) {
       return features[i];
     }
   }
   return null;
 }
 private void removeCategory(ISiteFeature aFeature, String catName) {
   try {
     if (aFeature == null) return;
     ISiteCategory[] cats = aFeature.getCategories();
     for (int i = 0; i < cats.length; i++) {
       if (catName.equals(cats[i].getName()))
         aFeature.removeCategories(new ISiteCategory[] {cats[i]});
     }
   } catch (CoreException e) {
   }
 }
 private void addCategory(ISiteFeature aFeature, String catName) {
   try {
     if (aFeature == null) return;
     ISiteCategory[] cats = aFeature.getCategories();
     for (int j = 0; j < cats.length; j++) {
       if (cats[j].getName().equals(catName)) return;
     }
     ISiteCategory cat = fModel.getFactory().createCategory(aFeature);
     cat.setName(catName);
     expandCategory(catName);
     aFeature.addCategories(new ISiteCategory[] {cat});
   } catch (CoreException e) {
   }
 }
 private boolean handleRemoveSiteFeatureAdapter(SiteFeatureAdapter adapter) {
   try {
     ISiteFeature feature = adapter.feature;
     if (adapter.category == null) {
       fModel.getSite().removeFeatures(new ISiteFeature[] {feature});
     } else {
       removeCategory(feature, adapter.category);
       if (feature.getCategories().length == 0)
         fModel.getSite().removeFeatures(new ISiteFeature[] {feature});
     }
     return true;
   } catch (CoreException e) {
   }
   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;
 }
 /**
  * Creates a new site feature instance with the same settings as the given source feature.
  *
  * @param model site model to create the feature from
  * @param sourceFeature the feature to copy settings out of
  * @return a new site feature instance
  * @throws CoreException
  */
 private ISiteFeature copySiteFeature(ISiteModel model, ISiteFeature sourceFeature)
     throws CoreException {
   ISiteFeature sfeature = model.getFactory().createFeature();
   sfeature.setId(sourceFeature.getId());
   sfeature.setVersion(sourceFeature.getVersion());
   sfeature.setURL(sourceFeature.getURL());
   sfeature.setOS(sourceFeature.getOS());
   sfeature.setWS(sourceFeature.getWS());
   sfeature.setArch(sourceFeature.getArch());
   sfeature.setNL(sourceFeature.getNL());
   sfeature.setIsPatch(sourceFeature.isPatch());
   return sfeature;
 }