[exo-jcr-commits] exo-jcr SVN: r2766 - in jcr/trunk: exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl and 1 other directory.
do-not-reply at jboss.org
do-not-reply at jboss.org
Mon Jul 12 05:22:10 EDT 2010
Author: tolusha
Date: 2010-07-12 05:22:10 -0400 (Mon, 12 Jul 2010)
New Revision: 2766
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/BackupWorkspaceInitializer.java
jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/PendingChangesLog.java
Log:
EXOJCR-837: fix ClassCastException
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/BackupWorkspaceInitializer.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/BackupWorkspaceInitializer.java 2010-07-09 15:13:07 UTC (rev 2765)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/BackupWorkspaceInitializer.java 2010-07-12 09:22:10 UTC (rev 2766)
@@ -31,11 +31,12 @@
import org.exoplatform.services.jcr.datamodel.IllegalNameException;
import org.exoplatform.services.jcr.datamodel.ItemData;
import org.exoplatform.services.jcr.datamodel.NodeData;
+import org.exoplatform.services.jcr.datamodel.ValueData;
import org.exoplatform.services.jcr.impl.Constants;
import org.exoplatform.services.jcr.impl.core.nodetype.NodeTypeManagerImpl;
import org.exoplatform.services.jcr.impl.core.value.ValueFactoryImpl;
-import org.exoplatform.services.jcr.impl.dataflow.TransientValueData;
import org.exoplatform.services.jcr.impl.dataflow.persistent.CacheableWorkspaceDataManager;
+import org.exoplatform.services.jcr.impl.dataflow.persistent.StreamPersistedValueData;
import org.exoplatform.services.jcr.impl.storage.JCRInvalidItemStateException;
import org.exoplatform.services.jcr.impl.storage.JCRItemExistsException;
import org.exoplatform.services.jcr.impl.util.io.FileCleaner;
@@ -440,20 +441,75 @@
public void restore() throws IOException
{
- List<ItemState> listItemState = itemDataChangesLog.getAllStates();
- for (int i = 0; i < this.listFixupStream.size(); i++)
+ int index = 0;
+ int restoredItemStateId = index < listFixupStream.size() ? listFixupStream.get(index).getItemSateId() : -1;
+ int restoredValueDataId = index < listFixupStream.size() ? listFixupStream.get(index).getValueDataId() : -1;
+
+ TransactionChangesLog restoredItemDataChangesLog = new TransactionChangesLog();
+
+ ChangesLogIterator logIterator = itemDataChangesLog.getLogIterator();
+ int curItemStateId = 0;
+ while (logIterator.hasNextLog())
{
- ItemState itemState = listItemState.get(listFixupStream.get(i).getItemSateId());
- ItemData itemData = itemState.getData();
+ List<ItemState> restoredItems = new ArrayList<ItemState>();
- PersistedPropertyData propertyData = (PersistedPropertyData)itemData;
- TransientValueData tvd =
- (TransientValueData)(propertyData.getValues().get(listFixupStream.get(i).getValueDataId()));
+ PlainChangesLog log = logIterator.nextLog();
+ for (ItemState item : log.getAllStates())
+ {
+ if (curItemStateId != restoredItemStateId)
+ {
+ restoredItems.add(item);
+ }
+ else
+ {
+ List<ValueData> restoredValues = new ArrayList<ValueData>();
- // re-init the value
- tvd.delegate(new TransientValueData(tvd.getOrderNumber(), null, null, new SpoolFile(PrivilegedFileHelper
- .getAbsolutePath(listFile.get(i))), fileCleaner, -1, null, true));
+ PersistedPropertyData propertyData = (PersistedPropertyData)item.getData();
+ for (int curValueDataId = 0; curValueDataId < propertyData.getValues().size(); curValueDataId++)
+ {
+ ValueData valueData = propertyData.getValues().get(curValueDataId);
+
+ if (curItemStateId == restoredItemStateId && curValueDataId == restoredValueDataId)
+ {
+ // reinit valuedata
+ ValueData restoredValueData =
+ new StreamPersistedValueData(valueData.getOrderNumber(), new SpoolFile(listFile.get(index)
+ .getAbsolutePath()));
+
+ restoredValues.add(restoredValueData);
+
+ index++;
+ restoredItemStateId =
+ index < listFixupStream.size() ? listFixupStream.get(index).getItemSateId() : -1;
+ restoredValueDataId =
+ index < listFixupStream.size() ? listFixupStream.get(index).getValueDataId() : -1;
+ }
+ else
+ {
+ restoredValues.add(valueData);
+ }
+ }
+
+ PersistedPropertyData restoredPropertyData =
+ new PersistedPropertyData(propertyData.getIdentifier(), propertyData.getQPath(), propertyData
+ .getParentIdentifier(), propertyData.getPersistedVersion(), propertyData.getType(),
+ propertyData.isMultiValued(), restoredValues);
+
+ ItemState restoredItem =
+ new ItemState(restoredPropertyData, item.getState(), item.isEventFire(), item.getAncestorToSave(),
+ item.isInternallyCreated(), item.isPersisted());
+
+ restoredItems.add(restoredItem);
+ }
+
+ curItemStateId++;
+ }
+
+ PlainChangesLog restoredLog =
+ new PlainChangesLogImpl(restoredItems, log.getSessionId(), log.getEventType(), log.getPairId());
+ restoredItemDataChangesLog.addLog(restoredLog);
}
+ itemDataChangesLog = restoredItemDataChangesLog;
for (int i = 0; i < listFile.size(); i++)
fileCleaner.addFile(listFile.get(i));
Modified: jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/PendingChangesLog.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/PendingChangesLog.java 2010-07-09 15:13:07 UTC (rev 2765)
+++ jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/PendingChangesLog.java 2010-07-12 09:22:10 UTC (rev 2766)
@@ -18,12 +18,16 @@
*/
package org.exoplatform.services.jcr.ext.backup.impl;
+import org.exoplatform.services.jcr.dataflow.ChangesLogIterator;
import org.exoplatform.services.jcr.dataflow.ItemState;
+import org.exoplatform.services.jcr.dataflow.PlainChangesLog;
+import org.exoplatform.services.jcr.dataflow.PlainChangesLogImpl;
import org.exoplatform.services.jcr.dataflow.TransactionChangesLog;
import org.exoplatform.services.jcr.dataflow.persistent.PersistedPropertyData;
import org.exoplatform.services.jcr.datamodel.ItemData;
+import org.exoplatform.services.jcr.datamodel.ValueData;
import org.exoplatform.services.jcr.ext.replication.FixupStream;
-import org.exoplatform.services.jcr.impl.dataflow.TransientValueData;
+import org.exoplatform.services.jcr.impl.dataflow.persistent.StreamPersistedValueData;
import org.exoplatform.services.jcr.impl.util.io.FileCleaner;
import org.exoplatform.services.jcr.impl.util.io.SpoolFile;
import org.exoplatform.services.jcr.util.IdGenerator;
@@ -482,20 +486,75 @@
{
// TODO same code as in BackupWorkspaceInitializer?
- List<ItemState> listItemState = itemDataChangesLog.getAllStates();
- for (int i = 0; i < this.listFixupStream.size(); i++)
+ int index = 0;
+ int restoredItemStateId = index < listFixupStream.size() ? listFixupStream.get(index).getItemSateId() : -1;
+ int restoredValueDataId = index < listFixupStream.size() ? listFixupStream.get(index).getValueDataId() : -1;
+
+ TransactionChangesLog restoredItemDataChangesLog = new TransactionChangesLog();
+
+ ChangesLogIterator logIterator = itemDataChangesLog.getLogIterator();
+ int curItemStateId = 0;
+ while (logIterator.hasNextLog())
{
- ItemState itemState = listItemState.get(listFixupStream.get(i).getItemSateId());
- ItemData itemData = itemState.getData();
+ List<ItemState> restoredItems = new ArrayList<ItemState>();
- PersistedPropertyData propertyData = (PersistedPropertyData)itemData;
- TransientValueData tvd =
- (TransientValueData)(propertyData.getValues().get(listFixupStream.get(i).getValueDataId()));
+ PlainChangesLog log = logIterator.nextLog();
+ for (ItemState item : log.getAllStates())
+ {
+ if (curItemStateId != restoredItemStateId)
+ {
+ restoredItems.add(item);
+ }
+ else
+ {
+ List<ValueData> restoredValues = new ArrayList<ValueData>();
- // re-init the value
- tvd.delegate(new TransientValueData(tvd.getOrderNumber(), null, null, new SpoolFile(listFile.get(i)
- .getAbsolutePath()), fileCleaner, -1, null, true));
+ PersistedPropertyData propertyData = (PersistedPropertyData)item.getData();
+ for (int curValueDataId = 0; curValueDataId < propertyData.getValues().size(); curValueDataId++)
+ {
+ ValueData valueData = propertyData.getValues().get(curValueDataId);
+
+ if (curItemStateId == restoredItemStateId && curValueDataId == restoredValueDataId)
+ {
+ // reinit valuedata
+ ValueData restoredValueData =
+ new StreamPersistedValueData(valueData.getOrderNumber(), new SpoolFile(listFile.get(index)
+ .getAbsolutePath()));
+
+ restoredValues.add(restoredValueData);
+
+ index++;
+ restoredItemStateId =
+ index < listFixupStream.size() ? listFixupStream.get(index).getItemSateId() : -1;
+ restoredValueDataId =
+ index < listFixupStream.size() ? listFixupStream.get(index).getValueDataId() : -1;
+ }
+ else
+ {
+ restoredValues.add(valueData);
+ }
+ }
+
+ PersistedPropertyData restoredPropertyData =
+ new PersistedPropertyData(propertyData.getIdentifier(), propertyData.getQPath(), propertyData
+ .getParentIdentifier(), propertyData.getPersistedVersion(), propertyData.getType(), propertyData
+ .isMultiValued(), restoredValues);
+
+ ItemState restoredItem =
+ new ItemState(restoredPropertyData, item.getState(), item.isEventFire(), item.getAncestorToSave(),
+ item.isInternallyCreated(), item.isPersisted());
+
+ restoredItems.add(restoredItem);
+ }
+
+ curItemStateId++;
+ }
+
+ PlainChangesLog restoredLog =
+ new PlainChangesLogImpl(restoredItems, log.getSessionId(), log.getEventType(), log.getPairId());
+ restoredItemDataChangesLog.addLog(restoredLog);
}
+ itemDataChangesLog = restoredItemDataChangesLog;
if (listRandomAccessFile != null)
for (int i = 0; i < listRandomAccessFile.size(); i++)
@@ -503,7 +562,6 @@
for (int i = 0; i < listFile.size(); i++)
fileCleaner.addFile(listFile.get(i));
-
}
}
\ No newline at end of file
More information about the exo-jcr-commits
mailing list