Exemple #1
0
    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();
      }
    }