| /* |
| * Copyright (C) 2011 The Android Open Source Project |
| * |
| * Licensed under the Eclipse Public License, Version 1.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.eclipse.org/org/documents/epl-v10.php |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.ide.eclipse.ndk.internal.templates; |
| |
| import com.android.ide.eclipse.ndk.internal.Messages; |
| |
| import org.eclipse.cdt.core.CCorePlugin; |
| import org.eclipse.cdt.core.model.CoreModel; |
| import org.eclipse.cdt.core.model.ICProject; |
| import org.eclipse.cdt.core.model.IPathEntry; |
| import org.eclipse.cdt.core.templateengine.TemplateCore; |
| import org.eclipse.cdt.core.templateengine.process.ProcessArgument; |
| import org.eclipse.cdt.core.templateengine.process.ProcessFailureException; |
| import org.eclipse.cdt.core.templateengine.process.ProcessRunner; |
| import org.eclipse.core.resources.IFolder; |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.resources.ResourcesPlugin; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.core.runtime.Path; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| public class SetFolders extends ProcessRunner { |
| |
| @Override |
| public void process(TemplateCore template, ProcessArgument[] args, String processId, |
| IProgressMonitor monitor) |
| throws ProcessFailureException { |
| String projectName = null; |
| String[] sourceFolders = null; |
| String[] outputFolders = null; |
| |
| for (ProcessArgument arg : args) { |
| String argName = arg.getName(); |
| if (argName.equals("projectName")) { //$NON-NLS-1$ |
| projectName = arg.getSimpleValue(); |
| } else if (argName.equals("sourceFolders")) { //$NON-NLS-1$ |
| sourceFolders = arg.getSimpleArrayValue(); |
| } else if (argName.equals("outputFolders")) { //$NON-NLS-1$ |
| outputFolders = arg.getSimpleArrayValue(); |
| } |
| } |
| |
| // Get the project |
| if (projectName == null) |
| throw new ProcessFailureException(Messages.SetFolders_Missing_project_name); |
| |
| IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName); |
| if (!project.exists()) |
| throw new ProcessFailureException(Messages.SetFolders_Project_does_not_exist); |
| |
| // Create the folders |
| if (sourceFolders == null && outputFolders == null) |
| throw new ProcessFailureException(Messages.SetFolders_No_folders); |
| |
| try { |
| // Add them in |
| ICProject cproject = CCorePlugin.getDefault().getCoreModel().create(project); |
| IPathEntry[] pathEntries = cproject.getRawPathEntries(); |
| List<IPathEntry> newEntries = new ArrayList<IPathEntry>(pathEntries.length); |
| for (IPathEntry pathEntry : pathEntries) { |
| // remove the old source and output entries |
| if (pathEntry.getEntryKind() != IPathEntry.CDT_SOURCE |
| && pathEntry.getEntryKind() != IPathEntry.CDT_OUTPUT) { |
| newEntries.add(pathEntry); |
| } |
| } |
| if (sourceFolders != null) |
| for (String sourceFolder : sourceFolders) { |
| IFolder folder = project.getFolder(new Path(sourceFolder)); |
| if (!folder.exists()) |
| folder.create(true, true, monitor); |
| newEntries.add(CoreModel.newSourceEntry(folder.getFullPath())); |
| } |
| if (outputFolders != null) |
| for (String outputFolder : outputFolders) { |
| IFolder folder = project.getFolder(new Path(outputFolder)); |
| if (!folder.exists()) |
| folder.create(true, true, monitor); |
| newEntries.add(CoreModel.newOutputEntry(folder.getFullPath())); |
| } |
| cproject.setRawPathEntries(newEntries.toArray(new IPathEntry[newEntries.size()]), |
| monitor); |
| } catch (CoreException e) { |
| throw new ProcessFailureException(e); |
| } |
| } |
| |
| } |