blob: e7d05dfcf3898b5a4486298118e8550797308e20 [file] [log] [blame]
// Copyright 2013 Google Inc. 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 com.google.gerrit.server.change;
import com.google.common.collect.Maps;
import org.eclipse.jgit.api.ArchiveCommand;
import org.eclipse.jgit.archive.TarFormat;
import org.eclipse.jgit.archive.Tbz2Format;
import org.eclipse.jgit.archive.TgzFormat;
import org.eclipse.jgit.archive.TxzFormat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Collections;
import java.util.Map;
enum ArchiveFormat {
TGZ("application/x-gzip", new TgzFormat()),
TAR("application/x-tar", new TarFormat()),
TBZ2("application/x-bzip2", new Tbz2Format()),
TXZ("application/x-xz", new TxzFormat());
// Zip is not supported because it may be interpreted by a Java plugin as a
// valid JAR file, whose code would have access to cookies on the domain.
static final Logger log = LoggerFactory.getLogger(ArchiveFormat.class);
private final ArchiveCommand.Format<?> format;
private final String mimeType;
private ArchiveFormat(String mimeType, ArchiveCommand.Format<?> format) {
this.format = format;
this.mimeType = mimeType;
ArchiveCommand.registerFormat(name(), format);
}
String getShortName() {
return name().toLowerCase();
}
String getMimeType() {
return mimeType;
}
String getDefaultSuffix() {
return getSuffixes().iterator().next();
}
Iterable<String> getSuffixes() {
return format.suffixes();
}
static Map<String, ArchiveFormat> init() {
String[] formats = new String[values().length];
for (int i = 0; i < values().length; i++) {
formats[i] = values()[i].name();
}
Map<String, ArchiveFormat> exts = Maps.newLinkedHashMap();
for (String name : formats) {
try {
ArchiveFormat format = valueOf(name.toUpperCase());
for (String ext : format.getSuffixes()) {
exts.put(ext, format);
}
} catch (IllegalArgumentException e) {
log.warn("Invalid archive.format {}", name);
}
}
return Collections.unmodifiableMap(exts);
}
}