<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<graphic-notation appVersion="0.8.0" version="0.8.0">
<properties>
<property name="type" short-description="Object type" type="String" value=""/>
<property name="title" short-description="Object title that will be shown on the diagram" type="String" value=""/>
<property name="hypothetical" short-description="Indicates whether object is hypothetical" type="boolean" value="false"/>
<property name="homomultimer" short-description="" type="int" value="0"/>
<property name="size" short-description="" type="dimension"/>
<property name="fill" short-description="" type="brush"/>
<property name="border" short-description="" type="pen"/>
<property name="proteinType" short-description="Protein type" type="String" value=""/>
<property elementType="composite" name="residues" short-description="residues" type="array">
<property name="residue" short-description="residue" type="composite">
<property name="id" short-description="" type="String" value=""/>
<property name="name" short-description="" type="String" value=""/>
<property name="angle" short-description="" type="int" value="0"/>
<property name="modification" short-description="" type="String" value=""/>
</property>
</property>
<property elementType="composite" name="geneRegions" short-description="geneRegions" type="array">
<property name="region" short-description="region" type="composite">
<property name="id" short-description="" type="String" value=""/>
<property name="name" short-description="" type="String" value=""/>
<property name="type" short-description="type" type="composite">
<property name="size" short-description="" type="int" value="0"/>
<property name="position" short-description="" type="int" value="0"/>
</property>
</property>
</property>
<property name="rnaType" short-description="" type="String" value=""/>
<property elementType="composite" name="rnaRegions" short-description="rnaRegions" type="array">
<property name="region" short-description="region" type="composite">
<property name="id" short-description="" type="String" value=""/>
<property name="name" short-description="" type="String" value=""/>
<property name="type" short-description="type" type="composite">
<property name="size" short-description="" type="int" value="0"/>
<property name="position" short-description="" type="int" value="0"/>
</property>
</property>
</property>
<property name="moleculeType" short-description="" type="String" value=""/>
<property name="reactionType" short-description="" type="String" value=""/>
<property name="reversible" short-description="" type="boolean" value="false"/>
<property name="pen" short-description="" type="pen"/>
<property name="compartmentShape" short-description="" type="int" value="0"/>
</properties>
<nodes>
<node icon="icon0" type="molecule-protein">
<propertyRef name="border"/>
<propertyRef name="fill"/>
<propertyRef name="homomultimer" value="0"/>
<propertyRef name="hypothetical" value="false"/>
<propertyRef name="proteinType" value=""/>
<propertyRef name="residues"/>
<propertyRef name="size"/>
<propertyRef name="title" value=""/>
</node>
<node icon="icon1" type="molecule-gene">
<propertyRef name="border"/>
<propertyRef name="fill"/>
<propertyRef name="geneRegions"/>
<propertyRef name="homomultimer" value="0"/>
<propertyRef name="hypothetical" value="false"/>
<propertyRef name="size"/>
<propertyRef name="title" value=""/>
</node>
<node icon="icon2" type="molecule-RNA">
<propertyRef name="border"/>
<propertyRef name="fill"/>
<propertyRef name="homomultimer" value="0"/>
<propertyRef name="hypothetical" value="false"/>
<propertyRef name="rnaRegions"/>
<propertyRef name="size"/>
<propertyRef name="title" value=""/>
</node>
<node icon="icon3" type="semantic-concept-state">
<propertyRef name="border"/>
<propertyRef name="fill"/>
<propertyRef name="homomultimer" value="0"/>
<propertyRef name="hypothetical" value="false"/>
<propertyRef name="size"/>
<propertyRef name="title" value=""/>
</node>
<node icon="icon4" type="molecule-substance">
<propertyRef name="border"/>
<propertyRef name="fill"/>
<propertyRef name="homomultimer" value="0"/>
<propertyRef name="hypothetical" value="false"/>
<propertyRef name="moleculeType" value=""/>
<propertyRef name="size"/>
<propertyRef name="title" value=""/>
</node>
<node icon="icon5" type="degraded">
<propertyRef name="border"/>
<propertyRef name="fill"/>
<propertyRef name="size"/>
</node>
<node icon="icon6" type="unknown">
<propertyRef name="border"/>
<propertyRef name="fill"/>
<propertyRef name="homomultimer" value="0"/>
<propertyRef name="hypothetical" value="false"/>
<propertyRef name="size"/>
<propertyRef name="title" value=""/>
</node>
<node icon="icon7" isCompartment="true" type="compartment">
<propertyRef name="compartmentShape" value="0"/>
<propertyRef name="fill"/>
<propertyRef name="size"/>
<propertyRef name="title" value=""/>
</node>
<node icon="icon8" isCompartment="true" type="complex">
<propertyRef name="border"/>
<propertyRef name="fill"/>
<propertyRef name="size"/>
<propertyRef name="title" value=""/>
</node>
</nodes>
<edges/>
<reactions>
<reaction icon="icon9" type="reaction"/>
</reactions>
<viewOptions>
<property name="genericProteinSize" short-description="" type="dimension" value="80;40"/>
<property name="genericProteinBorder" short-description="" type="pen"/>
<property name="genericProteinFill" short-description="" type="brush"/>
<property name="receptorProteinSize" short-description="" type="dimension" value="80;50"/>
<property name="receptorProteinBorder" short-description="" type="pen"/>
<property name="receptorProteinFill" short-description="" type="brush"/>
<property name="ionChannelProteinSize" short-description="" type="dimension" value="80;40"/>
<property name="ionChannelProteinBorder" short-description="" type="pen"/>
<property name="ionChannelProteinFill" short-description="" type="brush"/>
<property name="truncatedProteinSize" short-description="" type="dimension" value="70;25"/>
<property name="truncatedProteinBorder" short-description="" type="pen"/>
<property name="truncatedProteinFill" short-description="" type="brush"/>
<property name="geneSize" short-description="" type="dimension" value="80;40"/>
<property name="geneBorder" short-description="" type="pen"/>
<property name="geneFill" short-description="" type="brush"/>
<property name="rnaSize" short-description="" type="dimension" value="90;25"/>
<property name="rnaBorder" short-description="" type="pen"/>
<property name="rnaFill" short-description="" type="brush"/>
<property name="antisenceRnaSize" short-description="" type="dimension" value="90;25"/>
<property name="antisenceRnaBorder" short-description="" type="pen"/>
<property name="antisenceRnaFill" short-description="" type="brush"/>
<property name="phenotypeSize" short-description="" type="dimension" value="80;30"/>
<property name="phenotypeBorder" short-description="" type="pen"/>
<property name="phenotypeFill" short-description="" type="brush"/>
<property name="ionSize" short-description="" type="dimension" value="25;25"/>
<property name="ionBorder" short-description="" type="pen"/>
<property name="ionFill" short-description="" type="brush"/>
<property name="simpleMoleculeSize" short-description="" type="dimension" value="70;25"/>
<property name="simpleMoleculeBorder" short-description="" type="pen"/>
<property name="simpleMoleculeFill" short-description="" type="brush"/>
<property name="unknownSize" short-description="" type="dimension" value="70;25"/>
<property name="unknownBorder" short-description="" type="pen"/>
<property name="unknownFill" short-description="" type="brush"/>
<property name="complexSize" short-description="" type="dimension" value="100;120"/>
<property name="complexBorder" short-description="" type="pen"/>
<property name="complexFill" short-description="" type="brush"/>
<property name="complexPackedSize" short-description="" type="dimension" value="80;60"/>
<property name="complexPackedBorder" short-description="" type="pen"/>
<property name="complexPackedFill" short-description="" type="brush"/>
<property name="compartmentSize" short-description="" type="dimension" value="200;150"/>
<property name="compartmentInnerBorder" short-description="" type="pen"/>
<property name="compartmentOuterBorder" short-description="" type="pen"/>
<property name="compartmentFill" short-description="" type="brush"/>
<property name="compartmentThikness" short-description="" type="int" value="12"/>
<property name="transitionPen" short-description="" type="pen"/>
<property name="knownTransitionOmittedPen" short-description="" type="pen"/>
<property name="unknownTransitionPen" short-description="" type="pen"/>
<property name="catalysisPen" short-description="" type="pen"/>
<property name="unknownCatalysisPen" short-description="" type="pen"/>
<property name="inhibitionPen" short-description="" type="pen"/>
<property name="unknownInhibitionPen" short-description="" type="pen"/>
<property name="transportPen" short-description="" type="pen"/>
<property name="addReactantPen" short-description="" type="pen"/>
<property name="addProductPen" short-description="" type="pen"/>
<property name="associationPen" short-description="" type="pen"/>
<property name="dissitiationPen" short-description="" type="pen"/>
<property name="truncationPen" short-description="" type="pen"/>
<property name="transcriptionalActivationPen" short-description="" type="pen"/>
<property name="transcriptionalInhibitionPen" short-description="" type="pen"/>
<property name="translationalActivationPen" short-description="" type="pen"/>
<property name="translationalInhibitionPen" short-description="" type="pen"/>
</viewOptions>
<viewBuilder prototype="biouml.model.DefaultDiagramViewBuilder">
<nodeView type="reaction"><![CDATA[function f(container, de, options, g, isNode, role) 
        {
            var d, pen, brush;
            d = new Dimension(4,4);
            brush = new Brush(new Color(0.0, 0.0, 0.0));
            brush2 = new Brush(new Color(1.0, 1.0, 1.0));
            pen = new Pen(1, Color.black);
            if(isNode)
            {
                var ellipse = new EllipseView(pen, brush, 0, 0, d.width, d.height);
                container.add(ellipse);
            }
            else
            {
                var path = JSUtility.getPath(de);
                if(role == 'product')
                {
                    var arrow = new ArrowView(pen, brush, path, null, ArrowView.createTriangleTip(pen, brush2, 15, 5));
                }
                else
                {
                    var arrow = new ArrowView(pen, brush, path, 0, 0);
                }
                container.add(arrow);
            }
            return false; 
        }]]></nodeView>
<nodeView type="molecule-gene"><![CDATA[function f(container, node, options, g) 
        { 
            var title = new TextView(node.getValue('title', ''), options.getNodeTitleFont(), g); 
            var homomultimer = node.getValue('homomultimer', 1); 
            if(homomultimer<1) homomultimer = 1;
            var d, pen, brush; 
            var correctY = 0; 
            for(i=0; i<homomultimer; i++)  
            { 
               var composite = new CompositeView();  
               d = new Dimension(80,40); 
               brush = new Brush(new Color(1.0, 1.0, 0.4)); 
               pen = options.getDefaultPen(); 
               if(node.getValue('hypothetical', false) == 'true')
               {
                  pen = new Pen(new BasicStroke(1,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER, 10, new Array (3,3), 0), pen.getColor()); 
               }
               var box = new BoxView(pen, brush, 0, 0, d.width, d.height);  
               composite.add(box);   
               var regions = node.getValue('geneRegions', null); 
               if(regions != null) 
               { 
                   for(j=0; j<regions.length; j++) 
                   { 
                      var r = regions[j]; 
                      var type = r.getValue('type'); 
                      var size = r.getValue('size'); 
                      if(type == 'empty') 
                      { 
                          size = 20; 
                      } 
                      var position = r.getValue('position'); 
                      correctY = 10; 
                      if((d.width-size-position)<0) 
                      { 
                          position = d.width-size; 
                      } 
                      if((type == 'promoter')||(type == 'codingRegion')||(type == 'transcriptionStartingPointL')||(type == 'transcriptionStartingPointR')) 
                      { 
                          var box = new BoxView(pen, new Brush(new Color(1.0, 1.0, 1.0)), position, -10, size, 20); 
                          composite.add(box); 
                          if(type == 'transcriptionStartingPointL') 
                          { 
                               var x = new Array (-(-position), 20-(-position), -(-position)); 
                               var y = new Array (-10,0,10); 
                               var polygon = new PolygonView(null, new Brush(new Color(0.9,0.9,0.9)), x, y);  
                               composite.add(polygon); 
                          } 
                          else if(type == 'transcriptionStartingPointR') 
                          { 
                               var x = new Array (-(-position-size)-20, -(-position-size), -(-position-size)); 
                               var y = new Array (0,-10,10); 
                               var polygon = new PolygonView(null, new Brush(new Color(0.9,0.9,0.9)), x, y);  
                               composite.add(polygon); 
                          } 
                          var box = new BoxView(pen, null, position, -10, size, 20); 
                          composite.add(box); 
                      } 
                      else 
                      { 
                          var ellipse = new EllipseView(new Pen(1, Color.gray), new Brush(new Color(1.0, 1.0, 1.0)), position, -10, size, 20); 
                          composite.add(ellipse); 
                      } 
                   } 
               } 
               container.add(composite, CompositeView.X_CC | CompositeView.Y_CC, new Point(-3-2*i, -3-2*i));  
            } 
            var textPosition = new Point((d.width-title.getBounds().width)/2, ((d.height-title.getBounds().height)/2)+correctY); 
            container.add(title, CompositeView.X_LL | CompositeView.Y_TT, textPosition); 
            return false;  
        }]]></nodeView>
<nodeView type="semantic-concept-state"><![CDATA[function f(container, node, options, g) 
        { 
            var title = new TextView(node.getValue('title', ''), options.getNodeTitleFont(), g); 
            var homomultimer = node.getValue('homomultimer', 1);
            if(homomultimer<1) homomultimer = 1;
            var d, pen, brush; 
            for(i=0; i<homomultimer; i++)  
            { 
               var composite = new CompositeView();  
               d = new Dimension(80,30); 
               brush = new Brush(new Color(0.8, 0.5, 1.0)); 
               pen = options.getDefaultPen(); 
               if(node.getValue('hypothetical', false) == 'true')
               {
                  pen = new Pen(new BasicStroke(1,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER, 10, new Array (3,3), 0), pen.getColor()); 
               }
               var x = new Array (d.height/2,0,d.height/2,d.width-d.height/2,d.width,d.width-d.height/2); 
               var y = new Array (0,d.height/2,d.height,d.height,d.height/2,0); 
               var polygon = new PolygonView(pen, brush, x, y);  
               composite.add(polygon);   
               container.add(composite, CompositeView.X_CC | CompositeView.Y_CC, new Point(-3-2*i, -3-2*i));  
            } 
            var textPosition = new Point((d.width-title.getBounds().width)/2, (d.height-title.getBounds().height)/2); 
            container.add(title, CompositeView.X_LL | CompositeView.Y_TT, textPosition); 
            return false;
        }]]></nodeView>
<nodeView type="complex"><![CDATA[function f(container, node, options, g)
{
    var d, pen, brush;
    d = node.getValue("shapeSize", null);
    if(d.width == 0 && d.height == 0)
    {
        d.width = 150;
        d.height = 150;
    }
    brush = new Brush(new Color(0.9, 0.9, 0.9));
    pen = new Pen(2, Color.black);
    var title = new TextView(node.getValue('title', ''), options.getNodeTitleFont(), g);
    var rect = new RoundRectangle2D.Float(0, 0, d.width, d.height, 20, 20);
    var box = new BoxView(pen, brush, rect);
    container.add(box);
    container.add(title, CompositeView.X_CC | CompositeView.Y_BB, new Point(0, 3));
    return false;
}]]></nodeView>
<nodeView type="molecule-protein"><![CDATA[function f(container, node, options, g) 
        { 
            var title = new TextView(node.getValue('title', ''), options.getNodeTitleFont(), g); 
            var type = node.getValue('proteinType', 'generic'); 
            var homomultimer = node.getValue('homomultimer', 1); 
            if(homomultimer<1) homomultimer = 1;
            var d, pen, brush; 
            var correctX=0; 
            var correctY=0; 
            for(i=0; i<homomultimer; i++)  
            { 
               var composite = new CompositeView();  
               if(type == 'receptor')
               {  
                  d = new Dimension(80,50); 
                  brush = new Brush(new Color(1.0, 1.0, 0.8)); 
                  pen = options.getDefaultPen(); 
                  if(node.getValue('hypothetical', false) == 'true')
                  {
                     pen = new Pen(new BasicStroke(1,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER, 10, new Array (3,3), 0), pen.getColor()); 
                  }
                  var x = new Array (0,0,d.width/2,d.width,d.width,d.width/2); 
                  var y = new Array (0,d.height-10,d.height,d.height-10,0,10); 
                  var polygon = new PolygonView(pen, brush, x, y);  
                  composite.add(polygon);  
               } 
               else if(type == 'ion channel')
               {  
                  d = new Dimension(80,40); 
                  brush = new Brush(new Color(0.8, 1.0, 1.0)); 
                  pen = options.getDefaultPen(); 
                  if(node.getValue('hypothetical', false) == 'true')
                  {
                     pen = new Pen(new BasicStroke(1,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER, 10, new Array (3,3), 0), pen.getColor()); 
                  }
                  var rect = new RoundRectangle2D.Float(0, 0, d.width*2/3, d.height, 10, 10); 
                  var box = new BoxView(pen, brush, rect);  
                  composite.add(box); 
                  var rect2 = new RoundRectangle2D.Float(d.width*2/3, 0, d.width/3, d.height, 10, 10); 
                  var box2 = new BoxView(pen, brush, rect2);  
                  composite.add(box2); 
               }  
               else if(type == 'truncated')
               {  
                  d = new Dimension(70,25); 
                  brush = new Brush(new Color(1.0, 0.8, 0.8)); 
                  pen = options.getDefaultPen(); 
                  if(node.getValue('hypothetical', false) == 'true')
                  {
                     pen = new Pen(new BasicStroke(1,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER, 10, new Array (3,3), 0), pen.getColor()); 
                  }
                  var x = new Array (0,0,d.width-10,d.width-10,d.width,d.width); 
                  var y = new Array (0,d.height,d.height,d.height/2-3,d.height/2+3,0); 
                  var polygon = new PolygonView(pen, brush, x, y);  
                  composite.add(polygon);  
               } 
               else
               {  
                  d = new Dimension(80,40); 
                  brush = new Brush(new Color(0.8, 1.0, 0.8)); 
                  pen = options.getDefaultPen(); 
                  if(node.getValue('hypothetical', false) == 'true')
                  {
                     pen = new Pen(new BasicStroke(1,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER, 10, new Array (3,3), 0), pen.getColor()); 
                  }
                  var rect = new RoundRectangle2D.Float(0, 0, d.width, d.height, 10, 10); 
                  var box = new BoxView(pen, brush, rect);  
                  composite.add(box); 
               }  
               var residues = node.getValue('residues', null); 
               if(residues != null) 
               { 
                   for(j=0; j<residues.length; j++) 
                   { 
                      var r = residues[j]; 
                      var angle = r.getValue('angle'); 
                      var angleLimit = Math.atan(d.height/d.width); 
                      var pos = new Point(0, d.height/2); 
                      if(angle>=-angleLimit && angle<=angleLimit) 
                      { 
                          pos.y = (d.height-d.width*Math.tan(angle))/2; 
                          correctX = 10; 
                          if(pos.y<10) correctY = 10-pos.y; 
                      } 
                      else if(angle>=angleLimit && angle<=Math.PI-angleLimit) 
                      { 
                          pos.y = 0; 
                          pos.x = (d.width-d.height/Math.tan(angle))/2; 
                          correctY = 10; 
                          if(pos.x<10) correctX = 10-pos.x;
                          if(type == 'receptor')
                          {
                              if(pos.x <= d.width/2)
                              {
                                  pos.y = pos.y + (20*pos.x/d.width);
                              }
                              else
                              {
                                  pos.y = pos.y + (20*(d.width - pos.x)/d.width);
                              }
                          } 
                      } 
                      else if(angle<=-angleLimit && angle>=-Math.PI+angleLimit) 
                      { 
                          pos.y = d.height; 
                          pos.x = (d.width+d.height/Math.tan(angle))/2; 
                          if(pos.x<10) correctX = 10-pos.x; 
                          if(type == 'receptor')
                          {
                              if(pos.x <= d.width/2)
                              {
                                  pos.y = pos.y - (20*(d.width/2 - pos.x)/d.width);
                              }
                              else
                              {
                                  pos.y = pos.y - (20*(pos.x - d.width/2)/d.width);
                              }
                          } 
                      } 
                      else if((angle>=Math.PI-angleLimit && angle<=Math.PI) || (angle<=-Math.PI+angleLimit && angle>=-Math.PI)) 
                      { 
                          pos.y = (d.height-d.width*Math.tan(Math.PI-angle))/2; 
                          pos.x = d.width; 
                          if(pos.y<10) correctY = 10-pos.y; 
                          if(type == 'truncated' && pos.y > d.height/2)
                          {
                              pos.x = pos.x - 10;
                          } 
                      } 
                      var modification = r.getValue('modification');  
                      if(modification == 'phosporylated')
                      { 
                          var literaText = 'P';
                      }  
                      else if(modification == 'acetylated')
                      { 
                          var literaText = 'Ac';
                      }  
                      else if(modification == 'ubiquitinated')
                      { 
                          var literaText = 'Ub';
                      }  
                      else if(modification == 'methylated')
                      { 
                          var literaText = 'Me';
                      }  
                      else if(modification == 'hydroxylated')
                      { 
                          var literaText = 'OH';
                      }  
                      else if(modification == 'empty')
                      { 
                          var literaText = '';
                      }  
                      else if(modification == "don't care")
                      { 
                          var literaText = '*';
                      }  
                      else  
                      { 
                          var literaText = '?';
                      }  

                      var ellipse = new EllipseView(pen, new Brush(new Color(1.0, 1.0, 1.0)), pos.x-10, pos.y-10, 20, 20); 
                      composite.add(ellipse);  
                      var litera = new TextView(literaText, new Point(pos.x, pos.y+5), TextView.CENTER, options.getNodeTitleFont(), g); 
                      composite.add(litera);  
                   } 
               } 
               container.add(composite, CompositeView.X_CC | CompositeView.Y_CC, new Point(-3-2*i, -3-2*i));   
            } 
            var textPosition = new Point(((d.width-title.getBounds().width)/2)+correctX, ((d.height-title.getBounds().height)/2)+correctY); 
            container.add(title, CompositeView.X_LL | CompositeView.Y_TT, textPosition); 
            return false;  
        }]]></nodeView>
<nodeView type="degraded"><![CDATA[function f(container, node, options, g)
        { 
            var d, pen, brush;
            d = new Dimension(20,20);
            brush = new Brush(new Color(1.0, 0.8, 0.8));
            pen = options.getDefaultPen();
            var ellipse = new EllipseView(pen, brush, 0, 0, d.width, d.height);
            var x = new Array (3,d.width-3);
            var y = new Array (d.height+3,-3);
            var polygon = new PolygonView(pen, null, x, y); 
            container.add(ellipse);
            container.add(polygon);
            return false; 
        }]]></nodeView>
<nodeView type="molecule-RNA"><![CDATA[function f(container, node, options, g) 
        {         
            var title = new TextView(node.getValue('title', ''), options.getNodeTitleFont(), g); 
            var type = node.getValue('rnaType', 'generic'); 
            var homomultimer = node.getValue('homomultimer', 1);
            if(homomultimer<1) homomultimer = 1;            
            var d, pen, brush; 
            var correctY = 0; 
            for(i=0; i<homomultimer; i++)  
            { 
               var composite = new CompositeView();  
               if(type == 'antisence RNA')
               {  
                  d = new Dimension(90,25); 
                  brush = new Brush(new Color(1.0, 0.4, 0.4)); 
                  pen = options.getDefaultPen(); 
                  if(node.getValue('hypothetical', false) == 'true')
                  {
                     pen = new Pen(new BasicStroke(1,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER, 10, new Array (3,3), 0), pen.getColor()); 
                  }
                  var x = new Array (0,d.height,d.width,d.width-d.height); 
                  var y = new Array (0,d.height,d.height,0); 
                  var polygon = new PolygonView(pen, brush, x, y);  
                  composite.add(polygon); 
               } 
               else
               {  
                  d = new Dimension(90,25); 
                  brush = new Brush(new Color(0.4, 1.0, 0.4)); 
                  pen = options.getDefaultPen(); 
                  if(node.getValue('hypothetical', false) == 'true')
                  {
                     pen = new Pen(new BasicStroke(1,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER, 10, new Array (3,3), 0), pen.getColor()); 
                  }
                  var x = new Array (d.height,0,d.width-d.height,d.width); 
                  var y = new Array (0,d.height,d.height,0); 
                  var polygon = new PolygonView(pen, brush, x, y);  
                  composite.add(polygon); 
               }  
               var regions = node.getValue('rnaRegions', null); 
               if(regions != null) 
               { 
                   for(j=0; j<regions.length; j++) 
                   { 
                      var r = regions[j]; 
                      var rtype = r.getValue('type'); 
                      var size = r.getValue('size'); 
                      var position = r.getValue('position'); 
                      correctY = 10; 
                      if((d.width-d.height-size-position)<0) 
                      { 
                          position = d.width-d.height-size; 
                      } 
                      if(type != 'antisence RNA') 
                      { 
                          position = d.height -(-position); 
                      } 
                      var box = new BoxView(pen, new Brush(new Color(1.0, 1.0, 1.0)), position, -10, size, 20); 
                      composite.add(box); 
                   } 
               } 
               container.add(composite, CompositeView.X_CC | CompositeView.Y_CC, new Point(-3-2*i, -3-2*i));  
            } 
            var textPosition = new Point((d.width-title.getBounds().width)/2, ((d.height-title.getBounds().height)/2)+correctY); 
            container.add(title, CompositeView.X_LL | CompositeView.Y_TT, textPosition); 
            return false;  
        }]]></nodeView>
<nodeView type="unknown"><![CDATA[function f(container, node, options, g) 
        { 
            var title = new TextView(node.getValue('title', ''), options.getNodeTitleFont(), g); 
            var homomultimer = node.getValue('homomultimer', 1); 
            if(homomultimer<1) homomultimer = 1;
            var d, pen, brush; 
            for(i=0; i<homomultimer; i++)  
            { 
               var composite = new CompositeView(); 
               d = new Dimension(70,25); 
               brush = new Brush(new Color(0.9, 0.9, 0.9));
               var ellipse = new EllipseView(null, brush, 0, 0, d.width, d.height); 
               composite.add(ellipse);  
               container.add(composite, CompositeView.X_CC | CompositeView.Y_CC, new Point(-3-2*i, -3-2*i));  
            } 
            var textPosition = new Point((d.width-title.getBounds().width)/2, (d.height-title.getBounds().height)/2); 
            container.add(title, CompositeView.X_LL | CompositeView.Y_TT, textPosition); 
            return false;
        }]]></nodeView>
<nodeView type="molecule-substance"><![CDATA[function f(container, node, options, g) 
        { 
            var title = new TextView(node.getValue('title', ''), options.getNodeTitleFont(), g); 
            var type = node.getValue('moleculeType', 'simple molecule'); 
            var homomultimer = node.getValue('homomultimer', 1); 
            if(homomultimer<1) homomultimer = 1;
            var d, pen, brush; 
            for(i=0; i<homomultimer; i++)  
            { 
               var composite = new CompositeView();  
               if(type == 'ion')
               {  
                  d = new Dimension(25,25); 
                  brush = new Brush(new Color(0.6, 0.6, 1.0)); 
                  pen = options.getDefaultPen(); 
                  if(node.getValue('hypothetical', false) == 'true')
                  {
                     pen = new Pen(new BasicStroke(1,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER, 10, new Array (3,3), 0), pen.getColor()); 
                  }
                  var ellipse = new EllipseView(pen, brush, 0, 0, d.width, d.height); 
                  composite.add(ellipse);  
               } 
               else
               {  
                  d = new Dimension(70,25); 
                  brush = new Brush(new Color(0.8, 1.0, 0.4)); 
                  pen = options.getDefaultPen(); 
                  if(node.getValue('hypothetical', false) == 'true')
                  {
                     pen = new Pen(new BasicStroke(1,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER, 10, new Array (3,3), 0), pen.getColor()); 
                  }
                  var ellipse = new EllipseView(pen, brush, 0, 0, d.width, d.height); 
                  composite.add(ellipse);  
               }  
               container.add(composite, CompositeView.X_CC | CompositeView.Y_CC, new Point(-3-2*i, -3-2*i));  
            } 
            var textPosition = new Point((d.width-title.getBounds().width)/2, (d.height-title.getBounds().height)/2); 
            container.add(title, CompositeView.X_LL | CompositeView.Y_TT, textPosition); 
            return false;  
        }]]></nodeView>
<nodeView type="compartment"><![CDATA[function f(container, node, options, g) 
        {
            var d = node.getValue("shapeSize", null);
            if(d.width == 0 && d.height == 0) 
    	    {
        	d.width = 200; 
        	d.height = 150;
    	    } 
            var innerPen = new Pen(1, new Color(0.8, 0.8, 0.0)); 
            var outerPen = new Pen(3, new Color(0.8, 0.8, 0.0)); 
            var fill = new Brush(new Color(0.9, 0.9, 0.7)); 
            var thickness = 12; 
            var title = new TextView(node.getValue('title', ''), options.getNodeTitleFont(), g); 
            var type = node.getValue('compartmentShape', 1); 
            if(type == 1)
            {  
               var rect = new RoundRectangle2D.Float(0, 0,  d.width, d.height, thickness, thickness); 
               var box = new BoxView(outerPen, null, rect);  
               var rect2 = new RoundRectangle2D.Float(0, 0,  d.width-thickness, d.height-thickness, thickness/4, thickness/4); 
               var box2 = new BoxView(new Pen(thickness, fill.getPaint()), null, rect2);  
               var rect3 = new RoundRectangle2D.Float(0, 0,  d.width-2*thickness, d.height-2*thickness, thickness/4, thickness/4); 
               var box3 = new BoxView(innerPen, null, rect3);  
               container.add(box2);  
               container.add(box, CompositeView.X_CC | CompositeView.Y_CC, new Point(0, 0));  
               container.add(box3, CompositeView.X_CC | CompositeView.Y_CC, new Point(0, 0));  
            }  
            else if(type == 2)
            {  
               var box = new EllipseView(outerPen, null, 0, 0, d.width, d.height);  
               var box2 = new EllipseView(new Pen(thickness, fill.getPaint()), null, 0, 0, d.width-thickness, d.height-thickness); 
               var box3 = new EllipseView(innerPen, null, 0, 0, d.width-2*thickness, d.height-2*thickness);  
               container.add(box2);  
               container.add(box, CompositeView.X_CC | CompositeView.Y_CC, new Point(0, 0));  
               container.add(box3, CompositeView.X_CC | CompositeView.Y_CC, new Point(0, 0));  
            }
            else
            {  
               var box = new BoxView(outerPen, null, 0, 0, d.width, d.height);  
               var box2 = new BoxView(new Pen(thickness, fill.getPaint()), null, 0, 0, d.width-thickness, d.height-thickness); 
               var box3 = new BoxView(innerPen, null, 0, 0, d.width-2*thickness, d.height-2*thickness);  
               container.add(box2);  
               container.add(box, CompositeView.X_CC | CompositeView.Y_CC, new Point(0, 0));  
               container.add(box3, CompositeView.X_CC | CompositeView.Y_CC, new Point(0, 0));  
            }    
            container.add(title, CompositeView.X_CC | CompositeView.Y_BB, new Point(0, thickness+5)); 
            return false; 
        }]]></nodeView>
</viewBuilder>
<icons>
<icon name="icon0">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA4ElEQVR42u1PTYvCMBTM//8D7VV6EQRNmsTDXvYiXexWtPGjvbU02Nr+idm+dBUpCou3Bd8wL8x7k4HH2P+vtm1xqS+whXWsigq2tAPH+ndGpD9d14GZ1CDgAXzpwxOeox/6jmN9m0sPs48ZsmMGtvneYG7m2PfYPcG2x70mr8gEkjgBoyZz6RbJH0HeMA+HgPXXGvzEXw+gE0i8HEBN5xqHHs9uHs/Iq3I1BKTbFJPPCZbNEsoqyEq69xGvO91oTFdTmJ0Bq881oijCQi4cueIQWjwk7a6eOI5RFiXYu9gPDNfrs0YbWfUAAAAASUVORK5CYII=</icon>
<icon name="icon1">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAyElEQVR42u2SyQrCMBRF86dFbB0+weHjCm78hUQz2GIXBVsN0S6vL08LIl24VPDBIfcN964ixO9XCAGn0wXn8w1tG9A0gfSVee9faRqPrusgpNwjz5fQegkpHyi1Yt77Hq0X2GzW9DoIpRwNUwAJMfqQhD1K2RhgScxoGEMmH5Ky50sCpIwBUxqOiexJ+qKHZmP2cMBu57DdzlHXKapqguMx43eIfhdvo0cpA+G9h7UGReHgnMHhYFkPEXfxpiwdjNnTP2kh/iXuclfr6C88v6cAAAAASUVORK5CYII=</icon>
<icon name="icon2">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAl0lEQVR42u2SPQqEMBSEPaWBBHYVZE8hBK8iYuEJBEFQ0Np6QYw/lSBio4XIGMuwm3JhC+djquHjNc8w7vxhkjqBW7vwhKct7zh4xdEMDRQ5FznYxPCUWBoeErIQpH2qymVXwp5tOJKXhmu7DsTvWJWLtoA5miAHAdvZ19Kdgk70U97WDVEVwW99hCLUNhABsj7D/SU/yAnngLAYTQ4/hQAAAABJRU5ErkJggg==</icon>
<icon name="icon3">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAtUlEQVR42u2SwQqCUBBF/WYrCkvIvqFFPxD1AW16i1RcBfqsIMgolZdaQQQ+0V3cpE1IShuXHjjMYpjLMIwgNNQLJUdMZRXzkf7jTNE+1T8EKB3eEh9am4MOAKtKCVj2GTznUgwxFyfoYgo6BMw/UjkP6YYI3Ns3xN2HIFIAK29SpVo7d917wRgz8JgXt/AcBiIzqK0EaicudSVyGBMfScrL7/C4P3HeRPB21wojZGmG5t1q5g0BE+22UvijMQAAAABJRU5ErkJggg==</icon>
<icon name="icon4">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA9UlEQVR42u2SwUvCcBTH/Ru7tWqVQeco8Fr/QNfqP+gU1qCBO+ivRUSFTZsQktu0qbGTuK3mNP00hlGBhw518wufw3uP7+O9x8tk5vpb+b1X3I7Fs1fFqGsopUMUcUTNEknOpNt1GUXvzDQ/NIoo5hbai4zwlxGhxOVgMUUEEhfBCmprDe1xF7tT+dnEaTU4ay5gksVgk/sp5SmfsZGyhOpsEPjhV5M4HqHXDyh4EldDibvJamLMfmOd27Gc1lRXpmzlZ6/xZNcwnDyn13uc3OygezlK7RzH+jZaZZ+qfU4zmfZXB43fxgT9iLA/YBhNmL/YP+oDW5/OxBe8v18AAAAASUVORK5CYII=</icon>
<icon name="icon5">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAuklEQVR42u2SPQqDUBCEc2S7nMFCSGOlgj9go62CSBJBJCZBCYqaAzwVIhaRFOkmi5BWnr1TLsy3u7O7221aFGtbDOOILM+xyvieJoSOg9i2YYkiDpK0DnB0XXyiCKhrJIqCu67jkWV8ENb3uFjWbGa+j5TMKAoEVOMCtH9AWSKUZXzTFKAMAtPkXyP2PNw0DU/KAU2Dq2Ggoim4AROFuBcEnFQVZ5omTZJ1Ib6GARV1Zl03n3F76GX9AEOijjoGrpBVAAAAAElFTkSuQmCC</icon>
<icon name="icon6">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAcUlEQVR42u2SSQrAIAxFvf85HSKoqES3KRGstBYpdNOFwsdFfl4GIujjExtwBSAixRjJOTfJe99itdYZkHMmYwxJKUkptRR72FtKGYCerLV+JfZaaweA2wKAs8KqOv89+XGJKaU2730HIYQW24f0R8ABNcHs7yopnzQAAAAASUVORK5CYII=</icon>
<icon name="icon7">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAZklEQVR42mNgoBR8/Hjw/9u324B4C4l42/+PH/f+Z3jypP//06fL/r98uYEk/Pz56v+PHnX/Z3j6dNr/r19v/ifV5T9+PPn/+PEEiAFfvlwn2YDv3x+NGjC4DKAoHVCcEinOCwMOAA5QYYt3FFKvAAAAAElFTkSuQmCC</icon>
<icon name="icon8">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAb0lEQVR42t2TSwrAIAxEc/+zuVARzE7F3zGmTG+Qumhp4C3fIJkoOBx5P2CMgRgjcs4mUkqYc0K896i1orVmgk4IAaKq2HtjrWWCDl3hc54G0P1DwPESWUXvHbwHK3eN7NQ5B96DBTqllC/8hdOAC5U8wsWMjmqxAAAAAElFTkSuQmCC</icon>
<icon name="icon9">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAArklEQVR42tWTzQqEIBSFe7Ves3dwFbUQSluVRUQLEfyFXuQMCrOaGCoXwwiCXOHcc77LLZB5it8LdF2HaZryHOz7jr7vIYSA9/55hBACKKXpHsfxnIG1FsuyYBiG0z/O+TWIMVJZlpBSQmsNY0yqKaVACEFd198FIuCqqtL7HWmeZ7Rti3EcE69TgW3bwBjDuq73GESLTdOkLrem4JxLdq90/BCIds9o/9Eu5Aq8AAKz4GIDCaKIAAAAAElFTkSuQmCC</icon>
</icons>
<semanticController prototype="biouml.model.DefaultSemanticController"/>
<examples>
<example name="test">
<diagram diagramType="biouml.model.xml.XmlDiagramType" notation="">
<diagramInfo/>
<layouterInfo>
<o n="layouterInfo" t="ru.biosoft.graph.ForceDirectedLayouter">
<v>
<wi n="initialPlacement" v="1"/>
<wi n="edgeLength" v="150"/>
<wf n="repulsion" v="1.0"/>
<wi n="repulsionDistance" v="10"/>
<wf n="gravity" v="0.06"/>
<wi n="orientation" v="0"/>
<wi n="distanceMethod" v="0"/>
<wf n="attraction" v="1.0"/>
<wf n="magneticIntencity" v="0.0"/>
<wi n="iterationNumber" v="100"/>
<wf n="minTemperature" v="0.0"/>
<wf n="maxTemperature" v="0.0"/>
<o n="dpl" t="ru.biosoft.graph.DiagonalPathLayouter">
<v>
<wi n="lineDistance" v="10"/>
<o n="selfLoopLayouter" t="ru.biosoft.graph.SelfLoopLayouter">
<v>
<wi n="loopLength" v="30"/>
</v>
</o>
</v>
</o>
<wb n="horisontalMovementAllowed" v="true"/>
<wb n="verticalMovementAllowed" v="true"/>
<o n="pathWeighter" t="ru.biosoft.graph.PathWeighter">
<v>
<wi n="bendPenalty" v="500"/>
<wi n="confluencePenalty" v="50000"/>
<wi n="lengthPenalty" v="1"/>
</v>
</o>
<o n="sl" t="ru.biosoft.graph.SubgraphLayouter">
<v>
<wi n="layerDeltaX" v="150"/>
<wi n="layerDeltaY" v="150"/>
</v>
</o>
</v>
</o>
</layouterInfo>
<compartmentInfo color="255,255,255" height="150" kernel="stub/test" kernel_type="info-diagram" shape="0" width="150" x="0" y="0"/>
<nodes>
<node height="50" kernel="stub/cjdscdsc" kernel_type="semantic-concept-state" width="50" x="215" y="110">
<property name="border" short-description="" type="pen"/>
<property name="fill" short-description="" type="brush"/>
<property name="homomultimer" short-description="" type="int" value="0"/>
<property name="hypothetical" short-description="Indicates whether object is hypothetical" type="boolean" value="false"/>
<property name="size" short-description="" type="dimension"/>
<property name="title" short-description="Object title that will be shown on the diagram" type="String" value=""/>
</node>
<node height="50" kernel="stub/descxsd" kernel_type="degraded" width="50" x="686" y="331">
<property name="border" short-description="" type="pen"/>
<property name="fill" short-description="" type="brush"/>
<property name="size" short-description="" type="dimension"/>
</node>
<node height="50" kernel="stub/gene" kernel_type="molecule-gene" width="50" x="656" y="97">
<property name="border" short-description="" type="pen"/>
<property name="fill" short-description="" type="brush"/>
<property elementType="composite" name="geneRegions" short-description="geneRegions" type="array"/>
<property name="homomultimer" short-description="" type="int" value="0"/>
<property name="hypothetical" short-description="Indicates whether object is hypothetical" type="boolean" value="false"/>
<property name="size" short-description="" type="dimension"/>
<property name="title" short-description="Object title that will be shown on the diagram" type="String" value=""/>
</node>
<node height="50" kernel="stub/gene1" kernel_type="molecule-gene" width="50" x="46" y="36">
<property name="border" short-description="" type="pen"/>
<property name="fill" short-description="" type="brush"/>
<property elementType="composite" name="geneRegions" short-description="geneRegions" type="array"/>
<property name="homomultimer" short-description="" type="int" value="3"/>
<property name="hypothetical" short-description="Indicates whether object is hypothetical" type="boolean" value="false"/>
<property name="size" short-description="" type="dimension"/>
<property name="title" short-description="Object title that will be shown on the diagram" type="String" value=""/>
</node>
<compartment>
<compartmentInfo color="255,255,255" height="129" kernel="stub/gfhcfgc" kernel_type="complex" shape="0" width="215" x="396" y="51"/>
<nodes/>
<edges/>
</compartment>
<compartment>
<compartmentInfo color="255,255,255" height="150" kernel="stub/hvgtyv" kernel_type="compartment" shape="0" width="150" x="397" y="264"/>
<nodes/>
<edges/>
</compartment>
<node height="50" kernel="stub/lalala" kernel_type="semantic-concept-state" width="50" x="655" y="221">
<property name="border" short-description="" type="pen"/>
<property name="fill" short-description="" type="brush"/>
<property name="homomultimer" short-description="" type="int" value="0"/>
<property name="hypothetical" short-description="Indicates whether object is hypothetical" type="boolean" value="false"/>
<property name="size" short-description="" type="dimension"/>
<property name="title" short-description="Object title that will be shown on the diagram" type="String" value=""/>
</node>
<node height="50" kernel="stub/molecule" kernel_type="molecule-substance" width="50" x="127" y="327">
<property name="border" short-description="" type="pen"/>
<property name="fill" short-description="" type="brush"/>
<property name="homomultimer" short-description="" type="int" value="0"/>
<property name="hypothetical" short-description="Indicates whether object is hypothetical" type="boolean" value="false"/>
<property name="moleculeType" short-description="" type="String" value=""/>
<property name="size" short-description="" type="dimension"/>
<property name="title" short-description="Object title that will be shown on the diagram" type="String" value=""/>
</node>
<node height="50" kernel="stub/molecule(2)" kernel_type="molecule-substance" width="50" x="660" y="278">
<property name="border" short-description="" type="pen"/>
<property name="fill" short-description="" type="brush"/>
<property name="homomultimer" short-description="" type="int" value="0"/>
<property name="hypothetical" short-description="Indicates whether object is hypothetical" type="boolean" value="false"/>
<property name="moleculeType" short-description="" type="String" value=""/>
<property name="size" short-description="" type="dimension"/>
<property name="title" short-description="Object title that will be shown on the diagram" type="String" value=""/>
</node>
<node height="50" kernel="stub/protein" kernel_type="molecule-protein" width="50" x="656" y="31">
<property name="border" short-description="" type="pen"/>
<property name="fill" short-description="" type="brush"/>
<property name="homomultimer" short-description="" type="int" value="0"/>
<property name="hypothetical" short-description="Indicates whether object is hypothetical" type="boolean" value="false"/>
<property name="proteinType" short-description="Protein type" type="String" value=""/>
<property elementType="composite" name="residues" short-description="residues" type="array"/>
<property name="size" short-description="" type="dimension"/>
<property name="title" short-description="Object title that will be shown on the diagram" type="String" value=""/>
</node>
<node height="50" kernel="stub/protein1" kernel_type="molecule-protein" width="50" x="183" y="34">
<property name="border" short-description="" type="pen"/>
<property name="fill" short-description="" type="brush"/>
<property name="homomultimer" short-description="" type="int" value="0"/>
<property name="hypothetical" short-description="Indicates whether object is hypothetical" type="boolean" value="false"/>
<property name="proteinType" short-description="Protein type" type="String" value="receptor"/>
<property elementType="composite" name="residues" short-description="residues" type="array"/>
<property name="size" short-description="" type="dimension"/>
<property name="title" short-description="Object title that will be shown on the diagram" type="String" value=""/>
</node>
<node height="50" kernel="stub/reaction_0" kernel_type="reaction" width="50" x="203" y="298">
<property elementType="String" name="nodeRoles" short-description="nodeRoles" type="array">
<item>reactant</item>
<item>reactant</item>
<item>product</item>
</property>
<property elementType="String" name="nodes" short-description="nodes" type="array">
<item>molecule</item>
<item>unknown</item>
<item>scsd</item>
</property>
</node>
<node height="50" kernel="stub/rna" kernel_type="molecule-RNA" width="50" x="654" y="170">
<property name="border" short-description="" type="pen"/>
<property name="fill" short-description="" type="brush"/>
<property name="homomultimer" short-description="" type="int" value="0"/>
<property name="hypothetical" short-description="Indicates whether object is hypothetical" type="boolean" value="false"/>
<property elementType="composite" name="rnaRegions" short-description="rnaRegions" type="array"/>
<property name="size" short-description="" type="dimension"/>
<property name="title" short-description="Object title that will be shown on the diagram" type="String" value=""/>
</node>
<node height="50" kernel="stub/rna1" kernel_type="molecule-RNA" width="50" x="45" y="121">
<property name="border" short-description="" type="pen"/>
<property name="fill" short-description="" type="brush"/>
<property name="homomultimer" short-description="" type="int" value="0"/>
<property name="hypothetical" short-description="Indicates whether object is hypothetical" type="boolean" value="false"/>
<property elementType="composite" name="rnaRegions" short-description="rnaRegions" type="array"/>
<property name="size" short-description="" type="dimension"/>
<property name="title" short-description="Object title that will be shown on the diagram" type="String" value=""/>
</node>
<node height="50" kernel="stub/scsd" kernel_type="degraded" width="50" x="241" y="287">
<property name="border" short-description="" type="pen"/>
<property name="fill" short-description="" type="brush"/>
<property name="size" short-description="" type="dimension"/>
</node>
<node height="50" kernel="stub/unknown" kernel_type="unknown" width="50" x="123" y="250">
<property name="border" short-description="" type="pen"/>
<property name="fill" short-description="" type="brush"/>
<property name="homomultimer" short-description="" type="int" value="0"/>
<property name="hypothetical" short-description="Indicates whether object is hypothetical" type="boolean" value="false"/>
<property name="size" short-description="" type="dimension"/>
<property name="title" short-description="Object title that will be shown on the diagram" type="String" value=""/>
</node>
<node height="50" kernel="stub/unknown(2)" kernel_type="unknown" width="50" x="666" y="385">
<property name="border" short-description="" type="pen"/>
<property name="fill" short-description="" type="brush"/>
<property name="homomultimer" short-description="" type="int" value="0"/>
<property name="hypothetical" short-description="Indicates whether object is hypothetical" type="boolean" value="false"/>
<property name="size" short-description="" type="dimension"/>
<property name="title" short-description="Object title that will be shown on the diagram" type="String" value=""/>
</node>
</nodes>
<edges/>
<filters>
<a n="filters" t="[Lbiouml.model.DiagramFilter;">
<v/>
</a>
</filters>
</diagram>
</example>
</examples>
</graphic-notation>
