/*******************************************************************************
* Copyright (c) 2007, 2009 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.extension.impl;
import java.util.Arrays;
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
import org.eclipse.cdt.core.settings.model.extension.CLanguageData;
import org.eclipse.cdt.core.settings.model.util.CDataUtil;
import org.eclipse.cdt.core.settings.model.util.EntryStore;
import org.eclipse.cdt.core.settings.model.util.KindBasedStore;
public class CDefaultLanguageData extends CLanguageData {
protected final static int OP_COPY = 1;
protected final static int OP_SET = 2;
protected String fName;
protected String fId;
protected String fLanguageId;
protected int fSupportedKinds;
protected String fSourceContentTypeIds[];
protected String fSourceExts[];
// protected IContentType fHeaderContentType;
// protected String fHeaderExts[];
protected EntryStore fStore;
public final static String[] EMPTY_STRING_ARRAY = new String[0];
// protected CConfigurationData fCfg;
// protected CResourceData fRcData;
// private CDataFacroty fFactory;
protected boolean fIsModified;
// public CDefaultLanguageData(CConfigurationData cfg, CResourceData rcData, CDataFacroty factory) {
// fCfg = cfg;
// fRcData = rcData;
// if(factory == null)
// factory = new CDataFacroty();
// fFactory = factory;
// }
protected CDefaultLanguageData(){
fStore = createStore();
}
public CDefaultLanguageData(String id,
String languageId,
String ids[],
boolean isContentTypes) {
fId = id;
fLanguageId = languageId;
if(isContentTypes)
fSourceContentTypeIds = ids.clone();
else
fSourceExts = ids.clone();
fStore = createStore();
}
public CDefaultLanguageData(String id, CLanguageData base) {
fId = id;
copySettingsFrom(base);
}
protected void copySettingsFrom(CLanguageData data){
fName = data.getName();
fLanguageId = data.getLanguageId();
fSupportedKinds = data.getSupportedEntryKinds();
fSourceContentTypeIds = data.getSourceContentTypeIds();
fSourceExts = data.getSourceExtensions();
// fHeaderContentType = data.getHeaderContentType();
// fHeaderExts = data.getHeaderExtensions();
fStore = createStore(data);
}
protected EntryStore createStore(CLanguageData data){
EntryStore store = createStore();
int kinds[] = KindBasedStore.getLanguageEntryKinds();
for (int kind : kinds) {
ICLanguageSettingEntry entries[] = getEntriesToCopy(kind, data);
entries = processStoredEntries(entries, OP_COPY);
store.storeEntries(kind, entries);
}
return store;
}
protected ICLanguageSettingEntry[] getEntriesToCopy(int kind, CLanguageData lData){
return lData.getEntries(kind);
}
protected ICLanguageSettingEntry[] processStoredEntries(ICLanguageSettingEntry[] entries, int op){
return entries;
}
protected EntryStore createStore(){
return new EntryStore(true);
}
@Override
public String getName() {
return fName;
}
@Override
public String getId() {
return fId;
}
@Override
public boolean isValid() {
return getId() != null;
}
@Override
public String getLanguageId() {
return fLanguageId;
}
@Override
public void setLanguageId(String id) {
if(CDataUtil.objectsEqual(id, fLanguageId))
return;
fLanguageId = id;
setModified(true);
}
// public IContentType getHeaderContentType() {
// return fHeaderContentType;
// }
// public String[] getHeaderExtensions() {
// return fHeaderExts;
// }
/*
public ICLanguageSettingEntry[] getSettingEntries(int kind) {
return fStore.getEntries(kind);
List list = new ArrayList();
if((kinds & ICLanguageSettingEntry.INCLUDE_PATH) != 0) {
addLanguageEntries(ICLanguageSettingEntry.INCLUDE_PATH, list);
} else if((kinds & ICLanguageSettingEntry.INCLUDE_FILE) != 0) {
addLanguageEntries(ICLanguageSettingEntry.INCLUDE_FILE, list);
} else if((kinds & ICLanguageSettingEntry.MACRO) != 0) {
addLanguageEntries(ICLanguageSettingEntry.MACRO, list);
} else if((kinds & ICLanguageSettingEntry.MACRO_FILE) != 0) {
addLanguageEntries(ICLanguageSettingEntry.MACRO_FILE, list);
} else if((kinds & ICLanguageSettingEntry.LIBRARY_PATH) != 0) {
addLanguageEntries(ICLanguageSettingEntry.LIBRARY_PATH, list);
} else if((kinds & ICLanguageSettingEntry.LIBRARY_FILE) != 0) {
addLanguageEntries(ICLanguageSettingEntry.LIBRARY_FILE, list);
}
return (ICLanguageSettingEntry[])list.toArray(new ICLanguageSettingEntry[list.size()]);
}
private List addLanguageEntries(int kind, List list){
ICLanguageSettingEntry entries[] = fStore.getEntries(kind);
for(int i = 0; i < entries.length; i++){
list.add(entries[i]);
}
return list;
}
*/
@Override
public String[] getSourceContentTypeIds() {
if(fSourceContentTypeIds != null)
return fSourceContentTypeIds;
return EMPTY_STRING_ARRAY;
}
@Override
public String[] getSourceExtensions() {
if(fSourceExts != null)
return fSourceExts;
return EMPTY_STRING_ARRAY;
}
@Override
public int getSupportedEntryKinds() {
return fSupportedKinds;
}
@Override
public void setEntries(int kind, ICLanguageSettingEntry entries[]) {
entries = processStoredEntries(entries, OP_SET);
fStore.storeEntries(kind, entries);
setModified(true);
}
@Override
public ICLanguageSettingEntry[] getEntries(int kind) {
return fStore.getEntries(kind);
}
@Override
public void setSourceContentTypeIds(String[] ids) {
if(Arrays.equals(ids, fSourceContentTypeIds))
return;
fSourceContentTypeIds = ids != null ?
(String[])ids.clone() : null;
setModified(true);
}
@Override
public void setSourceExtensions(String[] exts) {
if(Arrays.equals(exts, fSourceExts))
return;
fSourceExts = exts != null ?
(String[])exts.clone() : null;
setModified(true);
}
public boolean isModified(){
return fIsModified;
}
public void setModified(boolean modified){
fIsModified = modified;
}
}