package jp.co.worksap.workspace.ide.eclipse;
import java.io.File;
import java.io.IOException;
import javax.annotation.ParametersAreNonnullByDefault;
import lombok.extern.slf4j.Slf4j;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Optional;
import com.google.common.base.Strings;
import com.google.common.io.Files;
/**
* Note that FindBugs plugin requires Eclipse version 3.6 or later.
* http://findbugs.sourceforge.net/FAQ.html
*/
@Slf4j
@ParametersAreNonnullByDefault
class FindBugsPluginConfigurator {
private static final String METADATA_DIRECTORY = ".metadata/.plugins/org.eclipse.core.runtime/.settings";
private static final String METADATA_FILE = "edu.umd.cs.findbugs.plugin.eclipse.prefs";
void configure(Optional<FindBugsPluginConfiguration> configuration, File workspace) {
if (! configuration.isPresent()) {
log.info("no configuration provided. skip configuring FindBugs.");
return;
}
String sourcePath = configuration.get().getMetadata();
if (Strings.isNullOrEmpty(sourcePath)) {
log.info("no metadata file specified. skip configuring FindBugs.");
return;
}
File sourceMetadata = new File(sourcePath);
File metadataFile = metadataIn(workspace);
if (! sourceMetadata.isFile()) {
log.warn("source of metadata file does not exist: {}", sourceMetadata.getAbsolutePath());
return;
}
copy(sourceMetadata, metadataFile);
}
@VisibleForTesting
void copy(File sourceMetadata, File metadataFile) {
try {
Files.copy(sourceMetadata, metadataFile);
} catch (IOException e) {
throw new IllegalStateException(e);
}
}
private File metadataIn(File workspace) {
File metadataDirectory = new File(workspace, METADATA_DIRECTORY);
if (! metadataDirectory.isDirectory()) {
metadataDirectory.mkdirs();
}
return new File(metadataDirectory, METADATA_FILE);
}
}