org.cloudifysource.dsl.internal.packaging.FileAppender.java Source code

Java tutorial

Introduction

Here is the source code for org.cloudifysource.dsl.internal.packaging.FileAppender.java

Source

/*******************************************************************************
 * Copyright (c) 2011 GigaSpaces Technologies Ltd. All rights reserved
 *
 * Licensed under the Apache License, Version 2.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.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.cloudifysource.dsl.internal.packaging;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map.Entry;

import org.apache.commons.io.FileUtils;

/**
 * 
 * @author elip
 *
 */
public class FileAppender {

    public static final String LINE_SEPARATOR = System.getProperty("line.separator");

    private FileWriter writer;
    private File finalFile;

    public FileAppender(final String fileName) throws IOException {
        createAppenderFile(File.createTempFile(fileName, ""));
    }

    public FileAppender(final File newFile) throws IOException {
        createAppenderFile(newFile);
    }

    private void createAppenderFile(final File newFile) throws IOException {
        if (newFile.exists()) {
            String fileContents = FileUtils.readFileToString(newFile);
            writer = new FileWriter(newFile);
            writer.append(fileContents);
            writer.append(LINE_SEPARATOR);
        } else {
            writer = new FileWriter(newFile);
        }
        finalFile = newFile;
    }

    /**
     * @param comment - this comment will be appended to the beginning of the file to merge.
     * @param fileToMerge - the file to merge with
     * @return .
     * @throws IOException 
     */
    public FileAppender append(final String comment, final File fileToMerge) throws IOException {
        return append(comment, FileUtils.readFileToString(fileToMerge));
    }

    /**
     * @param comment - this comment will be appended to the beginning of the file to merge.
     * @param contentToMerge - the content to merge with
     * @return .
     * @throws IOException 
     */
    public FileAppender append(final String comment, final String contentToMerge) throws IOException {
        writer.append("//").append(comment).append(" Generated By ").append(FileAppender.class.getName())
                .append(" On : ").append(new Date(System.currentTimeMillis()).toString()).append(LINE_SEPARATOR)
                .append(LINE_SEPARATOR).append(contentToMerge).append(LINE_SEPARATOR).append(LINE_SEPARATOR);
        return this;
    }

    /**
     * Append all the files and copy the result file to dest file.
     * @param dest the destination file will contain all the appended files.
     * @param filesToAppend A map of files and comments to append.
     * @throws IOException .
     */
    public void appendAll(final File dest, final LinkedHashMap<File, String> filesToAppend) throws IOException {
        for (Entry<File, String> fileEntry : filesToAppend.entrySet()) {
            final File file = fileEntry.getKey();
            if (file != null && file.exists()) {
                append(fileEntry.getValue(), file);
            }
        }
        flush();
        FileUtils.copyFile(finalFile, dest);

        finalFile.delete();
    }

    /**
     * 
     * @throws IOException .
     */
    public void flush() throws IOException {
        writer.flush();
        writer.close();
    }
}