/*******************************************************************************
* 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.ArrayList;
import java.util.List;
import org.eclipse.cdt.core.settings.model.extension.CConfigurationData;
import org.eclipse.cdt.core.settings.model.extension.CFolderData;
import org.eclipse.cdt.core.settings.model.extension.CLanguageData;
import org.eclipse.cdt.core.settings.model.util.CDataUtil;
import org.eclipse.core.runtime.IPath;
public class CDefaultFolderData extends CFolderData {
protected IPath fPath;
// protected boolean fIsExcluded;
protected List<CLanguageData> fLanguageDatas = new ArrayList<CLanguageData>();
protected String fName;
protected String fId;
protected CConfigurationData fCfg;
private CDataFactory fFactory;
protected boolean fIsModified;
public CDefaultFolderData(CConfigurationData cfg, CDataFactory factory) {
fCfg = cfg;
if(factory == null)
factory = new CDataFactory();
fFactory = factory;
}
public CDefaultFolderData(String id, IPath path, CConfigurationData cfg, CDataFactory factory) {
this(cfg, factory);
fId = id;
fName = path.toString();
fPath = path;
}
public CDefaultFolderData(String id, IPath path, CFolderData base, CConfigurationData cfg, CDataFactory factory, boolean clone) {
this(id, path, cfg, factory);
copyDataFrom(base, clone);
}
protected void copyDataFrom(CFolderData base, boolean clone){
if(base != null){
CLanguageData lDatas[] = base.getLanguageDatas();
for (CLanguageData lData : lDatas) {
fLanguageDatas.add(copyLanguageData(lData, clone));
}
// fIsExcluded = base.isExcluded();
}
}
protected CLanguageData copyLanguageData(CLanguageData base, boolean clone){
return fFactory.createLanguageData(fCfg, this, base, null, clone);
}
@Override
public CLanguageData[] getLanguageDatas() {
return fLanguageDatas.toArray(new CLanguageData[fLanguageDatas.size()]);
}
@Override
public IPath getPath() {
return fPath;
}
// public boolean isExcluded() {
// return fIsExcluded;
// }
//
// public void setExcluded(boolean excluded) {
// if(excluded == fIsExcluded)
// return;
//
// fIsExcluded = excluded;
// setModified(true);
// }
@Override
public void setPath(IPath path) {
if(CDataUtil.objectsEqual(path, fPath))
return;
fPath = path;
setModified(true);
}
@Override
public String getName() {
return fName;
}
@Override
public String getId() {
return fId;
}
@Override
public boolean isValid() {
return getId() != null;
}
// protected CLanguageData doCreateLanguageDataForContentTypes(String languageId,
// String[] typesIds) {
// return fFactory.createLanguageData(fCfg, this, null, null, languageId, typesIds, true);
// }
//
// protected CLanguageData doCreateLanguageDataForExtensions(String languageId,
// String[] extensions) {
// return fFactory.createLanguageData(fCfg, this, null, null, languageId, extensions, false);
// }
@Override
public CLanguageData createLanguageDataForContentTypes(String languageId,
String[] typesIds) {
throw new UnsupportedOperationException();
// CLanguageData data = doCreateLanguageDataForContentTypes(languageId, typesIds);
// if(data != null){
// fLanguageDatas.add(data);
// setModified(true);
// }
// return data;
}
@Override
public CLanguageData createLanguageDataForExtensions(String languageId,
String[] extensions) {
throw new UnsupportedOperationException();
// CLanguageData data = doCreateLanguageDataForExtensions(languageId, extensions);
// if(data != null){
// fLanguageDatas.add(data);
// setModified(true);
// }
// return data;
}
public boolean isModified(){
if(fIsModified)
return true;
CLanguageData lDatas[] = getLanguageDatas();
for (CLanguageData lData : lDatas) {
if(fFactory.isModified(lData))
return true;
}
return false;
}
public void setModified(boolean modified){
fIsModified = modified;
if(!modified){
CLanguageData lDatas[] = getLanguageDatas();
for (CLanguageData lData : lDatas) {
fFactory.setModified(lData, false);
}
}
}
@Override
public boolean hasCustomSettings() {
return false;
}
}