Skip to content
Snippets Groups Projects
SysCAMSPanelTranslator.java 14.97 KiB
/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
 * 
 * ludovic.apvrille AT enst.fr
 * 
 * This software is a computer program whose purpose is to allow the
 * edition of TURTLE analysis, design and deployment diagrams, to
 * allow the generation of RT-LOTOS or Java code from this diagram,
 * and at last to allow the analysis of formal validation traces
 * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
 * from INRIA Rhone-Alpes.
 * 
 * This software is governed by the CeCILL  license under French law and
 * abiding by the rules of distribution of free software.  You can  use,
 * modify and/ or redistribute the software under the terms of the CeCILL
 * license as circulated by CEA, CNRS and INRIA at the following URL
 * "http://www.cecill.info".
 * 
 * As a counterpart to the access to the source code and  rights to copy,
 * modify and redistribute granted by the license, users are provided only
 * with a limited warranty  and the software's author,  the holder of the
 * economic rights,  and the successive licensors  have only  limited
 * liability.
 * 
 * In this respect, the user's attention is drawn to the risks associated
 * with loading,  using,  modifying and/or developing or reproducing the
 * software by the user in light of its specific status of free software,
 * that may mean  that it is complicated to manipulate,  and  that  also
 * therefore means  that it is reserved for developers  and  experienced
 * professionals having in-depth computer knowledge. Users are therefore
 * encouraged to load and test the software's suitability as regards their
 * requirements in conditions enabling the security of their systems and/or
 * data to be ensured and,  more generally, to use and operate it in the
 * same conditions as regards security.
 * 
 * The fact that you are presently reading this means that you have had
 * knowledge of the CeCILL license and that you accept its terms.
 */

package ui;

import syscamstranslator.*;
import ui.syscams.*;

import java.util.*;

import javax.swing.DefaultListModel;

/**
 * Class SysCAMSPanelTranslator
 * Translation of semantics of SystemC-AMS Diagrams
 * Creation: 19/05/2018
 * @version 1.0 19/05/2018
 * @author Irina Kit Yan LEE
 * @version 1.1 10/07/2019 Daniela GENIUS
 */

public class SysCAMSPanelTranslator {

	private List<TGComponent> tgcComponents;

	private List<SysCAMSTComponent> syscamsComponents;
	private List<SysCAMSTConnector> syscamsConnectors;

	public SysCAMSPanelTranslator(SysCAMSComponentTaskDiagramPanel _syscamsDiagramPanel) {
		tgcComponents = _syscamsDiagramPanel.getComponentList();

		syscamsComponents = new LinkedList<SysCAMSTComponent>();
		syscamsConnectors = new LinkedList<SysCAMSTConnector>();
System.out.println("@@@ Panel Translator ");
		MakeListOfComponent(_syscamsDiagramPanel);
	}

	private void MakeListOfComponent(SysCAMSComponentTaskDiagramPanel syscamsDiagramPanel) {

		Map<TGComponent, SysCAMSTComponent> syscamsMap = new HashMap<TGComponent, SysCAMSTComponent>();

		TGComponent tgc;
		Iterator<TGComponent> iterator1 = tgcComponents.listIterator();
		Iterator<TGComponent> iterator2 = tgcComponents.listIterator();
		List<TGComponent> list = new ArrayList<TGComponent>();

		while(iterator1.hasNext()) {
			tgc = iterator1.next();
			if (!(tgc instanceof TGConnector)) {
				list.add(tgc);
			}
		}
		while(iterator2.hasNext()) {
			tgc = iterator2.next();
			if (tgc instanceof TGConnector) {
				list.add(tgc);
			}
		}	

		for (TGComponent dp : list) {
			if (dp instanceof SysCAMSBlockGPIO2VCI) {
				SysCAMSBlockGPIO2VCI blockGPIO2VCI = (SysCAMSBlockGPIO2VCI) dp;

				SysCAMSTBlockGPIO2VCI syscamsBlockGPIO2VCI = new SysCAMSTBlockGPIO2VCI();

				List<SysCAMSPortDE> portsDE = blockGPIO2VCI.getAllInternalPortsDE();
				for (int i = 0; i < portsDE.size(); i++) {
					SysCAMSPortDE portDE = portsDE.get(i);

					String portName = portDE.getPortName();
					String type = portDE.getDEType();
					int origin = portDE.getOrigin();
					int nbits = portDE.getNbits();
					boolean sensitive = portDE.getSensitive();
					String sensitiveMethod = portDE.getSensitiveMethod();

					SysCAMSTPortDE syscamsPortDE = new SysCAMSTPortDE(portName, origin, nbits, type, sensitive, sensitiveMethod, syscamsBlockGPIO2VCI);

					syscamsMap.put(portDE, syscamsPortDE);
					syscamsBlockGPIO2VCI.addPortDE(syscamsPortDE);
					syscamsComponents.add(syscamsPortDE);
				}	
				syscamsMap.put(blockGPIO2VCI, syscamsBlockGPIO2VCI);
				//System.out.println("@@@ GPIO block put in map @@@");
				syscamsComponents.add(syscamsBlockGPIO2VCI);
			} else if (dp instanceof SysCAMSBlockDE) {
				SysCAMSBlockDE blockDE = (SysCAMSBlockDE) dp;

				String blockDEName = blockDE.getValue();
				String clockName = blockDE.getClockName();
				String clockSensitivityMethod = blockDE.getClockSensitivityMethod();
//				int periodBlock = blockDE.getPeriod();
//				String time = blockDE.getTime();
//				String nameFn = blockDE.getNameFn();
//				String code = blockDE.getCode();
//				DefaultListModel<String> listStruct = blockDE.getListStruct();
//				String nameTemplate = blockDE.getNameTemplate();
//				String typeTemplate = blockDE.getTypeTemplate();
//				DefaultListModel<String> listTypedef = blockDE.getListTypedef();

				SysCAMSTBlockDE syscamsBlockDE = new SysCAMSTBlockDE(blockDEName, clockName, clockSensitivityMethod, "", "", null, "", "", "", null, null);

				List<SysCAMSPortDE> portsDE = blockDE.getAllInternalPortsDE();
				for (int i = 0; i < portsDE.size(); i++) {
					SysCAMSPortDE portDE = portsDE.get(i);

					String portName = portDE.getPortName();
//					int periodPort = portDE.getPeriod();
//					String time = portDE.getTime();
//					int rate = portDE.getRate();
//					int delay = portDE.getDelay();
					int nbits = portDE.getNbits();//DG
					String type = portDE.getDEType();
					int origin = portDE.getOrigin();
					
					boolean sensitive = portDE.getSensitive();
					String sensitiveMethod = portDE.getSensitiveMethod();

					SysCAMSTPortDE syscamsPortDE = new SysCAMSTPortDE(portName, origin, nbits, type, sensitive, sensitiveMethod, syscamsBlockDE);

					syscamsMap.put(portDE, syscamsPortDE);
					syscamsBlockDE.addPortDE(syscamsPortDE);
					syscamsComponents.add(syscamsPortDE);
				}
			
				syscamsMap.put(blockDE, syscamsBlockDE);
			
				//	System.out.println("@@@ DE block put in map @@@");
				syscamsComponents.add(syscamsBlockDE);
	System.out.println("@@@ Panel Translator BlockDE name @@@ "+blockDEName);
				
			} else if (dp instanceof SysCAMSClock) {

			    SysCAMSClock clock = (SysCAMSClock) dp;
			
				//String clockName = clock.getName();
				String clockName = clock.getValue();
				double frequency = clock.getFrequency();			
				String unit = clock.getUnit();
				double dutyCycle = clock.getDutyCycle();
				double startTime = clock.getStartTime();
				String unitStartTime = clock.getUnitStartTime();
				boolean posFirst = clock.getPosFirst();

				System.out.println("@@@ Panel Translator clock name @@@ "+clockName);
				
				SysCAMSTClock syscamsClock = new SysCAMSTClock(clockName, frequency, unit, dutyCycle, startTime, unitStartTime, posFirst);
			
		       
				syscamsMap.put(clock, syscamsClock);
				System.out.println("@@@ Clock put in map @@@");
				syscamsComponents.add(syscamsClock);
								
			} else if (dp instanceof SysCAMSCompositeComponent) {
				SysCAMSCompositeComponent cluster = (SysCAMSCompositeComponent) dp;

				String clusterName = cluster.getValue();

				SysCAMSTCluster syscamsCluster = new SysCAMSTCluster(clusterName);

				List<SysCAMSBlockTDF> blocksTDF = cluster.getAllBlockTDFComponents();
				List<SysCAMSBlockDE> blocksDE = cluster.getAllBlockDEComponents();
				List<SysCAMSClock> clocks = cluster.getAllClockComponents();
				
				for (int i = 0; i < blocksTDF.size(); i++) {
					SysCAMSBlockTDF blockTDF = blocksTDF.get(i);

					String blockTDFName = blockTDF.getValue();
					double periodBlock = blockTDF.getPeriod();
					String timeBlock = blockTDF.getTime();
                    if (timeBlock.equals("s")) {
                        timeBlock = timeBlock + "ec";
                    } else if (timeBlock.equals("\u03BCs")) {
                        timeBlock = "us";
                    }
					String processCode = blockTDF.getProcessCode();
                    String constructorCode = blockTDF.getConstructorCode();
					DefaultListModel<String> listStruct = blockTDF.getListStruct();
					String nameTemplate = blockTDF.getNameTemplate();
					String typeTemplate = blockTDF.getTypeTemplate();
                    String valueTemplate = blockTDF.getValueTemplate();
					DefaultListModel<String> listTypedef = blockTDF.getListTypedef();

					SysCAMSTBlockTDF syscamsBlockTDF = new SysCAMSTBlockTDF(blockTDFName, periodBlock, timeBlock, processCode, constructorCode, listStruct, nameTemplate, typeTemplate, valueTemplate, listTypedef, syscamsCluster);				

					List<SysCAMSPortTDF> portsTDF = blockTDF.getAllInternalPortsTDF();
					for (int j = 0; j < portsTDF.size(); j++) {
						SysCAMSPortTDF portTDF = portsTDF.get(j);

						String portName = portTDF.getPortName();
						double periodPort = portTDF.getPeriod();
						String time = portTDF.getTime();
                        if (time.equals("s")) {
                            time = time + "ec";
                        } else if (time.equals("\u03BCs")) {
                            time = "us";
                        }
						int rate = portTDF.getRate();
						int delay = portTDF.getDelay();
						String type = portTDF.getTDFType();
						int origin = portTDF.getOrigin();

						SysCAMSTPortTDF syscamsPortTDF = new SysCAMSTPortTDF(portName, periodPort, time, rate, delay, origin, type, syscamsBlockTDF);

						syscamsMap.put(portTDF, syscamsPortTDF);
						syscamsBlockTDF.addPortTDF(syscamsPortTDF);
						syscamsComponents.add(syscamsPortTDF);
					}
					List<SysCAMSPortConverter> portsConverter = blockTDF.getAllInternalPortsConv();
					for (int j = 0; j < portsConverter.size(); j++) {
						SysCAMSPortConverter portConverter = portsConverter.get(j);

						String portName = portConverter.getPortName();
						double periodPort = portConverter.getPeriod();
						String time = portConverter.getTime();
                        if (time.equals("s")) {
                            time = time + "ec";
                        } else if (time.equals("\u03BCs")) {
                            time = "us";
                        }
			int rate = portConverter.getRate();
			int nbits = portConverter.getNbits();//DG
						int delay = portConverter.getDelay();
						String type = portConverter.getConvType();
						int origin = portConverter.getOrigin();

						SysCAMSTPortConverter syscamsPortConverter = new SysCAMSTPortConverter(portName, periodPort, time, rate, delay, origin, nbits, type, syscamsBlockTDF);

						syscamsMap.put(portConverter, syscamsPortConverter);
						syscamsBlockTDF.addPortConverter(syscamsPortConverter);
						syscamsComponents.add(syscamsPortConverter);
					}
					syscamsMap.put(blockTDF, syscamsBlockTDF);				       
					syscamsCluster.addBlockTDF(syscamsBlockTDF);
					syscamsComponents.add(syscamsBlockTDF);
				}
				for (int i = 0; i < blocksDE.size(); i++) {
					SysCAMSBlockDE blockDE = blocksDE.get(i);
					
					String blockDEName = blockDE.getValue();					String clockName = blockDE.getClockName();
					String clockSensitivityMethod = blockDE.getClockSensitivityMethod();
					String nameFn = blockDE.getNameFn();
					String code = blockDE.getCode();
					DefaultListModel<String> listStruct = blockDE.getListStruct();
					String nameTemplate = blockDE.getNameTemplate();
					String typeTemplate = blockDE.getTypeTemplate();
					String valueTemplate = blockDE.getValueTemplate();
					DefaultListModel<String> listTypedef = blockDE.getListTypedef();

					SysCAMSTBlockDE syscamsBlockDE = new SysCAMSTBlockDE(blockDEName, clockName, clockSensitivityMethod, nameFn, code, listStruct, nameTemplate, typeTemplate, valueTemplate, listTypedef, syscamsCluster);

					List<SysCAMSPortDE> portsDE = blockDE.getAllInternalPortsDE();
					for (int j = 0; j < portsDE.size(); j++) {
						SysCAMSPortDE portDE = portsDE.get(j);

						String portName = portDE.getPortName();
//						int periodPort = portDE.getPeriod();
//						String time = portDE.getTime();
//						int rate = portDE.getRate();
//						int delay = portDE.getDelay();
						String type = portDE.getDEType();
						int origin = portDE.getOrigin();
						int nbits = portDE.getNbits();
						boolean sensitive = portDE.getSensitive();
						String sensitiveMethod = portDE.getSensitiveMethod();

						SysCAMSTPortDE syscamsPortDE = new SysCAMSTPortDE(portName, origin, nbits, type, sensitive, sensitiveMethod, syscamsBlockDE);

						syscamsMap.put(portDE, syscamsPortDE);
						syscamsBlockDE.addPortDE(syscamsPortDE);
						syscamsComponents.add(syscamsPortDE);
					}	
					syscamsMap.put(blockDE, syscamsBlockDE);
					syscamsCluster.addBlockDE(syscamsBlockDE);
					syscamsComponents.add(syscamsBlockDE);
				}


				for (int i = 0; i < clocks.size(); i++) {
					SysCAMSClock clock = clocks.get(i);

					//	String clockName = clock.getName();
					String clockName = clock.getValue();
					double frequency = clock.getFrequency();			
					String unit = clock.getUnit();
					double dutyCycle = clock.getDutyCycle();
					double startTime = clock.getStartTime();
					String unitStartTime = clock.getUnitStartTime();
					boolean posFirst = clock.getPosFirst();
				
					SysCAMSTClock syscamsClock = new SysCAMSTClock(clockName, frequency, unit, dutyCycle, startTime, unitStartTime, posFirst);

					syscamsMap.put(clock, syscamsClock);
					syscamsCluster.addClock(syscamsClock);
					syscamsComponents.add(syscamsClock);
				}
				
				syscamsMap.put(cluster, syscamsCluster);
				syscamsComponents.add(syscamsCluster);
			} else if (dp instanceof SysCAMSPortConnector) {
				SysCAMSPortConnector connector = (SysCAMSPortConnector) dp;

				TGConnectingPoint connectingPoint1 = connector.get_p1();
				TGConnectingPoint connectingPoint2 = connector.get_p2();	
				
				String name = connector.getValue();

				TGComponent owner_p1 = syscamsDiagramPanel.getComponentToWhichBelongs(connectingPoint1);
				TGComponent owner_p2 = syscamsDiagramPanel.getComponentToWhichBelongs(connectingPoint2);

				SysCAMSTComponent avowner_p1 = syscamsMap.get(owner_p1);	
				SysCAMSTComponent avowner_p2 = syscamsMap.get(owner_p2);

				SysCAMSTConnectingPoint avConnectingPoint1 = new SysCAMSTConnectingPoint(avowner_p1);
				SysCAMSTConnectingPoint avConnectingPoint2 = new SysCAMSTConnectingPoint(avowner_p2);

				SysCAMSTConnector avconnector = new SysCAMSTConnector(avConnectingPoint1, avConnectingPoint2, name);			
				syscamsConnectors.add(avconnector);
			}
		}
	}

	public SysCAMSSpecification getSysCAMSSpecification() {
		return new SysCAMSSpecification(syscamsComponents, syscamsConnectors);
	}
}