/*******************************************************************************
* Copyright (c) 2007, 2010 Intel Corporation and others.
* 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
*
* Contributors:
* Intel Corporation - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.core.settings.model.util;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
import org.eclipse.cdt.core.settings.model.extension.CLanguageData;
public abstract class UserAndDiscoveredEntryLanguageData extends
EntryStorageBasedLanguageData {
private KindBasedStore<Set<String>> fDisabledNameSetStore;
public UserAndDiscoveredEntryLanguageData() {
super();
}
public UserAndDiscoveredEntryLanguageData(String id, CLanguageData base) {
super(id, base);
}
@Override
protected void copySettingsFrom(CLanguageData data) {
super.copySettingsFrom(data);
if(data instanceof UserAndDiscoveredEntryLanguageData){
UserAndDiscoveredEntryLanguageData lData = (UserAndDiscoveredEntryLanguageData)data;
if(lData.fDisabledNameSetStore != null){
@SuppressWarnings("unchecked")
KindBasedStore<Set<String>> clone = (KindBasedStore<Set<String>>) lData.fDisabledNameSetStore.clone();
fDisabledNameSetStore = clone;
int kinds[] = KindBasedStore.getLanguageEntryKinds();
int kind;
Set<String> set;
for(int i = 0; i < kinds.length; i++){
kind = kinds[i];
set = fDisabledNameSetStore.get(kind);
if(set != null){
set = new HashSet<String>(set);
fDisabledNameSetStore.put(kind, set);
}
}
}
}
}
public UserAndDiscoveredEntryLanguageData(String id, String languageId,
String[] ids, boolean isContentTypes) {
super(id, languageId, ids, isContentTypes);
}
public static class UserAndDiscoveredEntryLanguageDataEntryStorage extends UserAndDiscoveredEntryStorage {
private UserAndDiscoveredEntryLanguageData fLangData;
public UserAndDiscoveredEntryLanguageDataEntryStorage(int kind, UserAndDiscoveredEntryLanguageData lData) {
super(kind);
fLangData = lData;
}
@Override
protected ICLanguageSettingEntry[] getDiscoveredEntries(
Set<String> disabledNameSet) {
return fLangData.getDiscoveredEntries(getKind(), disabledNameSet);
}
@Override
protected ICLanguageSettingEntry[] getUserEntries() {
return fLangData.getUserEntries(getKind());
}
@Override
protected void setDisabledDiscoveredNames(Set<String> disabledNameSet) {
fLangData.setDisabledDiscoveredNames(getKind(), disabledNameSet);
}
@Override
protected void setUserEntries(ICLanguageSettingEntry[] entries) {
fLangData.setUserEntries(getKind(), entries);
}
@Override
protected boolean canDisableDiscoveredEntries() {
return fLangData.canDisableDiscoveredEntries(getKind());
}
}
@Override
protected AbstractEntryStorage getStorage(int kind) {
return new UserAndDiscoveredEntryLanguageDataEntryStorage(kind, this);
}
protected ICLanguageSettingEntry[] getDiscoveredEntries(int kind,
Set<String> disabledNameSet){
ICLanguageSettingEntry[] entries = getAllDiscoveredEntries(kind);
Set<String> set = getDisabledSet(kind);
if(set != null && set.size() != 0){
disabledNameSet.addAll(set);
}
return entries;
}
protected void removeInexistent(ICLanguageSettingEntry[] entries, Set<String> set){
Set<String> copy = new HashSet<String>(set);
for(int i = 0; i < entries.length; i++){
copy.remove(entries[i].getName());
}
if(copy.size() != 0){
set.removeAll(copy);
}
}
protected ICLanguageSettingEntry[] getUserEntries(int kind) {
return getEntriesFromStore(kind);
}
protected void setDisabledDiscoveredNames(int kind, Set<String> disabledNameSet){
setDisabledSet(kind, disabledNameSet != null ? new HashSet<String>(disabledNameSet) : null);
}
protected Set<String> getDisabledSet(int kind){
if(fDisabledNameSetStore != null){
return fDisabledNameSetStore.get(kind);
}
return null;
}
protected void setDisabledSet(int kind, Set<String> set){
if(set == null || set.size() == 0){
if(fDisabledNameSetStore != null){
fDisabledNameSetStore.put(kind, null);
}
} else {
if(fDisabledNameSetStore == null)
fDisabledNameSetStore = new KindBasedStore<Set<String>>();
fDisabledNameSetStore.put(kind, set);
}
}
protected abstract ICLanguageSettingEntry[] getAllDiscoveredEntries(int kind);
protected void setUserEntries(int kind, ICLanguageSettingEntry[] entries) {
setEntriesToStore(kind, entries);
}
protected boolean canDisableDiscoveredEntries(int kind) {
return true;
}
@Override
protected ICLanguageSettingEntry[] getEntriesToCopy(int kind,
CLanguageData data) {
return ((UserAndDiscoveredEntryLanguageData)data).getEntriesFromStore(kind);
}
}