| package com.intellij.tasks.generic; |
| |
| import com.intellij.ide.highlighter.HtmlFileType; |
| import com.intellij.ide.highlighter.XmlFileType; |
| import com.intellij.openapi.diagnostic.Logger; |
| import com.intellij.openapi.fileTypes.FileType; |
| import com.intellij.openapi.fileTypes.FileTypeManager; |
| import com.intellij.openapi.fileTypes.PlainTextFileType; |
| import org.intellij.lang.regexp.RegExpFileType; |
| import org.jetbrains.annotations.NotNull; |
| |
| |
| /** |
| * ResponseType contains information about what selector types used |
| * to extract information from server responses with specific content-type. |
| * |
| * @author evgeny.zakrevsky |
| * @author Mikhail Golubev |
| */ |
| public enum ResponseType { |
| |
| XML("application/xml", XmlFileType.INSTANCE, findXPathFileType()), |
| JSON("application/json", findFileTypePlainDefault("JSON"), PlainTextFileType.INSTANCE), |
| // TODO: think about possible selector type if it needed at all (e.g. CSS selector) |
| HTML("text/html", HtmlFileType.INSTANCE, PlainTextFileType.INSTANCE), |
| TEXT("text/plain", PlainTextFileType.INSTANCE, RegExpFileType.INSTANCE); |
| |
| private final String myMimeType; |
| private final FileType myContentFileType; |
| private final FileType mySelectorFileType; |
| |
| private static Logger LOG = Logger.getInstance(ResponseType.class); |
| |
| |
| ResponseType(@NotNull String s, @NotNull FileType contentFileType, @NotNull FileType selectorFileType) { |
| myMimeType = s; |
| myContentFileType = contentFileType; |
| mySelectorFileType = selectorFileType; |
| } |
| |
| /** |
| * Unfortunately XPATH instance can't be received this way, because XPathSupportLoader |
| * registers XPathFileType in FileTypeManager only in unit test and debug modes |
| */ |
| @NotNull |
| private static FileType findFileTypePlainDefault(@NotNull final String name) { |
| FileType fileType = FileTypeManager.getInstance().findFileTypeByName(name); |
| return fileType == null ? PlainTextFileType.INSTANCE : fileType; |
| } |
| |
| /** |
| * Temporary workaround for IDEA-112605 |
| */ |
| @NotNull |
| private static FileType findXPathFileType() { |
| if (LOG == null) { |
| LOG = Logger.getInstance(ResponseType.class); |
| } |
| try { |
| Class<?> xPathClass = Class.forName("org.intellij.lang.xpath.XPathFileType"); |
| LOG.debug("XPathFileType class loaded successfully"); |
| return (FileType)xPathClass.getField("XPATH").get(null); |
| } |
| catch (Exception e) { |
| LOG.debug("XPathFileType class not found. Using PlainText.INSTANCE instead"); |
| return PlainTextFileType.INSTANCE; |
| } |
| } |
| |
| @NotNull |
| public String getMimeType() { |
| return myMimeType; |
| } |
| |
| @NotNull |
| public FileType getContentFileType() { |
| return myContentFileType; |
| } |
| |
| @NotNull |
| public FileType getSelectorFileType() { |
| return mySelectorFileType; |
| } |
| } |