private void setProperties(ClassPropertiesInfo classInfo) {
   DefaultProperty[] beforeProps;
   PropertiesProvider provider;
   String[] errors;
   beforeProps = convertPropertyType(classInfo.getPropertiesPanel().getProperties());
   provider = classInfo.getClassInstance();
   errors = provider.getPropertiesErrors(beforeProps);
   if (errors != null && errors.length > 0) {
     printErrors(errors);
   } else {
     provider.setProperties(beforeProps);
   }
 }
 /**
  * Cycle through the nodes in the new model.<br>
  * For each node in the old model that also had a panel, create (for the new permission level) and
  * transfer all the properties in the old one that are still present. <br>
  * As panel is only created if is visualized, this guarantees that all previously modified
  * properties keep modifications.
  *
  * @param oldProps properties inserted in the old model
  * @param newModel set the old properties in the new model
  */
 private void updateUsedPanels(HashMap<String, Property[]> oldProps, DefaultTreeModel newModel) {
   DefaultMutableTreeNode root = (DefaultMutableTreeNode) newModel.getRoot();
   int childCount = newModel.getChildCount(root);
   DefaultMutableTreeNode node;
   ClassPropertiesInfo funcInfo;
   Property[] storedProps;
   for (int i = 0; i < childCount; i++) {
     node = (DefaultMutableTreeNode) newModel.getChild(root, i);
     funcInfo = (ClassPropertiesInfo) node.getUserObject();
     storedProps = oldProps.get(funcInfo.getName());
     // If this functionality was viewed it might contain changes
     if (storedProps != null) {
       // Create panel for it
       PropertySheetPanel propertyPanel =
           createPropertiesPanelForClass(funcInfo.getClassInstance());
       Property newProps[] = propertyPanel.getProperties();
       // go through properties
       int newPropsLength = newProps.length;
       int storedPropsLength = storedProps.length;
       // find who has more properties
       if (newPropsLength < storedPropsLength) {
         // lowering the permission
         int pStored = 0;
         int pNew = 0;
         while (pNew < newPropsLength && pStored < storedPropsLength) {
           if (storedProps[pStored].getName().equals(newProps[pNew].getName())) {
             newProps[pNew].setValue(storedProps[pStored].getValue());
             pNew++;
           }
           pStored++;
         }
       } else {
         // going to higher permission
         int pStored = 0;
         int pNew = 0;
         while (pNew < newPropsLength && pStored < storedPropsLength) {
           if (storedProps[pStored].getName().equals(newProps[pNew].getName())) {
             newProps[pNew].setValue(storedProps[pStored].getValue());
             pStored++;
           }
           pNew++;
         }
       }
       // set the updated properties panel
       funcInfo.setPropertiesPanel(propertyPanel);
     }
   }
 }