package temp;

import java.io.PrintStream;
import java.util.Vector;

public class Line {
	String src_block; // name of the source block
	int src_port;	  // source port
	String dst_block; // name of the destination block
	String dst_port;  // destination port
	
	Vector<Branch> branch_array;  // branch array with the names of the destination blocks
	Block src;				// src block 
	Vector<Block> dst;		// destination blocks
	Vector<String> d_port;	// destination ports
	
	boolean u_delay=false;	// flag for the unit delay
	
	// constructor
	public Line() {
		this.branch_array=new Vector<Branch>();
		this.dst=new Vector<Block>();
		this.d_port = new Vector<String>();
		src_port=1;
	}
	
	/*public int containsBranch(String destin,String prt)
	{
		int i=0;
		int ret=-1;
		
		while(true)
		{
			if(destin.matches(this.branch_array.get(i).dst_block) & prt.matches(this.branch_array.get(i).dst_port))
				ret=i;
			if(this.branch_array.get(i)==this.branch_array.lastElement())
				break;
			i++;
		}
		return ret;
	}*/
	
	// initialize line structure, unit delay and zero order hold blocks.
	public void define(Vector<Block> block_array)
	{
		int i=0;
		int j=0;
		int k=0;
		
		UnitDelay ud=new UnitDelay();
		ZeroOrderHold  zoh=new ZeroOrderHold();
		//SubSystem sub=null;
		
		// find the block from the block_array of the source
		while(true)
		{
			if(block_array.get(i).block_name.contentEquals(this.src_block))
			{
				this.src=block_array.get(i);
				break;
			}
			if(block_array.get(i)==block_array.lastElement())
				break;
			i++;
		}
		i=0;
		
		// find the block/blocks from the block_array that correspond to the destination/destinations of the line
		// define whether zero order hold block is simple (changes the sample time of the data flow or not
		if(!this.branch_array.isEmpty())
		{
			while(true)
			{
				while(true)
				{
					if(block_array.get(k).block_name.matches(this.branch_array.get(j).dst_block) & block_array.get(k).getClass()!=new TriggerPort().getClass())
					{
						if(block_array.get(k).sample_time!=src.sample_time & block_array.get(k).getClass()==new ZeroOrderHold().getClass())
						{
							zoh=(ZeroOrderHold)block_array.get(k);
							zoh.simple=false;
							block_array.remove(block_array.get(k));
							block_array.add(k,zoh);
						}
						this.dst.add(block_array.get(k));
						this.d_port.add(this.branch_array.get(j).dst_port);
					}
					if(this.branch_array.get(j)==this.branch_array.lastElement()) break;
					j++;
				}
				j=0;
				if(block_array.get(k)==block_array.lastElement()) break;
				k++;
			}
		}
		else if(this.branch_array.isEmpty())
		{
			while(true)
			{
				if(block_array.get(i).block_name.matches(dst_block)& block_array.get(i).getClass()!=new TriggerPort().getClass())
				{
					if(block_array.get(i).sample_time!=this.src.sample_time & block_array.get(i).getClass()==new ZeroOrderHold().getClass())
					{
						zoh=(ZeroOrderHold)block_array.get(i);
						zoh.simple=false;
						block_array.remove(i);
						block_array.add(i,zoh);
					}
					System.out.println(dst_block);
					this.dst.add(block_array.get(i));
					this.d_port.add(this.dst_port);
					break;
				}										
				if(i==block_array.size()-1) break;
				i++;
			}				
		}				

		i=0;j=0;		
		
		// define whether the unit delay is simple or not - if it changes the sample time of the data flow
		if(this.src.getClass()==new UnitDelay().getClass())
		{
			ud=(UnitDelay) this.src;
			while(true)
			{
				if(this.dst.get(i).sample_time!=this.src.sample_time & this.dst.get(i).sample_time !=-1 & this.dst.get(i).getClass()!=new SubSystem().getClass())
				{
					ud.simple=false;
					block_array.remove(this.src);
					block_array.add(ud);
					break;
				}
				if(this.dst.get(i)==this.dst.lastElement())
					break;
				i++;
			}
			i=0;
		}
	}
	
	
	// add branch function
	public void addBranch(Branch branch)
	{
		this.branch_array.add(branch);
	}
	
	// return the sample time of a block of "out" system, so the "in" system would understand it. 
	public double conv(double stime,Sim_System in,Sim_System out)
	{
		//System.out.println("conv return "+(in.et_flag));
		return (stime-out.et_flag)+in.et_flag;
	}
	
	// main function for handling the activation events
	public void handleAct(ActClass act,Assist assist,Vector<Block> block_array,Sim_System system)
	{
		UnitDelay ud=null;
		int i=0;
		int j=0;
		int k=0;
		int l=0;
		ZeroOrderHold zoh=null;
		boolean flag=false;
		boolean flag2=false;
		boolean st=false;
		boolean flag1=false;
		double s_time=0;
		ActClass trig_act=null;
		SubSystem sub=null;
		TriggerPort trigger=null;
		EnablePort enable=null;
		ActClass enab_act=null;
		ActClass enab_sact=null;
		PeriodTransition pt=null;
		
		// creating activation events for the source blocks of a line
		if(this.src.getClass()==new UnitDelay().getClass())
		{
			ud=(UnitDelay)src;
			if(!ud.simple)
			{
				act.act.add(this.src.block_name+".acto");
				u_delay=true;
			}
			else
				act.act.add(this.src.block_name+".act");
			//u_delay=true;
		}
		else if(this.src.getClass()==new ZeroOrderHold().getClass())
		{
			zoh=(ZeroOrderHold)src;
			if(!zoh.simple)
				act.act.add(this.src.block_name+".acto");
			else
				act.act.add(this.src.block_name+".act");
		}
		else if(this.src.getClass()==new SubSystem().getClass())
		{
			sub=(SubSystem)this.src;
			
			// find the sample time of the act, depending on the port of the connection
			if(sub.s_system.type==0)
				act.act.add(this.src.block_name+"."+sub.s_system.findAct(sub.s_system.assist.output.get(src_port-1).sample_time).act.get(0));
			else if(sub.s_system.type==2)
			{
				act.act.add(this.src.block_name+"."+sub.s_system.findAct(sub.s_system.assist.output.get(src_port-1).sample_time).act.get(0));
			}
			else
			{				
				act.act.add(this.src.block_name+"."+sub.s_system.findAct(sub.s_system.s_time).act.get(0));
			}
		}
		else if(this.src.getClass()==new PeriodTransition().getClass())
		{
			act.act.add(this.src.block_name+".acto");
			
			if(dst.get(0).getClass()== new SubSystem().getClass())
			{
				sub=(SubSystem)dst.get(0);
				act.sample_time=sub.s_system.assist.input.get(Integer.parseInt(dst_port)-1).sample_time;
			}
		}
		else
			act.act.add(this.src.block_name+".act");
		
		
		i=0;
		j=0;
		//k=0;
		
		if(this.src.getClass()==new UnitDelay().getClass())
		{
			ud=(UnitDelay)this.src;
			act.sample_time=this.src.sample_time;
			
			while(!ud.simple)
			{		
				System.out.println("00 "+dst.get(i).sample_time+" "+dst.get(i).block_name);
				if(this.dst.get(i).sample_time !=-1 & this.dst.get(i).sample_time!=this.src.sample_time & this.dst.get(i).sample_time!=0)
				{
					act.sample_time=this.dst.get(i).sample_time;
					break;
				}				
				if(i==dst.size()-1)
					break;
				i++;
			}
			i=0;
		}
		else if(this.src.getClass()==new SubSystem().getClass())
		{
			sub=(SubSystem)this.src;
			if(sub.s_system.type==0)
			{
				act.sample_time=sub.s_system.assist.output.get(src_port-1).sample_time;
			}
			else if(sub.s_system.type==2)
			{
				act.sample_time=sub.s_system.assist.output.get(src_port-1).sample_time;//(sub.s_system.assist.output.get(src_port-1).sample_time-sub.s_system.et_flag);
				//System.out.println("LLLLLLLLLLL"+act.sample_time);
			}
			else
				act.sample_time=sub.sample_time;
			
		}
		else if(src.getClass()==new PeriodTransition().getClass() & dst.get(0).getClass()!=new SubSystem().getClass())
		{
			pt=(PeriodTransition)src;
			act.sample_time=dst.get(0).sample_time;
			
			if(pt.system.s_system.type==1)
				act.sample_time=src.sample_time;
		}
		else
		{	
			act.sample_time=this.src.sample_time;
		}
		// adding the activation events of the destinations of the line
		while(true)
		{
			if(this.dst.get(i).getClass()== new Sum().getClass())
				act.act.add(this.dst.get(i).block_name+".act");
			else if(this.dst.get(i).getClass()==new Scope().getClass())
				act.act.add(dst.get(i).block_name+".act");
			else if(this.dst.get(i).getClass()==new TriggerPort().getClass())
			{
				// adding the act of the trigger (trig) to a new act list that connects the trigger to the subsystem act.
				trigger=(TriggerPort)this.dst.get(i);
				trig_act=new ActClass();
				
				if(!st)
				{
					st=true;
					s_time=trigger.sample_time;
				}
				if(st)
				{
					trigger.sample_time=s_time;
				}
				System.out.println("### "+trigger.sample_time);
				trig_act.sample_time=s_time;
				trig_act.act.add(trigger.block_name+".trig");
				while(true)
				{
					if(block_array.get(j).getClass()==new SubSystem().getClass())
					{
						sub=(SubSystem)block_array.get(j);
						if(sub.block_name.matches(trigger.syst_name))
						{
							System.out.println(sub.sample_time);
							trig_act.act.add(sub.block_name+"."+sub.s_system.findAct(sub.s_system.s_time).act.get(0));
							sub.sample_time=s_time;//trigger.sample_time;
							break;
						}
					}
					if(block_array.get(j)==block_array.lastElement())
						break;
					j++;
				}
				j=0;
				//i=0;
				System.out.println(trig_act.act+" "+trig_act.sample_time);
				if(!assist.actlist.isEmpty())
				{
					while(true)
					{
						if(assist.actlist.get(k).sample_time==trig_act.sample_time)
						{
							while(true)
							{
								if(assist.actlist.get(k).act.contains(trig_act.act.get(j)))
								{
									trig_act.act.remove(j);
									j--;
									if(trig_act.act.isEmpty()) 
										break;
								}
								if(j>=trig_act.act.indexOf(trig_act.act.lastElement()))
								{
									flag=true;
									assist.actlist.get(k).act.addAll(trig_act.act);
									break;
								}
								j++;						
							}
						}
						if(assist.actlist.get(k)==assist.actlist.lastElement()|flag)
							break; 
						k++;
					}
					if(!flag)
						assist.actlist.add(trig_act);
				}
				else
					if(!flag | assist.actlist.isEmpty())
						assist.actlist.add(trig_act);
				j=0;
				flag=false;
				k=0;
				
				// adding the act of trigger to the actlis of the source
				act.act.add(this.dst.get(i).block_name+".act");
			}
			else if(this.dst.get(i).getClass()==new EnablePort().getClass())
			{
				enable=(EnablePort)this.dst.get(i);
				j=0;
				while(true)
				{
					enab_act=new ActClass();
					enab_sact=new ActClass();
					
					enab_act.sample_time=enable.e_times.get(l);
					enab_act.act.add(enable.block_name+".enab"+l);
					while(true)
					{
						if(block_array.get(j).getClass()==new SubSystem().getClass())
						{
							sub=(SubSystem)block_array.get(j);
							if(sub.block_name.matches(enable.syst_name))
							{
								//if(act.sample_time!=conv(enable.e_times.get(l),system,sub.s_system))//-enable.e_times.get(l))
								{
									enab_sact.sample_time=conv(enable.e_times.get(l),system,sub.s_system);
									enab_sact.act.add(enable.block_name+"."+"act"+l);
								}
								System.out.println("KK "+enab_sact.act+" "+enab_sact.sample_time);
								enab_act.act.add(sub.block_name+"."+sub.s_system.findAct(enable.e_times.get(l)).act.get(0));
								sub.sample_time=enable.e_times.get(l);
								break;
							}
						}
						if(block_array.get(j)==block_array.lastElement())
							break;
						j++;
					}
					j=0;
					//i=0;
					System.out.println(enab_act.act+" "+enab_act.sample_time);
					if(!assist.actlist.isEmpty())
					{
						while(true)
						{
							if(assist.actlist.get(k).sample_time==enab_act.sample_time)
							{
								while(true)
								{
									if(assist.actlist.get(k).act.contains(enab_act.act.get(j)))
									{
										enab_act.act.remove(j);
										j--;
										if(enab_act.act.isEmpty()) 
											break;
									}
									if(j>=enab_act.act.indexOf(enab_act.act.lastElement()))
									{
										flag=true;
										assist.actlist.get(k).act.addAll(enab_act.act);
										break;
									}
									j++;						
								}
							}
							if(assist.actlist.get(k)==assist.actlist.lastElement()|flag)
								break; 
							k++;
						}
						j=0;
						k=0;
						while(!enab_sact.act.isEmpty())
						{
							if(assist.actlist.get(k).sample_time==enab_sact.sample_time)
							{
								while(true)
								{
									if(assist.actlist.get(k).act.contains(enab_sact.act.get(j)))
									{
										enab_sact.act.remove(j);
										j--;
										if(enab_sact.act.isEmpty()) 
											break;
									}
									if(j>=enab_sact.act.indexOf(enab_sact.act.lastElement()))
									{
										flag1=true;
										System.out.println("++ "+enab_sact.act);
										assist.actlist.get(k).act.addAll(enab_sact.act);
										break;
									}
									j++;						
								}
								j=0;
							}
							if(assist.actlist.get(k)==assist.actlist.lastElement()|flag1)
								break; 
							k++;
						}
						if(!flag)
							assist.actlist.add(enab_act);
						if(!flag1 & !enab_sact.act.isEmpty())
						{
							System.out.println("++ "+enab_sact.act);
							assist.actlist.add(enab_sact);
						}
					}
					else
					{
						if(!flag | assist.actlist.isEmpty())
							assist.actlist.add(enab_act);
						if((!flag1 | assist.actlist.isEmpty()) & !enab_sact.act.isEmpty())
						{
							System.out.println("++ "+enab_sact.act.get(0));
							assist.actlist.add(enab_sact);
						}
					}
					j=0;
					flag1=false;
					flag=false;
					k=0;
					if(l==enable.e_times.size()-1)
						break;
					l++;
					// adding the act of trigger to the actlist of the source
				}
				act.act.add(this.dst.get(i).block_name+".act");
				ActClass reset = new ActClass();
				//if(enable.states.matches("reset"))
				{
					reset.sample_time=sub.s_system.et_flag;
					reset.act.add(enable.block_name+".res");
					if(sub.s_system.findAct(sub.s_system.et_flag)!=null)
					{
						l=0;
						while(true)
						{
							if(sub.s_system.assist.periodic_act.get(l).sample_time==sub.s_system.et_flag)
								reset.act.add(sub.block_name+"."+sub.s_system.assist.periodic_act.get(l).act.get(0));
							if(l==sub.s_system.assist.periodic_act.size()-1)
								break;
							l++;
						}
						l=0;
					}
					addAct(assist.actlist,reset);
					//assist.actlist.add(reset);
				}
			}
			else// if(this.dst.get(i).getClass()==new Gain().getClass()|this.dst.get(i).getClass()==new UnitDelay().getClass()|this.dst.get(i).getClass()==new ZeroOrderHold().getClass()|this.dst.get(i).getClass()==new InPort().getClass()|this.dst.get(i).getClass()==new OutPort().getClass()|this.dst.get(i).getClass()==new DiscreteIntegrator().getClass()| this.dst.get(i).getClass()==new PeriodTransition().getClass()|this.dst.get(i).getClass()==new SubSystem().getClass()| this.dst.get(i).getClass()==new Product().getClass())
			{
				if(this.dst.get(i).getClass()==new UnitDelay().getClass())
				{
					ud=(UnitDelay)this.dst.get(i);
					if(!ud.simple)
						act.act.add(this.dst.get(i).block_name+".acti");
					else
						act.act.add(this.dst.get(i).block_name+".act");
				}
				else if(this.dst.get(i).getClass()==new ZeroOrderHold().getClass())
				{
					zoh=(ZeroOrderHold)this.dst.get(i);
					if(!zoh.simple)
						act.act.add(this.dst.get(i).block_name+".acti");
					else
						act.act.add(this.dst.get(i).block_name+".act");
				}
				else if(this.dst.get(i).getClass()==new SubSystem().getClass())
				{
					sub=(SubSystem)this.dst.get(i);
					System.out.println("* "+act.sample_time+" "+src.block_name+" "+sub.block_name);
					if(sub.s_system.type==0)
						act.act.add(sub.block_name+"."+sub.s_system.findAct(act.sample_time).act.get(0));
					else if(sub.s_system.type==2)
					{
						System.out.println(sub.block_name+" "+conv(act.sample_time,sub.s_system,system));
						act.act.add(sub.block_name+"."+sub.s_system.findAct(conv(act.sample_time,sub.s_system,system)).act.get(0));//-sub.s_system.et_flag).act.get(0));
						act.sample_time=conv(act.sample_time,sub.s_system,system);//+sub.s_system.et_flag;
					}
					else
					{
						act.sample_time=sub.s_system.s_time;
						act.act.add(sub.block_name+"."+sub.s_system.findAct(sub.s_system.s_time).act.get(0));
					}
				}
				else if(this.dst.get(i).getClass()==new PeriodTransition().getClass())
				{
					pt=(PeriodTransition)dst.get(i);
					if(pt.reset)
					{
						ActClass ptAct= new ActClass();
						ptAct.sample_time=pt.system.s_system.et_flag;
						ptAct.act.add(pt.block_name+".res");
						System.out.println(": )))) "+pt.block_name+" "+pt.system.s_system.et_flag);
						addAct(assist.actlist,ptAct);
					}
					act.act.add(this.dst.get(i).block_name+".acti");
				}
				else
					act.act.add(this.dst.get(i).block_name+".act");
			}
			if(i==this.dst.indexOf(this.dst.lastElement())) 
				break;
			i++;
		}
		
		i=0;
		j=0;
		//k=0;
		
		/******** INSERTING THE ACT LIST OF CURRENT LINE TO THE GLOBAL ACT LIST ********/
		
		System.out.println(act.sample_time+" "+act.act);
		if(assist.actlist.isEmpty())
		{
			assist.actlist.add(act);
		}
		else if(!assist.actlist.isEmpty() & !this.u_delay)
		{
			while(true)
			{
				while(true)
				{	
					if(assist.actlist.get(i).act.contains(act.act.get(j)))
					{
						//System.out.println(act.act.get(j));
						act.act.remove(j);
						j--;							
						flag=true;
						if(act.act.isEmpty()) break;
					}
					if(j>=act.act.indexOf(act.act.lastElement()))
						{
							if(flag)
							{
								assist.actlist.get(i).act.addAll(act.act);
								if(assist.actlist.get(i).sample_time==-1)// | assist.actlist.get(i).sample_time==0)
									assist.actlist.get(i).sample_time=act.sample_time;
							}
							break;
						}
					j++;
				}
				if(act.act.isEmpty()) break;
				j=0;
				if(assist.actlist.get(i)==assist.actlist.lastElement()|flag) break;
				i++;
			}
			if(!flag)
			{
				i=0;
				while(true)
				{
					if(assist.actlist.get(i).sample_time==act.sample_time)
					{
						flag2=true;
						assist.actlist.get(i).act.addAll(act.act);
						break;
					}
					if(assist.actlist.get(i)==assist.actlist.lastElement())
						break;
					i++;
				}
				if(!flag2)
				{
					assist.actlist.add(act);
				}
			}
		}
		else if(this.u_delay)
		{
			flag=false;
			i=0;j=0;
			
			while(true)
			{
				if(act.sample_time==assist.actlist.get(i).sample_time|(assist.actlist.get(i).act.contains(act.act.get(0).replace(".acto",".acti")) & act.sample_time==-1))
				{
					while(true)
					{	
						if(assist.actlist.get(i).act.contains(act.act.get(j)))
						{
							act.act.remove(j);
							j--;							
							if(act.act.isEmpty()) break;
						}
						if(j>=act.act.indexOf(act.act.lastElement()))
							{
								assist.actlist.get(i).act.addAll(act.act);
								flag=true;
								break;
							}
						j++;
					}
					j=0;
				}
				if(assist.actlist.get(i)==assist.actlist.lastElement())
					break;
				i++;
			}
			i=0; j=0;				
			
			if(!flag)
			{
				while(true)
				{
					while(true)
					{
						if(assist.actlist.get(i).act.contains(act.act.get(j)))
						{
							act.act.remove(j);
							j--;
							if(act.act.isEmpty()) break;
						}
						if(j>=act.act.indexOf(act.act.lastElement()))						
							break;						
						j++;
					}
					if(assist.actlist.get(i)==assist.actlist.lastElement())
						break;
					i++;
				}
				assist.actlist.add(act);
			}				
		}
	}
	
	public void addAct(Vector<ActClass> actlist,ActClass act)
	{
		int i=0;
		boolean flag=false;
		
		while(true)
		{
			if(actlist.get(i).sample_time==act.sample_time)
			{
				actlist.get(i).act.addAll(act.act);
				flag=true;
			}
			if(i==actlist.size()-1)
				break;
			i++;
		}
		if(!flag)
			actlist.add(act);		
	}
	public void translate(PrintStream ps,Vector<Block> block_array,Assist assist, Sim_System system)
	{
		String src_s=new String(),dst_s=new String();
		int i=0;//,j=0,k=0;
		int j=0;
		String bip_src=new String();
		String bip_dst=new String();
		boolean flag=!this.branch_array.isEmpty();
		Scope s=null;
		ActClass act=new ActClass();
		String new_name=null;
		String old_name=null;
		SubSystem sub=null;
		boolean flag2=false;
		Relational r=null;
		System.out.println("55 "+dst.get(0).block_name+" "+dst.get(0).sample_time);
		src_s=this.src.block_name;		
		
		
		if(src.getClass()==new SubSystem().getClass())
		{
			bip_src=this.src.block_name+".out"+src_port;
			sub=(SubSystem)src;
			
			src_s=src_s+"_out"+src_port;
			
				//System.out.println("=="+sub.block_name+" "+sub.sample_time);
		}
		else
			bip_src=this.src.block_name+".out";		
		i=0;		
		
		/******** TRANSLATION OF CONNECTORS OF LINE ********/
		
		while(true)
		{
			dst_s=this.dst.get(i).block_name;
			
			if(this.dst.get(i).getClass()== new Sum().getClass())
			{
				if(this.d_port.get(i).matches("1"))
				{
					bip_dst=this.dst.get(i).block_name+".in1";
				}
				else if(this.d_port.get(i).matches("2"))
				{
					bip_dst=this.dst.get(i).block_name+".in2";
				}
				else if(this.d_port.get(i).matches("3"))
				{
					bip_dst=this.dst.get(i).block_name+".in3";
				}
			}
			else if(this.dst.get(i).getClass()== new Logic().getClass())
			{
				if(this.d_port.get(i).matches("1"))
				{
					bip_dst=this.dst.get(i).block_name+".in1";
				}
				else if(this.d_port.get(i).matches("2"))
				{
					bip_dst=this.dst.get(i).block_name+".in2";
				}
			}
			else if(this.dst.get(i).getClass()== new Product().getClass())
			{
				if(this.d_port.get(i).matches("1"))
				{
					bip_dst=this.dst.get(i).block_name+".in1";
				}
				else if(this.d_port.get(i).matches("2"))
				{
					bip_dst=this.dst.get(i).block_name+".in2";
				}
				else if(this.d_port.get(i).matches("3"))
				{
					bip_dst=this.dst.get(i).block_name+".in3";
				}
			}
			else if(this.dst.get(i).getClass()== new Switch().getClass())
			{
				if(this.d_port.get(i).matches("1"))
				{
					bip_dst=this.dst.get(i).block_name+".in1";
				}
				else if(this.d_port.get(i).matches("2"))
				{
					bip_dst=this.dst.get(i).block_name+".in2";
				}
				else if(this.d_port.get(i).matches("3"))
				{
					bip_dst=this.dst.get(i).block_name+".in3";
				}
			}
			else if(this.dst.get(i).getClass()==new Scope().getClass())
			{
				s=(Scope) this.dst.get(i);
				if(s.ports==1)
				{
					bip_dst=this.dst.get(i).block_name+".in1";
				}
				else//if(s.ports==2 | s.ports==3)
				{
					bip_dst=this.dst.get(i).block_name+".in"+ this.d_port.get(i);
				}
			}
			else if(this.dst.get(i).getClass()==new Relational().getClass())
			{
				bip_dst=this.dst.get(i).block_name+".in"+ this.d_port.get(i);
			}
			else if(this.dst.get(i).getClass()==new SubSystem().getClass())
			{
				bip_dst=this.dst.get(i).block_name+".in"+this.d_port.get(i);
				dst_s=dst_s+"_in"+this.d_port.get(i);
			}
			else// if(this.dst.get(i).getClass()==new Gain().getClass()|this.dst.get(i).getClass()==new UnitDelay().getClass()|this.dst.get(i).getClass()==new ZeroOrderHold().getClass()|this.dst.get(i).getClass()==new InPort().getClass()|this.dst.get(i).getClass()==new OutPort().getClass())
			{
				bip_dst=this.dst.get(i).block_name+".in1";
			}
			
			new_name = src_s+"_"+dst_s;
			
			if(old_name!=null)
				if(new_name.matches(old_name)|flag2==true)
				{
					new_name=new_name+i;
					flag2=true;
				}
			
			if(!flag)
			{
				ps.println("connector simulinkLib.conn "+src_s+"_"+dst_s+"("+bip_src+","+bip_dst+')');
				break;
			}
			else
			{
				if(i==0)
				{
					ps.println("connector simulinkLib.conn "+new_name+"("+bip_src+","+bip_dst+')');
				}
				else
					ps.println("connector simulinkLib.conn "+new_name+"("+old_name+".cout"+","+bip_dst+')');
				
			}
			old_name=new_name;
			
			if(i==this.dst.size()-1) break;
			i++;
		}		
		this.handleAct(act,assist,block_array,system);				
	}
}