Author: mes
Date: 2011-09-26 12:25:03 -0700 (Mon, 26 Sep 2011)
New Revision: 26971
Added:
core3/impl/branches/builder/model-impl/impl/src/main/java/org/cytoscape/model/internal/builder/
core3/impl/branches/builder/model-impl/impl/src/main/java/org/cytoscape/model/internal/builder/CyEdgeBuilderImpl.java
core3/impl/branches/builder/model-impl/impl/src/main/java/org/cytoscape/model/internal/builder/CyNetworkBuilderImpl.java
core3/impl/branches/builder/model-impl/impl/src/main/java/org/cytoscape/model/internal/builder/CyNodeBuilderImpl.java
core3/impl/branches/builder/model-impl/impl/src/main/java/org/cytoscape/model/internal/builder/CyRowBuilderImpl.java
core3/impl/branches/builder/model-impl/impl/src/main/java/org/cytoscape/model/internal/builder/CyTableBuilderImpl.java
Modified:
core3/impl/branches/builder/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/sif/SIFNetworkReader.java
core3/impl/branches/builder/model-impl/impl/src/main/java/org/cytoscape/model/internal/ArraySubGraph.java
core3/impl/branches/builder/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyNetworkFactoryImpl.java
core3/impl/branches/builder/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyTableImpl.java
Log:
added builder pattern code
Modified:
core3/impl/branches/builder/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/sif/SIFNetworkReader.java
===================================================================
---
core3/impl/branches/builder/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/sif/SIFNetworkReader.java
2011-09-26 19:23:31 UTC (rev 26970)
+++
core3/impl/branches/builder/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/sif/SIFNetworkReader.java
2011-09-26 19:25:03 UTC (rev 26971)
@@ -44,6 +44,9 @@
import org.cytoscape.model.CyNode;
import org.cytoscape.model.CyTable;
import org.cytoscape.model.CyTableEntry;
+import org.cytoscape.model.builder.CyNetworkBuilder;
+import org.cytoscape.model.builder.CyNodeBuilder;
+import org.cytoscape.model.builder.CyEdgeBuilder;
import org.cytoscape.view.layout.CyLayoutAlgorithm;
import org.cytoscape.view.layout.CyLayoutAlgorithmManager;
import org.cytoscape.view.model.CyNetworkView;
@@ -92,31 +95,31 @@
}
private void readInput(TaskMonitor tm) throws IOException {
+ System.out.println("using modified SIF reader");
this.parentTaskMonitor = tm;
// tm.setProgress(0.0);
String line;
final BufferedReader br =
new BufferedReader(new InputStreamReader(inputStream),
128*1024);
- Map<String, CyNode> nMap = new HashMap<String, CyNode>(10000);
+ Map<String, CyNodeBuilder> nMap = new HashMap<String,
CyNodeBuilder>(10000);
- CyNetwork network = cyNetworkFactory.getInstance();
- final CyTable nodeTable = network.getDefaultNodeTable();
- final CyTable edgeTable = network.getDefaultEdgeTable();
+ CyNetworkBuilder networkBuilder =
cyNetworkFactory.getBuilder();
// Generate bundled event to avoid too many events problem.
final String firstLine = br.readLine();
if (firstLine.contains(TAB))
delimiter = TAB;
- createEdge(new Interaction(firstLine.trim(), delimiter),
network, nMap);
+ //createEdge(new Interaction(firstLine.trim(),
delimiterPattern), networkBuilder, nMap);
+ createEdge(new Interaction(firstLine, delimiter),
networkBuilder, nMap);
while ((line = br.readLine()) != null) {
if (cancelled) {
// Cancel called. Clean up the garbage.
nMap.clear();
nMap = null;
- network = null;
+ networkBuilder = null;
br.close();
return;
}
@@ -125,8 +128,9 @@
continue;
try {
+ //final Interaction itr = new Interaction(line,
delimiterPattern);
final Interaction itr = new Interaction(line,
delimiter);
- createEdge(itr, network, nMap);
+ createEdge(itr, networkBuilder, nMap);
} catch (Exception e) {
// Simply ignore invalid lines.
continue;
@@ -139,6 +143,8 @@
nMap.clear();
nMap = null;
+ CyNetwork network =
cyNetworkFactory.getInstance(networkBuilder);
+
this.cyNetworks = new CyNetwork[] {network};
// tm.setProgress(1.0);
@@ -146,24 +152,24 @@
logger.debug("SIF file loaded: ID = " + network.getSUID());
}
- private void createEdge(final Interaction itr, final CyNetwork network,
final Map<String, CyNode> nMap) {
- CyNode sourceNode = nMap.get(itr.getSource());
+ private void createEdge(final Interaction itr, final CyNetworkBuilder
networkBuilder, final Map<String, CyNodeBuilder> nMap) {
+ CyNodeBuilder sourceNode = nMap.get(itr.getSource());
if (sourceNode == null) {
- sourceNode = network.addNode();
- sourceNode.getCyRow().set(CyTableEntry.NAME,
itr.getSource());
+ sourceNode = networkBuilder.addNode();
+ sourceNode.getCyRowBuilder().set(CyTableEntry.NAME,
itr.getSource());
nMap.put(itr.getSource(), sourceNode);
}
for (final String target : itr.getTargets()) {
- CyNode targetNode = nMap.get(target);
+ CyNodeBuilder targetNode = nMap.get(target);
if (targetNode == null) {
- targetNode = network.addNode();
- targetNode.getCyRow().set(CyTableEntry.NAME,
target);
+ targetNode = networkBuilder.addNode();
+
targetNode.getCyRowBuilder().set(CyTableEntry.NAME, target);
nMap.put(target, targetNode);
}
- final CyEdge edge = network.addEdge(sourceNode,
targetNode, true);
- edge.getCyRow().set(CyTableEntry.NAME,
getEdgeName(itr,target));
- edge.getCyRow().set(CyEdge.INTERACTION, itr.getType());
+ final CyEdgeBuilder edge =
networkBuilder.addEdge(sourceNode, targetNode, true);
+ edge.getCyRowBuilder().set(CyTableEntry.NAME,
getEdgeName(itr,target));
+ edge.getCyRowBuilder().set(CyEdge.INTERACTION,
itr.getType());
}
}
@@ -176,7 +182,6 @@
edgeNameBuilder.append(target);
return edgeNameBuilder.toString();
}
-
@Override
public CyNetworkView buildCyNetworkView(CyNetwork network) {
@@ -187,11 +192,13 @@
// Force to run this task here to avoid concurrency problem.
TaskIterator itr = layout.getTaskIterator();
- Task nextTask = itr.next();
- try {
- nextTask.run(parentTaskMonitor);
- } catch (Exception e) {
- throw new RuntimeException("Could not finish layout",
e);
+ if ( itr.hasNext() ) {
+ Task nextTask = itr.next();
+ try {
+ nextTask.run(parentTaskMonitor);
+ } catch (Exception e) {
+ throw new RuntimeException("Could not finish
layout", e);
+ }
}
return view;
Modified:
core3/impl/branches/builder/model-impl/impl/src/main/java/org/cytoscape/model/internal/ArraySubGraph.java
===================================================================
---
core3/impl/branches/builder/model-impl/impl/src/main/java/org/cytoscape/model/internal/ArraySubGraph.java
2011-09-26 19:23:31 UTC (rev 26970)
+++
core3/impl/branches/builder/model-impl/impl/src/main/java/org/cytoscape/model/internal/ArraySubGraph.java
2011-09-26 19:25:03 UTC (rev 26971)
@@ -30,10 +30,6 @@
import org.cytoscape.event.CyEventHelper;
-//import org.cytoscape.model.builder.CyNetworkBuilder;
-//import org.cytoscape.model.builder.CyNodeBuilder;
-//import org.cytoscape.model.builder.CyEdgeBuilder;
-
import org.cytoscape.di.util.DIUtil;
import org.cytoscape.model.CyNetwork;
import org.cytoscape.model.CyTable;
@@ -52,6 +48,9 @@
import org.cytoscape.model.events.RemovedEdgesEvent;
import org.cytoscape.model.subnetwork.CySubNetwork;
import org.cytoscape.model.subnetwork.CyRootNetwork;
+import org.cytoscape.model.builder.CyNetworkBuilder;
+import org.cytoscape.model.builder.CyNodeBuilder;
+import org.cytoscape.model.builder.CyEdgeBuilder;
import java.util.Collection;
import java.util.HashMap;
@@ -100,34 +99,34 @@
internalEdgeCount = 0;
fireAddedNodesAndEdgesEvents = false;
}
-//
-// public synchronized void initialize(CyNetworkBuilder networkBuilder) {
-// Map<CyNodeBuilder,CyNode> nodeMap = new
HashMap<CyNodeBuilder,CyNode>();
-//
-// for ( CyNodeBuilder nb : networkBuilder.getNodes() ) {
-// CyNodeImpl rootNode = parent.nodeAdd(nb.getSUID());
-// updateNode(rootNode);
-// internalNodeCount++;
-// CySubNodeImpl ret = new
CySubNodeImpl(rootNode,nodeTables);
-// subNodeMap.put(rootNode,ret);
-// nodeMap.put(nb,ret);
-// }
-//
-// for ( CyEdgeBuilder eb : networkBuilder.getEdges() ) {
-// CyEdgeImpl rootEdge =
parent.edgeAdd(eb.getSUID(),nodeMap.get(eb.getSource()),
nodeMap.get(eb.getTarget()), eb.isDirected(), this);
-// updateEdge(rootEdge);
-// internalEdgeCount++;
-// CySubEdgeImpl ret = new
CySubEdgeImpl(rootEdge,edgeTables,subNodeMap);
-// subEdgeMap.put(rootEdge,ret);
-// }
-//
-//
((CyTableImpl)(nodeTables.get(CyNetwork.DEFAULT_ATTRS))).loadData(
networkBuilder.getNodeTable() );
-//
((CyTableImpl)(edgeTables.get(CyNetwork.DEFAULT_ATTRS))).loadData(
networkBuilder.getEdgeTable() );
-//
((CyTableImpl)(netTables.get(CyNetwork.DEFAULT_ATTRS))).loadData(
networkBuilder.getNetworkTable() );
-// }
-//
+ public synchronized void initialize(CyNetworkBuilder networkBuilder) {
+ Map<CyNodeBuilder,CyNode> nodeMap = new
HashMap<CyNodeBuilder,CyNode>();
+ for ( CyNodeBuilder nb : networkBuilder.getNodes() ) {
+ CyNodeImpl rootNode = parent.nodeAdd(nb.getSUID());
+ updateNode(rootNode);
+ internalNodeCount++;
+ CySubNodeImpl ret = new
CySubNodeImpl(rootNode,nodeTables);
+ subNodeMap.put(rootNode,ret);
+ nodeMap.put(nb,ret);
+ }
+
+ for ( CyEdgeBuilder eb : networkBuilder.getEdges() ) {
+ CyEdgeImpl rootEdge =
parent.edgeAdd(eb.getSUID(),nodeMap.get(eb.getSource()),
nodeMap.get(eb.getTarget()), eb.isDirected(), this);
+ updateEdge(rootEdge);
+ internalEdgeCount++;
+ CySubEdgeImpl ret = new
CySubEdgeImpl(rootEdge,edgeTables,subNodeMap);
+ subEdgeMap.put(rootEdge,ret);
+ }
+
+
((CyTableImpl)(nodeTables.get(CyNetwork.DEFAULT_ATTRS))).initializeColumns(
networkBuilder.getNodeTable() );
+
((CyTableImpl)(edgeTables.get(CyNetwork.DEFAULT_ATTRS))).initializeColumns(
networkBuilder.getEdgeTable() );
+
((CyTableImpl)(netTables.get(CyNetwork.DEFAULT_ATTRS))).initializeColumns(
networkBuilder.getNetworkTable() );
+ }
+
+
+
private void updateNode(final CyNode n) {
final NodePointer node = parent.getNodePointer(n);
node.expandTo(internalId);
Modified:
core3/impl/branches/builder/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyNetworkFactoryImpl.java
===================================================================
---
core3/impl/branches/builder/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyNetworkFactoryImpl.java
2011-09-26 19:23:31 UTC (rev 26970)
+++
core3/impl/branches/builder/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyNetworkFactoryImpl.java
2011-09-26 19:25:03 UTC (rev 26971)
@@ -29,10 +29,13 @@
import org.cytoscape.event.CyEventHelper;
+import org.cytoscape.service.util.CyServiceRegistrar;
import org.cytoscape.model.CyNetwork;
import org.cytoscape.model.CyNetworkFactory;
+import org.cytoscape.model.CyTableManager;
import org.cytoscape.model.CyTableFactory;
-import org.cytoscape.service.util.CyServiceRegistrar;
+import org.cytoscape.model.builder.CyNetworkBuilder;
+import org.cytoscape.model.internal.builder.CyNetworkBuilderImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -87,6 +90,18 @@
return net.getBaseNetwork();
}
+ public CyNetwork getInstance(CyNetworkBuilder nb) {
+ ArrayGraph net = new ArrayGraph(help, mgr, networkTableMgr,
tableFactory, serviceRegistrar, true);
+ ArraySubGraph sub = (ArraySubGraph)(net.getBaseNetwork());
+ sub.initialize(nb);
+ return sub;
+ }
+
+ public CyNetworkBuilder getBuilder() {
+ return new CyNetworkBuilderImpl();
+ }
+
+
/**
* {@inheritDoc}
*/
Modified:
core3/impl/branches/builder/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyTableImpl.java
===================================================================
---
core3/impl/branches/builder/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyTableImpl.java
2011-09-26 19:23:31 UTC (rev 26970)
+++
core3/impl/branches/builder/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyTableImpl.java
2011-09-26 19:25:03 UTC (rev 26971)
@@ -53,6 +53,8 @@
import org.cytoscape.model.events.RowsSetEvent;
import org.cytoscape.model.events.TableAddedEvent;
import org.cytoscape.model.events.TableAddedListener;
+import org.cytoscape.model.builder.CyTableBuilder;
+import org.cytoscape.model.internal.builder.CyTableBuilderImpl;
import com.google.common.collect.SetMultimap;
import com.google.common.collect.HashMultimap;
@@ -136,7 +138,36 @@
virtualColumnReferenceCount = 0;
}
+ public synchronized void initializeColumns(CyTableBuilder tableBuilder)
{
+ for (String colName : tableBuilder.getColumnNames() ) {
+
+ if (
colName.equals(tableBuilder.getPrimaryKeyColumnName()) )
+ continue;
+ Class<?> type = tableBuilder.getColumnType(colName);
+ CyColumn col = types.get(colName);
+ if ( col == null ) {
+ boolean isImmutable=
tableBuilder.getColumnMutability(colName);
+ VirtualColumnInfo virtualInfo = new
VirtualColumnInfoImpl(false, null, null, null, null, isImmutable);
+ types.put(colName, new CyColumnImpl(this,
colName, type, null, virtualInfo , false, isImmutable, null));
+ } else if ( attributes.get(colName).size() > 0 ) {
+ throw new RuntimeException("column : " +
colName + " is already populated!");
+ }
+
+ attributes.put(colName,
tableBuilder.getColumnData(colName));
+
+ // a hack so that we don't expose SetMultimap in the
CyTableBuilder API
+ if ( tableBuilder instanceof CyTableBuilderImpl )
+
reverse.put(colName,((CyTableBuilderImpl)tableBuilder).getColumnIndex(colName));
+ }
+
+ for ( Object key : tableBuilder.getPrimaryKeys() ) {
+ CyRow row = new InternalRow(key);
+ rows.put(key, row);
+ }
+ }
+
+
@Override
public synchronized void swap(final CyTable otherTable) {
final CyTableImpl other = (CyTableImpl)otherTable;
Added:
core3/impl/branches/builder/model-impl/impl/src/main/java/org/cytoscape/model/internal/builder/CyEdgeBuilderImpl.java
===================================================================
---
core3/impl/branches/builder/model-impl/impl/src/main/java/org/cytoscape/model/internal/builder/CyEdgeBuilderImpl.java
(rev 0)
+++
core3/impl/branches/builder/model-impl/impl/src/main/java/org/cytoscape/model/internal/builder/CyEdgeBuilderImpl.java
2011-09-26 19:25:03 UTC (rev 26971)
@@ -0,0 +1,47 @@
+
+package org.cytoscape.model.internal.builder;
+
+import org.cytoscape.model.builder.CyEdgeBuilder;
+import org.cytoscape.model.builder.CyRowBuilder;
+import org.cytoscape.model.builder.CyNodeBuilder;
+import org.cytoscape.model.builder.CyTableBuilder;
+import org.cytoscape.model.SUIDFactory;
+import org.cytoscape.model.SUIDFactory;
+
+public final class CyEdgeBuilderImpl implements CyEdgeBuilder {
+
+ private final CyRowBuilder row;
+ private final long suid;
+ private final CyNodeBuilder source;
+ private final CyNodeBuilder target;
+ private final boolean directed;
+
+ public CyEdgeBuilderImpl(CyNodeBuilder source, CyNodeBuilder target,
boolean directed, CyTableBuilder table) {
+ this.source = source;
+ this.target = target;
+ this.directed = directed;
+ this.suid = SUIDFactory.getNextSUID();
+ this.row = new CyRowBuilderImpl(suid,table);
+ }
+
+ public long getSUID() {
+ return suid;
+ }
+
+ public CyRowBuilder getCyRowBuilder() {
+ return row;
+ }
+
+ public CyNodeBuilder getSource() {
+ return source;
+ }
+
+ public CyNodeBuilder getTarget() {
+ return target;
+ }
+
+ public boolean isDirected() {
+ return directed;
+ }
+}
+
Added:
core3/impl/branches/builder/model-impl/impl/src/main/java/org/cytoscape/model/internal/builder/CyNetworkBuilderImpl.java
===================================================================
---
core3/impl/branches/builder/model-impl/impl/src/main/java/org/cytoscape/model/internal/builder/CyNetworkBuilderImpl.java
(rev 0)
+++
core3/impl/branches/builder/model-impl/impl/src/main/java/org/cytoscape/model/internal/builder/CyNetworkBuilderImpl.java
2011-09-26 19:25:03 UTC (rev 26971)
@@ -0,0 +1,69 @@
+package org.cytoscape.model.internal.builder;
+
+import java.util.List;
+import java.util.ArrayList;
+import org.cytoscape.model.builder.CyEdgeBuilder;
+import org.cytoscape.model.builder.CyNodeBuilder;
+import org.cytoscape.model.builder.CyNetworkBuilder;
+import org.cytoscape.model.builder.CyTableBuilder;
+import org.cytoscape.model.CyTableEntry;
+import org.cytoscape.model.CyNetwork;
+import org.cytoscape.model.CyEdge;
+
+public final class CyNetworkBuilderImpl implements CyNetworkBuilder {
+
+ private final List<CyNodeBuilder> nodeList;
+ private final List<CyEdgeBuilder> edgeList;
+ private final CyTableBuilder networkTable;
+ private final CyTableBuilder nodeTable;
+ private final CyTableBuilder edgeTable;
+
+ public CyNetworkBuilderImpl() {
+ nodeList = new ArrayList<CyNodeBuilder>();
+ edgeList = new ArrayList<CyEdgeBuilder>();
+
+ networkTable = new CyTableBuilderImpl();
+ networkTable.createColumn(CyTableEntry.NAME, String.class,
true);
+
+ nodeTable = new CyTableBuilderImpl();
+ nodeTable.createColumn(CyTableEntry.NAME, String.class, true);
+ nodeTable.createColumn(CyNetwork.SELECTED, Boolean.class, true);
+
+ edgeTable = new CyTableBuilderImpl();
+ edgeTable.createColumn(CyTableEntry.NAME, String.class, true);
+ edgeTable.createColumn(CyNetwork.SELECTED, Boolean.class, true);
+ edgeTable.createColumn(CyEdge.INTERACTION, String.class, true);
+ }
+
+ public CyNodeBuilder addNode() {
+ CyNodeBuilder node = new CyNodeBuilderImpl(nodeTable);
+ nodeList.add(node);
+ return node;
+ }
+
+ public CyEdgeBuilder addEdge(CyNodeBuilder source, CyNodeBuilder
target, boolean directed) {
+ CyEdgeBuilder edge = new CyEdgeBuilderImpl(source, target,
directed, edgeTable);
+ edgeList.add(edge);
+ return edge;
+ }
+
+ public List<CyEdgeBuilder> getEdges() {
+ return edgeList;
+ }
+
+ public List<CyNodeBuilder> getNodes() {
+ return nodeList;
+ }
+
+ public CyTableBuilder getNodeTable() {
+ return nodeTable;
+ }
+
+ public CyTableBuilder getEdgeTable() {
+ return edgeTable;
+ }
+
+ public CyTableBuilder getNetworkTable() {
+ return networkTable;
+ }
+}
Added:
core3/impl/branches/builder/model-impl/impl/src/main/java/org/cytoscape/model/internal/builder/CyNodeBuilderImpl.java
===================================================================
---
core3/impl/branches/builder/model-impl/impl/src/main/java/org/cytoscape/model/internal/builder/CyNodeBuilderImpl.java
(rev 0)
+++
core3/impl/branches/builder/model-impl/impl/src/main/java/org/cytoscape/model/internal/builder/CyNodeBuilderImpl.java
2011-09-26 19:25:03 UTC (rev 26971)
@@ -0,0 +1,29 @@
+
+package org.cytoscape.model.internal.builder;
+
+import org.cytoscape.model.builder.*;
+
+import org.cytoscape.model.builder.CyRowBuilder;
+import org.cytoscape.model.builder.CyNodeBuilder;
+import org.cytoscape.model.builder.CyTableBuilder;
+import org.cytoscape.model.SUIDFactory;
+
+public final class CyNodeBuilderImpl implements CyNodeBuilder {
+
+ private final CyRowBuilder row;
+ private final long suid;
+
+ public CyNodeBuilderImpl(CyTableBuilder table) {
+ suid = SUIDFactory.getNextSUID();
+ row = new CyRowBuilderImpl(suid,table);
+ }
+
+ public long getSUID() {
+ return suid;
+ }
+
+ public CyRowBuilder getCyRowBuilder() {
+ return row;
+ }
+}
+
Added:
core3/impl/branches/builder/model-impl/impl/src/main/java/org/cytoscape/model/internal/builder/CyRowBuilderImpl.java
===================================================================
---
core3/impl/branches/builder/model-impl/impl/src/main/java/org/cytoscape/model/internal/builder/CyRowBuilderImpl.java
(rev 0)
+++
core3/impl/branches/builder/model-impl/impl/src/main/java/org/cytoscape/model/internal/builder/CyRowBuilderImpl.java
2011-09-26 19:25:03 UTC (rev 26971)
@@ -0,0 +1,25 @@
+
+package org.cytoscape.model.internal.builder;
+
+import java.util.Map;
+import java.util.HashMap;
+
+import org.cytoscape.model.builder.CyTableBuilder;
+import org.cytoscape.model.builder.CyRowBuilder;
+
+public final class CyRowBuilderImpl implements CyRowBuilder {
+
+ private final CyTableBuilder tableBuilder;
+ private final Object primaryKey;
+
+ public CyRowBuilderImpl(Object primaryKey, CyTableBuilder tableBuilder)
{
+ this.primaryKey = primaryKey;
+ this.tableBuilder = tableBuilder;
+ }
+
+ public void set(String columnName, Object value) {
+ if ( columnName != null && value != null )
+
tableBuilder.setColumnValue(columnName,primaryKey,value);
+ }
+}
+
Added:
core3/impl/branches/builder/model-impl/impl/src/main/java/org/cytoscape/model/internal/builder/CyTableBuilderImpl.java
===================================================================
---
core3/impl/branches/builder/model-impl/impl/src/main/java/org/cytoscape/model/internal/builder/CyTableBuilderImpl.java
(rev 0)
+++
core3/impl/branches/builder/model-impl/impl/src/main/java/org/cytoscape/model/internal/builder/CyTableBuilderImpl.java
2011-09-26 19:25:03 UTC (rev 26971)
@@ -0,0 +1,113 @@
+
+/*
+ Copyright (c) 2008, 2011, The Cytoscape Consortium (www.cytoscape.org)
+
+ This library is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License, or
+ any later version.
+
+ This library is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF
+ MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. The software and
+ documentation provided hereunder is on an "as is" basis, and the
+ Institute for Systems Biology and the Whitehead Institute
+ have no obligations to provide maintenance, support,
+ updates, enhancements or modifications. In no event shall the
+ Institute for Systems Biology and the Whitehead Institute
+ be liable to any party for direct, indirect, special,
+ incidental or consequential damages, including lost profits, arising
+ out of the use of this software and its documentation, even if the
+ Institute for Systems Biology and the Whitehead Institute
+ have been advised of the possibility of such damage. See
+ the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this library; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+*/
+package org.cytoscape.model.internal.builder;
+
+
+import java.util.Map;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Set;
+import org.cytoscape.model.builder.CyTableBuilder;
+import com.google.common.collect.SetMultimap;
+import com.google.common.collect.HashMultimap;
+
+public final class CyTableBuilderImpl implements CyTableBuilder {
+
+
+ private final Map<String, Class<?>> columnTypes;
+ private final Map<String, Boolean> columnMutability;
+ private String primaryKeyColumnName;
+ private final Map<String, Map<Object,Object>> columnData;
+ private final Map<String, SetMultimap<Object,Object>> columnIndices;
+ private final Set<Object> primaryKeys;
+
+ private final int DEFAULT_ALLOCATION = 10000;
+
+ public CyTableBuilderImpl() {
+ columnTypes = new HashMap<String,Class<?>>();
+ columnMutability = new HashMap<String,Boolean>();
+ columnData = new HashMap<String,Map<Object,Object>>();
+ columnIndices = new
HashMap<String,SetMultimap<Object,Object>>();
+ primaryKeys = new HashSet<Object>(DEFAULT_ALLOCATION);
+ }
+
+ public void createColumn(String name, Class<?> type, boolean
mutability) {
+ columnTypes.put(name, type);
+ columnMutability.put(name, mutability);
+ }
+
+ public void setPrimaryKeyColumnName( String name ) {
+ primaryKeyColumnName = name;
+ }
+
+ public String getPrimaryKeyColumnName() {
+ return primaryKeyColumnName;
+ }
+
+ public Collection<String> getColumnNames() {
+ return columnTypes.keySet();
+ }
+
+ public Class<?> getColumnType(String columnName) {
+ return columnTypes.get(columnName);
+ }
+
+ public boolean getColumnMutability(String columnName) {
+ return columnMutability.get(columnName);
+ }
+
+ public Collection<Object> getPrimaryKeys() {
+ return primaryKeys;
+ }
+
+ public Map<Object,Object> getColumnData(String columnName) {
+ Map<Object,Object> data = columnData.get(columnName);
+ if ( data == null ) {
+ data = new HashMap<Object,Object>(DEFAULT_ALLOCATION);
+ columnData.put(columnName,data);
+ }
+ return data;
+ }
+
+ public SetMultimap<Object,Object> getColumnIndex(String columnName) {
+ SetMultimap<Object,Object> ind = columnIndices.get(columnName);
+ if ( ind == null ) {
+ ind = HashMultimap.create();
+ columnIndices.put(columnName,ind);
+ }
+ return ind;
+ }
+
+ public void setColumnValue(String columnName, Object primaryKey, Object
value) {
+ getColumnData(columnName).put(primaryKey,value);
+ getColumnIndex(columnName).put(value,primaryKey);
+ primaryKeys.add(primaryKey);
+ }
+}
--
You received this message because you are subscribed to the Google Groups
"cytoscape-cvs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/cytoscape-cvs?hl=en.