/*
* ====================================================================
* Copyright (c) 2004-2012 TMate Software Ltd. All rights reserved.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at http://svnkit.com/license.html
* If newer versions of this license are posted there, you may use a
* newer version instead, at your option.
* ====================================================================
*/
package org.tmatesoft.svn.core.internal.wc;
import java.io.OutputStream;
import org.tmatesoft.svn.core.ISVNLogEntryHandler;
import org.tmatesoft.svn.core.SVNCommitInfo;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.SVNLogEntry;
import org.tmatesoft.svn.core.SVNProperties;
import org.tmatesoft.svn.core.SVNProperty;
import org.tmatesoft.svn.core.SVNPropertyValue;
import org.tmatesoft.svn.core.io.ISVNEditor;
import org.tmatesoft.svn.core.io.SVNRepository;
import org.tmatesoft.svn.core.io.diff.SVNDiffWindow;
import org.tmatesoft.svn.core.wc.admin.SVNAdminClient;
/**
* @version 1.3
* @author TMate Software Ltd.
*/
public class SVNSynchronizeEditor implements ISVNEditor {
private ISVNEditor myWrappedEditor;
private boolean myIsRootOpened;
private long myBaseRevision;
private SVNCommitInfo myCommitInfo;
private ISVNLogEntryHandler myHandler;
private SVNRepository myTargetRepository;
private int myNormalizedNodePropsCounter;
private SVNProperties myRevisionProperties;
public SVNSynchronizeEditor(SVNRepository toRepository, ISVNLogEntryHandler handler, long baseRevision, SVNProperties revProps) {
myTargetRepository = toRepository;
myIsRootOpened = false;
myBaseRevision = baseRevision;
myHandler = handler;
myNormalizedNodePropsCounter = 0;
myRevisionProperties = revProps;
}
public void reset(long baseRevision, SVNProperties revProps) {
myWrappedEditor = null;
myCommitInfo = null;
myIsRootOpened = false;
myBaseRevision = baseRevision;
myNormalizedNodePropsCounter = 0;
myRevisionProperties = revProps;
}
public void abortEdit() throws SVNException {
getWrappedEditor().abortEdit();
}
private ISVNEditor getWrappedEditor() throws SVNException {
if (myWrappedEditor == null) {
myWrappedEditor = myTargetRepository.getCommitEditor(null, null, false, myRevisionProperties, null);
}
return myWrappedEditor;
}
public void absentDir(String path) throws SVNException {
getWrappedEditor().absentDir(path);
}
public void absentFile(String path) throws SVNException {
getWrappedEditor().absentFile(path);
}
public void addDir(String path, String copyFromPath, long copyFromRevision) throws SVNException {
getWrappedEditor().addDir(path, copyFromPath, copyFromRevision);
}
public void addFile(String path, String copyFromPath, long copyFromRevision) throws SVNException {
getWrappedEditor().addFile(path, copyFromPath, copyFromRevision);
}
public void changeDirProperty(String name, SVNPropertyValue value) throws SVNException {
if (SVNProperty.isRegularProperty(name)) {
if (SVNPropertiesManager.propNeedsTranslation(name)) {
String normalizedValue = SVNAdminClient.normalizeString(SVNPropertyValue.getPropertyAsString(value));
if (normalizedValue != null) {
value = SVNPropertyValue.create(normalizedValue);
myNormalizedNodePropsCounter++;
}
}
getWrappedEditor().changeDirProperty(name, value);
}
}
public void changeFileProperty(String path, String name, SVNPropertyValue value) throws SVNException {
if (SVNProperty.isRegularProperty(name)) {
if (SVNPropertiesManager.propNeedsTranslation(name)) {
String normalizedVal = SVNAdminClient.normalizeString(SVNPropertyValue.getPropertyAsString(value));
if (normalizedVal != null) {
value = SVNPropertyValue.create(normalizedVal);
myNormalizedNodePropsCounter++;
}
}
getWrappedEditor().changeFileProperty(path, name, value);
}
}
public void closeDir() throws SVNException {
getWrappedEditor().closeDir();
}
public SVNCommitInfo closeEdit() throws SVNException {
ISVNEditor wrappedEditor = getWrappedEditor();
if (!myIsRootOpened) {
wrappedEditor.openRoot(myBaseRevision);
}
myCommitInfo = wrappedEditor.closeEdit();
if (myHandler != null) {
SVNLogEntry logEntry = new SVNLogEntry(null, myCommitInfo.getNewRevision(),
myCommitInfo.getAuthor(), myCommitInfo.getDate(), null);
myHandler.handleLogEntry(logEntry);
}
return myCommitInfo;
}
public void closeFile(String path, String textChecksum) throws SVNException {
getWrappedEditor().closeFile(path, textChecksum);
}
public void deleteEntry(String path, long revision) throws SVNException {
getWrappedEditor().deleteEntry(path, revision);
}
public void openDir(String path, long revision) throws SVNException {
getWrappedEditor().openDir(path, revision);
}
public void openFile(String path, long revision) throws SVNException {
getWrappedEditor().openFile(path, revision);
}
public void openRoot(long revision) throws SVNException {
getWrappedEditor().openRoot(revision);
myIsRootOpened = true;
}
public void targetRevision(long revision) throws SVNException {
getWrappedEditor().targetRevision(revision);
}
public void applyTextDelta(String path, String baseChecksum) throws SVNException {
getWrappedEditor().applyTextDelta(path, baseChecksum);
}
public OutputStream textDeltaChunk(String path, SVNDiffWindow diffWindow) throws SVNException {
return getWrappedEditor().textDeltaChunk(path, diffWindow);
}
public void textDeltaEnd(String path) throws SVNException {
getWrappedEditor().textDeltaEnd(path);
}
public SVNCommitInfo getCommitInfo() {
return myCommitInfo;
}
public int getNormalizedNodePropsCounter() {
return myNormalizedNodePropsCounter;
}
}