public void valueChanged(TreeSelectionEvent e) { JTree tree = FunctionFactorySherpaHelper.GetJTree(); DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent(); if (node == null) { return; } Object node_object = node.getUserObject(); if (node.isLeaf()) { try { // analytic Sherpa functions. Function rf = (Function) node_object; try { if (rf instanceof Polynomial) { rf = new Polynomial(1); } else { rf = (Function) rf.clone(); } } catch (CloneNotSupportedException ex) { rf = null; } FunctionFactorySherpaHelper.SetFunction(rf); } catch (ClassCastException e1) { // templates, tables and user files try { DefaultCustomModel model = (DefaultCustomModel) node_object; String functionName = model.getFunctionName(); SherpaFunction function = new SherpaFunction(); URL url = model.getUrl(); String path = url.getPath(); function.addPath(path); String name = model.getName(); if (path.contains("/tables/")) { name = "tablemodel"; } if (path.contains("/functions/")) { name = "usermodel"; } if (path.contains("/templates/")) { name = "templatemodel"; } function.setUserID(name); function.setName(name); function.setFunctionName(functionName); // Converting a DefaultCustomModel to a SherpaFunction might // require more than this. We'll see as we go further down // the road... // First, we need to break up the comma-separated string // parameters into something that can actually be used to // build instances of Function. String[] parNames = model.getParnames().split("\\,"); String[] parVals = model.getParvals().split("\\,"); String[] parMins = model.getParmins().split("\\,"); String[] parMaxs = model.getParmaxs().split("\\,"); String[] parFrozen = model.getParfrozen().split("\\,"); int npars = parNames.length; if (npars != parVals.length || npars != parMins.length || npars != parMaxs.length || npars != parFrozen.length) { ExceptionHandler.handleException( new Exception("Parameter lists wih different lengths.")); tree.clearSelection(); FunctionFactorySherpaHelper.dispose(); return; } // now we loop over the parameter lists, building // each parameter in turn and adding it to the Function. for (int i = 0; i < npars; i++) { SherpaFParameter functionParameter = null; try { double value = Double.valueOf(parVals[i]); double min = Double.valueOf(parMins[i]); double max = Double.valueOf(parMaxs[i]); functionParameter = new SherpaFParameter(parNames[i], value, min, max, new NonSupportedUnits("")); String frozen = parFrozen[i]; if (frozen != null) { boolean fixed = (frozen.equalsIgnoreCase("True")) ? true : false; functionParameter.setFixed(fixed); } } catch (NumberFormatException ex) { ExceptionHandler.handleException(ex); tree.clearSelection(); FunctionFactorySherpaHelper.dispose(); return; } catch (ArrayIndexOutOfBoundsException ex) { ExceptionHandler.handleException(ex); tree.clearSelection(); FunctionFactorySherpaHelper.dispose(); return; } function.addParameter(functionParameter); } FunctionFactorySherpaHelper.SetFunction(function); } catch (ClassCastException e2) { } } tree.clearSelection(); FunctionFactorySherpaHelper.dispose(); } }