blob: 67cd238dc7bf908d33ec10354b06d00e999748d2 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 SpringSource 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:
* Andrew Eisenberg - initial API and implementation
*******************************************************************************/
package org.eclipse.ajdt.core;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ProjectScope;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.core.runtime.preferences.IScopeContext;
import org.osgi.service.prefs.BackingStoreException;
/**
* @author Andrew Eisenberg
* @created Aug 24, 2009
*
* Manages the aop.xml preferences for a project
*/
public class AopXmlPreferences {
public final static String AOP_XML_FILES_FOR_PROJECT = "org.eclipse.ajdt.aopxml";
private final IEclipsePreferences projectNode;
public AopXmlPreferences(IProject project) {
IScopeContext projectScope = new ProjectScope(project);
projectNode = projectScope.getNode(AspectJPlugin.UI_PLUGIN_ID);
}
public void setAopXmlFiles(IPath[] paths) {
if (paths != null && paths.length > 0) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < paths.length; i++) {
String pathName = paths[i].toPortableString();
if (pathName.endsWith(".xml")) {
if (sb.length() > 0) {
sb.append(File.pathSeparatorChar);
}
sb.append(pathName);
}
}
projectNode.put(AOP_XML_FILES_FOR_PROJECT, sb.toString());
} else {
projectNode.remove(AOP_XML_FILES_FOR_PROJECT);
}
try {
projectNode.flush();
} catch (BackingStoreException e) {
}
}
public IPath[] getAopXmlFiles() {
String pathStr = projectNode.get(AOP_XML_FILES_FOR_PROJECT, null);
if (pathStr == null || pathStr.length() == 0) {
return new IPath[0];
}
String[] pathArr = pathStr.split(File.pathSeparator);
IPath[] paths = new IPath[pathArr.length];
for (int i = 0; i < pathArr.length; i++) {
paths[i] = new Path(pathArr[i]);
}
return paths;
}
public String getAopXmlFilesAsStrings() {
IPath[] paths = getAopXmlFiles();
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < paths.length; i++) {
IFile file = root.getFile(paths[i]);
sb.append(file.getLocation().toOSString());
if (i < paths.length -1) {
sb.append(File.pathSeparatorChar);
}
}
return sb.toString();
}
public List<String> getAopXmlFilesAsListOfStrings() {
IPath[] paths = getAopXmlFiles();
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
List<String> strings = new ArrayList<String>(paths.length);
for (int i = 0; i < paths.length; i++) {
try {
IFile file = root.getFile(paths[i]);
if (file != null && file.getLocation() != null) {
strings.add(file.getLocation().toOSString());
}
} catch (Exception e) {
// print the error and continue
}
}
return strings;
}
public boolean isAopXml(IFile file) {
if (! file.getFileExtension().equals("xml")) {
return false;
}
IPath path = file.getFullPath();
IPath[] paths = getAopXmlFiles();
for (int i = 0; i < paths.length; i++) {
if (paths[i].equals(path)) {
return true;
}
}
return false;
}
}