8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster/**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Copyright (c) 2007 Sun Microsystems Inc. All Rights Reserved
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * The contents of this file are subject to the terms
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * of the Common Development and Distribution License
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * (the License). You may not use this file except in
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * compliance with the License.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * You can obtain a copy of the License at
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * https://opensso.dev.java.net/public/CDDLv1.0.html or
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * opensso/legal/CDDLv1.0.txt
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * See the License for the specific language governing
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * permission and limitations under the License.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * When distributing Covered Code, include this CDDL
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Header Notice in each file and include the License file
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * at opensso/legal/CDDLv1.0.txt.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * If applicable, add the following below the CDDL Header,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * with the fields enclosed by brackets [] replaced by
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * your own identifying information:
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * "Portions Copyrighted [year] [name of copyright owner]"
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * $Id: CopyUtils.java,v 1.3 2008/09/22 20:49:28 kevinserwin Exp $
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterpackage com.sun.identity.tools.bundles;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.io.BufferedReader;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.io.BufferedWriter;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.io.FileWriter;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.io.FileInputStream;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.io.FileOutputStream;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.io.FileReader;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.io.File;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.io.InputStream;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.io.IOException;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.Enumeration;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.Properties;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterpublic class CopyUtils {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static int BUFFER_SIZE = 8192;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private CopyUtils() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Copies file from source to destination.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * The destination directories will be created if it is not in the system
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param sourceFile The source file object.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param destFile The destination file object.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param overwrite The flat to indicate whether to overwrite.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param preserveLastModified The flat to preserve modified date
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public static void copyFile(File sourceFile, File destFile,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster boolean overwrite, boolean preserveLastModified) throws IOException {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster copyFile(sourceFile, destFile, null, overwrite, preserveLastModified);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Copies file from source to destination.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * The destination directories will be created if it is not in the system
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param sourceFile The source file object.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param destFile The destination file object.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param tokens The map to replace the file contents.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param overwrite The flat to indicate whether to overwrite.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param preserveLastModified The flat to preserve modified date
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public static void copyFile(File sourceFile, File destFile,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Properties tokens, boolean overwrite, boolean preserveLastModified)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster throws IOException {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (overwrite || (!destFile.exists()) ||
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster (destFile.lastModified() < sourceFile.lastModified())) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (destFile.exists() && destFile.isFile()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster destFile.delete();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster File parent = destFile.getParentFile();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if ((parent != null) && (!parent.exists())) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster parent.mkdirs();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (sourceFile.isDirectory()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster destFile.mkdirs();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String line = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if ((tokens != null) && (!tokens.isEmpty())) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster BufferedReader in = new BufferedReader(new
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster FileReader(sourceFile));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster BufferedWriter out = new BufferedWriter(new
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster FileWriter(destFile));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster try {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster while ((line = in.readLine()) != null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (line.length() > 0) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Enumeration tokensName = tokens.propertyNames();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster while (tokensName.hasMoreElements()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String name = (String) tokensName.nextElement();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (line.indexOf(name) >= 0) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster line = line.replaceAll(name,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster tokens.getProperty(name));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster out.write(line);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster out.newLine();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster out.newLine();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } finally {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster out.close();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster in.close();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster FileInputStream in = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster FileOutputStream out = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster try {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster in = new FileInputStream(sourceFile);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster out = new FileOutputStream(destFile);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster byte[] buffer = new byte[BUFFER_SIZE];
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int count = 0;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster while ((count = in.read(buffer, 0, buffer.length)) != -1) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster out.write(buffer, 0, count);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } finally {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster out.close();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster in.close();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (preserveLastModified) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster destFile.setLastModified(sourceFile.lastModified());
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Copies file from source to destination.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * The destination directories will be created if it is not in the system
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param in The input stream object..
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param destFile The destination file object.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param overwrite The flat to indicate whether to overwrite.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public static void copyFileFromJar(InputStream in, File destFile,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster boolean overwrite)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster throws IOException {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (overwrite || (!destFile.exists())) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (destFile.exists() && destFile.isFile()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster destFile.delete();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster File parent = destFile.getParentFile();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if ((parent != null) && (!parent.exists())) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster parent.mkdirs();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String line = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster FileOutputStream out = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster try {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster out = new FileOutputStream(destFile);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster byte[] buffer = new byte[BUFFER_SIZE];
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int count = 0;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster while ((count = in.read(buffer, 0, buffer.length)) != -1) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster out.write(buffer, 0, count);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } finally {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster out.close();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster in.close();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster}