/*******************************************************************************
* Copyright (c) 2013 itemis AG (http://www.itemis.eu).
* 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
******************************************************************************/
package de.itemis.tooling.terminology.ui.generator;
import java.util.List;
import javax.inject.Inject;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.xtext.ui.editor.preferences.PreferenceStoreAccessImpl;
import org.eclipse.xtext.ui.preferences.OptionsConfigurationBlock;
import com.google.common.collect.Lists;
import de.itemis.tooling.terminology.generator.TerminologyGeneratorParticipant;
@SuppressWarnings("restriction")
public class TerminologyGenerators {
private PreferenceStoreAccessImpl preferenceStoreAccess;
private List<TerminologyGeneratorParticipant> generators=null;
@Inject
public TerminologyGenerators(PreferenceStoreAccessImpl prefStoreAccess) {
preferenceStoreAccess = prefStoreAccess;
}
public List<TerminologyGeneratorParticipant> getGenerators(IProject context){
//context plays a role only if there are project specific settings
IPreferenceStore preferences=preferenceStoreAccess.getContextPreferenceStore(context);
if(!preferences.getBoolean(OptionsConfigurationBlock.IS_PROJECT_SPECIFIC)){
preferences=preferenceStoreAccess.getContextPreferenceStore(null);
}
if(generators==null){
generators=Lists.newArrayList();
//Injection does not really make sense as here only classes from the terminology plugin could be injected
// Injector injector = TerminologyActivator.getInstance().getInjector(TerminologyActivator.DE_ITEMIS_TOOLING_TERMINOLOGY_TERMINOLOGY);
IConfigurationElement[] configs = Platform.getExtensionRegistry().getConfigurationElementsFor("de.itemis.tooling.terminology.generator");
for (IConfigurationElement config : configs) {
try {
TerminologyGeneratorParticipant generator = (TerminologyGeneratorParticipant)config.createExecutableExtension("class");
// injector.injectMembers(generator);
if(preferences.contains(generator.getId()+"_folder")){
generator.setFolder(preferences.getString(generator.getId()+"_folder"));
}else{
generator.setFolder(generator.getDefaultFolder());
}
boolean active=preferences.getBoolean(generator.getId()+"_active");
generator.setActive(active);
generators.add(generator);
} catch (Exception e) {
e.printStackTrace();
}
}
}
return generators;
}
public void applyDefaults(IPreferenceStore store){
for (TerminologyGeneratorParticipant generator : getGenerators(null)) {
store.setValue(generator.getId()+"_active", false);
store.setValue(generator.getId()+"_folder", generator.getDefaultFolder());
// store.setDefault(generator.getId()+"_active", false);
// store.setDefault(generator.getId()+"_folder", generator.getDefaultFolder());
generator.setActive(false);
generator.setFolder(generator.getDefaultFolder());
}
}
public void apply(IPreferenceStore store){
for (TerminologyGeneratorParticipant generator : getGenerators(null)) {
store.setValue(generator.getId()+"_active", ""+generator.isActive());
store.setValue(generator.getId()+"_folder", generator.getFolder());
}
}
}