blob: 87b562c077d93cf5552ab18e4e686d8227c66dfd [file] [log] [blame]
/*****************************************************************************
* Copyright (c) 2014 CEA LIST.
*
* 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:
* Quentin Le Menez (CEA LIST) quentin.lemenez@cea.fr - Initial API and implementation
* Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - bug 496176
*****************************************************************************/
package org.eclipse.papyrus.interoperability.common.internal.utils;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.security.CodeSource;
import java.security.ProtectionDomain;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.NullProgressMonitor;
//TODO : must be moved into org.eclipse.papyrus.eclipse.project.editors refactored
public class CreateFile {
public static IFile createFile(String filePath, IContainer container, String content)
throws Exception
{
IFile file = null;
if ((container instanceof IProject)) {
file = ((IProject) container).getFile(filePath);
} else if ((container instanceof IFolder)) {
file = ((IFolder) container).getFile(filePath);
} else {
throw new Exception("Cannot find the file " +
filePath +
" under " +
container.getName());
}
IContainer parent = file.getParent();
if ((parent instanceof IFolder)) {
mkdirs((IFolder) parent);
}
InputStream stream = new ByteArrayInputStream(content.getBytes(file.getCharset()));
if (file.exists()) {
file.setContents(stream, true, true, null);
} else {
file.create(stream, true, null);
}
stream.close();
return file;
}
public static void mkdirs(IFolder folder)
throws CoreException
{
if (!folder.exists())
{
if ((folder.getParent() instanceof IFolder)) {
mkdirs((IFolder) folder.getParent());
}
folder.create(true, true, null);
}
}
public static String getContents(String relativePath, String resource, Class clazz)
throws IOException
{
String resourcePath = relativePath + '/' + resource;
File sourcePrj = getSourceProject(clazz);
JarFile jar = null;
InputStream resourceStream;
if (sourcePrj.isFile())
{
jar = new JarFile(sourcePrj);
JarEntry resEntry = jar.getJarEntry(resourcePath);
resourceStream = jar.getInputStream(resEntry);
}
else
{
resourceStream = new FileInputStream(sourcePrj.getAbsolutePath() +
"/" +
resourcePath);
}
byte[] buffer = new byte[4096];
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
for (;;)
{
int read = resourceStream.read(buffer);
if (read == -1) {
break;
}
outputStream.write(buffer, 0, read);
}
outputStream.close();
resourceStream.close();
if (jar != null) {
jar.close();
}
return outputStream.toString("iso-8859-1");
}
private static File getSourceProject(Class clazz)
{
ProtectionDomain protectionDomain = clazz.getProtectionDomain();
CodeSource codeSource = protectionDomain.getCodeSource();
URL location = codeSource.getLocation();
File sourcePrj = new File(location.getFile());
return sourcePrj;
}
public static void appendContents(IFile pagesFile, String data)
throws IOException
{
File file = pagesFile.getLocation().toFile();
if (!file.exists()) {
file.createNewFile();
}
FileWriter fileWriter = new FileWriter(file, true);
BufferedWriter buffWriter = new BufferedWriter(fileWriter);
PrintWriter writer = new PrintWriter(buffWriter);
writer.println(data);
writer.close();
buffWriter.close();
fileWriter.close();
}
public static void replaceContents(IFile file, String template, String newContent)
throws CoreException, IOException
{
String content = getContents(file).replace(template, newContent);
InputStream stream = new ByteArrayInputStream(content.getBytes(file.getCharset()));
if (file.exists()) {
file.setContents(stream, true, true, new NullProgressMonitor());
}
stream.close();
}
public static String getContents(IFile iFile)
throws IOException
{
File file = iFile.getLocation().toFile();
FileInputStream stream = new FileInputStream(file);
StringBuffer contents = new StringBuffer();
BufferedReader br = new BufferedReader(new InputStreamReader(stream));
String line;
while ((line = br.readLine()) != null)
{
contents.append(line).append("\n");
}
br.close();
stream.close();
return contents.toString();
}
}