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