EthanCerami - 10/11/2005 - Assuming we adopt {{{CyAttributes}}}, we have a bunch of unresolved issues re:  access to those attributes that we haven't yet discussed.  Here is a quick run-down:

1)  I think we should keep {{{CyAttributes}}} as an interface, and then name the implementation {{{CyAttributesImpl}}}.

2)  We need some factory methods that return {{{CyAttributes}}} for nodes and edges.  Currently, you can obtain node/edge attributes via {{{Cytoscape.java}}} and {{{CyNetwork.java}}} (and possibly other ways too, that I am not familiar with.)  I'd rather have just one way to get attributes, and preferably, separate it out from Cytoscape.java (mainly because Cytoscape.java is already so bloated).  Perhaps we could have a factory class like this:

{{{#!java
pubic class GlobalAttributes {
 	public static CyAttributes getNodeAttributes() {...}
	public static CyAttributes getEdgeAttributes() {...}
}
}}}

3)  {{{Cytoscape.java}}} and {{{CyNetwork.java}}} have a bunch of "helper" methods that set/get attribute values.  For example:
{{{#!java
  public static String[] getNodeAttributesList () {
  public static String[] getNodeAttributesList ( Node[] nodes ) {
  public static String[] getEdgeAttributesList () {
  public static String[] getNodeAttributesList ( Edge[] edges ) {
  public static boolean setNodeAttributeValue ( Node node, String   
	attribute, Object value )
  public static boolean setEdgeAttributeValue ( Edge edge, String 
	attribute, Object value )
}}}

I think we need to deprecate all of these, and eventually remove them altogether.  People should just use {{{CyAttributes}}} directly, and why complicate things by providing the same functionality via three different interfaces? 

4) We have the following code in {{{Cytoscape.java}}} and in {{{CyNetwork.java}}}:

  In Cytoscape.java:
{{{#!java
  public static CytoscapeData getNodeNetworkData () 
  public static CytoscapeData getEdgeNetworkData ()
}}}

  In CyNetwork.java:
{{{#!java
  public CytoscapeData getNodeAttributes();
  public CytoscapeData getEdgeAttributes();
  public CytoscapeData getNodeData ();
  public CytoscapeData getEdgeData ();
}}}
I think these need to be reverted back to return {{{GraphObjAttributes}}}.

GaryBader - Oct.12.2005 - I favor all of these changes except the GlobalAttributes class.  I think there should just be two methods on the Cytoscape class:

{{{#!java
 	public static CyAttributes getNodeAttributes() {...}
	public static CyAttributes getEdgeAttributes() {...}
}}}

that handle global attributes and that's it.  The Cytoscape class can later be reduced, but getting global attributes is such a core action that I think it's fine for it to be there.  I.e. we want to make the very common actions, like getting attributes, easy.