001: /**
002: * Licensed to the Apache Software Foundation (ASF) under one
003: * or more contributor license agreements. See the NOTICE file
004: * distributed with this work for additional information
005: * regarding copyright ownership. The ASF licenses this file
006: * to you under the Apache License, Version 2.0 (the
007: * "License"); you may not use this file except in compliance
008: * with the License. You may obtain a copy of the License at
009: *
010: * http://www.apache.org/licenses/LICENSE-2.0
011: *
012: * Unless required by applicable law or agreed to in writing,
013: * software distributed under the License is distributed on an
014: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015: * KIND, either express or implied. See the License for the
016: * specific language governing permissions and limitations
017: * under the License.
018: */package org.apache.cxf.tools.util;
019:
020: import java.io.BufferedOutputStream;
021: import java.io.File;
022: import java.io.FileOutputStream;
023: import java.io.IOException;
024: import java.io.OutputStreamWriter;
025: import java.io.Writer;
026: import java.util.logging.Logger;
027:
028: import org.apache.cxf.common.i18n.Message;
029: import org.apache.cxf.common.logging.LogUtils;
030: import org.apache.cxf.tools.common.ToolException;
031:
032: public class FileWriterUtil {
033: private static final Logger LOG = LogUtils
034: .getL7dLogger(FileWriterUtil.class);
035: private final File target;
036:
037: public FileWriterUtil(String targetDir) throws ToolException {
038: target = new File(targetDir);
039: if (!(target.exists()) || !(target.isDirectory())) {
040: Message msg = new Message("DIRECTORY_NOT_EXIST", LOG,
041: target);
042: throw new ToolException(msg);
043: }
044: }
045:
046: public File getFileToWrite(String packageName, String fileName)
047: throws IOException {
048: File dir = buildDir(packageName);
049: File fn = new File(dir, fileName);
050: if (fn.exists() && !fn.delete()) {
051: throw new IOException(fn
052: + ": Can't delete previous version");
053: }
054: return fn;
055: }
056:
057: public static Writer getWriter(File fn) throws IOException {
058: return new OutputStreamWriter(new BufferedOutputStream(
059: new FileOutputStream(fn)), "UTF-8");
060: }
061:
062: public static Writer getWriter(File fn, String encoding)
063: throws IOException {
064: if (encoding == null) {
065: encoding = "UTF-8";
066: }
067: return new OutputStreamWriter(new BufferedOutputStream(
068: new FileOutputStream(fn)), encoding);
069: }
070:
071: public Writer getWriter(String packageName, String fileName)
072: throws IOException {
073: return getWriter(getFileToWrite(packageName, fileName));
074: }
075:
076: public boolean isCollision(String packageName, String fileName)
077: throws ToolException {
078: File dir = buildDir(packageName);
079: return fileExist(dir, fileName);
080: }
081:
082: private File buildDir(String packageName) {
083: File dir;
084: if (packageName == null) {
085: dir = target;
086: } else {
087: dir = new File(target, toDir(packageName));
088: }
089: if (!dir.exists()) {
090: dir.mkdirs();
091: }
092: return dir;
093: }
094:
095: private boolean fileExist(File dir, String fileName) {
096: return new File(dir, fileName).exists();
097: }
098:
099: private String toDir(String packageName) {
100: return packageName.replace('.', File.separatorChar);
101: }
102:
103: }
|