package junit.extensions.eclipse.quick.mock.internal.preference;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
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 if none exist.
*
*/
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;
static final String ENABLE_ADDITIONAL_AUTOCOMPLETE_FAVOURTES = "ENABLE_ADDITIONAL_AUTOCOMPLETE_FAVOURTES"; //$NON-NLS-1$
/**
* 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<String> imports = new LinkedHashSet<String>(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<String> getJDTImports() {
String preference = jdtPreferenceStore.getString(PreferenceConstants.CODEASSIST_FAVORITE_STATIC_MEMBERS);
if (EMPTY.equals(preference.trim())) {
return new HashSet<String>();
}
String[] imports = preference.split(SEMI_COLON);
return new LinkedHashSet<String>(Arrays.asList(imports));
}
private LinkedHashSet<String> getDefaultFavorites() {
LinkedHashSet<String> orderedSet = new LinkedHashSet<String>();
orderedSet.add(importStatement("org.mockito.Matchers"));
orderedSet.add(importStatement("org.mockito.Mockito"));
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();
for (Object object : toJoin) {
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();
}
}