/******************************************************************************* * 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; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.eclipse.cdt.core.settings.model.util.CEntriesSet; import org.eclipse.cdt.core.settings.model.util.KindBasedStore; public final class CExternalSetting implements ICExternalSetting { // private EntryStore fEntryStore = new EntryStore(); private KindBasedStore<CEntriesSet> fStore = new KindBasedStore<CEntriesSet>(false); private String[] fContentTypeIds; private String[] fLanguageIds; private String[] fExtensions; // private String fId; public CExternalSetting(ICExternalSetting base) { fLanguageIds = base.getCompatibleLanguageIds(); fContentTypeIds = base.getCompatibleContentTypeIds(); fExtensions = base.getCompatibleExtensions(); // fEntryStore = new EntryStore(); initEntryStore(base.getEntries()); } public CExternalSetting(ICExternalSetting base, ICSettingEntry entries[]) { this(base); initEntryStore(entries); } public CExternalSetting(String[] languageIDs, String[] contentTypeIds, String[] extensions, ICSettingEntry[] entries) { if (languageIDs != null) fLanguageIds = languageIDs.clone(); if (contentTypeIds != null) fContentTypeIds = contentTypeIds.clone(); if (extensions != null) fExtensions = extensions.clone(); initEntryStore(entries); } private void initEntryStore(ICSettingEntry entries[]) { ICSettingEntry entry; for (int i = 0; i < entries.length; i++) { entry = entries[i]; addEntry(entry); } // trimToSize(); } private void addEntry(ICSettingEntry entry) { getEntriesSet(entry.getKind(), true).addEntry(entry); } // private void trimToSize() { // int kinds[] = KindBasedStore.getSupportedKinds(); // for (int i = 0; i < kinds.length; i++) { // CEntriesSet set = getEntriesSet(kinds[i], false); // if (set != null) // set.trimToSize(); // } // } private CEntriesSet getEntriesSet(int kind, boolean create) { CEntriesSet set = fStore.get(kind); if (set == null && create) { set = new CEntriesSet(); fStore.put(kind, set); } return set; } public String[] getCompatibleContentTypeIds() { if (fContentTypeIds != null) return fContentTypeIds.clone(); return null; } public String[] getCompatibleExtensions() { if (fExtensions != null) return fExtensions.clone(); return null; } public String[] getCompatibleLanguageIds() { if (fLanguageIds != null) return fLanguageIds.clone(); return null; } public ICSettingEntry[] getEntries(int kind) { CEntriesSet set = getEntriesSet(kind, false); if (set != null) return set.toArray(); return new ICSettingEntry[0]; } // public String getId() { // return fId; // } public ICSettingEntry[] getEntries() { List<ICSettingEntry> result = new ArrayList<ICSettingEntry>(); int kinds[] = KindBasedStore.getAllEntryKinds(); for (int i = 0; i < kinds.length; i++) { CEntriesSet list = getEntriesSet(kinds[i], false); if (list != null) result.addAll(Arrays.asList(list.toArray())); } return result.toArray(new ICSettingEntry[result.size()]); } }