Package com.db4o

Examples of com.db4o.ObjectContainer


   * TODO Allow replacing old db with copy
   * TODO Provide a full copy mode (that includes IConditionalGet an NewsCounter)
   */
  @SuppressWarnings("unused")
  private void copyDatabase() {
      ObjectContainer db = Db4o.openFile(getDBFilePath() + "50");
      db.ext().configure().queries().evaluationMode(QueryEvaluationMode.IMMEDIATE);
      for (Folder type : fObjectContainer.query(Folder.class))  {
        fObjectContainer.activate(type, Integer.MAX_VALUE);
        if (type.getParent() == null) {
          db.ext().set(type, Integer.MAX_VALUE);
        }
      }
      for (Feed feed : fObjectContainer.query(Feed.class)) {
        fObjectContainer.activate(feed, Integer.MAX_VALUE);
        db.ext().set(feed, Integer.MAX_VALUE);
      }
      for (Preference pref : fObjectContainer.query(Preference.class)) {
        fObjectContainer.activate(pref, Integer.MAX_VALUE);
        db.ext().set(pref, Integer.MAX_VALUE);
      }
      List<Counter> counterSet = fObjectContainer.query(Counter.class);
      Counter counter = counterSet.iterator().next();
      fObjectContainer.activate(counter, Integer.MAX_VALUE);
      db.ext().set(counter, Integer.MAX_VALUE);

      db.commit();
  }
View Full Code Here


    DBHelper.copyFileIO(new File(dbPath), originDbFile, new NullProgressMonitor());
    File defragmentedDbFile = new File(dbPath + ".dest");
    DBManager.copyDatabase(originDbFile, defragmentedDbFile, new NullProgressMonitor());

    System.gc();
    ObjectContainer db = Db4o.openFile(DBManager.createConfiguration(false), originDbFile.getAbsolutePath());
    ObjectContainer defragmentedDb = Db4o.openFile(DBManager.createConfiguration(false), defragmentedDbFile.getAbsolutePath());

    /* Assert Number of Entities */
    List<IEntity> entities = db.query(IEntity.class);
    assertEquals(entities.size(), defragmentedDb.query(IEntity.class).size());
    for (IEntity entity : entities) {
      Query query = defragmentedDb.query();
      query.constrain(entity.getClass());
      query.descend("fId").constrain(Long.valueOf(entity.getId())); //$NON-NLS-1$

      List<?> result = query.execute();
      assertEquals(1, result.size());
      assertEquals(entity, result.get(0));

      if (entity instanceof Attachment)
        assertTrue(((Attachment) entity).isIdentical((Attachment) result.get(0)));
      else if (entity instanceof BookMark)
        assertTrue(((BookMark) entity).isIdentical((BookMark) result.get(0)));
      else if (entity instanceof Category)
        assertTrue(((Category) entity).isIdentical((Category) result.get(0)));
      else if (entity instanceof Feed)
        assertTrue(((Feed) entity).isIdentical((Feed) result.get(0)));
      else if (entity instanceof Folder)
        assertTrue(((Folder) entity).isIdentical((Folder) result.get(0)));
      else if (entity instanceof Label)
        assertTrue(((Label) entity).isIdentical((Label) result.get(0)));
      else if (entity instanceof News)
        assertTrue(((News) entity).isIdentical((News) result.get(0)));
      else if (entity instanceof Person)
        assertTrue(((Person) entity).isIdentical((Person) result.get(0)));
      else if (entity instanceof SearchCondition)
        assertTrue(((SearchCondition) entity).isIdentical((SearchCondition) result.get(0)));
      else if (entity instanceof SearchMark)
        assertTrue(((SearchMark) entity).isIdentical((SearchMark) result.get(0)));
    }

    /* Assert News */
    List<INews> newsList = db.query(INews.class);
    assertEquals(newsList.size(), defragmentedDb.query(INews.class).size());
    for (INews news : newsList) {
      Query query = defragmentedDb.query();
      query.constrain(news.getClass());
      query.descend("fId").constrain(Long.valueOf(news.getId())); //$NON-NLS-1$

      List<INews> result = query.execute();
      assertEquals(1, result.size());
      assertEquals(news.getTitle(), result.get(0).getTitle());
    }

    /* Assert Description */
    List<Description> descriptions = db.query(Description.class);
    assertEquals(descriptions.size(), defragmentedDb.query(Description.class).size());
    for (Description description : descriptions) {
      Query query = defragmentedDb.query();
      query.constrain(description.getClass());
      query.descend("fNewsId").constrain(Long.valueOf(description.getNews().getId())); //$NON-NLS-1$

      List<Description> result = query.execute();
      assertEquals(1, result.size());
      assertEquals(description.getValue(), result.get(0).getValue());
    }

    /* Assert News Bins */
    List<INewsBin> newsBins = db.query(INewsBin.class);
    assertEquals(newsBins.size(), defragmentedDb.query(INewsBin.class).size());
    for (INewsBin newsBin : newsBins) {
      Query query = defragmentedDb.query();
      query.constrain(newsBin.getClass());
      query.descend("fId").constrain(Long.valueOf(newsBin.getId())); //$NON-NLS-1$

      List<INewsBin> result = query.execute();
      assertEquals(1, result.size());
      assertEquals(newsBin.getNews(), result.get(0).getNews());
    }

    /* Assert Folders, Bookmarks and Searchmarks */
    List<IFolder> folders = db.query(IFolder.class);
    assertEquals(folders.size(), defragmentedDb.query(IFolder.class).size());
    for (IFolder folder : folders) {
      Query query = defragmentedDb.query();
      query.constrain(folder.getClass());
      query.descend("fId").constrain(Long.valueOf(folder.getId())); //$NON-NLS-1$

      List<IFolder> result = query.execute();
      assertEquals(1, result.size());

      IFolder otherFolder = result.get(0);
      assertTrue(folder.getName().equals(otherFolder.getName()));
      assertTrue(folder.getProperties().equals(otherFolder.getProperties()));

      IBookMark bm = null;
      ISearchMark sm = null;
      List<IFolderChild> children = folder.getChildren();
      for (IFolderChild child : children) {
        if (child instanceof IBookMark)
          bm = (IBookMark) child;
        else if (child instanceof ISearchMark)
          sm = (ISearchMark) child;
      }

      IBookMark otherBM = null;
      ISearchMark otherSM = null;
      List<IFolderChild> otherChildren = otherFolder.getChildren();
      for (IFolderChild otherChild : otherChildren) {
        if (otherChild instanceof IBookMark)
          otherBM = (IBookMark) otherChild;
        else if (otherChild instanceof ISearchMark)
          otherSM = (ISearchMark) otherChild;
      }

      assertNotNull(bm);
      assertNotNull(sm);
      assertNotNull(otherBM);
      assertNotNull(otherSM);

      assertTrue(bm.getName().equals(otherBM.getName()));
      assertTrue(bm.getProperties().equals(otherBM.getProperties()));

      assertTrue(sm.getSearchConditions().size() == otherSM.getSearchConditions().size());
    }

    /* Assert Preference */
    List<IPreference> preferences = db.query(IPreference.class);
    assertEquals(preferences.size(), defragmentedDb.query(IPreference.class).size());
    for (IPreference preference : preferences) {
      Query query = defragmentedDb.query();
      query.constrain(preference.getClass());
      query.descend("fId").constrain(Long.valueOf(preference.getId())); //$NON-NLS-1$

      List<IPreference> result = query.execute();
      assertEquals(1, result.size());

      IPreference otherPreference = result.get(0);

      assertEquals(preference.getKey(), otherPreference.getKey());
      if ("string".equals(preference.getKey()))
        assertEquals(preference.getString(), otherPreference.getString());

      if ("strings".equals(preference.getKey()))
        assertTrue(Arrays.equals(preference.getStrings(), otherPreference.getStrings()));

      if ("boolean".equals(preference.getKey()))
        assertEquals(preference.getBoolean(), otherPreference.getBoolean());

      if ("booleans".equals(preference.getKey()))
        assertTrue(Arrays.equals(preference.getBooleans(), otherPreference.getBooleans()));

      if ("integer".equals(preference.getKey()))
        assertEquals(preference.getInteger(), otherPreference.getInteger());

      if ("integers".equals(preference.getKey()))
        assertTrue(Arrays.equals(preference.getIntegers(), otherPreference.getIntegers()));

      if ("long".equals(preference.getKey()))
        assertEquals(preference.getLong(), otherPreference.getLong());

      if ("longs".equals(preference.getKey()))
        assertTrue(Arrays.equals(preference.getLongs(), otherPreference.getLongs()));
    }

    /* Assert Label */
    List<ILabel> labels = db.query(ILabel.class);
    assertEquals(labels.size(), defragmentedDb.query(ILabel.class).size());
    for (ILabel label : labels) {
      Query query = defragmentedDb.query();
      query.constrain(label.getClass());
      query.descend("fId").constrain(Long.valueOf(label.getId())); //$NON-NLS-1$

      List<INewsBin> result = query.execute();
      assertEquals(1, result.size());
      assertTrue(((Label) label).isIdentical((ILabel) result.get(0)));
    }

    /* Assert Counter */
    assertEquals(db.query(Counter.class).get(0).getValue(), defragmentedDb.query(Counter.class).get(0).getValue());

    /* Assert Search Filter */
    List<ISearchFilter> filters = db.query(ISearchFilter.class);
    assertEquals(filters.size(), defragmentedDb.query(ISearchFilter.class).size());
    for (ISearchFilter filter : filters) {
      Query query = defragmentedDb.query();
      query.constrain(filter.getClass());
      query.descend("fId").constrain(Long.valueOf(filter.getId())); //$NON-NLS-1$

      List<INewsBin> result = query.execute();
      assertEquals(1, result.size());

      ISearchFilter otherFilter = (ISearchFilter) result.get(0);
      assertTrue(filter.getName().equals(otherFilter.getName()));
      assertEquals(filter.getActions().size(), otherFilter.getActions().size());

      ISearch search = filter.getSearch();
      ISearch otherSearch = otherFilter.getSearch();

      assertEquals(search.getSearchConditions().size(), otherSearch.getSearchConditions().size());
    }

    /* Assert Conditional Get */
    List<IConditionalGet> condGets = db.query(IConditionalGet.class);
    assertEquals(condGets.size(), defragmentedDb.query(IConditionalGet.class).size());
    for (IConditionalGet condGet : condGets) {
      Query query = defragmentedDb.query();
      query.constrain(condGet.getClass());
      query.descend("fLink").constrain(condGet.getLink().toString()); //$NON-NLS-1$

      List<IConditionalGet> result = query.execute();
      assertEquals(1, result.size());

      IConditionalGet otherCondGet = result.get(0);
      assertEquals(condGet.getIfModifiedSince(), otherCondGet.getIfModifiedSince());
      assertEquals(condGet.getIfNoneMatch(), otherCondGet.getIfNoneMatch());
    }

    /* Assert EntityIdsByEventType */
    EntityIdsByEventType eventType = db.query(EntityIdsByEventType.class).get(0);
    EntityIdsByEventType otherEventType = defragmentedDb.query(EntityIdsByEventType.class).get(0);
    assertNotNull(eventType);
    assertNotNull(otherEventType);
    assertEquals(eventType, otherEventType);

    /* Assert NewsCounter / NewsCounterItem */
    NewsCounter newsCounter = db.query(NewsCounter.class).get(0);
    db.activate(newsCounter, Integer.MAX_VALUE);
    NewsCounter otherNewsCounter = defragmentedDb.query(NewsCounter.class).get(0);
    defragmentedDb.activate(otherNewsCounter, Integer.MAX_VALUE);
    assertNotNull(newsCounter);
    assertNotNull(otherNewsCounter);

    NewsCounterItem item = otherNewsCounter.get("http://www.rssowl.org");
    assertEquals(1, item.getNewCounter());
View Full Code Here

  //TODO Report progress
  public boolean migrate(ConfigurationFactory configFactory, String dbFileName, IProgressMonitor progressMonitor) {
    progressMonitor.beginTask("Migrating data", 100);

    ObjectContainer oc = Db4o.openFile(configFactory.createConfiguration(), dbFileName);

    /* Copy all folder and mark properties to map */
    Map<Long, Map<String, ?>> idPropertiesMap = new HashMap<Long, Map<String, ?>>();
    for (Folder folder : oc.query(Folder.class)) {
      idPropertiesMap.put(folder.getId(), folder.getProperties());
    }

    for (Mark mark : oc.query(Mark.class)) {
      idPropertiesMap.put(mark.getId(), mark.getProperties());
    }

    oc.close();

    Configuration c = Db4o.newConfiguration();

    /* core.model.types to core.persist */
    c.objectClass(IAttachment.class).rename(org.rssowl.core.persist.IAttachment.class.getName());
    c.objectClass(IBookMark.class).rename(org.rssowl.core.persist.IBookMark.class.getName());
    c.objectClass(ICategory.class).rename(org.rssowl.core.persist.ICategory.class.getName());
    c.objectClass(IFeed.class).rename(org.rssowl.core.persist.IFeed.class.getName());
    c.objectClass(IFolder.class).rename(org.rssowl.core.persist.IFolder.class.getName());
    c.objectClass(IImage.class).rename(org.rssowl.core.persist.IImage.class.getName());
    c.objectClass(ILabel.class).rename(org.rssowl.core.persist.ILabel.class.getName());
    c.objectClass(IMark.class).rename(org.rssowl.core.persist.IMark.class.getName());
    c.objectClass(INews.class).rename(org.rssowl.core.persist.INews.class.getName());
    c.objectClass(INews.State.class).rename(org.rssowl.core.persist.INews.State.class.getName());
    c.objectClass(IPerson.class).rename(org.rssowl.core.persist.IPerson.class.getName());
    c.objectClass(ISearchMark.class).rename(org.rssowl.core.persist.ISearchMark.class.getName());
    c.objectClass(ISource.class).rename(org.rssowl.core.persist.ISource.class.getName());

    /* core.model.internal.types to core.internal.persist */
    c.objectClass(AbstractEntity.class).rename(org.rssowl.core.internal.persist.AbstractEntity.class.getName());
    c.objectClass(Attachment.class).rename(org.rssowl.core.internal.persist.Attachment.class.getName());
    c.objectClass(BookMark.class).rename(org.rssowl.core.internal.persist.BookMark.class.getName());
    c.objectClass(Category.class).rename(org.rssowl.core.internal.persist.Category.class.getName());
    c.objectClass(ConditionalGet.class).rename(org.rssowl.core.internal.persist.ConditionalGet.class.getName());
    c.objectClass(Feed.class).rename(org.rssowl.core.internal.persist.Feed.class.getName());
    c.objectClass(Folder.class).rename(org.rssowl.core.internal.persist.Folder.class.getName());
    c.objectClass(Guid.class).rename(org.rssowl.core.internal.persist.Guid.class.getName());
    c.objectClass(Image.class).rename(org.rssowl.core.internal.persist.Image.class.getName());
    c.objectClass(Label.class).rename(org.rssowl.core.internal.persist.Label.class.getName());
    c.objectClass(Mark.class).rename(org.rssowl.core.internal.persist.Mark.class.getName());
    c.objectClass(News.class).rename(org.rssowl.core.internal.persist.News.class.getName());
    c.objectClass(ExtendableType.class).rename(org.rssowl.core.internal.persist.AbstractEntity.class.getName());
    c.objectClass(Person.class).rename(org.rssowl.core.internal.persist.Person.class.getName());
    c.objectClass(SearchMark.class).rename(org.rssowl.core.internal.persist.SearchMark.class.getName());
    c.objectClass(Source.class).rename(org.rssowl.core.internal.persist.Source.class.getName());

    /* Search-related classes*/
    c.objectClass(SearchSpecifier.class).rename(org.rssowl.core.persist.SearchSpecifier.class.getName());
    c.objectClass(SearchCondition.class).rename(org.rssowl.core.internal.persist.SearchCondition.class.getName());
    c.objectClass(ISearchField.class).rename(org.rssowl.core.persist.ISearchField.class.getName());
    c.objectClass(SearchField.class).rename(org.rssowl.core.internal.persist.SearchField.class.getName());
    c.objectClass(SearchValueType.class).rename(org.rssowl.core.internal.persist.SearchValueType.class.getName());

    /* Counter */
    c.objectClass(Counter.class).rename(org.rssowl.core.internal.persist.service.Counter.class.getName());

    oc = Db4o.openFile(c, dbFileName);
    oc.close();
    /* 10 */
    progressMonitor.worked(10);

    oc = Db4o.openFile(configFactory.createConfiguration(), dbFileName);

    /* Preference */
    for (Preference pref : oc.query(Preference.class)) {
      oc.activate(pref, Integer.MAX_VALUE);
      oc.ext().set(convertPref(pref), Integer.MAX_VALUE);
      oc.delete(pref);
    }
    oc.commit();
    /* 20 */
    progressMonitor.worked(10);

    for (org.rssowl.core.persist.ISearchField searchField : oc.query(org.rssowl.core.internal.persist.SearchField.class))   {
      oc.activate(searchField, Integer.MAX_VALUE);
      String entityName = searchField.getEntityName();
      entityName = entityName.replace("core.model.types", "core.persist");
      MigrationHelper.setField(searchField, "fEntityName", entityName);
      oc.ext().set(searchField, Integer.MAX_VALUE);
    }
    oc.commit();
    /* 30 */
    progressMonitor.worked(10);

    for (org.rssowl.core.persist.ISearchCondition searchCond : oc.query(org.rssowl.core.internal.persist.SearchCondition.class))   {
      oc.activate(searchCond, Integer.MAX_VALUE);
      int searchSpecOrdinal = searchCond.getSpecifier().ordinal();
      org.rssowl.core.persist.SearchSpecifier searchSpec = org.rssowl.core.persist.SearchSpecifier.values()[searchSpecOrdinal];
      MigrationHelper.setField(searchCond, "fSpecifier", searchSpec);
      oc.ext().set(searchCond, Integer.MAX_VALUE);
    }
    oc.commit();
    /* 40 */
    progressMonitor.worked(10);

    List<org.rssowl.core.persist.IFolder> folders = new ArrayList<org.rssowl.core.persist.IFolder>();
    for (org.rssowl.core.persist.IFolder folder : oc.query(org.rssowl.core.internal.persist.Folder.class))   {
      oc.activate(folder, Integer.MAX_VALUE);
      List<IFolderChild> children = new ArrayList<IFolderChild>(getFolderChildren(folder, "fFolders"));
      MigrationHelper.setField(folder, "fFolders", null);
      children.addAll(getFolderChildren(folder, "fMarks"));
      MigrationHelper.setField(folder, "fMarks", null);
      MigrationHelper.setField(folder, "fChildren", children);
      folders.add(folder);
    }
    /* Only save folders once they have all been updated */
    for (org.rssowl.core.persist.IFolder folder : folders)   {
      oc.ext().set(folder, Integer.MAX_VALUE);
    }

    List<org.rssowl.core.persist.IMark> marks = new ArrayList<org.rssowl.core.persist.IMark>();
    for (org.rssowl.core.persist.IMark mark : oc.query(org.rssowl.core.internal.persist.Mark.class))   {
      oc.activate(mark, Integer.MAX_VALUE);
      org.rssowl.core.persist.IFolder parent = (org.rssowl.core.persist.IFolder) MigrationHelper.getFieldValue(mark, "fFolder");
      MigrationHelper.setField(mark, "fFolder", null);
      MigrationHelper.setField(mark, "fParent", parent);

      /*
       * If ISearchMark contains a search condition with INews.State, replace
       * it with an EnumSet<INews.State>.
       */
      if (mark instanceof org.rssowl.core.persist.ISearchMark) {
        org.rssowl.core.persist.ISearchMark searchMark = (org.rssowl.core.persist.ISearchMark) mark;
        EnumSet<org.rssowl.core.persist.INews.State> states = EnumSet.noneOf(org.rssowl.core.persist.INews.State.class);
        List<ISearchCondition> searchConds = new ArrayList<ISearchCondition>();
        for (ISearchCondition searchCond : searchMark.getSearchConditions()) {
          org.rssowl.core.persist.ISearchField searchField = searchCond.getField();
          if (searchField.getEntityName().equals(org.rssowl.core.persist.INews.class.getName()) && searchField.getId() == INews.STATE)  {
            states.add((org.rssowl.core.persist.INews.State) searchCond.getValue());
          }
          else {
            searchConds.add(searchCond);
          }
        }
        if (!states.isEmpty()) {
          IModelFactory factory = InternalOwl.getDefault().getModelFactory();
          org.rssowl.core.persist.ISearchField field = factory.createSearchField(INews.STATE, org.rssowl.core.persist.INews.class.getName());
          searchConds.add(factory.createSearchCondition(field, org.rssowl.core.persist.SearchSpecifier.IS, states));
          MigrationHelper.setField(mark, "fSearchConditions", searchConds);
        }
      }

      marks.add(mark);
    }
    /* Only save folders once they have all been updated */
    for (org.rssowl.core.persist.IMark mark : marks)   {
      oc.ext().set(mark, Integer.MAX_VALUE);
    }

    oc.commit();
    /* 80 */
    progressMonitor.worked(40);

    for (Map.Entry<Long, Map<String, ?>> entry : idPropertiesMap.entrySet()) {
      Query query = oc.query();
      query.constrain(org.rssowl.core.internal.persist.AbstractEntity.class);
      query.descend("fId").constrain(entry.getKey()); //$NON-NLS-1$
      List<?> list = query.execute();
      org.rssowl.core.internal.persist.AbstractEntity entity = (org.rssowl.core.internal.persist.AbstractEntity) list.get(0);
      oc.activate(entity, Integer.MAX_VALUE);
      for (Map.Entry<String, ?> valueEntry : entry.getValue().entrySet()) {
        entity.setProperty(valueEntry.getKey(), valueEntry.getValue());
      }
      oc.ext().set(entity, Integer.MAX_VALUE);
    }
    /* 90 */
    progressMonitor.worked(10);
    oc.close();

    /* Disable indices to force them to be re-created */
    Configuration config = configFactory.createConfiguration();
    config.objectClass(org.rssowl.core.internal.persist.BookMark.class).objectField("fFeedLink").indexed(false); //$NON-NLS-1$
    config.objectClass(org.rssowl.core.internal.persist.ConditionalGet.class).objectField("fLink").indexed(false); //$NON-NLS-1$
    config.objectClass(org.rssowl.core.internal.persist.Preference.class).objectField("fKey").indexed(false); //$NON-NLS-1$
    config.objectClass(org.rssowl.core.internal.persist.Feed.class).objectField("fLinkText").indexed(false);
    config.objectClass(org.rssowl.core.internal.persist.News.class).objectField("fLinkText").indexed(false); //$NON-NLS-1$
    config.objectClass(org.rssowl.core.internal.persist.News.class).objectField("fGuidValue").indexed(false);
    config.objectClass(org.rssowl.core.internal.persist.News.class).objectField("fFeedLink").indexed(false); //$NON-NLS-1$
    config.objectClass(org.rssowl.core.internal.persist.News.class).objectField("fStateOrdinal").indexed(false); //$NON-NLS-1$
    oc = Db4o.openFile(config, dbFileName);

    /* Access classes with index */
    ObjectSet<org.rssowl.core.internal.persist.BookMark> markSet = oc.query(org.rssowl.core.internal.persist.BookMark.class);
    if (markSet.hasNext())
      markSet.next().getName();

    ObjectSet<org.rssowl.core.internal.persist.ConditionalGet> condGetSet = oc.query(org.rssowl.core.internal.persist.ConditionalGet.class);
    if (condGetSet.hasNext())
      condGetSet.next().getLink();

    ObjectSet<org.rssowl.core.internal.persist.Preference> prefSet = oc.query(org.rssowl.core.internal.persist.Preference.class);
    if (prefSet.hasNext())
      prefSet.next().getKey();

    ObjectSet<org.rssowl.core.internal.persist.Feed> feedSet = oc.query(org.rssowl.core.internal.persist.Feed.class);
    if (feedSet.hasNext())
      feedSet.next().getLink();

    ObjectSet<org.rssowl.core.internal.persist.News> newsSet = oc.query(org.rssowl.core.internal.persist.News.class);
    if (newsSet.hasNext())
      newsSet.next().getLink();

    oc.close();
    /* 100 */
    progressMonitor.worked(10);

    return true;
  }
View Full Code Here

  public MigrationResult migrate(ConfigurationFactory configFactory, String dbFileName, IProgressMonitor progressMonitor) {
    final int totalProgress = 100;
    int totalProgressIncremented = 0;
    progressMonitor.beginTask(Messages.Migration2To5_MIGRATING_DATA, totalProgress);

    ObjectContainer oc = Db4o.openFile(configFactory.createConfiguration(), dbFileName);

    totalProgressIncremented = Migration2To3.migrate(progressMonitor, totalProgress, totalProgressIncremented, oc);
    oc.commit();
    oc.close();

    File dbLastBackUpFile = DBManager.getDefault().getDBLastBackUpFile();
    dbLastBackUpFile.delete();

    progressMonitor.worked(totalProgress - totalProgressIncremented);
View Full Code Here

  public MigrationResult migrate(ConfigurationFactory configFactory, String dbFileName, IProgressMonitor progressMonitor) {
    final int totalProgress = 100;
    int totalProgressIncremented = 0;
    progressMonitor.beginTask(Messages.Migration2To3_MIGRATING_DATA, totalProgress);

    ObjectContainer oc = Db4o.openFile(configFactory.createConfiguration(), dbFileName);

    totalProgressIncremented = migrate(progressMonitor, totalProgress, totalProgressIncremented, oc);
    oc.commit();
    oc.close();

    progressMonitor.worked(totalProgress - totalProgressIncremented);

    return new MigrationResult(false, false, false);
  }
View Full Code Here

   * @param source
   * @param destination
   * @param monitor
   */
  public final static void copyDatabase(File source, File destination, IProgressMonitor monitor) {
    ObjectContainer sourceDb = Db4o.openFile(createConfiguration(true), source.getAbsolutePath());
    ObjectContainer destinationDb = Db4o.openFile(createConfiguration(true), destination.getAbsolutePath());

    /* User might have cancelled the operation */
    if (isCanceled(monitor, sourceDb, destinationDb))
      return;

    /* Labels (keep in memory to avoid duplicate copies when cascading feed) */
    List<Label> labels = new ArrayList<Label>();
    ObjectSet<Label> allLabels = sourceDb.query(Label.class);
    int available = DEFRAG_SUB_WORK_LABELS;
    if (!allLabels.isEmpty()) {
      int chunk = available / allLabels.size();
      for (Label label : allLabels) {
        if (isCanceled(monitor, sourceDb, destinationDb))
          return;

        labels.add(label);
        sourceDb.activate(label, Integer.MAX_VALUE);
        destinationDb.ext().store(label, Integer.MAX_VALUE);
        monitor.worked(chunk);
      }
      allLabels = null;
    } else
      monitor.worked(available);

    /* User might have cancelled the operation */
    if (isCanceled(monitor, sourceDb, destinationDb))
      return;

    /* Folders */
    ObjectSet<Folder> allFolders = sourceDb.query(Folder.class);
    available = DEFRAG_SUB_WORK_FOLDERS;
    if (!allFolders.isEmpty()) {
      int chunk = available / allFolders.size();
      for (Folder type : allFolders) {
        if (isCanceled(monitor, sourceDb, destinationDb))
          return;

        sourceDb.activate(type, Integer.MAX_VALUE);
        if (type.getParent() == null)
          destinationDb.ext().store(type, Integer.MAX_VALUE);

        monitor.worked(chunk);
      }
      allFolders = null;
    } else
      monitor.worked(available);

    /* User might have cancelled the operation */
    if (isCanceled(monitor, sourceDb, destinationDb))
      return;

    /*
     * We use destinationDb for the query here because we have already copied
     * the NewsBins at this stage and we may need to fix the NewsBin in case it
     * contains stale news refs.
     */
    ObjectSet<NewsBin> allBins = destinationDb.query(NewsBin.class);
    available = DEFRAG_SUB_WORK_BINS;
    if (!allBins.isEmpty()) {
      int chunk = available / allBins.size();
      for (NewsBin newsBin : allBins) {
        if (isCanceled(monitor, sourceDb, destinationDb))
          return;

        destinationDb.activate(newsBin, Integer.MAX_VALUE);
        List<NewsReference> staleNewsRefs = new ArrayList<NewsReference>(0);
        for (NewsReference newsRef : newsBin.getNewsRefs()) {
          if (isCanceled(monitor, sourceDb, destinationDb))
            return;

          Query query = sourceDb.query();
          query.constrain(News.class);
          query.descend("fId").constrain(newsRef.getId()); //$NON-NLS-1$
          Iterator<?> newsIt = query.execute().iterator();
          if (!newsIt.hasNext()) {
            Activator.getDefault().logError("NewsBin " + newsBin + " has reference to news with id: " + newsRef.getId() + ", but that news does not exist.", null); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
            staleNewsRefs.add(newsRef);
            continue;
          }
          Object news = newsIt.next();
          sourceDb.activate(news, Integer.MAX_VALUE);
          destinationDb.ext().store(news, Integer.MAX_VALUE);
        }

        if (!staleNewsRefs.isEmpty()) {
          if (isCanceled(monitor, sourceDb, destinationDb))
            return;

          newsBin.removeNewsRefs(staleNewsRefs);
          destinationDb.ext().store(newsBin, Integer.MAX_VALUE);
        }

        monitor.worked(chunk);
      }
      allBins = null;
    } else
      monitor.worked(available);

    /* User might have cancelled the operation */
    if (isCanceled(monitor, sourceDb, destinationDb))
      return;

    /* Feeds */
    available = DEFRAG_SUB_WORK_FEEDS;
    int feedCounter = 0;
    NewsCounter newsCounter = new NewsCounter();
    ObjectSet<Feed> allFeeds = sourceDb.query(Feed.class);
    if (!allFeeds.isEmpty()) {
      int allFeedsSize = allFeeds.size();
      int chunk = available / allFeedsSize;

      int i = 1;
      for (Feed feed : allFeeds) {
        if (isCanceled(monitor, sourceDb, destinationDb))
          return;

        /* Introduce own label as feed copying can be very time consuming */
        monitor.subTask(NLS.bind(Messages.DBManager_OPTIMIZING_NEWSFEEDS, i, allFeedsSize));
        i++;

        sourceDb.activate(feed, Integer.MAX_VALUE);
        addNewsCounterItem(newsCounter, feed);
        destinationDb.ext().store(feed, Integer.MAX_VALUE);

        ++feedCounter;
        if (feedCounter % 40 == 0) {
          destinationDb.commit();
          System.gc();
        }

        monitor.worked(chunk);
      }
      allFeeds = null;
      destinationDb.commit();
      System.gc();
    } else
      monitor.worked(available);

    /* Back to normal subtask label */
    monitor.subTask(Messages.DBManager_IMPROVING_APP_PERFORMANCE);

    /* User might have cancelled the operation */
    if (isCanceled(monitor, sourceDb, destinationDb))
      return;

    destinationDb.ext().store(newsCounter, Integer.MAX_VALUE);

    /* User might have cancelled the operation */
    if (isCanceled(monitor, sourceDb, destinationDb))
      return;

    /* Description */
    available = DEFRAG_SUB_WORK_DESCRIPTIONS;
    int descriptionCounter = 0;
    ObjectSet<Description> allDescriptions = sourceDb.query(Description.class);
    if (!allDescriptions.isEmpty()) {
      int chunk = Math.max(1, available / allDescriptions.size());

      for (Description description : allDescriptions) {
        if (isCanceled(monitor, sourceDb, destinationDb))
          return;

        sourceDb.activate(description, Integer.MAX_VALUE);
        destinationDb.ext().store(description, Integer.MAX_VALUE);

        ++descriptionCounter;
        if (descriptionCounter % 600 == 0) {
          destinationDb.commit();
          System.gc();
        }

        monitor.worked(chunk);
      }

      allDescriptions = null;
      destinationDb.commit();
      System.gc();
    } else
      monitor.worked(available);

    /* User might have cancelled the operation */
    if (isCanceled(monitor, sourceDb, destinationDb))
      return;

    /* Preferences */
    available = DEFRAG_SUB_WORK_PREFERENCES;
    ObjectSet<Preference> allPreferences = sourceDb.query(Preference.class);
    if (!allPreferences.isEmpty()) {
      int chunk = available / allPreferences.size();

      for (Preference pref : allPreferences) {
        if (isCanceled(monitor, sourceDb, destinationDb))
          return;

        sourceDb.activate(pref, Integer.MAX_VALUE);
        destinationDb.ext().store(pref, Integer.MAX_VALUE);

        monitor.worked(chunk);
      }

      allPreferences = null;
    } else
      monitor.worked(available);

    /* User might have cancelled the operation */
    if (isCanceled(monitor, sourceDb, destinationDb))
      return;

    /* Filter */
    available = DEFRAG_SUB_WORK_FILTERS;
    ObjectSet<SearchFilter> allFilters = sourceDb.query(SearchFilter.class);
    if (!allFilters.isEmpty()) {
      int chunk = available / allFilters.size();

      for (ISearchFilter filter : allFilters) {
        if (isCanceled(monitor, sourceDb, destinationDb))
          return;

        sourceDb.activate(filter, Integer.MAX_VALUE);
        destinationDb.ext().store(filter, Integer.MAX_VALUE);
        monitor.worked(chunk);
      }

      allFilters = null;
    } else
      monitor.worked(available);

    /* User might have cancelled the operation */
    if (isCanceled(monitor, sourceDb, destinationDb))
      return;

    /* Counter */
    List<Counter> counterSet = sourceDb.query(Counter.class);
    Counter counter = counterSet.iterator().next();
    sourceDb.activate(counter, Integer.MAX_VALUE);
    destinationDb.ext().store(counter, Integer.MAX_VALUE);

    monitor.worked(DEFRAG_SUB_WORK_COUNTERS);

    /* User might have cancelled the operation */
    if (isCanceled(monitor, sourceDb, destinationDb))
      return;

    /* Entity Id By Event Type */
    EntityIdsByEventType entityIdsByEventType = sourceDb.query(EntityIdsByEventType.class).iterator().next();
    sourceDb.activate(entityIdsByEventType, Integer.MAX_VALUE);
    destinationDb.ext().store(entityIdsByEventType, Integer.MAX_VALUE);

    monitor.worked(DEFRAG_SUB_WORK_EVENTS);

    /* User might have cancelled the operation */
    if (isCanceled(monitor, sourceDb, destinationDb))
      return;

    /* Conditional Get */
    available = DEFRAG_SUB_WORK_CONDITIONAL_GET;
    ObjectSet<ConditionalGet> allConditionalGets = sourceDb.query(ConditionalGet.class);
    if (!allConditionalGets.isEmpty()) {
      int chunk = available / allConditionalGets.size();
      for (ConditionalGet conditionalGet : allConditionalGets) {
        if (isCanceled(monitor, sourceDb, destinationDb))
          return;

        sourceDb.activate(conditionalGet, Integer.MAX_VALUE);
        destinationDb.ext().store(conditionalGet, Integer.MAX_VALUE);
        monitor.worked(chunk);
      }
      allConditionalGets = null;
    } else
      monitor.worked(available);

    /* User might have cancelled the operation */
    if (isCanceled(monitor, sourceDb, destinationDb))
      return;

    sourceDb.close();
    monitor.worked(DEFRAG_SUB_WORK_CLOSE_SOURCE);

    /* User might have cancelled the operation */
    if (monitor.isCanceled()) {
      destinationDb.close();
      return;
    }

    destinationDb.commit();
    monitor.worked(DEFRAG_SUB_WORK_COMMITT_DESTINATION);

    /* User might have cancelled the operation */
    if (monitor.isCanceled()) {
      destinationDb.close();
      return;
    }

    destinationDb.close();
    monitor.worked(DEFRAG_SUB_WORK_CLOSE_DESTINATION);

    /* User might have cancelled the operation */
    if (monitor.isCanceled())
      return;
View Full Code Here

  public MigrationResult migrate(ConfigurationFactory configFactory, String dbFileName, IProgressMonitor progressMonitor) {
    final int totalProgress = 100;
    int totalProgressIncremented = 0;
    progressMonitor.beginTask(Messages.Migration3To4_MIGRATING_DATA, totalProgress);

    ObjectContainer oc = Db4o.openFile(configFactory.createConfiguration(), dbFileName);

    List<NewsBin> newsBins = oc.query(NewsBin.class);

    for (INewsBin newsBin : newsBins) {
      oc.activate(newsBin, Integer.MAX_VALUE);
      for (NewsReference newsRef : newsBin.getNewsRefs()) {
        Query query = oc.query();
        query.constrain(News.class);
        query.descend("fId").constrain(newsRef.getId()); //$NON-NLS-1$
        News news = (News) query.execute().iterator().next();
        oc.activate(news, Integer.MAX_VALUE);
        String parentIdFieldName = "fParentId"; //$NON-NLS-1$
        MigrationHelper.setField(news, parentIdFieldName, newsBin.getId().longValue());
        oc.ext().store(news, Integer.MAX_VALUE);
      }
    }
    oc.commit();
    oc.close();

    progressMonitor.worked(totalProgress - totalProgressIncremented);

    return new MigrationResult(true, false, true);
  }
View Full Code Here

  }

  public void toXML() {
    EmbeddedConfiguration config = Db4oEmbedded.newConfiguration();
    config.common().activationDepth(Integer.MAX_VALUE);
    ObjectContainer db4o = Db4oEmbedded.openFile(config, databaseFile);
    new XStreamFile(xstreamFile).write(db4o.queryByExample(null));
    db4o.close();
  }
View Full Code Here

    new XStreamFile(xstreamFile).write(db4o.queryByExample(null));
    db4o.close();
  }

  public void fromXML() {
    ObjectContainer db4o = Db4oEmbedded.openFile(databaseFile);
    for (Object obj : new XStreamFile(xstreamFile).read()) {
      db4o.store(obj);
    }
    db4o.commit();
    db4o.close();
  }
View Full Code Here

  }

  private ObjectContainer openCryptDatabase(DatabaseKey databaseKey) throws IOException {

    ObjectContainer database = Db4o.openFile(getNewDatabaseConfiguration(databaseKey), dbFileCrypt.toString());
    return database;
  }
View Full Code Here

TOP

Related Classes of com.db4o.ObjectContainer

Copyright © 2018 www.massapicom. 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.