blob: 9e7313eb6ce2ed990b3c63d5df035b8c8932de78 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2006 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.team.internal.ccvs.core.client;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.team.internal.ccvs.core.CVSException;
public class MTHandler extends ResponseHandler {
private String nextLine;
private boolean isLineAvailable;
@Override
ResponseHandler getInstance() {
return new MTHandler();
}
@Override
public String getResponseID() {
return "MT"; //$NON-NLS-1$
}
@Override
public void handle(Session session, String argument, IProgressMonitor monitor)
throws CVSException {
// If there was a line available from before, clear it
if (isLineAvailable()) {
startNextLine();
}
if (argument.charAt(0) == '+') {
// Reset any previously accumulated text
startNextLine();
} else if (argument.charAt(0) == '-') {
// Mark the line as available in case there was no trailing newline
if (nextLine != null) {
isLineAvailable = true;
}
} else {
// Extract the tag and text from the line
String tag;
String text;
int spaceIndex = argument.indexOf(' ');
if (spaceIndex == -1) {
tag = argument;
text = null;
} else {
tag = argument.substring(0, spaceIndex);
text = argument.substring(spaceIndex + 1);
}
// Accumulate the line and indicate if its available for use
if (tag.equals("newline")) { //$NON-NLS-1$
isLineAvailable = true;
} else if (text != null) {
// Reset the previous line if required
if (isLineAvailable()) {
startNextLine();
}
// Accumulate the line
if (nextLine == null) {
nextLine = text;
} else {
// The text from the sevrver contains spaces when appropriate so just append
nextLine = nextLine + text;
}
}
}
}
/**
* Check if there is a line available. If there is, it should be fetched with
* getLine() immediatly before the next MT response is processed.
*/
public boolean isLineAvailable() {
return isLineAvailable;
}
/**
* Get the available line. This purges the line from the handler
*/
public String getLine() {
return nextLine;
}
private void startNextLine() {
isLineAvailable = false;
nextLine = null;
}
}