/*
* Copyright (c) 2009 Andrejs Jermakovics.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Andrejs Jermakovics - initial implementation
*/
package it.unibz.instasearch.prefs;
import it.unibz.instasearch.InstaSearchPlugin;
import java.util.Arrays;
import java.util.TreeSet;
import org.apache.commons.lang.StringUtils;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.content.IContentType;
import org.eclipse.core.runtime.content.IContentTypeManager;
import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.ui.IFileEditorMapping;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.internal.registry.EditorRegistry;
/**
* Class used to initialize default preference values.
*/
@SuppressWarnings("restriction")
public class PreferenceInitializer extends AbstractPreferenceInitializer {
private static final String DEFAULT_EXTENSIONS = "java,xml,xsd,txt,jsp,css,c,cpp,h,hpp,mf,properties,php,php4,php5,js,inc,ini,sql,sqlj,pl,sh,bat,cmd,htm,html";
/**
* @see org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer#initializeDefaultPreferences()
*/
public void initializeDefaultPreferences()
{
IPreferenceStore store = InstaSearchPlugin.getDefault().getPreferenceStore();
store.setDefault(PreferenceConstants.P_CHECK_UPDATES, true);
store.setDefault(PreferenceConstants.P_SHOW_MATCH_COUNT, true);
store.setDefault(PreferenceConstants.P_INDEX_ARCHIVES, false);
store.setDefault(PreferenceConstants.P_INDEX_EMPTY_EXTENSION, false);
store.setDefault(PreferenceConstants.P_FUZZY_SEARCH_AUTO, true);
store.setDefault(PreferenceConstants.P_SHOW_FULL_PATH, true);
store.setDefault(PreferenceConstants.P_DIALOG_ON_SHORTCUT, false);
store.setDefault(PreferenceConstants.P_INCREMENTAL_SEARCH, true);
store.setDefault(PreferenceConstants.P_SHOWN_FILES_COUNT, 25);
store.setDefault(PreferenceConstants.P_SHOWN_LINES_COUNT, 4);
store.setDefault(PreferenceConstants.P_UPDATE_CHECK_DELAY, 10000);
store.setDefault(PreferenceConstants.P_TYPING_SEARCH_DELAY, 200);
store.setDefault(PreferenceConstants.P_INDEX_UPDATE_INTERVAL, 60000);
store.setDefault(PreferenceConstants.P_INDEX_UPDATE_ENABLED, true);
String extensions = getIndexableExtensions();
store.setDefault(PreferenceConstants.P_INDEXABLE_EXTENSIONS, extensions);
store.setDefault(PreferenceConstants.P_SEARCH_EXTENSIONS, "");
store.setDefault(PreferenceConstants.P_EXCLUDE_DIRS, "");
}
/**
* Get extensions that Eclipse knows of and the default ones
* @return comma separated string of extensions
*/
public static String getIndexableExtensions()
{
String defaultExtArray[] = DEFAULT_EXTENSIONS.split(",");
TreeSet<String> extensions = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
extensions.addAll(Arrays.asList(defaultExtArray));
IFileEditorMapping[] allMappings = ((EditorRegistry)PlatformUI.getWorkbench()
.getEditorRegistry()).getUnifiedMappings();
IContentType text = Platform.getContentTypeManager().getContentType(IContentTypeManager.CT_TEXT);
for (int i = 0; i < allMappings.length; i++) {
if (allMappings[i].getName().equals("*")) {
String ext = allMappings[i].getExtension();
IContentType type = Platform.getContentTypeManager().findContentTypeFor("." + ext);
if( type != null && type.isKindOf(text))
extensions.add( ext );
}
}
IContentType[] types = Platform.getContentTypeManager().getAllContentTypes();
for(IContentType type: types) {
if( type.isKindOf(text)) {
String exts[] = type.getFileSpecs(IContentType.FILE_EXTENSION_SPEC);
extensions.addAll(Arrays.asList(exts));
}
}
return StringUtils.join(extensions.toArray(), ",");
}
}