/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* 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 org.guvnor.test;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import org.apache.commons.io.FileUtils;
public class TempFiles {
private ArrayList<File> files = new ArrayList<File>();
public File createTempFile( final String fullName ) throws IOException {
Iterator<String> iterator = Arrays.asList( fullName.split( "/" ) ).iterator();
File previousFolder = null;
while ( iterator.hasNext() ) {
String next = iterator.next();
if ( iterator.hasNext() ) {
previousFolder = createFolder( previousFolder,
next );
} else {
return createFile( previousFolder,
next );
}
}
return null;
}
private File createFolder( final File previousFolder,
final String next ) throws IOException {
if ( previousFolder == null ) {
return createTempDirectory( next );
} else {
return createTempDirectory( next,
previousFolder );
}
}
private File createFile( final File previousFolder,
final String next ) throws IOException {
String suffix = getSuffix( next );
String prefix = getPrefix( next );
if ( previousFolder == null ) {
File tempFile = File.createTempFile( prefix, suffix );
files.add( tempFile );
return tempFile;
} else {
File tempFile = File.createTempFile( prefix, suffix, previousFolder );
files.add( tempFile );
return tempFile;
}
}
public File createTempDirectory( final String name ) throws IOException {
final File temp = File.createTempFile( name, Long.toString( System.nanoTime() ) );
if ( !(temp.delete()) ) {
throw new IOException( "Could not delete temp file: " + temp.getAbsolutePath() );
}
if ( !(temp.mkdir()) ) {
throw new IOException( "Could not create temp directory: " + temp.getAbsolutePath() );
}
files.add( temp );
return temp;
}
private File createTempDirectory( final String name,
final File file ) throws IOException {
final File temp = File.createTempFile( name, Long.toString( System.nanoTime() ), file );
if ( !(temp.delete()) ) {
throw new IOException( "Could not delete temp file: " + temp.getAbsolutePath() );
}
if ( !(temp.mkdir()) ) {
throw new IOException( "Could not create temp directory: " + temp.getAbsolutePath() );
}
files.add( temp );
return temp;
}
private String getSuffix( final String next ) {
final int index = next.lastIndexOf( '.' );
if ( index >= 0 ) {
return next.substring( 0, index );
} else {
return next;
}
}
private String getPrefix( final String next ) {
final int index = next.lastIndexOf( '.' );
if ( index >= 0 ) {
return next.substring( index );
} else {
return next;
}
}
public void deleteFiles() {
for ( final File tempFile : files ) {
FileUtils.deleteQuietly( tempFile );
}
}
}