|
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.vcs.advanced; import java.util.*; import java.awt.*; import java.awt.event.*; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import javax.swing.*; import javax.swing.event.*; import javax.swing.border.*; import java.text.*; import javax.swing.text.DefaultEditorKit; import org.openide.explorer.*; import org.openide.explorer.propertysheet.*; import org.openide.explorer.propertysheet.editors.EnhancedCustomPropertyEditor; import org.openide.nodes.*; import org.openide.util.*; import org.netbeans.modules.vcscore.util.*; import org.netbeans.modules.vcscore.*; import org.netbeans.modules.vcs.advanced.VcsCustomizer; import org.netbeans.modules.vcs.advanced.variables.*; /** User variables panel. * * @author Martin Entlicher */ //------------------------------------------- public class UserConditionedVariablesPanel extends JPanel implements EnhancedCustomPropertyEditor, ExplorerManager.Provider, PropertyChangeListener, Lookup.Provider { /** This property is fired when the variable CONFIG_INPUT_DESCRIPTOR is * defined/undefined with a meaningfull value */ public static final String PROP_CONFIG_INPUT_DESCRIPTOR = "configInputDescriptor"; // NOI18N private UserConditionedVariablesEditor editor; private ExplorerManager manager; private Lookup lookup; private Children.Array varCh = null; private BasicVariableNode basicRoot = null; private AccessoryVariableNode accessoryRoot = null; private Children basicChildren = null; private Children.SortedArray accessoryChildren = null; private Set filteredVariables = new HashSet(); //------------------------------------------- static final long serialVersionUID =-4165869264994159492L; public UserConditionedVariablesPanel(UserConditionedVariablesEditor editor){ this.editor = editor; initComponents(); getExplorerManager().setRootContext(createNodes()); } //------------------------------------------- public void initComponents(){ GridBagLayout gb=new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); setLayout(gb); //setBorder(new TitledBorder(g("CTL_Variables"))); 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 VariableTreeView(), org.openide.awt.SplittedPanel.ADD_LEFT); org.openide.explorer.view.BeanTreeView beanTreeView = new org.openide.explorer.view.BeanTreeView(); beanTreeView.getAccessibleContext().setAccessibleName(g("ACS_UserVariablesTreeViewA11yName")); // NOI18N beanTreeView.getAccessibleContext().setAccessibleDescription(g("ACS_UserVariablesTreeViewA11yDesc")); // 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); getAccessibleContext().setAccessibleName(g("ACS_UserVariablesPanelA11yName")); // NOI18N getAccessibleContext().setAccessibleDescription(g("ACS_UserVariablesPanelA11yDesc")); // NOI18N 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); } public static final boolean isConfigInputDescriptorVar(VcsConfigVariable var) { if (VcsCustomizer.VAR_CONFIG_INPUT_DESCRIPTOR.equals(var.getName())) { String value = var.getValue(); if (value != null && value.length() > 0) { try { VariableInputDescriptor.parseItems(value, null); } catch (VariableInputFormatException vifex) { return false; } return true; } } return false; } private static final Comparator getRootVarsComparator() { return new Comparator() { public int compare(Object o1, Object o2) { if (o1.equals(o2)) return 0; if ((o1 instanceof BasicVariableNode) && (o2 instanceof AccessoryVariableNode)) return -1; else return +1; } public boolean equals(Object obj) { return false; } }; } private AbstractNode createNodes() { Children.SortedArray varChSorted = new Children.SortedArray(); varChSorted.setComparator(getRootVarsComparator()); varCh = varChSorted; AbstractNode varRoot = new AbstractNode(varCh); varRoot.setDisplayName(g("CTL_VariablesNodeName")); varRoot.setShortDescription(g("CTL_VariablesNodeDescription")); varRoot.setIconBase("org/netbeans/modules/vcs/advanced/variables/AccessoryVariables"); // NOI18N basicChildren = new Children.SortedArray(); basicRoot = new BasicVariableNode(basicChildren); accessoryChildren = new Children.SortedArray(); accessoryRoot = new AccessoryVariableNode(accessoryChildren); //basicRoot.addPropertyChangeListener(WeakListener.propertyChange(this, basicRoot)); //accessoryRoot.addPropertyChangeListener(WeakListener.propertyChange(this, accessoryRoot)); accessoryRoot.addVariablePropertyChangeListener(this); varCh.add(new Node[] { basicRoot, accessoryRoot }); // TODO handle the conditioned vars as well ConditionedVariables cvars = (ConditionedVariables) editor.getValue(); Collection unconditionedVars = cvars.getUnconditionedVariables(); //Collection variables = ((ConditionedVariables) editor.getValue()).getUnconditionedVariables(); boolean disableBasic = false; for(Iterator it = unconditionedVars.iterator(); it.hasNext(); ) { VcsConfigVariable var = (VcsConfigVariable) it.next(); String name = var.getName(); if (isConfigInputDescriptorVar(var)) { disableBasic = true; } if (var.isBasic()) { basicChildren.add(new BasicVariableNode[] { new BasicVariableNode(var, true) }); } else { /* if (name.indexOf(VcsFileSystem.VAR_ENVIRONMENT_PREFIX) == 0 || name.indexOf(VcsFileSystem.VAR_ENVIRONMENT_REMOVE_PREFIX) == 0 || "MODULE".equals(name)) { filteredVariables.add(var); continue; } */ accessoryChildren.add(new AccessoryVariableNode[] { new AccessoryVariableNode(var, true) }); } } Map conditionsByVars = cvars.getConditionsByVariables(); Map varsByConditions = cvars.getVariablesByConditions(); for (Iterator it = conditionsByVars.keySet().iterator(); it.hasNext(); ) { String varName = (String) it.next(); Condition[] conditions = (Condition[]) conditionsByVars.get(varName); //VcsConfigVariable[] vars = new VcsConfigVariable[conditions.length]); VcsConfigVariable var0 = (VcsConfigVariable) varsByConditions.get(conditions[0]); if (isConfigInputDescriptorVar(var0)) { disableBasic = true; } if (var0.isBasic()) { basicChildren.add(new BasicVariableNode[] { new BasicVariableNode(varName, conditions, varsByConditions) }); } else { accessoryChildren.add(new AccessoryVariableNode[] { new AccessoryVariableNode(varName, conditions, varsByConditions) }); } } if (disableBasic) disableBasicVariables(); return varRoot; } public void disableBasicVariables() { if (!basicRoot.isEnabled()) return ; Node[] nodes = basicChildren.getNodes(); for (int i = 0; i < nodes.length; i++) { BasicVariableNode varNode = (BasicVariableNode) nodes[i]; VcsConfigVariable var = varNode.getVariable(); var.setOrder(i); accessoryChildren.add(new AccessoryVariableNode[] { new AccessoryVariableNode(var) }); } varCh.remove(new Node[] { basicRoot }); basicChildren = Children.LEAF; basicRoot = new BasicVariableNode(basicChildren); basicRoot.setEnabled(false); varCh.add(new Node[] { basicRoot }); } public void enableBasicVariables() { if (basicRoot.isEnabled()) return ; varCh.remove(new Node[] { basicRoot }); basicChildren = new Children.SortedArray(); basicRoot = new BasicVariableNode(basicChildren); varCh.add(new Node[] { basicRoot }); Node[] nodes = accessoryChildren.getNodes(); for (int i = 0; i < nodes.length; i++) { AccessoryVariableNode varNode = (AccessoryVariableNode) nodes[i]; VcsConfigVariable var = varNode.getVariable(); if (var.isBasic()) { basicChildren.add(new BasicVariableNode[] { new BasicVariableNode(var) }); accessoryChildren.remove(new Node[] { varNode }); } } } public void propertyChange(PropertyChangeEvent propertyChangeEvent) { if (PROP_CONFIG_INPUT_DESCRIPTOR.equals(propertyChangeEvent.getPropertyName())) { Object newValue = propertyChangeEvent.getNewValue(); if (Boolean.TRUE.equals(newValue)) { disableBasicVariables(); } else if (Boolean.FALSE.equals(newValue)) { enableBasicVariables(); } } } // 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; } private ConditionedVariables createVariables() { Collection unconditionedVars = new ArrayList(); Map conditionsByVars = new HashMap(); Map varsByConditions = new HashMap(); Node[] nodes = basicChildren.getNodes(); for (int i = 0; i < nodes.length; i++) { BasicVariableNode varNode = (BasicVariableNode) nodes[i]; VcsConfigVariable var = varNode.getVariable(); Map cvars = varNode.getVarsByConditions(); if (cvars != null) { Condition[] conditions = new Condition[cvars.size()]; int j = 0; for (Iterator it = cvars.keySet().iterator(); it.hasNext(); j++) { Condition c = (Condition) it.next(); var = (VcsConfigVariable) cvars.get(c); var.setOrder(i); conditions[j] = c; varsByConditions.put(c, var); } conditionsByVars.put(var.getName(), conditions); } else { var.setOrder(i); unconditionedVars.add(var); } } nodes = accessoryChildren.getNodes(); for (int i = 0; i < nodes.length; i++) { AccessoryVariableNode varNode = (AccessoryVariableNode) nodes[i]; VcsConfigVariable var = varNode.getVariable(); Map cvars = varNode.getVarsByConditions(); if (cvars != null) { Condition[] conditions = new Condition[cvars.size()]; int j = 0; for (Iterator it = cvars.keySet().iterator(); it.hasNext(); j++) { Condition c = (Condition) it.next(); var = (VcsConfigVariable) cvars.get(c); conditions[j] = c; varsByConditions.put(c, var); } conditionsByVars.put(var.getName(), conditions); } else { unconditionedVars.add(var); } } unconditionedVars.addAll(filteredVariables); return new ConditionedVariables(unconditionedVars, conditionsByVars, varsByConditions); } public Object getPropertyValue() { return createVariables(); } //------------------------------------------- private String g(String s) { return NbBundle.getMessage(UserConditionedVariablesPanel.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.