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 */ 019 package org.apache.commons.compress.compressors.xz; 020 021 import java.util.HashMap; 022 import java.util.Map; 023 import org.apache.commons.compress.compressors.FileNameUtil; 024 025 /** 026 * Utility code for the xz compression format. 027 * @ThreadSafe 028 * @since Commons Compress 1.4 029 */ 030 public class XZUtils { 031 032 private static final FileNameUtil fileNameUtil; 033 034 static { 035 Map<String, String> uncompressSuffix = new HashMap<String, String>(); 036 uncompressSuffix.put(".txz", ".tar"); 037 uncompressSuffix.put(".xz", ""); 038 uncompressSuffix.put("-xz", ""); 039 fileNameUtil = new FileNameUtil(uncompressSuffix, ".xz"); 040 } 041 042 /** Private constructor to prevent instantiation of this utility class. */ 043 private XZUtils() { 044 } 045 046 /** 047 * Detects common xz suffixes in the given filename. 048 * 049 * @param filename name of a file 050 * @return {@code true} if the filename has a common xz suffix, 051 * {@code false} otherwise 052 */ 053 public static boolean isCompressedFilename(String filename) { 054 return fileNameUtil.isCompressedFilename(filename); 055 } 056 057 /** 058 * Maps the given name of a xz-compressed file to the name that the 059 * file should have after uncompression. Commonly used file type specific 060 * suffixes like ".txz" are automatically detected and 061 * correctly mapped. For example the name "package.txz" is mapped to 062 * "package.tar". And any filenames with the generic ".xz" suffix 063 * (or any other generic xz suffix) is mapped to a name without that 064 * suffix. If no xz suffix is detected, then the filename is returned 065 * unmapped. 066 * 067 * @param filename name of a file 068 * @return name of the corresponding uncompressed file 069 */ 070 public static String getUncompressedFilename(String filename) { 071 return fileNameUtil.getUncompressedFilename(filename); 072 } 073 074 /** 075 * Maps the given filename to the name that the file should have after 076 * compression with xz. Common file types with custom suffixes for 077 * compressed versions are automatically detected and correctly mapped. 078 * For example the name "package.tar" is mapped to "package.txz". If no 079 * custom mapping is applicable, then the default ".xz" suffix is appended 080 * to the filename. 081 * 082 * @param filename name of a file 083 * @return name of the corresponding compressed file 084 */ 085 public static String getCompressedFilename(String filename) { 086 return fileNameUtil.getCompressedFilename(filename); 087 } 088 089 }