package com.bio4j.model.uniprot.relationships;

import com.bio4j.model.Relationship;
import com.bio4j.model.RelationshipType;
import com.bio4j.model.uniprot.nodes.FeatureType;
import com.bio4j.model.uniprot.nodes.Protein;

/**
 *
 * @author Pablo Pareja Tobes <ppareja@era7.com>
 */
public interface BasicFeature extends Relationship <
Protein, Protein.Type,
BasicFeature, BasicFeature.Type,
FeatureType, FeatureType.Type
>{
    
    //------------GETTERS----------------
    public String getDescription();
    public String getStatus();
    public String getEvidence();
    public String getId();
    public String getOriginal();
    public String getVariation();
    public String getRef();
    public String getBegin();
    public String getEnd();
            
    //------------SETTERS-------------------
    public void setDescription(String value);
    public void setId(String value);
    public void setEvidence(String value);
    public void setStatus(String value);
    public void setRef(String value);
    public void setBegin(String value);
    public void setEnd(String value);
    public void setOriginal(String value);
    public void setVariation(String value);
    
    public static Type TYPE = Type.basicFeature;
    public static enum Type implements RelationshipType <
      Protein, Protein.Type,
      BasicFeature, BasicFeature.Type,
      FeatureType, FeatureType.Type
    > {
      basicFeature;
      public Type value() { return basicFeature; }
      public Arity arity() { return Arity.manyToMany; }
      public Protein.Type sourceType() { return Protein.TYPE; }
      public FeatureType.Type targetType() { return FeatureType.TYPE; }
    }

    public Protein source();
    public FeatureType target();
    
}

@@ -226,61 +226,250 @@
 *%0A *
-%0A * @author Pablo Pareja Tobes %3Cppareja@era7.com%3E%0A */
+ Base Relationship class for features. The source is bounded by this to be a Protein; same for the target: FeatureType.%0A * %0A * @author Pablo Pareja Tobes %3Cppareja@era7.com%3E%0A * @author Eduardo Pareja-Tobes %3Ceparejatobes@ohnosequences.com%3E%0A */%0A
 %0Apub
@@ -499,16 +499,23 @@
 ure 
+%3C%0A%0A  R 
 extends 
 Rela
@@ -514,79 +514,128 @@
 nds 
-Relationship %3C%0AProtein, Protein.Type,%0ABasicFeature, BasicFeature.Type,%0A
+BasicFeature%3CR,RT%3E, %0A  RT extends Enum%3CRT%3E & BasicFeatureType%3CR,RT%3E%0A%0A%3E extends Relationship%3CProtein,Protein.Type, R,RT, 
 Feat
@@ -634,33 +634,32 @@
 RT, FeatureType,
- 
 FeatureType.Type
@@ -658,18 +658,18 @@
 ype.Type
-%0A
 %3E
+ 
 %7B%0A    %0A 
@@ -1420,501 +1420,8 @@
 ue);
-%0A    %0A    public static Type TYPE = Type.basicFeature;%0A    public static enum Type implements RelationshipType %3C%0A      Protein, Protein.Type,%0A      BasicFeature, BasicFeature.Type,%0A      FeatureType, FeatureType.Type%0A    %3E %7B%0A      basicFeature;%0A      public Type value() %7B return basicFeature; %7D%0A      public Arity arity() %7B return Arity.manyToMany; %7D%0A      public Protein.Type sourceType() %7B return Protein.TYPE; %7D%0A      public FeatureType.Type targetType() %7B return FeatureType.TYPE; %7D%0A    %7D
 %0A%0A  

fix generic FeatureType base rel