/*
  # UniProt ENZYME annotations

  UniProt annotates *entries* with ENZYME (partial) codes. This graph adds an edge connecting the canonical protein of an entry with the ENZYME codes with which the entry is annotated.
*/
package com.bio4j.model;

import com.bio4j.angulillos.*;
import com.bio4j.angulillos.Arity.*;

public final class UniProtENZYMEGraph<V,E> extends TypedGraph<UniProtENZYMEGraph<V,E>,V,E> {

  public UniProtENZYMEGraph(UniProtGraph<V,E> uniProtGraph, ENZYMEGraph<V,E> enzymeGraph) {

    super(uniProtGraph.raw());
    this.uniProtGraph = uniProtGraph;
    this.enzymeGraph = enzymeGraph;
  }

  public final UniProtGraph<V,E> uniProtGraph;
  public final ENZYMEGraph<V,E> enzymeGraph;

  @Override public final UniProtENZYMEGraph<V,E> self() { return this; }

  // TODO add edge here
}

/*
  # UniProt ENZYME annotations

  UniProt annotates entries, proteins, domains and whatnot with ENZYME classes, subclasses, subsubclasses or enzymes.

  ## What are these annotations?

  The only documentation for this is included in these [release notes](http://www.uniprot.org/help/2007/10/23/release). Quoting from there:

  >  In the UniProt Knowledgebase some enzymes are assigned so-called partial EC numbers where part of the numbers are replaced by dashes (e.g. EC 3.4.24.-). This happens in the following situations:
  >
  >  1. The catalytic activity of the protein is not known exactly.
  >  2. The protein catalyzes a reaction that is known, but not yet included in the IUBMB EC list.

  Now compare that with [P15291 xml](http://www.uniprot.org/uniprot/P15291.xml). There we have

  - `<ecNumber>2.4.1.-</ecNumber>` for the `<protein>` element
  - *Precise* enzyme codes for domains, which are modeled as just *names* for the protein: `<ecNumber>2.4.1.22</ecNumber>` for `Lactose synthase A protein`, or `<ecNumber>2.4.1.90</ecNumber>` for `N-acetyllactosamine synthase`

  Then as cross-reference to ENZYME we have all of them together, with no scope or anything

  ``` xml
  <dbReference type="EC" id="2.4.1.-"/>
  <dbReference type="EC" id="2.4.1.22"/>
  <dbReference type="EC" id="2.4.1.90"/>
  <dbReference type="EC" id="2.4.1.38"/>
  ```

  If you search for the ENZYME cross-ref description in [this somewhat hidden flat-text file](http://www.uniprot.org/docs/dbxref) you will read there "*Implicit; All UniProtKB entries that contain >=1 EC numbers in their description lines*".

  So clearly this is not any of 1., 2. quoted above; it's just a bad data model where entities are hidden behind strings. All in all, these enzyme annotations are unreliable, badly modeled, and hard to interpret. Our choice is to have edges linking the canonical protein of an entry to ENZYME classes, subclasses, subsubclasses, or enzymes.
*/
package com.bio4j.model;

import com.bio4j.angulillos.*;
import com.bio4j.angulillos.Arity.*;

public final class UniProtENZYMEGraph<V,E> extends LinkGraph<UniProtENZYMEGraph<V,E>,V,E> {

  public UniProtENZYMEGraph(UniProtGraph<V,E> uniProtGraph, ENZYMEGraph<V,E> enzymeGraph) {

    super(uniProtGraph.raw());
    this.uniProtGraph = uniProtGraph;
    this.enzymeGraph = enzymeGraph;
  }

  public final UniProtGraph<V,E> uniProtGraph;
  public final ENZYMEGraph<V,E> enzymeGraph;

  @Override public final UniProtENZYMEGraph<V,E> self() { return this; }

  // TODO add edge here
}

add documentation for UniProt Enzyme "annotations"