package com.intellij.lang.javascript.flex.build;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VfsUtilCore;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.PathUtil;
import org.jetbrains.annotations.Nullable;
public class InfoFromConfigFile {
public static final InfoFromConfigFile DEFAULT = new InfoFromConfigFile(null, null, null, null, null);
private final @Nullable VirtualFile myConfigFile;
private final @Nullable String myMainClassPath;
private boolean myMainClassInitialized = false;
private @Nullable String myMainClass;
private final @Nullable String myOutputFileName;
private final @Nullable String myOutputFolderPath;
private final @Nullable String myTargetPlayer;
InfoFromConfigFile(final @Nullable VirtualFile configFile,
final @Nullable String mainClassPath,
final @Nullable String outputFileName,
final @Nullable String outputFolderPath,
final @Nullable String targetPlayer) {
myConfigFile = configFile;
myMainClassPath = mainClassPath;
myOutputFileName = outputFileName;
myOutputFolderPath = outputFolderPath;
myTargetPlayer = targetPlayer;
}
@Nullable
public String getMainClass(final Module module) {
if (!myMainClassInitialized && myConfigFile != null && myConfigFile.isValid()) {
myMainClass = myMainClassPath == null ? null : getClassForOutputTagValue(module, myMainClassPath, myConfigFile.getParent());
}
myMainClassInitialized = true;
return myMainClass;
}
@Nullable
public String getOutputFileName() {
return myOutputFileName;
}
@Nullable
public String getOutputFolderPath() {
return myOutputFolderPath;
}
@Nullable
public String getTargetPlayer() {
return myTargetPlayer;
}
private static String getClassForOutputTagValue(final Module module, final String outputTagValue, final VirtualFile baseDir) {
if (outputTagValue.isEmpty()) return "unknown";
final VirtualFile file = VfsUtil.findRelativeFile(outputTagValue, baseDir);
if (file == null) return FileUtil.getNameWithoutExtension(PathUtil.getFileName(outputTagValue));
final VirtualFile sourceRoot = ProjectRootManager.getInstance(module.getProject()).getFileIndex().getSourceRootForFile(file);
if (sourceRoot == null) return file.getNameWithoutExtension();
final String relativePath = VfsUtilCore.getRelativePath(file, sourceRoot, '/');
return relativePath == null ? file.getNameWithoutExtension() : FileUtil.getNameWithoutExtension(relativePath).replace("/", ".");
}
}