Пример #1
0
    /**
     * This gets called whenever one of the ConfigElements we are editing adds a new property value.
     */
    public void propertyValueAdded(ConfigElementEvent evt) {
      ConfigElement src = (ConfigElement) evt.getSource();
      int idx = evt.getIndex();
      PropertyDefinition prop_def = src.getDefinition().getPropertyDefinition(evt.getProperty());
      DefaultMutableTreeNode elt_node = getNodeFor(src);

      // Get the node containing the property description under the source
      // ConfigElement node
      for (Enumeration e = elt_node.children(); e.hasMoreElements(); ) {
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) e.nextElement();
        if (node.getUserObject().equals(prop_def)) {
          // The newly inserted property value must be added as a child to
          // this node
          if (prop_def.getType() != ConfigElement.class) {
            DefaultMutableTreeNode new_child = new DefaultMutableTreeNode(evt.getValue());
            insertNodeInto(new_child, node, idx);
          } else {
            // Embedded elements are handled specially in that all of their
            // respective child properties and such also need to be added to
            // the tree at this time.
            addEmbeddedElement(node, (ConfigElement) evt.getValue(), idx);
          }
        }
      }
    }
Пример #2
0
    /**
     * This gets called whenever one of the ConfigElements we are editing removes a property value.
     */
    public void propertyValueRemoved(ConfigElementEvent evt) {
      ConfigElement src = (ConfigElement) evt.getSource();
      int idx = evt.getIndex();
      PropertyDefinition prop_def = src.getDefinition().getPropertyDefinition(evt.getProperty());
      DefaultMutableTreeNode elt_node = getNodeFor(src);

      // Get the node containing the property description under the source
      // ConfigElement node
      for (Enumeration e = elt_node.children(); e.hasMoreElements(); ) {
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) e.nextElement();
        if (node.getUserObject().equals(prop_def)) {
          // The newly removed property value must be a child to this node
          System.out.println("Removing child " + idx + " from node: " + node.getUserObject());
          DefaultMutableTreeNode child = (DefaultMutableTreeNode) node.getChildAt(idx);

          // If the child is an embedded element, stop listening to it
          if (child.getUserObject() instanceof ConfigElement) {
            ConfigElement removed_elt = (ConfigElement) child.getUserObject();
            removed_elt.removeConfigElementListener(this);
          }

          // Physically remove the child from the tree
          removeNodeFromParent(child);
        }
      }
    }
Пример #3
0
 /** Gets the value for the given node at the given column. */
 public Object getValueAt(Object node, int col) {
   DefaultMutableTreeNode tree_node = (DefaultMutableTreeNode) node;
   Object value = tree_node.getUserObject();
   switch (col) {
       // Name
     case 0:
       return value;
       // Value
     case 1:
       if (value instanceof ConfigElement) {
         return null;
       } else if (value instanceof PropertyDefinition) {
         // Only provide comma delimited editing for simple types
         if (((PropertyDefinition) value).getType() != ConfigElement.class) {
           StringBuffer buffer = new StringBuffer();
           for (Enumeration e = tree_node.children(); e.hasMoreElements(); ) {
             DefaultMutableTreeNode child_node = (DefaultMutableTreeNode) e.nextElement();
             buffer.append(child_node.getUserObject());
             if (e.hasMoreElements()) {
               buffer.append(", ");
             }
           }
           return buffer.toString();
         }
         return null;
       }
       return value;
   }
   return null;
 }
Пример #4
0
  /**
   * Gets a list of the nodes in this model that contain an object of the given class starting with
   * the given node.
   *
   * @param cls the class to search for
   * @param node the node whose subtree will be searched
   * @return a list of matching DefaultMutableTreeNodes
   */
  public List getNodesOfClass(Class cls, DefaultMutableTreeNode node) {
    List matches = new ArrayList();

    // Check if the current node matches
    if (cls.isInstance(node.getUserObject())) {
      matches.add(node);
    }

    // Recurse to the children of the current node
    for (Enumeration e = node.children(); e.hasMoreElements(); ) {
      DefaultMutableTreeNode child = (DefaultMutableTreeNode) e.nextElement();
      matches.addAll(getNodesOfClass(cls, child));
    }

    return matches;
  }
Пример #5
0
    /**
     * This gets called whenever one of the ConfigElements we are editing has the values of a
     * property get reordered.
     */
    public void propertyValueOrderChanged(ConfigElementEvent evt) {
      ConfigElement src = (ConfigElement) evt.getSource();
      int idx = evt.getIndex();
      PropertyDefinition prop_def = src.getDefinition().getPropertyDefinition(evt.getProperty());
      DefaultMutableTreeNode elt_node = getNodeFor(src);

      // Get the node containing the property description under the source
      // ConfigElement node.
      for (Enumeration e = elt_node.children(); e.hasMoreElements(); ) {
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) e.nextElement();

        if (node.getUserObject().equals(prop_def)) {
          int start_index = Math.min(evt.getIndex0(), evt.getIndex1());
          int end_index = Math.max(evt.getIndex0(), evt.getIndex1());

          List removed_children = new ArrayList();
          for (int c = start_index; c <= end_index; ++c) {
            removed_children.add(getChild(node, c));
          }

          for (Iterator c = removed_children.iterator(); c.hasNext(); ) {
            removeNodeFromParent((MutableTreeNode) c.next());
          }

          String prop_token = prop_def.getToken();
          for (int v = start_index; v <= end_index; ++v) {
            if (prop_def.getType() != ConfigElement.class) {
              // Create a new node for the reordered property value.
              DefaultMutableTreeNode new_node =
                  new DefaultMutableTreeNode(src.getProperty(prop_token, v));

              // Add the new node into the tree.
              insertNodeInto(new_node, node, v);
            } else {
              // Embedded elements are handled specially in that all of
              // their respective child properties and such also need to
              // be added to the tree at this time.
              ConfigElement cur_value = (ConfigElement) src.getProperty(prop_token, v);
              addEmbeddedElement(node, cur_value, v);
            }
          }
        }
      }
    }
Пример #6
0
  /** Gets the node for the given object */
  private DefaultMutableTreeNode getNodeFor(Object obj, DefaultMutableTreeNode node) {
    //      System.out.println("getNodeFor() node: " + node.getUserObject());
    // Check if we found a match
    if (obj.equals(node.getUserObject())) {
      return node;
    }

    // Check all children of the current node
    for (Enumeration e = node.children(); e.hasMoreElements(); ) {
      DefaultMutableTreeNode child = (DefaultMutableTreeNode) e.nextElement();
      DefaultMutableTreeNode result = getNodeFor(obj, child);
      if (result != null) {
        return result;
      }
    }

    // Didn't find anything :(
    return null;
  }
Пример #7
0
    /**
     * This gets called whenever one of the ConfigElements we are editing has one of its property
     * values change.
     */
    public void propertyValueChanged(ConfigElementEvent evt) {
      ConfigElement src = (ConfigElement) evt.getSource();
      int idx = evt.getIndex();
      PropertyDefinition prop_def = src.getDefinition().getPropertyDefinition(evt.getProperty());
      DefaultMutableTreeNode elt_node = getNodeFor(src);

      // Multi-valued properties and embedded elements are treated specially
      if ((prop_def.getPropertyValueDefinitionCount() > 1)
          || (prop_def.isVariable())
          || (prop_def.getType() == ConfigElement.class)) {
        // Look for the property definition node
        for (Enumeration e = elt_node.children(); e.hasMoreElements(); ) {
          DefaultMutableTreeNode node = (DefaultMutableTreeNode) e.nextElement();
          if (node.getUserObject().equals(prop_def)) {
            DefaultMutableTreeNode child = (DefaultMutableTreeNode) node.getChildAt(idx);
            fireTreeNodesChanged(
                this,
                new Object[] {getPathToRoot(node)},
                new int[] {node.getIndex(child)},
                new Object[] {child});
          }
        }
      }
      // Property value is not an embedded element
      else {
        // Take into account the extra two rows at the top of the table
        if (elt_node == getRoot()) {
          idx += 2;
        }

        fireTreeNodesChanged(
            this,
            new Object[] {getPathToRoot(elt_node)},
            new int[] {idx},
            new Object[] {elt_node.getChildAt(idx)});
      }
    }