package org.testng.eclipse.ui.preferences;
import java.io.IOException;
import java.util.Arrays;
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.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.ui.IStartup;
import org.eclipse.ui.preferences.ScopedPreferenceStore;
import org.testng.eclipse.TestNGPlugin;
import org.testng.eclipse.TestNGPluginConstants;
import com.google.common.base.Joiner;
public class JdtPreferenceInjector implements IStartup, IPropertyChangeListener {
private static final String assertClassName = "org.testng.Assert";
@Override
public void earlyStartup() {
initializeFavoriteStatic();
}
@Override
public void propertyChange(PropertyChangeEvent event) {
if (PreferenceConstants.CODEASSIST_FAVORITE_STATIC_MEMBERS.equals(event.getProperty())) {
// check if user manully removed testng assert
if (event.getOldValue().toString().contains(assertClassName)
&& !event.getNewValue().toString().contains(assertClassName)) {
IPreferenceStore store = TestNGPlugin.getDefault().getPreferenceStore();
store.setValue(TestNGPluginConstants.S_APPEND_FAVORITE_STATIC_IMPORT, false);
try {
((ScopedPreferenceStore) store).save();
} catch (IOException e) {
}
}
}
}
private void initializeFavoriteStatic() {
IPreferenceStore store = TestNGPlugin.getDefault().getPreferenceStore();
boolean appendFavorite = store.getBoolean(TestNGPluginConstants.S_APPEND_FAVORITE_STATIC_IMPORT);
if (!appendFavorite) {
return;
}
IPreferenceStore jdtPrefStore = PreferenceConstants.getPreferenceStore();
jdtPrefStore.addPropertyChangeListener(this);
Set<String> favorites = new LinkedHashSet<>();
String existingFavorites = jdtPrefStore.getString(PreferenceConstants.CODEASSIST_FAVORITE_STATIC_MEMBERS);
if (!existingFavorites.isEmpty()) {
favorites.addAll(Arrays.asList(existingFavorites.split(";")));
}
favorites.add(assertClassName + ".*");
jdtPrefStore.setValue(PreferenceConstants.CODEASSIST_FAVORITE_STATIC_MEMBERS,
Joiner.on(";").join(favorites));
try {
((ScopedPreferenceStore) jdtPrefStore).save();
} catch (IOException e) {
}
}
}