Package org.rssowl.core.tests.importer

Source Code of org.rssowl.core.tests.importer.FileImportTest

/*   **********************************************************************  **
**   Copyright notice                                                       **
**                                                                          **
**   (c) 2005-2009 RSSOwl Development Team                                  **
**   http://www.rssowl.org/                                                 **
**                                                                          **
**   All rights reserved                                                    **
**                                                                          **
**   This program and the accompanying materials are made available under   **
**   the terms of the Eclipse Public License v1.0 which accompanies this    **
**   distribution, and is available at:                                     **
**   http://www.rssowl.org/legal/epl-v10.html                               **
**                                                                          **
**   A copy is found in the file epl-v10.html and important notices to the  **
**   license from the team is found in the textfile LICENSE.txt distributed **
**   in this package.                                                       **
**                                                                          **
**   This copyright notice MUST APPEAR in all copies of the file!           **
**                                                                          **
**   Contributors:                                                          **
**     RSSOwl Development Team - initial API and implementation             **
**                                                                          **
**  **********************************************************************  */

package org.rssowl.core.tests.importer;

import static junit.framework.Assert.assertNotNull;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;

import org.junit.Before;
import org.junit.Test;
import org.rssowl.core.Owl;
import org.rssowl.core.internal.newsaction.LabelNewsAction;
import org.rssowl.core.internal.newsaction.MoveNewsAction;
import org.rssowl.core.internal.persist.Label;
import org.rssowl.core.internal.persist.Preference;
import org.rssowl.core.internal.persist.SearchFilter;
import org.rssowl.core.persist.IBookMark;
import org.rssowl.core.persist.IEntity;
import org.rssowl.core.persist.IFeed;
import org.rssowl.core.persist.IFilterAction;
import org.rssowl.core.persist.IFolder;
import org.rssowl.core.persist.IFolderChild;
import org.rssowl.core.persist.ILabel;
import org.rssowl.core.persist.IMark;
import org.rssowl.core.persist.INews;
import org.rssowl.core.persist.INewsBin;
import org.rssowl.core.persist.IPreference;
import org.rssowl.core.persist.ISearchCondition;
import org.rssowl.core.persist.ISearchFilter;
import org.rssowl.core.persist.ISearchMark;
import org.rssowl.core.persist.dao.DynamicDAO;
import org.rssowl.core.persist.dao.IFolderDAO;
import org.rssowl.core.util.CoreUtils;
import org.rssowl.core.util.URIUtils;
import org.rssowl.ui.internal.util.ImportUtils;

import java.net.URI;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

/**
* Tests import of various OPML files.
*
* @author bpasero
*/
public class FileImportTest {

  /**
   * @throws Exception
   */
  @Before
  public void setUp() throws Exception {
    Owl.getPersistenceService().recreateSchema();
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused" })
  public void testImport_Defaults() throws Exception {

    /* Import */
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(ImportUtils.class.getResourceAsStream("/default_feeds.xml"));

    ImportUtils.doImport(null, elements, true);
    Set<IFolder> roots = CoreUtils.loadRootFolders();
    assertFalse(roots.isEmpty());
    assertFalse(roots.iterator().next().getChildren().isEmpty());
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused" })
  public void testImport_Complex_All_Root() throws Exception {

    /* Import */
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/complex.opml"));
    IFolder root = Owl.getModelFactory().createFolder(null, null, "Root");
    IFolder target = Owl.getModelFactory().createFolder(null, root, "Target");
    IFolder otherRoot = Owl.getModelFactory().createFolder(null, null, "Other Root");
    DynamicDAO.save(root);
    DynamicDAO.save(otherRoot);

    ImportUtils.doImport(root, elements, true);
    assertTrue(root.getMarks().isEmpty());
    List<IFolder> folders = root.getFolders();
    folders.remove(target);
    validate_Complex(folders, elements);
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused" })
  public void testImport_Complex_All_Root_NoInitialRoots() throws Exception {

    /* Import */
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/complex.opml"));
    ImportUtils.doImport(null, elements, true);

    assertFalse(CoreUtils.loadRootFolders().isEmpty());
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused" })
  public void testImport_Complex_All_Root_CheckProperties() throws Exception {

    /* Import */
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/complex.opml"));
    IFolder root = Owl.getModelFactory().createFolder(null, null, "Root");
    IFolder target = Owl.getModelFactory().createFolder(null, root, "Target");
    IFolder otherRoot = Owl.getModelFactory().createFolder(null, null, "Other Root");
    DynamicDAO.save(root);
    DynamicDAO.save(otherRoot);

    ImportUtils.doImport(root, elements, true);
    Set<IFolder> roots = CoreUtils.loadRootFolders();
    for (IFolder foo : roots) {
      assertEmptyProperties(foo);
    }
  }

  private void assertEmptyProperties(IFolderChild child) {
    assertTrue(child.getProperties().isEmpty());
    if (child instanceof IFolder) {
      List<IFolderChild> children = ((IFolder) child).getChildren();
      for (IFolderChild foo : children) {
        assertEmptyProperties(foo);
      }
    }
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused" })
  public void testImport_Complex_All_Target() throws Exception {

    /* Import */
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/complex.opml"));
    IFolder root = Owl.getModelFactory().createFolder(null, null, "Root");
    IFolder target = Owl.getModelFactory().createFolder(null, root, "Target");
    IFolder otherRoot = Owl.getModelFactory().createFolder(null, null, "Other Root");
    DynamicDAO.save(root);
    DynamicDAO.save(otherRoot);

    ImportUtils.doImport(target, elements, true);
    assertTrue(root.getMarks().isEmpty());
    validate_Complex(target.getFolders(), elements);
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused" })
  public void testImport_Complex_All_OtherRoot() throws Exception {

    /* Import */
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/complex.opml"));
    IFolder root = Owl.getModelFactory().createFolder(null, null, "Root");
    IFolder target = Owl.getModelFactory().createFolder(null, root, "Target");
    IFolder otherRoot = Owl.getModelFactory().createFolder(null, null, "Other Root");
    DynamicDAO.save(root);
    DynamicDAO.save(otherRoot);

    ImportUtils.doImport(otherRoot, elements, true);
    assertTrue(otherRoot.getMarks().isEmpty());
    validate_Complex(otherRoot.getFolders(), elements);
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused" })
  public void testImport_Complex_All_Direct_Import() throws Exception {

    /* Import */
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/complex.opml"));
    ImportUtils.doImport(null, elements, true);

    /* Validate */
    Collection<IFolder> roots = DynamicDAO.getDAO(IFolderDAO.class).loadRoots();
    assertEquals(2, roots.size());
    validate_Complex(roots, elements);
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused", "unchecked" })
  public void testImport_Complex_Bookmarks_Direct_Import() throws Exception {

    /* Import */
    List<IBookMark> bookmarks = new ArrayList<IBookMark>();
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/complex.opml"));
    for (IEntity entity : elements) {
      fillBookmarks(entity, bookmarks);
    }

    List elementsToImport = new ArrayList();
    elementsToImport.addAll(bookmarks);
    for (IEntity element : elements) {
      if (element instanceof ILabel || element instanceof ISearchFilter || element instanceof IPreference)
        elementsToImport.add(element);
    }

    IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root"));
    ImportUtils.doImport(root, elementsToImport, true);

    /* Validate */
    Collection<IFolder> roots = DynamicDAO.getDAO(IFolderDAO.class).loadRoots();
    assertEquals(1, roots.size());
    assertEquals("Root", roots.iterator().next().getName());
    root = roots.iterator().next();

    assertEquals(3, root.getMarks().size());
    List<IMark> marks = root.getMarks();
    for (IMark mark : marks) {
      assertTrue(mark instanceof IBookMark);
    }
    assertEquals(0, root.getFolders().size());
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused", "unchecked" })
  public void testImport_Complex_Bins_Direct_Import() throws Exception {

    /* Import */
    List<INewsBin> bins = new ArrayList<INewsBin>();
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/complex.opml"));
    for (IEntity entity : elements) {
      fillNewsBins(entity, bins);
    }

    List elementsToImport = new ArrayList();
    elementsToImport.addAll(bins);
    for (IEntity element : elements) {
      if (element instanceof ILabel || element instanceof ISearchFilter || element instanceof IPreference)
        elementsToImport.add(element);
    }

    IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root"));
    ImportUtils.doImport(root, elementsToImport, true);

    /* Validate */
    Collection<IFolder> roots = DynamicDAO.getDAO(IFolderDAO.class).loadRoots();
    assertEquals(1, roots.size());
    assertEquals("Root", roots.iterator().next().getName());
    root = roots.iterator().next();

    assertEquals(3, root.getMarks().size());
    List<IMark> marks = root.getMarks();
    for (IMark mark : marks) {
      assertTrue(mark instanceof INewsBin);
    }
    assertEquals(0, root.getFolders().size());
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused", "unchecked" })
  public void testImport_Complex_Searches_Direct_Import() throws Exception {

    /* Import */
    List<ISearchMark> searches = new ArrayList<ISearchMark>();
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/complex.opml"));
    for (IEntity entity : elements) {
      fillSearches(entity, searches);
    }

    List elementsToImport = new ArrayList();
    elementsToImport.addAll(searches);
    for (IEntity element : elements) {
      if (element instanceof ILabel || element instanceof ISearchFilter || element instanceof IPreference)
        elementsToImport.add(element);
    }

    IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root"));
    ImportUtils.doImport(root, elementsToImport, true);

    /* Validate */
    Collection<IFolder> roots = DynamicDAO.getDAO(IFolderDAO.class).loadRoots();
    assertEquals(1, roots.size());
    assertEquals("Root", roots.iterator().next().getName());
    root = roots.iterator().next();

    assertEquals(1, root.getMarks().size());
    List<IMark> marks = root.getMarks();
    for (IMark mark : marks) {
      assertTrue(mark instanceof ISearchMark);
    }
    assertEquals(0, root.getFolders().size());
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused", "unchecked" })
  public void testImport_Complex_Bookmarks_Target() throws Exception {

    /* Import */
    List<IBookMark> bookmarks = new ArrayList<IBookMark>();
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/complex.opml"));
    for (IEntity entity : elements) {
      fillBookmarks(entity, bookmarks);
    }

    List elementsToImport = new ArrayList();
    elementsToImport.addAll(bookmarks);
    for (IEntity element : elements) {
      if (element instanceof ILabel || element instanceof ISearchFilter || element instanceof IPreference)
        elementsToImport.add(element);
    }

    IFolder root = Owl.getModelFactory().createFolder(null, null, "Root");
    IFolder target = Owl.getModelFactory().createFolder(null, root, "Target");
    DynamicDAO.save(root);

    ImportUtils.doImport(target, elementsToImport, true);

    /* Validate */
    Collection<IFolder> roots = DynamicDAO.getDAO(IFolderDAO.class).loadRoots();
    assertEquals(1, roots.size());
    assertEquals("Root", roots.iterator().next().getName());
    root = roots.iterator().next();

    assertEquals(0, root.getMarks().size());
    assertEquals(1, root.getFolders().size());

    assertEquals(0, root.getFolders().iterator().next().getFolders().size());
    assertEquals(3, root.getFolders().iterator().next().getMarks().size());
  }

  private void fillBookmarks(IEntity entity, List<IBookMark> bookmarks) {
    if (entity instanceof IBookMark)
      bookmarks.add((IBookMark) entity);
    else if (entity instanceof IFolder) {
      IFolder folder = (IFolder) entity;
      List<IFolderChild> children = folder.getChildren();
      for (IFolderChild child : children) {
        fillBookmarks(child, bookmarks);
      }
    }
  }

  private void fillNewsBins(IEntity entity, List<INewsBin> bins) {
    if (entity instanceof INewsBin)
      bins.add((INewsBin) entity);
    else if (entity instanceof IFolder) {
      IFolder folder = (IFolder) entity;
      List<IFolderChild> children = folder.getChildren();
      for (IFolderChild child : children) {
        fillNewsBins(child, bins);
      }
    }
  }

  private void fillSearches(IEntity entity, List<ISearchMark> searches) {
    if (entity instanceof ISearchMark)
      searches.add((ISearchMark) entity);
    else if (entity instanceof IFolder) {
      IFolder folder = (IFolder) entity;
      List<IFolderChild> children = folder.getChildren();
      for (IFolderChild child : children) {
        fillSearches(child, searches);
      }
    }
  }

  @SuppressWarnings( { "nls", "null", "unused" })
  private void validate_Complex(Collection<IFolder> importedFolders, List<? extends IEntity> elements) throws Exception {
    IFolder firstSet = null;
    IFolder secondSet = null;
    for (IFolder set : importedFolders) {
      if ("First Set".equals(set.getName()))
        firstSet = set;
      else if ("Second Set".equals(set.getName()))
        secondSet = set;
      else
        fail("Unexpected Set");
    }

    assertNotNull(firstSet);
    assertNotNull(secondSet);

    assertEquals(1, firstSet.getChildren().size());
    IFolderChild child = firstSet.getChildren().iterator().next();
    assertTrue(child instanceof IFolder);
    assertEquals("Folder A", child.getName());

    IFolder folderA = (IFolder) child;

    assertEquals(1, folderA.getMarks().size());
    assertEquals(1, folderA.getFolders().size());

    List<IFolderChild> children = folderA.getChildren();
    IBookMark rssowlMark = null;
    IFolder bins = null;
    for (IFolderChild foo : children) {
      if (foo instanceof IBookMark && "RSSOwl - A Java RSS / RDF / Atom Newsreader - May the owl be with you".equals(foo.getName()))
        rssowlMark = (IBookMark) foo;
      else if (foo instanceof IFolder && "Bins".equals(foo.getName()))
        bins = (IFolder) foo;
      else
        fail();
    }

    assertNotNull(rssowlMark);
    assertNotNull(bins);

    assertEquals(1, bins.getChildren().size());
    IFolderChild next = bins.getChildren().iterator().next();
    assertEquals("Bin A", next.getName());
    assertTrue(next instanceof INewsBin);

    INewsBin binA = (INewsBin) next;

    children = secondSet.getChildren();
    assertEquals(4, children.size());
    IFolder folderB = null;
    IBookMark macOsHints = null;
    INewsBin binC = null;
    ISearchMark searchA = null;
    for (IFolderChild foo : children) {
      if (foo instanceof IFolder && "Folder B".equals(foo.getName()))
        folderB = (IFolder) foo;
      else if (foo instanceof IBookMark && "MacOSXHints.com".equals(foo.getName()))
        macOsHints = (IBookMark) foo;
      else if (foo instanceof INewsBin && "Bin C".equals(foo.getName()))
        binC = (INewsBin) foo;
      else if (foo instanceof ISearchMark && "Search A".equals(foo.getName()))
        searchA = (ISearchMark) foo;
    }

    assertEquals(2, searchA.getSearchConditions().size());
    List<ISearchCondition> conditions = searchA.getSearchConditions();
    for (ISearchCondition condition : conditions) {
      if (condition.getField().getId() == INews.LOCATION) {
        List<IFolderChild> entities = CoreUtils.toEntities((Long[][]) condition.getValue());
        assertEquals(1, entities.size());
        assertTrue(entities.contains(folderA));
      }
    }

    assertNotNull(folderB);
    assertNotNull(macOsHints);
    assertNotNull(binC);
    assertNotNull(searchA);

    children = folderB.getChildren();
    IBookMark golemMark = null;
    IFolder bins2 = null;
    for (IFolderChild foo : children) {
      if (foo instanceof IBookMark && "Golem.de".equals(foo.getName()))
        golemMark = (IBookMark) foo;
      else if (foo instanceof IFolder && "Bins".equals(foo.getName()))
        bins2 = (IFolder) foo;
      else
        fail();
    }

    assertNotNull(golemMark);
    assertNotNull(bins2);

    assertEquals(1, bins2.getChildren().size());
    next = bins2.getChildren().iterator().next();
    assertEquals("Bin B", next.getName());
    assertTrue(next instanceof INewsBin);

    INewsBin binB = (INewsBin) next;

    assertEquals(6, count(Label.class.getName(), elements));
    assertEquals(1, count(SearchFilter.class.getName(), elements));
    assertTrue(count(Preference.class.getName(), elements) > 0);

    ISearchFilter filter = null;
    for (IEntity element : elements) {
      if (element instanceof ISearchFilter) {
        filter = (ISearchFilter) element;
      }
    }

    assertNotNull(filter);

    ILabel label = null;
    for (IEntity element : elements) {
      if (element instanceof ILabel && "RSSOwl".equals(((ILabel) element).getName())) {
        label = (ILabel) element;
      }
    }

    assertNotNull(label);

    List<IFilterAction> actions = filter.getActions();
    assertEquals(2, actions.size());
    for (IFilterAction action : actions) {
      if (MoveNewsAction.ID.equals(action.getActionId())) {
        Object data = action.getData();
        assertTrue(data instanceof Long[]);
        assertEquals(binB.getId().longValue(), ((Long[]) data)[0].longValue());
      } else if (LabelNewsAction.ID.equals(action.getActionId())) {
        Object data = action.getData();
        assertEquals(label.getId().longValue(), ((Long) data).longValue());
      } else
        fail();
    }
  }

  private int count(String clazz, List<?> objs) {
    int count = 0;
    for (Object obj : objs) {
      if (obj.getClass().getName().equals(clazz))
        count++;
    }

    return count;
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused", "unchecked" })
  public void testImport_Filter() throws Exception {

    /* Import */
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/filter.opml"));
    assertEquals(1, elements.size());
    assertEquals(1, count(SearchFilter.class.getName(), elements));

    for (IEntity item : elements) {
      if ("Filter 1".equals(((ISearchFilter) item).getName()))
        assertEquals(0, ((ISearchFilter) item).getOrder());
    }
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused", "unchecked" })
  public void testImport_Filter_Order() throws Exception {
    IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root"));

    ISearchFilter filter = Owl.getModelFactory().createSearchFilter(null, null, "Filter 1");
    filter.setMatchAllNews(true);
    filter.setEnabled(true);
    filter.setOrder(0);
    filter.addAction(Owl.getModelFactory().createFilterAction("org.rssowl.core.MarkReadNewsAction"));
    DynamicDAO.save(filter);

    /* Import */
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/filter.opml"));
    assertEquals(1, elements.size());
    assertEquals(1, count(SearchFilter.class.getName(), elements));

    ImportUtils.doImport(null, elements, false);

    Collection<ISearchFilter> filters = DynamicDAO.loadAll(ISearchFilter.class);
    for (ISearchFilter item : filters) {
      if ("Filter 1".equals(item.getName()))
        assertEquals(0, item.getOrder());
      else
        assertEquals(1, item.getOrder());
    }
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused", "unchecked" })
  public void testImport_Labels() throws Exception {

    /* Import */
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/labels.opml"));
    assertEquals(5, elements.size());
    assertEquals(5, count(Label.class.getName(), elements));
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused", "unchecked" })
  public void testImport_Labels_Order_NoLabels() throws Exception {
    IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root"));

    /* Import */
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/labels.opml"));
    assertEquals(5, elements.size());
    assertEquals(5, count(Label.class.getName(), elements));

    ImportUtils.doImport(null, elements, false);

    for (IEntity entity : elements) {
      ILabel label = (ILabel) entity;
      if ("Later".equals(label.getName()))
        assertEquals(0, label.getOrder());
      else if ("Personal".equals(label.getName()))
        assertEquals(1, label.getOrder());
      else if ("Important".equals(label.getName()))
        assertEquals(2, label.getOrder());
      else if ("Work".equals(label.getName()))
        assertEquals(3, label.getOrder());
      else if ("To Do".equals(label.getName()))
        assertEquals(4, label.getOrder());
    }
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused", "unchecked" })
  public void testImport_Labels_Order_ExistingLabels() throws Exception {
    IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root"));

    ILabel fooLabel = Owl.getModelFactory().createLabel(null, "Foo");
    fooLabel.setOrder(0);

    ILabel barLabel = Owl.getModelFactory().createLabel(null, "Bar");
    barLabel.setOrder(1);

    DynamicDAO.save(fooLabel);
    DynamicDAO.save(barLabel);

    /* Import */
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/labels.opml"));
    assertEquals(5, elements.size());
    assertEquals(5, count(Label.class.getName(), elements));

    ImportUtils.doImport(null, elements, false);

    int orderSum = 0;
    Collection<ILabel> allLabels = DynamicDAO.loadAll(ILabel.class);
    for (ILabel label : allLabels) {
      orderSum += label.getOrder();
    }

    /* Check the Sequence is consistent */
    assertEquals(0 + 1 + 2 + 3 + 4 + 5 + 6, orderSum);
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused", "unchecked" })
  public void testImport_Labels_Order_ExistingLabels_Merge() throws Exception {
    IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root"));

    ILabel laterLabel = Owl.getModelFactory().createLabel(null, "Later");
    laterLabel.setOrder(1);

    ILabel personalLabel = Owl.getModelFactory().createLabel(null, "Personal");
    personalLabel.setOrder(0);

    DynamicDAO.save(laterLabel);
    DynamicDAO.save(personalLabel);

    /* Import */
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/labels.opml"));
    assertEquals(5, elements.size());
    assertEquals(5, count(Label.class.getName(), elements));

    ImportUtils.doImport(null, elements, false);

    for (IEntity entity : elements) {
      ILabel label = (ILabel) entity;
      if ("Later".equals(label.getName()))
        assertEquals(0, label.getOrder());
      else if ("Personal".equals(label.getName()))
        assertEquals(1, label.getOrder());
      else if ("Important".equals(label.getName()))
        assertEquals(2, label.getOrder());
      else if ("Work".equals(label.getName()))
        assertEquals(3, label.getOrder());
      else if ("To Do".equals(label.getName()))
        assertEquals(4, label.getOrder());
    }
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused", "unchecked" })
  public void testImport_Preferences() throws Exception {

    /* Import */
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/preferences.opml"));
    assertEquals(91, elements.size());
    assertEquals(91, count(Preference.class.getName(), elements));
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused", "unchecked" })
  public void testImport_Labels_Filters_Preferences() throws Exception {

    /* Import */
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/label_filter_prefs.opml"));
    assertEquals(97, elements.size());
    assertEquals(91, count(Preference.class.getName(), elements));
    assertEquals(5, count(Label.class.getName(), elements));
    assertEquals(1, count(SearchFilter.class.getName(), elements));
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused", "unchecked" })
  public void testImport_Marks_All_DirectImport() throws Exception {
    IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root"));

    /* Import */
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/marks.opml"));
    ImportUtils.doImport(null, elements, true);

    Set<IFolder> roots = CoreUtils.loadRootFolders();
    assertEquals(1, roots.size());
    root = roots.iterator().next();
    assertEquals(6, root.getMarks().size());
    assertEquals(0, root.getFolders().size());
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused", "unchecked" })
  public void testImport_Marks_All_DirectImport_NoInitialRoots() throws Exception {

    /* Import */
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/marks.opml"));
    ImportUtils.doImport(null, elements, true);

    Set<IFolder> roots = CoreUtils.loadRootFolders();
    assertEquals(1, roots.size());
    IFolder root = roots.iterator().next();
    assertEquals(6, root.getMarks().size());
    assertEquals(0, root.getFolders().size());
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused", "unchecked" })
  public void testImport_Marks_All_Target() throws Exception {
    IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root"));

    /* Import */
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/marks.opml"));
    ImportUtils.doImport(root, elements, true);

    Set<IFolder> roots = CoreUtils.loadRootFolders();
    assertEquals(1, roots.size());
    root = roots.iterator().next();
    assertEquals(6, root.getMarks().size());
    assertEquals(0, root.getFolders().size());
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused", "unchecked" })
  public void testImport_Marks_All_SecondSet() throws Exception {
    IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root"));
    IFolder otherRoot = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Other Root"));

    /* Import */
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/marks.opml"));
    ImportUtils.doImport(otherRoot, elements, true);

    Set<IFolder> roots = CoreUtils.loadRootFolders();
    assertEquals(2, roots.size());

    assertEquals(6, otherRoot.getMarks().size());
    assertEquals(0, otherRoot.getFolders().size());
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused", "unchecked" })
  public void testImport_Folders_All_DirectImport() throws Exception {
    IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root"));

    /* Import */
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/folders.opml"));
    ImportUtils.doImport(null, elements, true);

    Set<IFolder> roots = CoreUtils.loadRootFolders();
    assertEquals(1, roots.size());
    root = roots.iterator().next();
    assertEquals(0, root.getMarks().size());
    assertEquals(3, root.getFolders().size());
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused", "unchecked" })
  public void testImport_Folders_All_DirectImport_NoInitialRoots() throws Exception {

    /* Import */
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/folders.opml"));
    ImportUtils.doImport(null, elements, true);

    Set<IFolder> roots = CoreUtils.loadRootFolders();
    assertEquals(1, roots.size());
    IFolder root = roots.iterator().next();
    assertEquals(0, root.getMarks().size());
    assertEquals(3, root.getFolders().size());
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused", "unchecked" })
  public void testImport_Folders_All_Target() throws Exception {
    IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root"));

    /* Import */
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/folders.opml"));
    ImportUtils.doImport(root, elements, true);

    Set<IFolder> roots = CoreUtils.loadRootFolders();
    assertEquals(1, roots.size());
    root = roots.iterator().next();
    assertEquals(0, root.getMarks().size());
    assertEquals(3, root.getFolders().size());
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused", "unchecked" })
  public void testImport_Folders_All_SecondSet() throws Exception {
    IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root"));
    IFolder otherRoot = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Other Root"));

    /* Import */
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/folders.opml"));
    ImportUtils.doImport(otherRoot, elements, true);

    Set<IFolder> roots = CoreUtils.loadRootFolders();
    assertEquals(2, roots.size());

    assertEquals(0, otherRoot.getMarks().size());
    assertEquals(3, otherRoot.getFolders().size());
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused", "unchecked" })
  public void testImport_Sets_Keep_Order() throws Exception {

    /* Import */
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/sets.opml"));
    ImportUtils.doImport(null, elements, true);

    Set<IFolder> roots = CoreUtils.loadRootFolders();
    Iterator<IFolder> iterator = roots.iterator();
    assertEquals("Set 1", iterator.next().getName());
    assertEquals("Set 2", iterator.next().getName());
    assertEquals("Set 3", iterator.next().getName());
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused", "unchecked" })
  public void testImport_Empty() throws Exception {

    /* Import */
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/empty.opml"));
    ImportUtils.doImport(null, elements, true);
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused", "unchecked" })
  public void testImport_Marks_DescriptionHomepage() throws Exception {
    IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root"));

    /* Import */
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/marks.opml"));
    ImportUtils.doImport(root, elements, true);

    root = CoreUtils.loadRootFolders().iterator().next();
    List<IMark> marks = root.getMarks();
    assertEquals("RSSOwl News", root.getMarks().get(0).getName());

    IBookMark mark = (IBookMark) root.getMarks().get(0);
    IFeed feed = mark.getFeedLinkReference().resolve();
    assertNotNull(feed);
    assertEquals("The Reader to Use!", feed.getDescription());
    assertEquals(URIUtils.createURI("http://www.rssowl.org"), feed.getHomepage());
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused", "unchecked" })
  public void testImport_AvoidDuplicateFeeds() throws Exception {
    IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root"));
    IFeed feed = DynamicDAO.save(Owl.getModelFactory().createFeed(null, new URI("http://www.rssowl.org/newsfeed")));

    /* Import */
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/marks.opml"));
    ImportUtils.doImport(root, elements, true);

    root = CoreUtils.loadRootFolders().iterator().next();
    List<IMark> marks = root.getMarks();
    assertEquals("RSSOwl News", root.getMarks().get(0).getName());

    IBookMark mark = (IBookMark) root.getMarks().get(0);
    IFeed otherFeed = mark.getFeedLinkReference().resolve();
    assertNotNull(otherFeed);
    assertEquals(feed, otherFeed);
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused", "unchecked" })
  public void testImport_Order_DirectImport() throws Exception {

    /* Import */
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/order.opml"));
    ImportUtils.doImport(null, elements, true);

    IFolder root = CoreUtils.loadRootFolders().iterator().next();
    List<IFolderChild> childs = root.getChildren();
    assertEquals("RSSOwl News", childs.get(0).getName());
    assertEquals("Engadget", childs.get(1).getName());
    assertEquals("Search A", childs.get(2).getName());
    assertEquals("MarketWatch", childs.get(3).getName());
    assertEquals("New York Times", childs.get(4).getName());
    assertEquals("Bins", childs.get(5).getName());
    assertEquals("Techcrunch", childs.get(6).getName());
    assertEquals("Bin A", childs.get(7).getName());
    assertEquals("Wired Top Stories", childs.get(8).getName());
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused", "unchecked" })
  public void testImport_Order_Target() throws Exception {
    IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root"));

    /* Import */
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/order.opml"));
    ImportUtils.doImport(root, elements, true);

    root = CoreUtils.loadRootFolders().iterator().next();
    List<IFolderChild> childs = root.getChildren();
    assertEquals(1, childs.size());
    childs = ((IFolder) childs.get(0)).getChildren();
    assertEquals("RSSOwl News", childs.get(0).getName());
    assertEquals("Engadget", childs.get(1).getName());
    assertEquals("Search A", childs.get(2).getName());
    assertEquals("MarketWatch", childs.get(3).getName());
    assertEquals("New York Times", childs.get(4).getName());
    assertEquals("Bins", childs.get(5).getName());
    assertEquals("Techcrunch", childs.get(6).getName());
    assertEquals("Bin A", childs.get(7).getName());
    assertEquals("Wired Top Stories", childs.get(8).getName());
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused", "unchecked" })
  public void testImport_DuplicateMarks_CheckExisting() throws Exception {
    IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root"));

    /* Import */
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/duplicates.opml"));
    ImportUtils.doImport(null, elements, true);

    Set<IFolder> roots = CoreUtils.loadRootFolders();
    assertEquals(1, roots.size());
    root = roots.iterator().next();
    assertEquals(7, root.getMarks().size());
    assertEquals(0, root.getFolders().size());
  }

  /**
   * @throws Exception
   */
  @Test
  @SuppressWarnings( { "nls", "null", "unused", "unchecked" })
  public void testImport_DuplicateMarks_DoNotCheckExisting() throws Exception {
    IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root"));

    /* Import */
    List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/duplicates.opml"));
    ImportUtils.doImport(null, elements, false);

    Set<IFolder> roots = CoreUtils.loadRootFolders();
    assertEquals(1, roots.size());
    root = roots.iterator().next();
    assertEquals(7, root.getMarks().size());
    assertEquals(0, root.getFolders().size());
  }
}
TOP

Related Classes of org.rssowl.core.tests.importer.FileImportTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.