|
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.add; import java.io.*; import org.netbeans.lib.cvsclient.command.*; import org.netbeans.lib.cvsclient.event.*; /** * Handles the building of add information object and the firing of * events when complete objects are built. * * @author Milos Kleint */ public class AddBuilder implements Builder { private static final String UNKNOWN = ": nothing known about"; //NOI18N private static final String ADDED = " added to the repository"; //NOI18N private static final String WARNING = ": warning: "; //NOI18N private static final String ALREADY_ENTERED = " has already been entered"; //NOI18N private static final String SCHEDULING = ": scheduling file `"; //NOI18N private static final String USE_COMMIT = ": use 'cvs commit' "; //NOI18N private static final String DIRECTORY = "Directory "; //NOI18N private static final String READDING = ": re-adding file "; //NOI18N private static final String RESURRECTED = ", resurrected"; //NOI18N private static final String RESUR_VERSION = ", version "; //NOI18N private static final boolean DEBUG = false; /** * The status object that is currently being built. */ private AddInformation addInformation; /** * The event manager to use. */ private EventManager eventManager; /** * The directory in which the file being processed lives. * This is relative to the local directory */ private String fileDirectory; private AddCommand addCommand; private boolean readingTags; public AddBuilder(EventManager eventManager, AddCommand addCommand) { this.eventManager = eventManager; this.addCommand = addCommand; } public void outputDone() { if (addInformation != null) { FileInfoEvent event = new FileInfoEvent(this, addInformation); eventManager.fireCVSEvent(event); addInformation = null; } } public void parseLine(String line, boolean isErrorMessage) { if (line.endsWith(ADDED)) { String directory = line.substring(DIRECTORY.length(), line.indexOf(ADDED)); addDirectory(directory); } else if (line.indexOf(SCHEDULING) >= 0) { String filename = line.substring(line.indexOf(SCHEDULING) + SCHEDULING.length(), line.indexOf('\'')).trim(); addFile(filename); } else if (line.indexOf(READDING) >= 0) { String filename = line.substring(line.indexOf(READDING) + READDING.length(), line.indexOf('(')).trim(); addFile(filename); } else if (line.endsWith(RESURRECTED)) { String filename = line.substring(0, line.length() - RESURRECTED.length()); resurrectFile(filename); } // ignore the rest.. } private File createFile(String fileName) { File locFile = addCommand.getFileEndingWith(fileName); if (locFile == null) { // in case the exact match was not achieved using the getFileEndingWith method // let's try to find the best match possible. // iterate from the back of the filename string and try to match the endings // of getFiles(). the best match is picked then. // Works ok for files and directories in add, should not probably be used // elsewhere where it's possible to have recursive commands and where resulting files // are not listed in getFiles() String name = fileName.replace('\\', '/'); File[] files = addCommand.getFiles(); int maxLevel = name.length(); File bestMatch = null; String[] paths = new String[files.length]; for (int index = 0; index < files.length; index++) { paths[index] = files[index].getAbsolutePath().replace('\\', '/'); } int start = name.lastIndexOf('/'); String part = null; if (start < 0) { part = name; } else { part = name.substring(start + 1); } while (start >= 0 || part != null) { boolean wasMatch = false; for (int index = 0; index < paths.length; index++) { if (paths[index].endsWith(part)) { bestMatch = files[index]; wasMatch = true; } } start = name.lastIndexOf('/', start - 1); if (start < 0 || !wasMatch) { break; } part = name.substring(start + 1); } return bestMatch; } return locFile; } private void addDirectory(String name) { addInformation = new AddInformation(); addInformation.setType(AddInformation.FILE_ADDED); String dirName = name.replace('\\', '/'); /* int index = dirName.lastIndexOf('/'); if (index > 0) { dirName = dirName.substring(index + 1, dirName.length()); } */ addInformation.setFile(createFile(dirName)); outputDone(); } private void addFile(String name) { addInformation = new AddInformation(); addInformation.setFile(createFile(name)); addInformation.setType(AddInformation.FILE_ADDED); outputDone(); } private void resurrectFile(String line) { int versionIndex = line.lastIndexOf(RESUR_VERSION); String version = line.substring(versionIndex + RESUR_VERSION.length()).trim(); String cutLine = line.substring(0, versionIndex).trim(); int fileIndex = cutLine.lastIndexOf(' '); String name = cutLine.substring(fileIndex).trim(); if (DEBUG) { System.out.println("line1=" + line); //NOI18N System.out.println("versionIndex=" + versionIndex); //NOI18N System.out.println("version=" + version); //NOI18N System.out.println("fileindex=" + fileIndex); //NOI18N System.out.println("filename=" + name); //NOI18N } addInformation = new AddInformation(); addInformation.setType(AddInformation.FILE_RESURRECTED); addInformation.setFile(createFile(name)); outputDone(); } 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.