Search in sources :

Example 46 with MNode

use of gov.sandia.n2a.db.MNode in project n2a by frothga.

the class ChangeEntry method rename.

public static void rename(String A, String B) {
    AppData.references.move(A, B);
    PanelReference pr = PanelReference.instance;
    MNode doc = AppData.references.child(B);
    // lazy; only loads if not already loaded
    pr.panelEntry.model.setRecord(doc);
    // If we didn't rebuild in previous line, then we need to update display with changed data.
    pr.panelEntry.model.fireTableRowsUpdated(0, 0);
    // likewise, focus only moves if it is not already on equation tree
    pr.panelEntry.table.requestFocusInWindow();
    pr.panelEntry.table.changeSelection(0, 1, false, false);
}
Also used : PanelReference(gov.sandia.n2a.ui.ref.PanelReference) MNode(gov.sandia.n2a.db.MNode)

Example 47 with MNode

use of gov.sandia.n2a.db.MNode in project n2a by frothga.

the class ExportNative method export.

@Override
public void export(MNode source, File destination) {
    try {
        // Write a standard repository file. See MDoc.save()
        BufferedWriter writer = new BufferedWriter(new FileWriter(destination));
        writer.write(String.format("N2A.schema=1%n"));
        for (MNode n : source) n.write(writer, "");
        writer.close();
    } catch (IOException e) {
    }
}
Also used : FileWriter(java.io.FileWriter) IOException(java.io.IOException) MNode(gov.sandia.n2a.db.MNode) BufferedWriter(java.io.BufferedWriter)

Example 48 with MNode

use of gov.sandia.n2a.db.MNode in project n2a by frothga.

the class SafeTextTransferHandler method importData.

public boolean importData(TransferSupport support) {
    try {
        String data = (String) support.getTransferable().getTransferData(DataFlavor.stringFlavor);
        if (data.startsWith("N2A.schema")) {
            if (safeTypes == null)
                return false;
            Schema schema = new Schema();
            MNode nodes = new MVolatile();
            BufferedReader br = new BufferedReader(new StringReader(data));
            schema.read(br);
            if (schema.type.startsWith("Clip"))
                schema.type = schema.type.substring(4);
            if (!safeTypes.contains(schema.type)) {
                br.close();
                return false;
            }
            nodes.read(br);
            br.close();
            // Process into a suitable string
            for (MNode n : nodes) {
                String key = n.key();
                String value = n.get();
                if (key.startsWith("@"))
                    data = value + key;
                else if (value.isEmpty())
                    data = key;
                else
                    data = key + "=" + value;
                // Only process the first node
                break;
            }
        }
        JTextComponent comp = (JTextComponent) support.getComponent();
        InputContext ic = comp.getInputContext();
        if (ic != null)
            ic.endComposition();
        comp.replaceSelection(data);
        return true;
    } catch (UnsupportedFlavorException | IOException e) {
    }
    return false;
}
Also used : Schema(gov.sandia.n2a.db.Schema) BufferedReader(java.io.BufferedReader) StringReader(java.io.StringReader) InputContext(java.awt.im.InputContext) JTextComponent(javax.swing.text.JTextComponent) IOException(java.io.IOException) MNode(gov.sandia.n2a.db.MNode) UnsupportedFlavorException(java.awt.datatransfer.UnsupportedFlavorException) MVolatile(gov.sandia.n2a.db.MVolatile)

Example 49 with MNode

use of gov.sandia.n2a.db.MNode in project n2a by frothga.

the class ExportJob method input.

public String input(MPart source, List<Element> parentElements, Synapse synapse) {
    String type = source.get("$metadata", "backend.lems.part");
    List<Element> inputElements = new ArrayList<Element>();
    List<String> skip = new ArrayList<String>();
    for (MNode c : source) {
        MPart p = (MPart) c;
        if (p.isPart()) {
            skip.add(p.key());
            input(p, inputElements, null);
        } else if (p.key().equals("times")) {
            skip.add("times");
            String[] pieces = p.get().split("\\[", 2)[1].split("]", 2)[0].split(";");
            for (int i = 0; i < pieces.length; i++) {
                if (Scalar.convert(pieces[i]) == Double.POSITIVE_INFINITY)
                    continue;
                Element spike = addElement("spike", inputElements);
                spike.setAttribute("id", String.valueOf(i));
                spike.setAttribute("time", biophysicalUnits(pieces[i]));
            }
        }
    }
    if (// decide between them
    type.contains("ramp") && type.contains("pulse")) {
        NameMap nameMap = partMap.importMap("rampGenerator");
        EquationSet sourceEquations = getEquations(source);
        Variable high1 = sourceEquations.find(new Variable(nameMap.importName("startAmplitude"), 0));
        Variable high2 = sourceEquations.find(new Variable(nameMap.importName("finishAmplitude"), 0));
        try {
            double value1 = ((Scalar) high1.eval(context)).value;
            double value2 = ((Scalar) high2.eval(context)).value;
            if (value1 == value2)
                type = "pulseGenerator";
            else
                type = "rampGenerator";
        } catch (// eval can fail if eqset contains fatal errors
        Exception e) {
            if (source.get("high2").equals("high1"))
                type = "pulseGenerator";
            else
                type = "rampGenerator";
        }
    } else if (// more action is needed
    type.contains(",")) {
        if (synapse != null) {
            String[] types = type.split(",");
            for (String t : types) {
                if (// prefix of both "Synapse" and "Synaptic"
                t.contains("Synap")) {
                    type = t;
                    break;
                }
            }
        }
        // remove any remaining ambiguity
        type = type.split(",")[0];
    }
    Element input = addElement(type, parentElements);
    String id;
    if (synapse == null) {
        id = source.get("$metadata", "backend.lems.id");
        if (id.isEmpty())
            id = source.key();
    } else {
        id = synapse.id;
        input.setAttribute("synapse", synapse.chainID);
        input.setAttribute("spikeTarget", "./" + synapse.chainID);
    }
    input.setAttribute("id", id);
    standalone(source, input, inputElements);
    genericPart(source, input, skip.toArray(new String[] {}));
    sequencer.append(input, inputElements);
    return id;
}
Also used : EquationSet(gov.sandia.n2a.eqset.EquationSet) MPart(gov.sandia.n2a.eqset.MPart) AccessVariable(gov.sandia.n2a.language.AccessVariable) Variable(gov.sandia.n2a.eqset.Variable) Element(org.w3c.dom.Element) ArrayList(java.util.ArrayList) NameMap(gov.sandia.n2a.backend.neuroml.PartMap.NameMap) MNode(gov.sandia.n2a.db.MNode) IncommensurableException(javax.measure.IncommensurableException) UnconvertibleException(javax.measure.UnconvertibleException) ParseException(gov.sandia.n2a.language.ParseException) Scalar(gov.sandia.n2a.language.type.Scalar)

Example 50 with MNode

use of gov.sandia.n2a.db.MNode in project n2a by frothga.

the class ExportJob method genericPart.

public void genericPart(MPart part, Element result, String... skip) {
    EquationSet partEquations = getEquations(part);
    List<Element> resultElements = new ArrayList<Element>();
    List<String> skipList = Arrays.asList(skip);
    for (MNode c : part) {
        MPart p = (MPart) c;
        String key = p.key();
        // Skip connection bindings. They are unpacked elsewhere.
        if (partEquations.findConnection(key) != null)
            continue;
        if (key.startsWith("$"))
            continue;
        if (skipList.contains(key))
            continue;
        if (p.isPart()) {
            genericPart(p, resultElements);
        } else {
            // We need to check two things:
            // * Has the variable been overridden after it was declared in the base part?
            // * Is it an expression or a constant?
            // An override that is an expression should trigger a LEMS extension part.
            // A constant that is either overridden or required should be emitted here.
            boolean expression = true;
            String value = p.get();
            Variable v = partEquations.find(new Variable(key));
            try {
                // This could convert an expression to a constant.
                Type evalue = v.eval(context);
                // TODO: if it is a simple AccessVariable, then it shouldn't be viewed as an expression.
                Operator op = Operator.parse(value);
                if (op instanceof Constant) {
                    // "direct" value
                    Type dvalue = ((Constant) op).value;
                    expression = !evalue.equals(dvalue);
                }
            } catch (Exception e) {
            }
            boolean overridden = p.isFromTopDocument() || isOverride(part.get("$inherit").replace("\"", ""), key);
            String name = sequencer.bestFieldName(result, p.get("$metadata", "backend.lems.param"));
            if (name.isEmpty())
                name = key;
            boolean required = sequencer.isRequired(result, name);
            if (required || (overridden && !expression)) {
                // biophysicalUnits() should return strings (non-numbers) unmodified
                result.setAttribute(name, biophysicalUnits(p.get()));
            }
        }
    }
    sequencer.append(result, resultElements);
}
Also used : Operator(gov.sandia.n2a.language.Operator) EquationSet(gov.sandia.n2a.eqset.EquationSet) MPart(gov.sandia.n2a.eqset.MPart) AccessVariable(gov.sandia.n2a.language.AccessVariable) Variable(gov.sandia.n2a.eqset.Variable) Constant(gov.sandia.n2a.language.Constant) Element(org.w3c.dom.Element) ArrayList(java.util.ArrayList) MNode(gov.sandia.n2a.db.MNode) IncommensurableException(javax.measure.IncommensurableException) UnconvertibleException(javax.measure.UnconvertibleException) ParseException(gov.sandia.n2a.language.ParseException) Type(gov.sandia.n2a.language.Type)

Aggregations

MNode (gov.sandia.n2a.db.MNode)63 Node (org.w3c.dom.Node)11 NameMap (gov.sandia.n2a.backend.neuroml.PartMap.NameMap)9 MVolatile (gov.sandia.n2a.db.MVolatile)5 MPart (gov.sandia.n2a.eqset.MPart)5 ArrayList (java.util.ArrayList)5 PanelModel (gov.sandia.n2a.ui.eq.PanelModel)4 MPersistent (gov.sandia.n2a.db.MPersistent)3 EquationSet (gov.sandia.n2a.eqset.EquationSet)3 Variable (gov.sandia.n2a.eqset.Variable)3 AccessVariable (gov.sandia.n2a.language.AccessVariable)3 PanelReference (gov.sandia.n2a.ui.ref.PanelReference)3 Element (org.w3c.dom.Element)3 NamedNodeMap (org.w3c.dom.NamedNodeMap)3 MDoc (gov.sandia.n2a.db.MDoc)2 ParseException (gov.sandia.n2a.language.ParseException)2 AddDoc (gov.sandia.n2a.ui.eq.undo.AddDoc)2 IOException (java.io.IOException)2 TreeMap (java.util.TreeMap)2 IncommensurableException (javax.measure.IncommensurableException)2