1 11 package org.eclipse.team.internal.ccvs.core.client.listeners; 12 13 import java.util.Map ; 14 15 import org.eclipse.core.runtime.IProgressMonitor; 16 import org.eclipse.core.runtime.IStatus; 17 import org.eclipse.team.internal.ccvs.core.CVSException; 18 import org.eclipse.team.internal.ccvs.core.CVSProviderPlugin; 19 import org.eclipse.team.internal.ccvs.core.ICVSFolder; 20 import org.eclipse.team.internal.ccvs.core.ICVSRepositoryLocation; 21 import org.eclipse.team.internal.ccvs.core.client.CommandOutputListener; 22 23 26 public class RDiffSummaryListener extends CommandOutputListener { 27 28 private static final String RIGHT_REVISION_VARIABLE_NAME = "rightRevision"; private static final String LEFT_REVISION_VARIABLE_NAME = "leftRevision"; private static final String REMOTE_FILE_PATH_VARIABLE_NAME = "remoteFilePath"; private static final String REMOTE_FOLDER_PATH_VARIABLE_NAME = "remoteFolderPath"; 33 private IFileDiffListener listener; 34 private static ServerMessageLineMatcher DIRECTORY_MATCHER; 35 private static ServerMessageLineMatcher FILE_DIFF_MATCHER; 36 private static ServerMessageLineMatcher NEW_FILE_MATCHER; 37 private static ServerMessageLineMatcher DELETED_FILE_MATCHER; 38 private static ServerMessageLineMatcher DELETED_FILE_MATCHER2; 39 40 static { 41 initializePatterns(); 43 } 44 public static void initializePatterns() { 45 try { 46 DIRECTORY_MATCHER = new ServerMessageLineMatcher( 47 IMessagePatterns.RDIFF_DIRECTORY, new String [] {REMOTE_FOLDER_PATH_VARIABLE_NAME}); 48 FILE_DIFF_MATCHER = new ServerMessageLineMatcher( 49 IMessagePatterns.RDIFF_SUMMARY_FILE_DIFF, new String [] {REMOTE_FILE_PATH_VARIABLE_NAME, LEFT_REVISION_VARIABLE_NAME, RIGHT_REVISION_VARIABLE_NAME}); 50 NEW_FILE_MATCHER = new ServerMessageLineMatcher( 51 IMessagePatterns.RDIFF_SUMMARY_NEW_FILE, new String [] {REMOTE_FILE_PATH_VARIABLE_NAME, RIGHT_REVISION_VARIABLE_NAME}); 52 DELETED_FILE_MATCHER = new ServerMessageLineMatcher( 53 IMessagePatterns.RDIFF_SUMMARY_DELETED_FILE, new String [] {REMOTE_FILE_PATH_VARIABLE_NAME}); 54 DELETED_FILE_MATCHER2 = new ServerMessageLineMatcher( 55 IMessagePatterns.RDIFF_SUMMARY_DELETED_FILE2, new String [] {REMOTE_FILE_PATH_VARIABLE_NAME, LEFT_REVISION_VARIABLE_NAME}); 56 } catch (CVSException e) { 57 CVSProviderPlugin.log(e); 59 } 60 } 61 62 public interface IFileDiffListener { 63 public void fileDiff( 64 String remoteFilePath, 65 String leftRevision, 66 String rightRevision); 67 public void newFile( 68 String remoteFilePath, 69 String rightRevision); 70 public void deletedFile( 71 String remoteFilePath, 72 String leftRevision); 73 public void directory(String remoteFolderPath); 74 } 75 76 public RDiffSummaryListener(IFileDiffListener listener) { 77 this.listener = listener; 78 } 79 80 83 public IStatus messageLine( 84 String line, 85 ICVSRepositoryLocation location, 86 ICVSFolder commandRoot, 87 IProgressMonitor monitor) { 88 89 Map variables = FILE_DIFF_MATCHER.processServerMessage(line); 90 if (variables != null) { 91 listener.fileDiff( 92 (String )variables.get(REMOTE_FILE_PATH_VARIABLE_NAME), 93 (String )variables.get(LEFT_REVISION_VARIABLE_NAME), 94 (String )variables.get(RIGHT_REVISION_VARIABLE_NAME)); 95 return OK; 96 } 97 98 variables = NEW_FILE_MATCHER.processServerMessage(line); 99 if (variables != null) { 100 listener.newFile( 101 (String )variables.get(REMOTE_FILE_PATH_VARIABLE_NAME), 102 (String )variables.get(RIGHT_REVISION_VARIABLE_NAME)); 103 return OK; 104 } 105 106 variables = DELETED_FILE_MATCHER.processServerMessage(line); 107 if (variables != null) { 108 listener.deletedFile( 109 (String )variables.get(REMOTE_FILE_PATH_VARIABLE_NAME), 110 null); 111 return OK; 112 } 113 114 variables = DELETED_FILE_MATCHER2.processServerMessage(line); 115 if (variables != null) { 116 listener.deletedFile( 117 (String )variables.get(REMOTE_FILE_PATH_VARIABLE_NAME), 118 (String )variables.get(LEFT_REVISION_VARIABLE_NAME)); 119 return OK; 120 } 121 122 return super.messageLine(line, location, commandRoot, monitor); 123 } 124 125 128 public IStatus errorLine( 129 String line, 130 ICVSRepositoryLocation location, 131 ICVSFolder commandRoot, 132 IProgressMonitor monitor) { 133 134 Map variables = DIRECTORY_MATCHER.processServerMessage(line); 135 if (variables != null) { 136 listener.directory( 137 (String )variables.get(REMOTE_FOLDER_PATH_VARIABLE_NAME)); 138 return OK; 139 } 140 141 return super.errorLine(line, location, commandRoot, monitor); 142 } 143 144 } 145 | Popular Tags |