<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://wiki.biouml.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.biouml.org/index.php?action=history&amp;feed=atom&amp;title=KeyNodes_hub</id>
		<title>KeyNodes hub - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.biouml.org/index.php?action=history&amp;feed=atom&amp;title=KeyNodes_hub"/>
		<link rel="alternate" type="text/html" href="https://wiki.biouml.org/index.php?title=KeyNodes_hub&amp;action=history"/>
		<updated>2026-05-25T09:23:39Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.20.3</generator>

	<entry>
		<id>https://wiki.biouml.org/index.php?title=KeyNodes_hub&amp;diff=6202&amp;oldid=prev</id>
		<title>Lan@dote.ru at 09:28, 22 May 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki.biouml.org/index.php?title=KeyNodes_hub&amp;diff=6202&amp;oldid=prev"/>
				<updated>2015-05-22T09:28:06Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr style='vertical-align: top;'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 09:28, 22 May 2015&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 21:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 21:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Additionally a toString() method must return an accession number for given relation.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Additionally a toString() method must return an accession number for given relation.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;To spare memory it's recommended to make both node and edge objects as simple as possible. They should not be linked to each other or to the graph.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;To spare memory it's recommended to make both node and edge objects as simple as possible. They should not be linked to each other or to the graph&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;. Also edges should not contain the weight: it might be changed by decorators&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;=== Graph represenation ===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;=== Graph represenation ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 27:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 27:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* {{Method|biouml.plugins.keynodes.graph.HubGraph.nodes()}} method must return the stream of all nodes in the graph&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* {{Method|biouml.plugins.keynodes.graph.HubGraph.nodes()}} method must return the stream of all nodes in the graph&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* {{Method|biouml.plugins.keynodes.graph.HubGraph.hasNode(N)}} method must return true if given node appears in the graph&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* {{Method|biouml.plugins.keynodes.graph.HubGraph.hasNode(N)}} method must return true if given node appears in the graph&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* {{Method|biouml.plugins.keynodes.graph.HubGraph.visitEdges(&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;N, boolean, HubEdgeVisitor&amp;lt;N&amp;gt;&lt;/del&gt;)}} method must call given visitor for all the nodes directly adjacent to supplied start node in either upstream or downstream direction.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* {{Method|biouml.plugins.keynodes.graph.HubGraph.visitEdges()}} method must call given visitor for all the nodes directly adjacent to supplied start node in either upstream or downstream direction&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Usually it's unnecessary to implement this interface. Instead you may use a {{Class|biouml.plugins.keynodes.graph.MemoryHubGraph}} implementation. To create it, construct a stream of {{Class|biouml.plugins.keynodes.graph.MemoryHubGraph.HubRelation}} objects which represent single relation from given start node to given end node with given edge object and given weight. After that collect this stream with {{Method|biouml.plugins.keynodes.graph.MemoryHubGraph.toMemoryHub()}} collector.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;=== Graph chaining ===&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;The graphs can be modified by set of decorators supplied by user during analysis. To support this feature in your hub you should define a hub cache. The easiest way is to store a {{Class|biouml.plugins.keynodes.graph.MemoryHubCache}} instance into hub field and use it when defining {{Method|biouml.plugins.keynodes.biohub.KeyNodesHub.getHub(TargetOptions, String[])}} method. You must supply a function which will create the base hub (for example, read something from SQL database). The hub cache will take care on caching and chaining with decorators&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Lan@dote.ru</name></author>	</entry>

	<entry>
		<id>https://wiki.biouml.org/index.php?title=KeyNodes_hub&amp;diff=6201&amp;oldid=prev</id>
		<title>Lan@dote.ru at 09:16, 22 May 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki.biouml.org/index.php?title=KeyNodes_hub&amp;diff=6201&amp;oldid=prev"/>
				<updated>2015-05-22T09:16:58Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr style='vertical-align: top;'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 09:16, 22 May 2015&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 5:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 5:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;=== Nodes representation ===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;=== Nodes representation ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Hub node (molecule or gene) can be represented by any type. Sometimes it's ok to use {{Class|java.lang.Integer}}, {{Class|java.lang.String}}, sometimes it's better to create your own class. The {{Method|java.lang.Object.toString()}} of this class should produce stable accession number for the molecule or gene which belongs to the registered [[reference type]].&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Hub node (molecule or gene) can be represented by any type. Sometimes it's ok to use {{Class|java.lang.Integer}}, {{Class|java.lang.String}}, sometimes it's better to create your own class. The {{Method|java.lang.Object.toString()}} of this class should produce stable accession number for the molecule or gene which belongs to the registered [[reference type]]&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;. The {{Method|java.lang.Object.equals(Object)}} and {{Method|java.lang.Object.hashCode()}} methods must be redefined for node type. Nodes with the same string representation must be equal and have the same hashCode&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;To support hub nodes you should override the following methods:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;To support hub nodes you should override the following methods:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 11:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 11:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* {{Method|biouml.plugins.keynodes.biohub.KeyNodesHub.getElementConverter()}}: return an {{Class|biouml.plugins.keynodes.graph.ElementConverter}} object which is capable to convert internal nodes from/to {{Class|ru.biosoft.access.biohub.Element}} objects:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* {{Method|biouml.plugins.keynodes.biohub.KeyNodesHub.getElementConverter()}}: return an {{Class|biouml.plugins.keynodes.graph.ElementConverter}} object which is capable to convert internal nodes from/to {{Class|ru.biosoft.access.biohub.Element}} objects:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;** {{Method|biouml.plugins.keynodes.graph.ElementConverter.toNode(Element)}} method should create a hub node object using {{Class|ru.biosoft.access.biohub.Element}}. The toString() method of the resulting node should produce the same string as {{Method|ru.biosoft.access.biohub.Element.getAccession()}}.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;** {{Method|biouml.plugins.keynodes.graph.ElementConverter.toNode(Element)}} method should create a hub node object using {{Class|ru.biosoft.access.biohub.Element}}. The toString() method of the resulting node should produce the same string as {{Method|ru.biosoft.access.biohub.Element.getAccession()}}.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;** {{Method|biouml.plugins.keynodes.graph.ElementConverter.fromNode(N)}} method &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;should &lt;/del&gt;create a new {{Class|ru.biosoft.access.biohub.Element}} object by existing node. It must have the full path set, preferably linked to the existing element in the [[repository]].&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;** {{Method|biouml.plugins.keynodes.graph.ElementConverter.fromNode(N)}} method &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;must &lt;/ins&gt;create a new {{Class|ru.biosoft.access.biohub.Element}} object by existing node. It must have the full path set, preferably linked to the existing element &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;(substance/protein/gene/etc.) &lt;/ins&gt;in the [[repository]]&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;=== Edges representation ===&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Hub edge must implement the {{Class|biouml.plugins.keynodes.graph.HubEdge}} interface. It has the following methods:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;* {{Method|biouml.plugins.keynodes.graph.HubEdge.createElement(KeyNodesHub)}} method must create a new &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;{{Class|ru.biosoft.access.biohub.Element}} object by existing edge. It must have the full path set, preferably linked to the existing element (reaction/semantic relation) in the [[repository]].&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;* {{Method|biouml.plugins.keynodes.graph.HubEdge.getRelationType(boolean)}} method must return relation type string (see the constants in {{Class|ru.biosoft.access.biohub.RelationType}} class).&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Additionally a toString() method must return an accession number for given relation.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;To spare memory it's recommended to make both node and edge objects as simple as possible. They should not be linked to each other or to the graph.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;=== Graph represenation ===&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;The graph is represented by {{Class|biouml.plugins.keynodes.graph.HubGraph}} interface. It has the following methods:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;* {{Method|biouml.plugins.keynodes.graph.HubGraph.nodes()}} method must return the stream of all nodes in the graph&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;* {{Method|biouml.plugins.keynodes.graph.HubGraph.hasNode(N)}} method must return true if given node appears in the graph&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;* {{Method|biouml.plugins.keynodes.graph.HubGraph.visitEdges(N, boolean, HubEdgeVisitor&amp;lt;N&amp;gt;)}} method must call given visitor for all the nodes directly adjacent to supplied start node in either upstream or downstream direction&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Lan@dote.ru</name></author>	</entry>

	<entry>
		<id>https://wiki.biouml.org/index.php?title=KeyNodes_hub&amp;diff=6200&amp;oldid=prev</id>
		<title>Lan@dote.ru: First draft</title>
		<link rel="alternate" type="text/html" href="https://wiki.biouml.org/index.php?title=KeyNodes_hub&amp;diff=6200&amp;oldid=prev"/>
				<updated>2015-05-22T09:00:23Z</updated>
		
		<summary type="html">&lt;p&gt;First draft&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;KeyNodes hub is a [[BioHub]] which can be used in [[Regulator search (analysis)|Regulator search]] and [[Effector search (analysis)|Effector search]] analyses as well as several helper analyses. Its main purpose is provide abilities to traverse through gene/molecules network represented as directed weighted graph.&lt;br /&gt;
&lt;br /&gt;
== Implementation details ==&lt;br /&gt;
All the KeyNodes hubs must extends the {{Class|biouml.plugins.keynodes.biohub.KeyNodesHub}} class. If the hub is based on MySQL database, it's better to extend {{Class|biouml.plugins.keynodes.biohub.KeyNodesSqlHub}} class as it provides additional support for handling SQL connection. Both classes are parametrized by type which represents hub node. &lt;br /&gt;
&lt;br /&gt;
=== Nodes representation ===&lt;br /&gt;
Hub node (molecule or gene) can be represented by any type. Sometimes it's ok to use {{Class|java.lang.Integer}}, {{Class|java.lang.String}}, sometimes it's better to create your own class. The {{Method|java.lang.Object.toString()}} of this class should produce stable accession number for the molecule or gene which belongs to the registered [[reference type]].&lt;br /&gt;
&lt;br /&gt;
To support hub nodes you should override the following methods:&lt;br /&gt;
* {{Method|ru.biosoft.access.biohub.BioHubSupport.getSupportedInputTypes()}}: return an array of possible [[reference type]]s which can be converted to internal node type. Usually it's only one type.&lt;br /&gt;
* {{Method|biouml.plugins.keynodes.biohub.KeyNodesHub.getElementConverter()}}: return an {{Class|biouml.plugins.keynodes.graph.ElementConverter}} object which is capable to convert internal nodes from/to {{Class|ru.biosoft.access.biohub.Element}} objects:&lt;br /&gt;
** {{Method|biouml.plugins.keynodes.graph.ElementConverter.toNode(Element)}} method should create a hub node object using {{Class|ru.biosoft.access.biohub.Element}}. The toString() method of the resulting node should produce the same string as {{Method|ru.biosoft.access.biohub.Element.getAccession()}}.&lt;br /&gt;
** {{Method|biouml.plugins.keynodes.graph.ElementConverter.fromNode(N)}} method should create a new {{Class|ru.biosoft.access.biohub.Element}} object by existing node. It must have the full path set, preferably linked to the existing element in the [[repository]].&lt;/div&gt;</summary>
		<author><name>Lan@dote.ru</name></author>	</entry>

	</feed>