|
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-2004 Sun
* Microsystems, Inc. All Rights Reserved.
*/
package org.netbeans.modules.vcs.advanced;
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.*;
import java.text.MessageFormat;
import javax.swing.text.DefaultEditorKit;
import org.openide.util.NbBundle;
import org.openide.nodes.Children;
import org.openide.nodes.Index;
import org.openide.nodes.Node;
import org.openide.explorer.*;
import org.openide.explorer.propertysheet.*;
import org.openide.explorer.propertysheet.editors.EnhancedCustomPropertyEditor;
import org.openide.util.HelpCtx;
import org.openide.util.Lookup;
import org.netbeans.modules.vcscore.commands.VcsCommand;
import org.netbeans.modules.vcscore.cmdline.UserCommand;
import org.netbeans.modules.vcs.advanced.commands.*;
import org.netbeans.modules.vcscore.cmdline.UserCommandSupport;
import org.netbeans.modules.vcscore.commands.CommandExecutionContext;
import org.netbeans.modules.vcscore.commands.CommandsTree;
import org.netbeans.spi.vcs.commands.CommandSupport;
import org.netbeans.modules.vcs.advanced.commands.ConditionedCommandsBuilder.*;
import org.netbeans.modules.vcs.advanced.variables.Condition;
/** User commands panel.
*
* @author Martin Entlicher
*/
//-------------------------------------------
public class UserConditionedCommandsPanel extends JPanel implements CommandChangeListener,
EnhancedCustomPropertyEditor,
ExplorerManager.Provider,
Lookup.Provider {
private UserConditionedCommandsEditor editor;
//private Vector commands=null;
//private CommandList commandList = null;
private CommandNode commandsNode = null;
private ConditionedCommands ccommands = null;
private ExplorerManager manager;
private Lookup lookup;
private transient CommandExecutionContext executionContext;
static final long serialVersionUID =-5546375234297504708L;
/**
* The panel of user commands.
* @param editor The editor of UserCommand instances passed through CommandNodes
* @param executionContext The execution context instance, that is used for
* UserCommandSupport creation, that wrapps UserCommand.
*/
public UserConditionedCommandsPanel(UserConditionedCommandsEditor editor) {
this.editor = editor;
ccommands = (ConditionedCommands) editor.getValue();
CommandsTree commands = ccommands.getCommands();
CommandSupport supp = commands.getCommandSupport();
UserCommand oldcmd = null;
if (supp != null && supp instanceof UserCommandSupport) {
oldcmd = ((UserCommandSupport) supp).getVcsCommand();
executionContext = ((UserCommandSupport) supp).getExecutionContext();
}
//VcsCommand oldcmd = (VcsCommand) commands.getCookie(VcsCommand.class);
UserCommand newcmd = null;
if (oldcmd != null) {
newcmd = new UserCommand();
newcmd.copyFrom(oldcmd);
}
/* The first command can not be conditioned
ConditionedCommand ccommand = null;
if (supp != null) {
ccommand = ccommands.getConditionedCommand(supp.getName());
}
*/
commandsNode = createCommandNodes(commands, newcmd, null, null);
initComponents();
getExplorerManager().setRootContext(commandsNode/*createNodes()*/);
getAccessibleContext().setAccessibleName(g("ACS_UserCommandsPanelA11yName")); // NOI18N
getAccessibleContext().setAccessibleDescription(g("ACS_UserCommandsPanelA11yDesc")); // NOI18N
}
/** Called when the command is changed.
*/
public void changed(VcsCommand cmd) {
editor.setValue(getPropertyValue());
}
/** Called when new command is added.
*/
public void added(VcsCommand cmd) {
editor.setValue(getPropertyValue());
}
/** Called when the command is removed.
*/
public void removed(VcsCommand cmd) {
editor.setValue(getPropertyValue());
}
private CommandNode createCommandNodes(CommandsTree oldCommands, UserCommand cmd,
Condition c, ConditionedPropertiesCommand cpc) {
Children newChildren = new Index.ArrayChildren();
CommandNode newCommands = new CommandNode(newChildren, cmd, c, cpc);
//CommandsTree oldCommands = ccommands.getCommands();
CommandsTree[] oldNodes = oldCommands.children();
for(int i = 0; i < oldNodes.length; i++) {
CommandSupport supp = oldNodes[i].getCommandSupport();
UserCommand newcmd = null;//oldcmd;
if (supp != null && (supp instanceof UserCommandSupport)) {
newcmd = new UserCommand();
newcmd.copyFrom(((UserCommandSupport) supp).getVcsCommand());
}
ConditionedCommand ccommand = null;
if (supp != null) {
ccommand = ccommands.getConditionedCommand(supp.getName());
if (ccommand == null) {
ccommand = new ConditionedCommand(supp.getName());
ccommand.addCommand(new ConditionedPropertiesCommand((UserCommandSupport) supp), null);
}
}
Node[] newNodes;
if (!oldNodes[i].hasChildren()) {
if (ccommand != null) {
Condition[] conditions = ccommand.getConditions();
newNodes = new CommandNode[conditions.length];
for (int j = 0; j < conditions.length; j++) {
newNodes[j] = new CommandNode(Children.LEAF, newcmd, conditions[j], ccommand.getCommandFor(conditions[j]));
}
} else {
newNodes = new CommandNode[] { new CommandNode(Children.LEAF, newcmd) };
}
} else {
if (ccommand != null) {
Condition[] conditions = ccommand.getConditions();
newNodes = new CommandNode[conditions.length];
for (int j = 0; j < conditions.length; j++) {
newNodes[j] = createCommandNodes(oldNodes[i], newcmd, conditions[j], ccommand.getCommandFor(conditions[j]));
}
} else {
newNodes = new CommandNode[] { createCommandNodes(oldNodes[i], newcmd, null, null) };
}
}
newChildren.add(newNodes);
}
return newCommands;
}
private ConditionedCommands createCommands(CommandNode oldCommands, UserCommand cmd, CommandExecutionContext executionContext) {
Children oldChildren = oldCommands.getChildren();
CommandsTree newCommands = new CommandsTree(new UserCommandSupport(cmd, executionContext));
ConditionedCommandsBuilder ccbuilder = new ConditionedCommandsBuilder(newCommands);
createCommandsTree(oldCommands, newCommands, executionContext, ccbuilder);
return ccbuilder.getConditionedCommands();
}
private CommandsTree createCommandsTree(CommandNode oldCommands, CommandsTree newCommands,
CommandExecutionContext executionContext,
ConditionedCommandsBuilder ccbuilder) {
Children oldChildren = oldCommands.getChildren();
Node[] oldNodes = oldChildren.getNodes();
for(int i = 0; i < oldNodes.length; i++) {
CommandNode commandNode = (CommandNode) oldNodes[i];
UserCommand newcmd = (UserCommand) commandNode.getCommand();
Children subChildren = commandNode.getChildren();
CommandsTree newNode;
if (newcmd == null) {
newNode = CommandsTree.EMPTY;
} else {
if (Children.LEAF.equals(subChildren)) {
newNode = new CommandsTree(new UserCommandSupport(newcmd, executionContext));
} else {
newNode = new CommandsTree(new UserCommandSupport(newcmd, executionContext));
createCommandsTree(commandNode, newNode, executionContext, ccbuilder);
}
}
newCommands.add(newNode);
Condition mainC = commandNode.getMainCondition();
Collection conditionedProperties = commandNode.getConditionedProperties();
//ConditionedPropertiesCommand cpcommand = commandNode.getConditionedPropertiesCommand();
//ConditionedProperty[] cproperties = cpcommand.getConditionedProperties();
//for (int p = 0; p < cproperties.length; p++) {
if (conditionedProperties != null) {
for (Iterator it = conditionedProperties.iterator(); it.hasNext(); ) {
ccbuilder.addPropertyToCommand(commandNode.getCommand().getName(), mainC, (ConditionedProperty) it.next());
}
}
}
return newCommands;
}
public void initComponents(){
GridBagLayout gb=new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
setLayout(gb);
//setBorder(new TitledBorder(g("CTL_Commands")));
setBorder(new EmptyBorder (12, 12, 0, 11));
PropertySheetView propertySheetView = new PropertySheetView();
try {
propertySheetView.setSortingMode(org.openide.explorer.propertysheet.PropertySheet.UNSORTED);
} catch (java.beans.PropertyVetoException exc) {
// The change was vetoed
}
org.openide.awt.SplittedPanel split = new org.openide.awt.SplittedPanel();
split.setSplitType(org.openide.awt.SplittedPanel.HORIZONTAL);
//split.add(new CommandTreeView(), org.openide.awt.SplittedPanel.ADD_LEFT);
org.openide.explorer.view.BeanTreeView beanTreeView = new org.openide.explorer.view.BeanTreeView();
beanTreeView.getAccessibleContext().setAccessibleName(g("ACS_UserCommandsTreeViewA11yName")); // NOI18N
beanTreeView.getAccessibleContext().setAccessibleDescription(g("ACS_UserCommandsTreeViewA11yDesc")); // NOI18N
ExplorerPanel explPanel = new ExplorerPanel();
explPanel.add(beanTreeView);
manager = explPanel.getExplorerManager();
split.add(explPanel, org.openide.awt.SplittedPanel.ADD_LEFT);
split.add(propertySheetView, org.openide.awt.SplittedPanel.ADD_RIGHT);
//JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, new CommandTreeView(), propertySheetView);
c.fill = GridBagConstraints.BOTH;
c.weightx = 1.0;
c.weighty = 1.0;
add(split, c);
ActionMap map = getActionMap();
map.put(DefaultEditorKit.copyAction, ExplorerUtils.actionCopy(manager));
map.put(DefaultEditorKit.cutAction, ExplorerUtils.actionCut(manager));
map.put(DefaultEditorKit.pasteAction, ExplorerUtils.actionPaste(manager));
map.put("delete", ExplorerUtils.actionDelete(manager, true));
InputMap keys = getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
keys.put(KeyStroke.getKeyStroke("control c"), DefaultEditorKit.copyAction);
keys.put(KeyStroke.getKeyStroke("control x"), DefaultEditorKit.cutAction);
keys.put(KeyStroke.getKeyStroke("control v"), DefaultEditorKit.pasteAction);
keys.put(KeyStroke.getKeyStroke("DELETE"), "delete");
// initialize the lookup variable
lookup = ExplorerUtils.createLookup (manager, map);
}
// It is good idea to switch all listeners on and off when the
// component is shown or hidden.
public void addNotify() {
super.addNotify();
ExplorerUtils.activateActions(manager, true);
}
public void removeNotify() {
ExplorerUtils.activateActions(manager, false);
super.removeNotify();
}
public ExplorerManager getExplorerManager() {
return manager;
}
public Lookup getLookup() {
return lookup;
}
//-------------------------------------------
public Object getPropertyValue() {
return createCommands(commandsNode, (UserCommand) commandsNode.getCommand(), executionContext);
}
//-------------------------------------------
private String g(String s) {
return NbBundle.getMessage(UserConditionedCommandsPanel.class, s);
}
}
|
| ... 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.