/*******************************************************************************
* Copyright (c) 2012 Google, Inc.
* 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:
* Google, Inc. - initial API and implementation
*******************************************************************************/
package com.windowtester.codegen.pde.util;
import java.io.File;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Platform;
import org.eclipse.pde.core.plugin.IPluginAttribute;
import org.eclipse.pde.core.plugin.IPluginElement;
import org.eclipse.pde.core.plugin.IPluginExtension;
import org.eclipse.pde.core.plugin.IPluginExtensionPoint;
import org.eclipse.pde.core.plugin.IPluginObject;
import org.eclipse.pde.internal.core.plugin.PluginExtension;
import org.eclipse.pde.internal.core.plugin.PluginExtensionPoint;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@SuppressWarnings("restriction")
public class CoreUtility {
public static void addNatureToProject(IProject proj, String natureId,
IProgressMonitor monitor) throws CoreException {
IProjectDescription description = proj.getDescription();
String[] prevNatures = description.getNatureIds();
String[] newNatures = new String[prevNatures.length + 1];
System.arraycopy(prevNatures, 0, newNatures, 0, prevNatures.length);
newNatures[prevNatures.length] = natureId;
description.setNatureIds(newNatures);
proj.setDescription(description, monitor);
}
public static void createFolder(IFolder folder) throws CoreException {
if (!folder.exists()) {
IContainer parent = folder.getParent();
if (parent instanceof IFolder) {
createFolder((IFolder) parent);
}
folder.create(true, true, null);
}
}
public static void createProject(IProject project, IPath location,
IProgressMonitor monitor) throws CoreException {
if (!Platform.getLocation().equals(location)) {
IProjectDescription desc = project.getWorkspace()
.newProjectDescription(project.getName());
desc.setLocation(location);
project.create(desc, monitor);
} else
project.create(monitor);
}
public static String getWritableString(String source) {
if (source == null)
return ""; //$NON-NLS-1$
StringBuffer buf = new StringBuffer();
for (int i = 0; i < source.length(); i++) {
char c = source.charAt(i);
switch (c) {
case '&' :
buf.append("&"); //$NON-NLS-1$
break;
case '<' :
buf.append("<"); //$NON-NLS-1$
break;
case '>' :
buf.append(">"); //$NON-NLS-1$
break;
case '\'' :
buf.append("'"); //$NON-NLS-1$
break;
case '\"' :
buf.append("""); //$NON-NLS-1$
break;
default :
buf.append(c);
break;
}
}
return buf.toString();
}
public static String normalize(String text) {
if (text == null || text.trim().length() == 0)
return ""; //$NON-NLS-1$
text = text.replaceAll("\\r|\\n|\\f|\\t", " "); //$NON-NLS-1$ //$NON-NLS-2$
return text.replaceAll("\\s+", " "); //$NON-NLS-1$ //$NON-NLS-2$
}
public static void deleteContent(File curr) {
if (curr.exists()) {
if (curr.isDirectory()) {
File[] children = curr.listFiles();
if (children != null) {
for (int i = 0; i < children.length; i++) {
deleteContent(children[i]);
}
}
}
curr.delete();
}
}
public static Element writeExtension(Document doc, IPluginExtension extension) {
Element child = doc.createElement("extension"); //$NON-NLS-1$
if (extension.getPoint() != null)
child.setAttribute("point", getWritableString(extension.getPoint())); //$NON-NLS-1$
if (extension.getName() != null)
child.setAttribute("name", getWritableString(extension.getName())); //$NON-NLS-1$
if (extension.getId() != null)
child.setAttribute("id", getWritableString(extension.getId())); //$NON-NLS-1$
if (extension instanceof PluginExtension)
child.setAttribute("line", Integer.toString(((PluginExtension)extension).getStartLine())); //$NON-NLS-1$
IPluginObject[] children = extension.getChildren();
for (int i = 0; i < children.length; i++) {
child.appendChild(writeElement(doc, (IPluginElement)children[i]));
}
return child;
}
public static Element writeElement(Document doc, IPluginElement element) {
Element child = doc.createElement(element.getName());
IPluginAttribute[] attrs = element.getAttributes();
for (int i = 0; i < attrs.length; i++) {
child.setAttribute(attrs[i].getName(), getWritableString(attrs[i].getValue()));
}
IPluginObject[] elements = element.getChildren();
for (int i = 0; i < elements.length; i++) {
child.appendChild(writeElement(doc, (IPluginElement)elements[i]));
}
return child;
}
public static Element writeExtensionPoint(Document doc, IPluginExtensionPoint extPoint) {
Element child = doc.createElement("extension-point"); //$NON-NLS-1$
if (extPoint.getId() != null)
child.setAttribute("id", getWritableString(extPoint.getId())); //$NON-NLS-1$
if (extPoint.getName() != null)
child.setAttribute("name", getWritableString(extPoint.getName())); //$NON-NLS-1$
if (extPoint.getSchema() != null)
child.setAttribute("schema", getWritableString(extPoint.getSchema())); //$NON-NLS-1$
if (extPoint instanceof PluginExtensionPoint)
child.setAttribute("line", Integer.toString(((PluginExtensionPoint)extPoint).getStartLine())); //$NON-NLS-1$
return child;
}
//!pq: introduces dependencies that break in 3.0
// public static boolean guessUnpack(BundleDescription bundle) {
// if (bundle == null)
// return true;
//
// if (new File(bundle.getLocation()).isFile())
// return false;
//
// IWorkspaceRoot root = PDECore.getWorkspace().getRoot();
// IContainer container = root.getContainerForLocation(new Path(bundle.getLocation()));
// if (container == null)
// return true;
//
// if (container instanceof IProject) {
// try {
// if (!((IProject)container).hasNature(JavaCore.NATURE_ID))
// return true;
// } catch (CoreException e) {
// }
// }
//
// IPluginModelBase model = PDECore.getDefault().getModelManager().findModel(bundle);
// if (model == null)
// return true;
//
// IPluginLibrary[] libraries = model.getPluginBase().getLibraries();
// if (libraries.length == 0 && PDECore.getDefault().getModelManager().isOSGiRuntime())
// return false;
//
// for (int i = 0; i < libraries.length; i++) {
// if (libraries[i].getName().equals(".")) //$NON-NLS-1$
// return false;
// }
// return true;
// }
}