extract interfaces to improve testability
[teamcity/dotNetPackagesSupport.git] / nuget-server / src / jetbrains / buildServer / nuget / server / feed / reader / impl / PackagesFeedParser.java
index 750bb6d8e7e31a803a204358c83f5c94b712a823..208e807958fc8c2ed981ca0ee482bfc53c43965d 100644 (file)
 \r
 package jetbrains.buildServer.nuget.server.feed.reader.impl;\r
 \r
-import com.intellij.openapi.diagnostic.Logger;\r
-import jetbrains.buildServer.nuget.common.PackageInfo;\r
 import jetbrains.buildServer.nuget.server.feed.reader.FeedPackage;\r
-import jetbrains.buildServer.util.StringUtil;\r
 import org.jdom.Element;\r
-import org.jdom.Namespace;\r
 import org.jetbrains.annotations.NotNull;\r
 \r
-import java.util.ArrayList;\r
 import java.util.Collection;\r
-import java.util.Collections;\r
-import java.util.List;\r
 \r
 /**\r
  * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
- * Date: 12.08.11 13:42\r
+ * Date: 12.08.11 15:14\r
  */\r
-public class PackagesFeedParser {\r
-  private static final Logger LOG = Logger.getInstance(PackagesFeedParser.class.getName());\r
-\r
-  private static final Namespace atom = Namespace.getNamespace("http://www.w3.org/2005/Atom");\r
-  private static final Namespace metadata = Namespace.getNamespace("http://schemas.microsoft.com/ado/2007/08/dataservices/metadata");\r
-  private static final Namespace services = Namespace.getNamespace("http://schemas.microsoft.com/ado/2007/08/dataservices");\r
-\r
-  public Collection<FeedPackage> readPackages(@NotNull Element root) {\r
-    final List<FeedPackage> result = new ArrayList<FeedPackage>();\r
-\r
-    final List entries = root.getChildren("entry", atom);\r
-    for (Object o : entries) {\r
-      final Element entry = (Element) o;\r
-      try {\r
-        final FeedPackage e = parseOneEntry(entry);\r
-        result.add(e);\r
-      } catch (InvalidXmlException e) {\r
-        LOG.debug("Failed to parse feed entry. " + e.getMessage());\r
-      }\r
-    }\r
-    Collections.sort(result);\r
-    return result;\r
-  }\r
-\r
-  @NotNull\r
-  private FeedPackage parseOneEntry(Element entry) throws InvalidXmlException {\r
-    final Element atomIdElement = getChild(entry, "id", atom);\r
-    final String atomId = atomIdElement.getText();\r
-\r
-    final String content = getChildAttribute(entry, "content", atom, "src");\r
-    final Element props = getChild(entry, "properties", metadata);\r
-\r
-    final String packageId = getChildText(props, "Id", services);\r
-    final String version = getChildText(props, "Version", services);\r
-    final String desription = getChildText(props, "Description", services);\r
-    final String summary = getChildText(props, "Summary", services);\r
-    final boolean isLatestVersion = "true".equalsIgnoreCase(getChildTextSafe(props, "IsLatestVersion", services));\r
-\r
-    return new FeedPackage(\r
-            atomId,\r
-            new PackageInfo(packageId, version),\r
-            isLatestVersion,\r
-            StringUtil.isEmptyOrSpaces(desription) ? summary : desription,\r
-            content);\r
-  }\r
-\r
-  @NotNull\r
-  private String getChildTextSafe(@NotNull Element element,\r
-                                  @NotNull String name,\r
-                                  @NotNull Namespace ns) {\r
-    try {\r
-      return getChildText(element, name, ns);\r
-    } catch (InvalidXmlException e) {\r
-      return "";\r
-    }\r
-  }\r
-\r
-  @NotNull\r
-  private String getChildText(@NotNull Element element,\r
-                              @NotNull String name,\r
-                              @NotNull Namespace ns) throws InvalidXmlException {\r
-    final Element data = getChild(element, name, ns);\r
-    final String text = data.getText();\r
-    if (StringUtil.isEmptyOrSpaces(text)) {\r
-      throw new InvalidXmlException("Element " + name + " must have a content. ");\r
-    }\r
-    return text;\r
-  }\r
-\r
-  @NotNull\r
-  private String getChildAttribute(@NotNull Element element,\r
-                                   @NotNull String name,\r
-                                   @NotNull Namespace ns,\r
-                                   @NotNull String attribute) throws InvalidXmlException {\r
-    final Element data = getChild(element, name, ns);\r
-    final String text = data.getAttributeValue(attribute);\r
-    if (StringUtil.isEmptyOrSpaces(text)) {\r
-      throw new InvalidXmlException("Element " + name + " must have non-empty attribute " + attribute + ". ");\r
-    }\r
-    return text;\r
-  }\r
-\r
-  @NotNull\r
-  private Element getChild(Element element, String name, Namespace ns) throws InvalidXmlException {\r
-    final Element data = element.getChild(name, ns);\r
-    if (data == null) {\r
-      throw new InvalidXmlException("Element " + name + " was not found. ");\r
-    }\r
-    return data;\r
-  }\r
-\r
-  private static class InvalidXmlException extends Exception {\r
-    private InvalidXmlException(String message) {\r
-      super(message);\r
-    }\r
-  }\r
+public interface PackagesFeedParser {\r
+  Collection<FeedPackage> readPackages(@NotNull Element root);\r
 }\r