/*
*
* Perforce/JBuilder Opentool
* Copyright (C) 2002 Mark Ackerman
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
package com.dafreels.opentools.actions;
//JBuilder
import com.borland.primetime.*;
import com.borland.primetime.actions.*;
import com.borland.primetime.node.*;
import com.borland.jbuilder.*;
import com.borland.primetime.ide.*;
import com.borland.primetime.editor.*;
//Java
import javax.swing.*;
import java.awt.event.*;
import java.awt.Cursor;
//JBuilder OT
import com.dafreels.opentools.*;
import com.dafreels.opentools.properties.*;
//Perforce OT
import com.dafreels.vcs.command.*;
import com.dafreels.vcs.util.*;
/**
* Title: Perforce Open Tool
* Description: base class for Perforce Actions
* Copyright: Copyright (c) 2002
* Company:
* @author Mark Ackerman
* @version 1.0
*/
public abstract class PerforceAction extends BrowserAction
{
protected static final ExtensionRegistry m_reg = ExtensionRegistry.getInstance();
protected boolean m_onFileTabMenu;
public PerforceAction(String text, String toolTip, Icon icon, boolean onFileTabMenu)
{
super(text);
if ( toolTip != null )
{
setLongText(toolTip);
}
if ( icon != null )
{
setSmallIcon(icon);
}
m_onFileTabMenu = onFileTabMenu;
}
/**
*
* @param browser the Active Browser
* @param cmd the Command to execute
* @return the affected nodes
*/
protected Node[] getSelectedNodes(Browser browser, com.dafreels.vcs.command.Command cmd)
{
Node[] nodes;
String tempFileName = "";
if ( m_onFileTabMenu )
{
Node node = browser.getActiveNode();
if ( node != null )
{
tempFileName = node.getLongDisplayName();
if(m_reg.validateFile(tempFileName))
{
if ( cmd != null )
{
cmd.addPath(fixupName(tempFileName));
}
nodes = new Node[1];
nodes[0] = node;
}
else
{
return null;
}
}
else
{
return null;
}
}
else
{
nodes = browser.getProjectView().getSelectedNodes(browser.getActiveProject());
for(int i = 0; i < nodes.length; i++)
{
tempFileName = ((FileNode)nodes[i]).getLongDisplayName();
if(m_reg.validateFile(tempFileName))
{
if ( cmd != null )
{
cmd.addPath(tempFileName);
}
}
}
}
return nodes;
}
/**
* give subclasses the chance to fixup the name of the file. by default
* the same fileName is returned that is passed in
*
* @param fileName the filename on disk
* @return the fixed up filename on disk
*/
protected String fixupName(String fileName)
{
return fileName;
}
/**
* run the Command cmd.
* @param browser the current Browser
* @param cmd the Command to run
* @return true if the Command had no errors.
*/
protected boolean runCommand(Browser browser, com.dafreels.vcs.command.Command cmd)
{
return runCommand(browser, cmd, false);
}
protected boolean runCommand(Browser browser, com.dafreels.vcs.command.Command cmd,
boolean outputExtraLines)
{
Cursor savedEditorCursor = null;
EditorPane editor = null;
try
{
editor = EditorAction.getFocusedEditor();
Cursor waitCursor = Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR);
if ( editor != null )
{
savedEditorCursor = editor.getCursor();
editor.setCursor(waitCursor);
}
browser.setCursor(waitCursor);
//Run the command
CommandTool.runCommand(cmd, Main.m_props);
//Output the p4 messages
return outputMessages(outputExtraLines);
}
finally
{
browser.setCursor(Cursor.getDefaultCursor());
if ( editor != null && savedEditorCursor != null )
{
editor.setCursor(savedEditorCursor);
}
}
}
/**
* output the error messages and stdout messages
* @return true if there are not error messages
*/
protected boolean outputMessages(boolean outputExtraLines)
{
boolean success = MessageFormatter.getInstance().getErrorMessageCount() == 0;
MessageWriter.outputErrorMessages(MessageFormatter.getInstance());
if ( Main.m_props.showOutput() || (outputExtraLines && MessageFormatter.getMessageCount() > 1))
{//Output the p4 messages
MessageWriter.outputMessages(MessageFormatter.getInstance());
}
return success;
}
}