|
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-2003 Sun * Microsystems, Inc. All Rights Reserved. */ package org.netbeans.modules.cvsclient.commands.diff; import org.openide.DialogDisplayer; import org.netbeans.lib.cvsclient.command.update.UpdateCommand; import org.netbeans.lib.cvsclient.command.status.StatusCommand; import java.util.Iterator; import java.util.LinkedList; import java.text.MessageFormat; import org.netbeans.modules.javacvs.events.CommandDisplayerAdapter; import org.netbeans.modules.javacvs.commands.CvsDiff; import org.netbeans.lib.cvsclient.command.PipedFileInformation; import org.netbeans.lib.cvsclient.command.FileInfoContainer; import org.netbeans.lib.cvsclient.command.Command; import org.netbeans.modules.cvsclient.IndependantClient; import org.netbeans.modules.cvsclient.NbJavaCvsFileSystem; import java.io.File; import org.netbeans.lib.cvsclient.command.diff.DiffCommand; import org.netbeans.lib.cvsclient.command.diff.DiffInformation; import org.netbeans.lib.cvsclient.command.status.StatusInformation; import org.openide.NotifyDescriptor; import org.openide.util.NbBundle; import javax.swing.SwingUtilities; /** * * @author Milos Kleint */ public class DiffCommandDisplayer extends CommandDisplayerAdapter { private static final String BINARY="-kb"; //NOI18N private CvsDiff command; private DiffCommand diffCommand; private boolean isDir = false; private File[] files; private java.util.HashMap standaloneFiles; private LinkedList resultList; private LinkedList updInfoList; private Command currentCommand; private boolean includeUpdateCommand = false; private boolean binaryFilesWarningShown; private boolean noDiffFilesWarningShown; private java.util.HashMap binaryFiles; private java.util.Set noDiffFiles; /** Creates new StatusDisplayer */ public DiffCommandDisplayer(CvsDiff comm) { command = comm; } /** Creates new StatusDisplayer */ public DiffCommandDisplayer(CvsDiff comm, boolean includeUpdateInfo) { command = comm; setIncludeUpdateCommand(includeUpdateInfo); } /** * this method is called after library's commands execution */ public void showAfterEachExecute() { if (currentCommand instanceof UpdateCommand) { return; } if (currentCommand instanceof StatusCommand) return; if (isDir) { /*TODO LogTreeInfoPanel treePanel = (LogTreeInfoPanel)FsCommandFactory.findOpenDisplayer( files[0], LogTreeInfoPanel.class, null); if (treePanel == null) { treePanel = new LogTreeInfoPanel(files[0], command); } else { treePanel.setCommand(command); } treePanel.setDataToDisplay(resultList); treePanel.displayOutputData(); */ } else { if (files.length != standaloneFiles.size()) { for (int i = 0; i < files.length; i++) { if (standaloneFiles.get(files[i]) == null) { noDiffFiles.add(files[i]); } } } } } /** * this method is called before any of the library's commands * that is stored in the queue in FileSystemCommand, is run. * @param currentCommand shows the command that will be executed. */ public void showBeforeEachExecute(Command currentCommand) { this.currentCommand = currentCommand; if (currentCommand instanceof UpdateCommand) { return; } if (currentCommand instanceof StatusCommand) return; resultList = new LinkedList(); diffCommand = (DiffCommand)currentCommand; files = command.getFiles(); if (files[0].isDirectory()) { isDir = true; } else { isDir = false; standaloneFiles = new java.util.HashMap(); } } /** * this one is called when the command's execution fails for any reason. */ public void showExecutionFailed(Exception exception) { } /** * When the library command's builder generates a FileInfoContainer object, the * Displayer is notified. * @param info - the generated information object */ public void showFileInfoGenerated(FileInfoContainer info) { if (info == null) return; if (info instanceof PipedFileInformation) { updInfoList.add(info); return; } if (info instanceof StatusInformation) { StatusInformation statusInfo = (StatusInformation) info; String stickyTag = statusInfo.getStickyOptions(); if (stickyTag != null && BINARY.equals(stickyTag)) this.binaryFiles.put (statusInfo.getFile(),statusInfo.getFile()); return; } if (isDir) { resultList.add(info); } else { final File fl = info.getFile(); if (this.binaryFiles.get (fl) == null) { DiffInformation dInfo = (DiffInformation)info; if (dInfo.getFirstChange() != null) { DiffDisplayer panel = new DiffDisplayer(diffCommand); panel.setFileSystemCommand(command); PipedFileInformation pInfo = getUpdInfo(dInfo); panel.setData(dInfo, diffCommand, pInfo); panel.displayOutputData(); standaloneFiles.put(dInfo.getFile(), dInfo.getFile()); } } } } /** * This is the last method to be called in the displayer. * Is called when the execution finishes. Any filan touchups can be made here. */ public void showFinishedCommand() { Iterator it = binaryFiles.keySet().iterator(); while (it.hasNext()) { noDiffFiles.remove(it.next()); } int binLength = binaryFiles.size(); int noDiffLength = noDiffFiles.size(); if (binLength == 0 && noDiffLength == 0) return; try { Thread.sleep(3000); } catch (Exception ex) { } if (binLength == 1 && noDiffLength == 0) { SwingUtilities.invokeLater( new Runnable() { public void run() { DialogDisplayer dialDisp = DialogDisplayer.getDefault(); Object message = null; File fl = (File)binaryFiles.keySet().iterator().next(); message = MessageFormat.format(NbBundle.getBundle(DiffCommandDisplayer.class).getString("MSG_BinaryFile"),new Object[]{fl.getAbsolutePath()}); //NOI18N NotifyDescriptor nd = new NotifyDescriptor.Message(message,NotifyDescriptor.INFORMATION_MESSAGE); dialDisp.notify(nd); } }); return; } if (binLength == 0 && noDiffLength == 1) { SwingUtilities.invokeLater( new Runnable() { public void run() { DialogDisplayer dialDisp = DialogDisplayer.getDefault(); Object message = null; File fl = (File)noDiffFiles.iterator().next(); message = MessageFormat.format(NbBundle.getBundle(DiffCommandDisplayer.class).getString("MSG_NoDiffFile"),new Object[]{fl.getAbsolutePath()}); //NOI18N NotifyDescriptor nd = new NotifyDescriptor.Message(message,NotifyDescriptor.INFORMATION_MESSAGE); dialDisp.notify(nd); } }); return; } SwingUtilities.invokeLater( new Runnable() { public void run() { DialogDisplayer dialDisp = DialogDisplayer.getDefault(); Object message = null; message = new BinaryFilesWarning(DiffCommandDisplayer.this.binaryFiles.keySet(), DiffCommandDisplayer.this.noDiffFiles); NotifyDescriptor nd = new NotifyDescriptor.Message(message,NotifyDescriptor.INFORMATION_MESSAGE); dialDisp.notify(nd); } }); } /** * This method is the first one that is called during execution. * Here any initial setup of the displayer can be made. */ public void showStartCommand() { updInfoList = new LinkedList(); resultList = new LinkedList(); if (this.binaryFiles == null) this.binaryFiles = new java.util.HashMap (); else this.binaryFiles.clear(); this.binaryFilesWarningShown = false; this.noDiffFilesWarningShown = false; noDiffFiles = new java.util.HashSet(); // if (!command.getClientProvider() instanceof IndependantClient) return; IndependantClient provider = (IndependantClient)command.getClientProvider(); if (provider.getDisplayType() != NbJavaCvsFileSystem.DISP_TYPE_SIMPLE || isIncludeUpdateCommand()) { command.addCheckoutCommands(); } } private PipedFileInformation getUpdInfo(DiffInformation info) { Iterator it = updInfoList.iterator(); PipedFileInformation toReturn = null; while (it.hasNext()) { PipedFileInformation pInfo = (PipedFileInformation)it.next(); if (pInfo.getFile().equals(info.getFile())) { toReturn = pInfo; break; } } return toReturn; } /** * */ public void setIncludeUpdateCommand(boolean include) { includeUpdateCommand = include; } public boolean isIncludeUpdateCommand() { return includeUpdateCommand; } } |
... 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.