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); } } }