/** {@inheritDoc} */
  public boolean accept(Object element) {
    boolean passes = true;

    if (element instanceof IFile) {

      IFile file = (IFile) element;
      IProject project = file.getProject();

      if (RepositoryProvider.isShared(project)) {

        RepositoryProvider provider = RepositoryProvider.getProvider(project);

        if (provider != null) {

          Subscriber subscriber = provider.getSubscriber();

          if (subscriber != null) {

            try {
              SyncInfo synchInfo = subscriber.getSyncInfo(file);

              if (synchInfo != null) {
                int kind = synchInfo.getKind();
                passes = (SyncInfo.getDirection(kind) & SyncInfo.OUTGOING) == SyncInfo.OUTGOING;
              }
            } catch (TeamException e) {
              CheckstyleLog.log(e);
            }
          }
        }
      }
    }
    return passes;
  }
  /** Refreshes the check configurations from the persistent store. */
  public static void refresh() {
    try {
      sConfigurations.clear();
      loadBuiltinConfigurations();
      loadFromPersistence();

    } catch (CheckstylePluginException e) {
      CheckstyleLog.log(e);
    }
  }
  /** Load the check configurations from the persistent state storage. */
  private static void loadFromPersistence() throws CheckstylePluginException {

    InputStream inStream = null;

    try {

      IPath configPath = CheckstylePlugin.getDefault().getStateLocation();
      configPath = configPath.append(CHECKSTYLE_CONFIG_FILE);
      File configFile = configPath.toFile();

      //
      // Make sure the files exists, it might not.
      //
      if (!configFile.exists()) {
        return;
      } else {
        inStream = new BufferedInputStream(new FileInputStream(configFile));
      }

      SAXReader reader = new SAXReader();
      Document document = reader.read(inStream);

      Element root = document.getRootElement();

      String version = root.attributeValue(XMLTags.VERSION_TAG);
      if (!CURRENT_CONFIG_FILE_FORMAT_VERSION.equals(version)) {

        // the old (pre 4.0.0) configuration files aren't supported
        // anymore
        CheckstyleLog.log(
            null, "eclipse-cs version 3.x type configuration files are not supported anymore.");
        return;
      }

      String defaultConfigName = root.attributeValue(XMLTags.DEFAULT_CHECK_CONFIG_TAG);

      sConfigurations.addAll(getGlobalCheckConfigurations(root));

      for (ICheckConfiguration config : sConfigurations) {
        if (config.getName().equals(defaultConfigName)) {
          sDefaultCheckConfig = config;
        }
      }
    } catch (IOException e) {
      CheckstylePluginException.rethrow(e, Messages.errorLoadingConfigFile);
    } catch (DocumentException e) {
      CheckstylePluginException.rethrow(e, Messages.errorLoadingConfigFile);
    } finally {
      IOUtils.closeQuietly(inStream);
    }
  }
  private void handleConfigFileError(Exception e, IProject project) {

    CheckstyleLog.log(e, Messages.errorOpeningPropertiesPage);
    CheckstyleUIPlugin.warningDialog(null, Messages.errorOpeningPropertiesPage, e);

    IProjectConfiguration projectConfig =
        ProjectConfigurationFactory.createDefaultProjectConfiguration(project);
    mProjectConfig = new ProjectConfigurationWorkingCopy(projectConfig);
    try {
      mCheckstyleInitiallyActivated = project.hasNature(CheckstyleNature.NATURE_ID);
    } catch (CoreException e1) {
      CheckstyleUIPlugin.errorDialog(null, e1.getMessage(), e1, true);
    }
  }
  /** {@inheritDoc} */
  @Override
  public void initializeDefaultPreferences() {

    IEclipsePreferences prefs = new DefaultScope().getNode(CheckstylePlugin.PLUGIN_ID);
    prefs.putBoolean(PREF_INCLUDE_RULE_NAMES, false);
    prefs.putBoolean(PREF_INCLUDE_MODULE_IDS, false);
    prefs.putBoolean(PREF_LIMIT_MARKERS_PER_RESOURCE, false);
    prefs.putInt(PREF_MARKER_AMOUNT_LIMIT, MARKER_LIMIT);

    try {
      prefs.flush();
    } catch (BackingStoreException e) {
      CheckstyleLog.log(e);
    }
  }
  /** {@inheritDoc} */
  public boolean isConfigurable(ICheckConfiguration checkConfiguration) {
    boolean isConfigurable = true;

    boolean isProtected =
        Boolean.valueOf(checkConfiguration.getAdditionalData().get(KEY_PROTECT_CONFIG))
            .booleanValue();
    isConfigurable = !isProtected;

    if (!isProtected) {

      // The configuration can be changed when the external configuration
      // file can is writable
      try {
        isConfigurable =
            FileUtils.toFile(checkConfiguration.getResolvedConfigurationFileURL()).canWrite();
      } catch (CheckstylePluginException e) {
        CheckstyleLog.log(e);
        isConfigurable = false;
      }
    }
    return isConfigurable;
  }