1
/*******************************************************************************
2
* Copyright (c) 2007, 2010 Intel Corporation and others.
3
* All rights reserved. This program and the accompanying materials
4
* are made available under the terms of the Eclipse Public License v1.0
5
* which accompanies this distribution, and is available at
6
* http://www.eclipse.org/legal/epl-v10.html
9
* Intel Corporation - Initial API and implementation
10
*******************************************************************************/
11
package org.eclipse.cdt.core.settings.model.extension.impl;
13
import java.lang.reflect.Array;
14
import java.util.ArrayList;
15
import java.util.List;
17
import org.eclipse.cdt.core.settings.model.ICSettingBase;
18
import org.eclipse.cdt.core.settings.model.extension.CFileData;
19
import org.eclipse.cdt.core.settings.model.extension.CFolderData;
20
import org.eclipse.cdt.core.settings.model.extension.CResourceData;
21
import org.eclipse.cdt.core.settings.model.util.IPathSettingsContainerVisitor;
22
import org.eclipse.cdt.core.settings.model.util.PathSettingsContainer;
23
import org.eclipse.core.runtime.IPath;
25
public class CResourceDataContainer {
26
private PathSettingsContainer fRcDataContainer;
27
private boolean fIncludeCurrent;
29
public CResourceDataContainer(PathSettingsContainer pathSettings, boolean includeCurrent){
30
fRcDataContainer = pathSettings;
31
fIncludeCurrent = includeCurrent;
34
public void changeCurrentPath(IPath path, boolean moveChildren){
35
fRcDataContainer.setPath(path, moveChildren);
38
public IPath getCurrentPath(){
39
return fRcDataContainer.getPath();
42
public CResourceData getCurrentResourceData(){
43
return (CResourceData)fRcDataContainer.getValue();
46
public CResourceData getResourceData(IPath path, boolean exactPath) {
47
PathSettingsContainer cr = fRcDataContainer.getChildContainer(path, false, exactPath);
49
return (CResourceData)cr.getValue();
53
public CResourceData[] getResourceDatas() {
54
return getResourceDatas(ICSettingBase.SETTING_FILE | ICSettingBase.SETTING_FOLDER);
57
public CResourceData[] getResourceDatas(final int kind) {
58
return getResourceDatas(kind, CResourceData.class);
61
public CResourceData[] getResourceDatas(int kind, Class<CResourceData> clazz){
62
List<CResourceData> list = getRcDataList(kind);
64
CResourceData datas[] = (CResourceData[])Array.newInstance(clazz, list.size());
66
return list.toArray(datas);
69
public List<CResourceData> getRcDataList(final int kind){
70
final List<CResourceData> list = new ArrayList<CResourceData>();
71
fRcDataContainer.accept(new IPathSettingsContainerVisitor(){
73
public boolean visit(PathSettingsContainer container) {
74
if(fIncludeCurrent || container != fRcDataContainer){
75
CResourceData data = (CResourceData)container.getValue();
76
if((data.getType() & kind) == data.getType())
86
public CResourceData getResourceData(IPath path, boolean exactPath, int kind){
87
CResourceData data = getResourceData(path, exactPath);
88
if(data != null && (data.getType() & kind) == data.getType())
93
public void removeResourceData(IPath path) {
94
fRcDataContainer.removeChildContainer(path);
97
public void addResourceData(CResourceData data){
98
PathSettingsContainer cr = fRcDataContainer.getChildContainer(data.getPath(), true, true);
102
public CFileData getFileData(IPath path){
103
return (CFileData)getResourceData(path, true, ICSettingBase.SETTING_FILE);
106
public CFolderData getFolderData(IPath path){
107
return (CFolderData)getResourceData(path, true, ICSettingBase.SETTING_FOLDER);