|
What this is
Other links
The source code
/*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License
* Version 1.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://www.sun.com/
*
* The Original Code is NetBeans. The Initial Developer of the Original
* Code is Sun Microsystems, Inc. Portions Copyright 1997-2000 Sun
* Microsystems, Inc. All Rights Reserved.
*/
package org.netbeans.lib.cvsclient.command.status;
import java.io.*;
import org.netbeans.lib.cvsclient.command.*;
import org.netbeans.lib.cvsclient.event.*;
import org.netbeans.lib.cvsclient.file.*;
/**
* Handles the building of a status information object and the firing of
* events when complete objects are built.
*
* @author Milos Kleint
* @author Thomas Singer
*/
public class StatusBuilder implements Builder {
private static final String UNKNOWN = ": nothing known about"; //NOI18N
private static final String EXAM_DIR = ": Examining"; //NOI18N
private static final String NOT_IN_REPOSITORY = "No revision control file"; //NOI18N
private static final String FILE = "File: "; //NOI18N
private static final String STATUS = "Status:"; //NOI18N
private static final String NO_FILE_FILENAME = "no file"; //NOI18N
private static final String WORK_REV = " Working revision:"; //NOI18N
private static final String REP_REV = " Repository revision:"; //NOI18N
private static final String TAG = " Sticky Tag:"; //NOI18N
private static final String DATE = " Sticky Date:"; //NOI18N
private static final String OPTIONS = " Sticky Options:"; //NOI18N
private static final String EXISTING_TAGS = " Existing Tags:"; //NOI18N
private static final String EMPTY_BEFORE_TAGS = " "; //NOI18N
private static final String NO_TAGS = " No Tags Exist"; //NOI18N
private static final String UNKNOWN_FILE = "? "; //NOI18N
/**
* The status object that is currently being built.
*/
private StatusInformation statusInformation;
/**
* The event manager to use.
*/
private EventManager eventManager;
private final StatusCommand statusCommand;
private String relativeDirectory;
private final String localPath;
private boolean beginning;
private boolean readingTags;
private final File[] fileArray;
/**
* Creates a StatusBuilder.
*/
public StatusBuilder(EventManager eventManager,
StatusCommand statusCommand) {
this.eventManager = eventManager;
this.statusCommand = statusCommand;
File[] fileArray = statusCommand.getFiles();
if (fileArray != null) {
this.fileArray = new File[fileArray.length];
System.arraycopy(fileArray, 0, this.fileArray, 0, fileArray.length);
}
else {
this.fileArray = null;
}
this.localPath = statusCommand.getLocalDirectory();
this.beginning = true;
}
public void outputDone() {
if (statusInformation != null) {
eventManager.fireCVSEvent(new FileInfoEvent(this, statusInformation));
statusInformation = null;
readingTags = false;
}
}
public void parseLine(String line, boolean isErrorMessage) {
if (readingTags) {
if (line.startsWith(NO_TAGS)) {
outputDone();
return;
}
int bracket = line.indexOf("\t(");
if (bracket > 0) {
// it's another tag..
String tag = line.substring(0, bracket).trim();
String rev = line.substring(bracket + 2, line.length() - 1);
if (statusInformation == null) {
statusInformation = new StatusInformation();
}
statusInformation.addExistingTag(tag, rev);
}
else {
outputDone();
return;
}
}
if (line.startsWith(UNKNOWN_FILE) && beginning) {
File file = new File(localPath, line.substring(UNKNOWN_FILE.length()));
statusInformation = new StatusInformation();
statusInformation.setFile(file);
statusInformation.setStatusString(FileStatus.UNKNOWN.toString());
outputDone();
}
if (line.startsWith(UNKNOWN)) {
outputDone();
beginning = false;
}
else if (line.indexOf(EXAM_DIR) >= 0) {
relativeDirectory = line.substring(line.indexOf(EXAM_DIR) + EXAM_DIR.length()).trim();
beginning = false;
}
else if (line.startsWith(FILE)) {
outputDone();
statusInformation = new StatusInformation();
processFileAndStatusLine(line.substring(FILE.length()));
beginning = false;
}
else if (line.startsWith(WORK_REV)) {
processWorkRev(line.substring(WORK_REV.length()));
}
else if (line.startsWith(REP_REV)) {
processRepRev(line.substring(REP_REV.length()));
/* if (statusInformation.getRepositoryRevision().startsWith(NOT_IN_REPOSITORY))
{
outputDone();
}
*/
}
else if (line.startsWith(TAG)) {
processTag(line.substring(TAG.length()));
}
else if (line.startsWith(DATE)) {
processDate(line.substring(DATE.length()));
}
else if (line.startsWith(OPTIONS)) {
processOptions(line.substring(OPTIONS.length()));
if (!statusCommand.isIncludeTags()) {
outputDone();
}
}
else if (line.startsWith(EXISTING_TAGS)) {
readingTags = true;
}
}
private File createFile(String fileName) {
File file = null;
if (relativeDirectory != null) {
if (relativeDirectory.trim().equals(".")) { //NOI18N
file = new File(localPath, fileName);
}
else {
file = new File(localPath, relativeDirectory + '/' + fileName);
}
}
else if (fileArray != null) {
for (int i = 0; i < fileArray.length; i++) {
File currentFile = fileArray[i];
if (currentFile == null || currentFile.isDirectory()) {
continue;
}
String currentFileName = currentFile.getName();
if (fileName.equals(currentFileName)) {
fileArray[i] = null;
file = currentFile;
break;
}
}
}
if (file == null) {
System.err.println("JAVACVS ERROR!! wrong algorithm for assigning path to single files(1)!!");
}
return file;
}
private void processFileAndStatusLine(String line) {
int statusIndex = line.lastIndexOf(STATUS);
String fileName = line.substring(0, statusIndex).trim();
if (fileName.startsWith(NO_FILE_FILENAME)) {
fileName = fileName.substring(8);
}
statusInformation.setFile(createFile(fileName));
String status = new String(line.substring(statusIndex + 8).trim());
statusInformation.setStatusString(status);
}
private boolean assertNotNull() {
if (statusInformation == null) {
System.err.println("Bug: statusInformation must not be null!");
return false;
}
return true;
}
private void processWorkRev(String line) {
if (!assertNotNull()) {
return;
}
statusInformation.setWorkingRevision(line.trim().intern());
}
private void processRepRev(String line) {
if (!assertNotNull()) {
return;
}
line = line.trim();
if (line.startsWith(NOT_IN_REPOSITORY)) {
statusInformation.setRepositoryRevision(line.trim().intern());
return;
}
int firstSpace = line.indexOf('\t');
if (firstSpace > 0) {
statusInformation.setRepositoryRevision(
line.substring(0, firstSpace).trim().intern());
statusInformation.setRepositoryFileName(
new String(line.substring(firstSpace).trim()));
}
else {
statusInformation.setRepositoryRevision(""); //NOI18N
statusInformation.setRepositoryFileName(""); //NOI18N
}
}
private void processTag(String line) {
if (!assertNotNull()) {
return;
}
statusInformation.setStickyTag(line.trim().intern());
}
private void processDate(String line) {
if (!assertNotNull()) {
return;
}
statusInformation.setStickyDate(line.trim().intern());
}
private void processOptions(String line) {
if (!assertNotNull()) {
return;
}
statusInformation.setStickyOptions(line.trim().intern());
}
public void parseEnhancedMessage(String key, Object value) {
}
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.