/*******************************************************************************
* Copyright (c) 2013 AKSW Xturtle Project, 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.xturtle.ui.preferences;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import javax.inject.Inject;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.xtext.naming.IQualifiedNameConverter;
import org.eclipse.xtext.naming.QualifiedName;
import com.google.common.collect.ImmutableSet;
import com.google.inject.Singleton;
import de.itemis.tooling.xturtle.resource.TurtleIndexUserDataNamesProvider;
@Singleton
public class TurtlePreferenceBasedUserDataNamesProvider implements
TurtleIndexUserDataNamesProvider, IPropertyChangeListener {
private IQualifiedNameConverter nameConverter;
private Set<QualifiedName> labelNames;
private Set<QualifiedName> descriptionNames;
private Set<String> internalLanguageList;
private boolean useNullLangage;
private boolean useDefaultLanguage;
private Set<String> languageList;
@Inject
public TurtlePreferenceBasedUserDataNamesProvider(IPreferenceStore store, IQualifiedNameConverter nameConverter) {
store.addPropertyChangeListener(this);
this.nameConverter=nameConverter;
initLabelNames(store.getString(TurtlePreferenceConstants.LABEL_PREFERENCE_KEY));
intiDescriptionNames(store.getString(TurtlePreferenceConstants.DESCRIPTION_PREFERENCE_KEY));
initInternalLangageList(store.getString(TurtlePreferenceConstants.LANGUAGES_PREFERENCE_KEY));
useNullLangage=store.getBoolean(TurtlePreferenceConstants.USE_NOLANGUAGE_PREFERENCE_KEY);
useDefaultLanguage=store.getBoolean(TurtlePreferenceConstants.USE_DEFAULT_LANGUAGE_PREFERENCE_KEY);
reconcileLanguageList();
}
private void reconcileLanguageList() {
languageList=new HashSet<String>(internalLanguageList);
if(useDefaultLanguage){
String nl = Platform.getNL();
int underscoreIndex = nl.indexOf('_');
if(underscoreIndex>=0){
nl=nl.substring(0,underscoreIndex);
}
languageList.add(nl);
}
if(useNullLangage){
languageList.add(null);
}
//TODO normalize language list (only language not country)
// languageList=ImmutableSet.copyOf(languageList);
}
private void initInternalLangageList(String string) {
internalLanguageList=new HashSet<String>(Arrays.asList(string.split(",,")));
internalLanguageList.remove("");
}
private void intiDescriptionNames(String string) {
descriptionNames=ImmutableSet.copyOf(getQnames(string));
}
private void initLabelNames(String string) {
labelNames=ImmutableSet.copyOf(getQnames(string));
}
private Set<QualifiedName> getQnames(String string){
Set<QualifiedName> names=new HashSet<QualifiedName>();
if(string!=null){
for (String line : string.split("\n")) {
line=line.trim();
if(line.length()>0){
names.add(nameConverter.toQualifiedName(line));
}
}
}
return names;
}
public Set<QualifiedName> getLabelNames() {
return labelNames;
}
public Set<QualifiedName> getDescriptionNames() {
return descriptionNames;
}
public Set<String> getDescriptionLanguages() {
return languageList;
}
public void propertyChange(PropertyChangeEvent event) {
if(TurtlePreferenceConstants.LABEL_PREFERENCE_KEY.equals(event.getProperty())){
initLabelNames((String)event.getNewValue());
}else if(TurtlePreferenceConstants.DESCRIPTION_PREFERENCE_KEY.equals(event.getProperty())){
intiDescriptionNames((String)event.getNewValue());
}else if(TurtlePreferenceConstants.LANGUAGES_PREFERENCE_KEY.equals(event.getProperty())){
initInternalLangageList((String)event.getNewValue());
reconcileLanguageList();
}else if(TurtlePreferenceConstants.USE_DEFAULT_LANGUAGE_PREFERENCE_KEY.equals(event.getProperty())){
useDefaultLanguage=(Boolean)event.getNewValue();
reconcileLanguageList();
}else if(TurtlePreferenceConstants.USE_NOLANGUAGE_PREFERENCE_KEY.equals(event.getProperty())){
useNullLangage=(Boolean)event.getNewValue();
reconcileLanguageList();
}
}
}