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.

Reply via email to