package com.technophobia.substeps.nature; import java.io.IOException; import org.eclipse.core.resources.IProject; import org.eclipse.jface.preference.IPersistentPreferenceStore; import com.technophobia.substeps.FeatureEditorPlugin; import com.technophobia.substeps.preferences.SubstepsPreferences; import com.technophobia.substeps.supplier.Transformer; public class SubstepsCompatibilityChecker implements CompatibilityChecker<IProject> { private static final String[] DEFAULT_FEATURE_FOLDER_LOCATIONS = { "features", "src/main/resources/features", "src/test/resources/features" }; private static final String[] DEFAULT_SUBSTEPS_FOLDER_LOCATIONS = { "substeps", "src/main/resources/substeps", "src/test/resources/substeps" }; private final Transformer<IProject, IPersistentPreferenceStore> projectToPreferenceLookup; public SubstepsCompatibilityChecker( final Transformer<IProject, IPersistentPreferenceStore> projectToPreferenceLookup) { this.projectToPreferenceLookup = projectToPreferenceLookup; } @Override public boolean isCompatible(final IProject project) { final boolean isSubstepsProject = SubstepsNature.isSubstepsProject(project); final boolean hasBeenProcessed = hasProcessedPreferenceBeenSaved(project); final boolean hasSubstepsFolders = hasFolder(DEFAULT_FEATURE_FOLDER_LOCATIONS, project) || hasFolder(DEFAULT_SUBSTEPS_FOLDER_LOCATIONS, project); return !isSubstepsProject && !hasBeenProcessed && hasSubstepsFolders; } @Override public void markResourceAsCompatibilityChecked(final IProject project) { try { final IPersistentPreferenceStore preferenceStore = projectToPreferenceLookup.from(project); preferenceStore.setValue(SubstepsPreferences.SUBSTEPS_COMPATIBILITY_CHECKED.key(), true); preferenceStore.save(); } catch (final IOException ex) { FeatureEditorPlugin.instance().error( "Could not save the property " + SubstepsPreferences.SUBSTEPS_COMPATIBILITY_CHECKED.key() + " to the preference store", ex); } } private boolean hasProcessedPreferenceBeenSaved(final IProject project) { final IPersistentPreferenceStore preferenceStore = projectToPreferenceLookup.from(project); return preferenceStore.getBoolean(SubstepsPreferences.SUBSTEPS_COMPATIBILITY_CHECKED.key()); } private boolean hasFolder(final String[] folders, final IProject project) { for (final String folder : folders) { if (project.getFolder(folder).exists()) { return true; } } return false; } }