package junit.extensions.eclipse.quick.internal.preference; import java.io.IOException; import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.Set; import org.eclipse.jdt.ui.PreferenceConstants; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.ui.IStartup; import org.eclipse.ui.preferences.ScopedPreferenceStore; /** * Initializes the default preferences * */ public class PreferenceInitializer implements IStartup{ private static final String EMPTY = ""; //$NON-NLS-1$ private static final String SEMI_COLON = ";"; //$NON-NLS-1$ private final IPreferenceStore jdtPreferenceStore; /** * Creates a default preference initializer. */ public PreferenceInitializer() { this(PreferenceConstants.getPreferenceStore()); } /** * Create a preference initializer with the two preference stores. * * @param jdtPreferenceStore used by JDT. */ public PreferenceInitializer(IPreferenceStore jdtPreferenceStore) { this.jdtPreferenceStore = jdtPreferenceStore; } void initializeFavorites() { Set imports = new LinkedHashSet(getJDTImports()); imports.addAll(getDefaultFavorites()); String join = join(imports, SEMI_COLON); jdtPreferenceStore.setValue(PreferenceConstants.CODEASSIST_FAVORITE_STATIC_MEMBERS, join); try { ((ScopedPreferenceStore) jdtPreferenceStore).save(); } catch (IOException e) { } } /** * @return the JDT favorite imports. */ public Set getJDTImports() { String preference = jdtPreferenceStore.getString(PreferenceConstants.CODEASSIST_FAVORITE_STATIC_MEMBERS); if (EMPTY.equals(preference.trim())) { return new HashSet(); } String[] imports = preference.split(SEMI_COLON); return new LinkedHashSet(Arrays.asList(imports)); } private LinkedHashSet getDefaultFavorites() { LinkedHashSet orderedSet = new LinkedHashSet(); orderedSet.add(importStatement("org.hamcrest.MatcherAssert")); orderedSet.add(importStatement("org.hamcrest.CoreMatchers")); orderedSet.add(importStatement("org.junit.matchers.JUnitMatchers")); orderedSet.add(importStatement("org.junit.Assert")); return orderedSet; } public void propertyChange(PropertyChangeEvent event) { initializeFavorites(); } private String importStatement(String clazz) { return clazz + ".*"; //$NON-NLS-1$; } private String join(Collection toJoin, String delimiter) { if ((toJoin == null) || (toJoin.size() == 0)) return ""; StringBuffer result = new StringBuffer(); Iterator iterator = toJoin.iterator(); while(iterator.hasNext()){ Object object = iterator.next(); result.append(object); result.append(delimiter); } result.lastIndexOf(delimiter); result.replace(result.length() - delimiter.length(), result.length(), ""); //$NON-NLS-1$ return result.toString(); } public void earlyStartup() { new PreferenceInitializer().initializeFavorites(); } }