blob: 2e8f714bb79003936934add8c618223a591d940b [file] [log] [blame]
/*
* 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);
}
}
}