/*******************************************************************************
* Copyright (c) 2007 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.managedbuilder.internal.tcmodification;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.cdt.managedbuilder.core.IFolderInfo;
import org.eclipse.cdt.managedbuilder.core.ITool;
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
import org.eclipse.cdt.managedbuilder.internal.core.ResourceConfiguration;
import org.eclipse.cdt.managedbuilder.internal.core.Tool;
import org.eclipse.cdt.managedbuilder.tcmodification.IFileInfoModification;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IPath;
public class FileInfoModification extends
ToolListModification implements IFileInfoModification {
private String fFileExt;
private Set<IPath> fApplPathSet;
private IProject fProject;
public FileInfoModification(ResourceConfiguration rcInfo) {
super(rcInfo, rcInfo.getTools());
}
public FileInfoModification(ResourceConfiguration rcInfo, FileInfoModification base) {
super(rcInfo, base);
}
@Override
protected boolean canRemove(ITool realTool) {
return true;
}
@Override
protected boolean canAdd(Tool tool) {
String ext = getFileExtension();
return tool.buildsFileType(ext, getProject());
}
@Override
protected boolean canReplace(Tool fromTool, Tool toTool) {
String ext = getFileExtension();
return toTool.buildsFileType(ext, getProject());
}
@Override
protected Set<IPath> getToolApplicabilityPathSet(Tool realTool, boolean isProject) {
if(fApplPathSet == null){
Set<IPath> s = new HashSet<IPath>(1);
s.add(getResourceInfo().getPath());
fApplPathSet = Collections.unmodifiableSet(s);
}
return fApplPathSet;
}
@Override
protected Set<Tool> getExtensionConflictToolSet(Tool tool, Tool[] toos) {
return Collections.emptySet();
}
@Override
protected Tool[] filterTools(Tool[] tools) {
return tools;
}
private String getFileExtension(){
if(fFileExt == null){
fFileExt = getResourceInfo().getPath().getFileExtension();
if(fFileExt == null)
fFileExt = ""; //$NON-NLS-1$
}
return fFileExt;
}
private IProject getProject(){
if(fProject == null){
fProject = getResourceInfo().getParent().getOwner().getProject();
}
return fProject;
}
public void restoreDefaults() {
// 3.per-file : change to the tool from the parent folder's tool-chain suitable
// for the given file. NOTE: the custom build step tool should be preserved!
ResourceConfiguration rcInfo = (ResourceConfiguration)getResourceInfo();
IFolderInfo parentFo = rcInfo.getParentFolderInfo();
String ext = rcInfo.getPath().getFileExtension();
if(ext == null)
ext = ""; //$NON-NLS-1$
ITool tool = parentFo.getToolFromInputExtension(ext);
ITool realTool = ManagedBuildManager.getRealTool(tool);
boolean add = true;
ITool[] curTools = getProjectTools();
for(int i = 0; i < curTools.length; i++){
ITool cur = curTools[i];
if(ManagedBuildManager.getRealTool(cur) == realTool){
add = false;
} else if (!cur.getCustomBuildStep()){
changeProjectTools(cur, null);
}
}
if(add && tool != null)
changeProjectTools(null, tool);
}
}