Bug 501841 - Add more logging to controllers
* Fix compile issues
Change-Id: Id3bd5957c7e5ea2d837ba639cffb2588aa1f2a79
Signed-off-by: Johannes Faltermeier <jfaltermeier@eclipsesource.com>
diff --git a/bundles/org.eclipse.emf.emfstore.server.model/src/org/eclipse/emf/emfstore/internal/server/model/versioning/operations/util/ChangePackageUtil.java b/bundles/org.eclipse.emf.emfstore.server.model/src/org/eclipse/emf/emfstore/internal/server/model/versioning/operations/util/ChangePackageUtil.java
index 5dbde8c..03df1ce 100644
--- a/bundles/org.eclipse.emf.emfstore.server.model/src/org/eclipse/emf/emfstore/internal/server/model/versioning/operations/util/ChangePackageUtil.java
+++ b/bundles/org.eclipse.emf.emfstore.server.model/src/org/eclipse/emf/emfstore/internal/server/model/versioning/operations/util/ChangePackageUtil.java
@@ -11,21 +11,13 @@
******************************************************************************/
package org.eclipse.emf.emfstore.internal.server.model.versioning.operations.util;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.LineNumberReader;
import java.text.MessageFormat;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.NoSuchElementException;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.io.LineIterator;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.emfstore.internal.common.model.util.FileUtil;
import org.eclipse.emf.emfstore.internal.common.model.util.ModelUtil;
@@ -80,9 +72,11 @@
* the max number of operations a single fragment may consists of
* @return an iterator for the created fragments
*/
- public static Iterator<ChangePackageEnvelope> splitChangePackage(final FileBasedChangePackage changePackage,
+ public static Iterator<ChangePackageEnvelope> splitChangePackage(final AbstractChangePackage changePackage,
final int changePackageFragmentSize) {
+
return new ChangePackageSplittingIterator(changePackageFragmentSize, changePackage);
+
}
/**
@@ -173,102 +167,82 @@
*/
private static final class ChangePackageSplittingIterator implements Iterator<ChangePackageEnvelope> {
private final int changePackageFragmentSize;
- private final FileBasedChangePackage changePackage;
+ private final AbstractChangePackage changePackage;
private int fragmentIndex;
private int count;
private ChangePackageEnvelope envelope;
- private boolean isInitialized;
+ private Iterator<AbstractOperation> operationsIterator;
+ private ESCloseableIterable<AbstractOperation> operationsIterable;
- ChangePackageSplittingIterator(int changePackageFragmentSize, FileBasedChangePackage changePackage) {
+ ChangePackageSplittingIterator(int changePackageFragmentSize, AbstractChangePackage changePackage) {
this.changePackageFragmentSize = changePackageFragmentSize;
this.changePackage = changePackage;
- ModelUtil.logProjectDetails(
- MessageFormat.format("Splitting change package {0}", changePackage.getFilePath()), null, null, null, //$NON-NLS-1$
- null, -1);
+ if (FileBasedChangePackage.class.isInstance(changePackage)) {
+ ModelUtil.logProjectDetails(MessageFormat.format("Splitting change package {0}", //$NON-NLS-1$
+ FileBasedChangePackage.class.cast(changePackage).getFilePath()), null, null, null, null, -1);
+ }
+ }
+
+ private void init() {
+ int leafSizeCounter = 0;
+ // it is not necessary to close the operations iterable, because the iterator already does this
+ // in hasNext() if there are no more operations
+ final ESCloseableIterable<AbstractOperation> operations = changePackage.operations();
+ for (final AbstractOperation operation : operations.iterable()) {
+ final int countLeafOperations = countLeafOperations(operation);
+ leafSizeCounter += countLeafOperations;
+ if (leafSizeCounter < changePackageFragmentSize) {
+ continue;
+ }
+ leafSizeCounter = 0;
+ count += 1;
+ }
+ if (leafSizeCounter != 0 || count == 0) {
+ count += 1;
+ }
+ operationsIterable = changePackage.operations();
+ operationsIterator = operationsIterable.iterable().iterator();
}
public boolean hasNext() {
- if (!isInitialized) {
+ if (operationsIterable == null) {
init();
}
if (envelope == null) {
envelope = VersioningFactory.eINSTANCE.createChangePackageEnvelope();
+ final ChangePackage cp = VersioningFactory.eINSTANCE.createChangePackage();
+ cp.setLogMessage(ModelUtil.clone(changePackage.getLogMessage()));
envelope.setFragmentCount(count);
}
- final List<String> readLines = readLines(fragmentIndex * changePackageFragmentSize, changePackage,
- changePackageFragmentSize);
- envelope.getFragment().addAll(readLines);
+ while (countLeafOperations(envelope.getFragment()) < changePackageFragmentSize
+ && operationsIterator.hasNext()) {
+
+ final AbstractOperation op = operationsIterator.next();
+ envelope.getFragment().add(ModelUtil.clone(op));
+ }
envelope.setFragmentIndex(fragmentIndex);
if (!envelope.getFragment().isEmpty() || fragmentIndex == 0) {
- ModelUtil.logProjectDetails(MessageFormat.format("Fragment {1} for Change package {0} prepared", //$NON-NLS-1$
- changePackage.getFilePath(), fragmentIndex), null, null, null, null, -1);
+ if (FileBasedChangePackage.class.isInstance(changePackage)) {
+ ModelUtil.logProjectDetails(
+ MessageFormat.format("Fragment {1} for Change package {0} prepared", //$NON-NLS-1$
+ FileBasedChangePackage.class.cast(changePackage).getFilePath(), fragmentIndex),
+ null, null, null, null, -1);
+ }
return true;
}
- ModelUtil.logProjectDetails(
- MessageFormat.format("No more change package fragments for {0}", changePackage.getFilePath()), null, //$NON-NLS-1$
- null, null, null, -1);
+ if (FileBasedChangePackage.class.isInstance(changePackage)) {
+ ModelUtil.logProjectDetails(MessageFormat.format("No more change package fragments for {0}", //$NON-NLS-1$
+ FileBasedChangePackage.class.cast(changePackage).getFilePath()), null, null, null, null, -1);
+ }
return false;
}
- private void init() {
- LineNumberReader lineNumberReader = null;
- try {
- lineNumberReader = new LineNumberReader(new FileReader(new File(changePackage.getTempFilePath())));
- lineNumberReader.skip(Long.MAX_VALUE);
- final int lines = lineNumberReader.getLineNumber() + 1;
- count = lines / changePackageFragmentSize;
- if (lines % changePackageFragmentSize != 0) {
- count += 1;
- }
- } catch (final FileNotFoundException ex) {
- throw new IllegalStateException(ex);
- } catch (final IOException ex) {
- throw new IllegalStateException(ex);
- } finally {
- IOUtils.closeQuietly(lineNumberReader);
- }
- isInitialized = true;
- }
-
- private List<String> readLines(int from, final FileBasedChangePackage changePackage,
- final int changePackageFragmentSize) {
-
- int readLines = 0;
- FileReader reader;
- final List<String> lines = new ArrayList<String>();
-
- try {
- reader = new FileReader(new File(changePackage.getTempFilePath()));
- final LineIterator lineIterator = new LineIterator(reader);
- int read = 0;
-
- while (read < from) {
- if (!lineIterator.hasNext()) {
- return lines;
- }
- lineIterator.next();
- read += 1;
- }
-
- while (readLines < changePackageFragmentSize && lineIterator.hasNext()) {
- final String nextLine = lineIterator.next();
- readLines += 1;
- lines.add(nextLine);
- }
-
- } catch (final FileNotFoundException ex) {
- throw new IllegalStateException(ex);
- }
-
- return lines;
- }
-
public ChangePackageEnvelope next() {
if (envelope == null) {
final boolean hasNext = hasNext();