@Override public List<PotentialConsumer> getPotentialConsumers() { List<PotentialConsumer> returnList = new ArrayList<PotentialConsumer>(); for (AttributeType type : getVisibleConsumerTypes()) { if (type.getTypeName().startsWith("Neuron ")) { if (type.getTypeName().equalsIgnoreCase("Neuron Input Value")) { for (Neuron neuron : network.getFlatNeuronList()) { returnList.add(getNeuronConsumer(this, neuron, type.getMethodName())); } } else { for (Neuron neuron : network.getFlatNeuronList()) { String description = type.getDescription(neuron.getId()); PotentialConsumer consumer = getAttributeManager().createPotentialConsumer(neuron, type); consumer.setCustomDescription(description); returnList.add(consumer); } } } else if (type.getTypeName().equalsIgnoreCase("Synapse")) { for (Synapse synapse : network.getFlatSynapseList()) { String description = type.getDescription(synapse.getId()); PotentialConsumer consumer = getAttributeManager().createPotentialConsumer(synapse, type); consumer.setCustomDescription(description); returnList.add(consumer); } } else if (type.getTypeName().equalsIgnoreCase("NeuronGroup")) { // Handle NeuronGroup attributes for (Group group : network.getFlatGroupList()) { if (group instanceof NeuronGroup) { PotentialConsumer consumer = getNeuronGroupConsumer(this, (NeuronGroup) group, type.getMethodName()); returnList.add(consumer); } } } else if (type.getTypeName().equalsIgnoreCase("SynapseGroup")) { // Handle SynapseGroup attributes for (Group group : network.getFlatGroupList()) { if (group instanceof SynapseGroup) { PotentialConsumer consumer = getAttributeManager() .createPotentialConsumer(group, "setWeightVector", double[].class); consumer.setCustomDescription("Synapse Group: " + group.getLabel()); returnList.add(consumer); } } } } return returnList; }
/** Initialize attribute types and listeners. */ private void init() { // Initialize attribute types and their default visibility addProducerType( new AttributeType(this, "Neuron Activation", "getActivation", double.class, true)); addProducerType( new AttributeType(this, "Neuron Upper Bound", "getUpperBound", double.class, false)); addProducerType( new AttributeType(this, "Neuron Lower Bound", "getLowerBound", double.class, false)); addProducerType(new AttributeType(this, "Neuron Label", "getLabel", String.class, false)); addProducerType(new AttributeType(this, "Synapse", "getStrength", double.class, false)); addProducerType( new AttributeType( this, "NeuronGroupActivations", "getExternalActivations", double[].class, true)); addProducerType( new AttributeType(this, "NeuronGroupSpikes", "getSpikeIndexes", double[].class, true)); addProducerType( new AttributeType(this, "SynapseGroup", "getWeightVector", double[].class, true)); addConsumerType( new AttributeType(this, "Neuron Input Value", "setInputValue", double.class, true)); addConsumerType( new AttributeType(this, "Neuron Activation", "setActivation", double.class, false)); addConsumerType( new AttributeType(this, "Neuron Upper Bound", "setUpperBound", double.class, false)); addConsumerType( new AttributeType(this, "Neuron Lower Bound", "setLowerBound", double.class, false)); addConsumerType(new AttributeType(this, "Neuron Label", "setLabel", String.class, false)); addConsumerType(new AttributeType(this, "Synapse", "setStrength", double.class, false)); addConsumerType(new AttributeType(this, "NeuronGroup", "setInputValues", double[].class, true)); addConsumerType( new AttributeType(this, "SynapseGroup", "setWeightVector", double[].class, false)); network.addNeuronListener( new NeuronListener() { /** {@inheritDoc} */ public void neuronAdded(NetworkEvent<Neuron> e) { setChangedSinceLastSave(true); firePotentialAttributesChanged(); } /** {@inheritDoc} */ public void neuronTypeChanged(NetworkEvent<NeuronUpdateRule> e) { setChangedSinceLastSave(true); } /** {@inheritDoc} */ public void neuronMoved(NetworkEvent<Neuron> e) { setChangedSinceLastSave(true); } /** {@inheritDoc} */ public void neuronRemoved(NetworkEvent<Neuron> e) { setChangedSinceLastSave(true); firePotentialAttributesChanged(); fireAttributeObjectRemoved(e.getObject()); } @Override public void neuronChanged(NetworkEvent<Neuron> e) { setChangedSinceLastSave(true); } @Override public void labelChanged(NetworkEvent<Neuron> e) { setChangedSinceLastSave(true); } }); network.addSynapseListener( new SynapseListener() { public void synapseAdded(NetworkEvent<Synapse> networkEvent) { setChangedSinceLastSave(true); firePotentialAttributesChanged(); } public void synapseChanged(NetworkEvent<Synapse> networkEvent) { setChangedSinceLastSave(true); firePotentialAttributesChanged(); } public void synapseRemoved(NetworkEvent<Synapse> networkEvent) { setChangedSinceLastSave(true); firePotentialAttributesChanged(); } public void synapseTypeChanged(NetworkEvent<SynapseUpdateRule> networkEvent) { setChangedSinceLastSave(true); } }); }
@Override public String getXML() { return Network.getXStream().toXML(network); }
@Override public void update() { network.update(); }
@Override public void save(final OutputStream output, final String format) { network.preSaveInit(); Network.getXStream().toXML(network, output); network.postSaveReInit(); }
/** {@inheritDoc} */ public static NetworkComponent open( final InputStream input, final String name, final String format) { Network newNetwork = (Network) Network.getXStream().fromXML(input); return new NetworkComponent(name, newNetwork); }