/* * 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.annotate; import com.intellij.util.text.SyncDateFormat; import org.jetbrains.annotations.NonNls; import org.netbeans.lib.cvsclient.command.AbstractMessageParser; import org.netbeans.lib.cvsclient.event.IEventSender; import org.netbeans.lib.cvsclient.file.ICvsFileSystem; import org.netbeans.lib.cvsclient.util.BugLog; import java.io.File; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; /** * Handles the building of a annotate information object and the firing of * events when complete objects are built. * * @author Milos Kleint */ final class AnnotateMessageParser extends AbstractMessageParser { // Constants ============================================================== @NonNls private static final String ANNOTATING = "Annotations for "; private static final String SEPARATOR1 = " ("; private static final String SEPARATOR2 = "): "; @NonNls private static final String ANNOTATIONS_DATE_FORMAT_STR = "dd-MMM-yy"; private static final SyncDateFormat DATE_FORMAT = new SyncDateFormat(new SimpleDateFormat(ANNOTATIONS_DATE_FORMAT_STR, Locale.US)); // Fields ================================================================= private final IEventSender eventManager; private final ICvsFileSystem cvsFileSystem; private AnnotateInformation annotateInformation; // Setup ================================================================== public AnnotateMessageParser(IEventSender eventManager, ICvsFileSystem cvsFileSystem) { this.eventManager = eventManager; this.cvsFileSystem = cvsFileSystem; } // Implemented ============================================================ protected void outputDone() { if (annotateInformation == null) { return; } eventManager.notifyFileInfoListeners(annotateInformation); annotateInformation = null; } public void parseLine(String line, boolean isErrorMessage) { if (isErrorMessage) { if (line.startsWith(ANNOTATING)) { outputDone(); final String relativeFileName = line.substring(ANNOTATING.length()); final File file = cvsFileSystem.getLocalFileSystem().getFile(relativeFileName); annotateInformation = new AnnotateInformation(file); } } else { processLine(line); } } // Utils ================================================================== private void processLine(String line) { if (annotateInformation == null) { return; } final int indexOpeningBracket = line.indexOf(SEPARATOR1); if (indexOpeningBracket < 0) { return; } final int indexClosingBracket = line.indexOf(SEPARATOR2, indexOpeningBracket + 1); if (indexClosingBracket < 0) { return; } final String revision = line.substring(0, indexOpeningBracket).trim(); final String authorAndDate = line.substring(indexOpeningBracket + SEPARATOR1.length(), indexClosingBracket); final String contents = line.substring(indexClosingBracket + SEPARATOR2.length()); final int lastSpace = authorAndDate.lastIndexOf(' '); if (lastSpace < 0) { return; } final String author = authorAndDate.substring(0, lastSpace).trim(); final String dateString = authorAndDate.substring(lastSpace + 1); final Date date; try { date = DATE_FORMAT.parse(dateString); } catch (ParseException ex) { BugLog.getInstance().showException(ex); return; } annotateInformation.addLine(new AnnotateLine(revision, author, date, contents)); } public void binaryMessageSent(final byte[] bytes) { } }