⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spa_pat_frame.java

📁 PEPA模型性能分析工具
💻 JAVA
字号:
package gui;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.Box;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

import semantic.ParserException;
import semantic.RateException;
import trans.Peparoni;

public class SPA_PAT_Frame extends JFrame implements ActionListener{

	private String pepafilename;
	
	private PepaPanel pepamodel;
	private PepaConsole pepaconsole;

	private JTextField curfile;//当前文件
	private JMenuBar bar=new JMenuBar();
	private JMenu file=new JMenu("文件");
	private JMenuItem newfile=new JMenuItem("新建");
	private JMenuItem loadfile=new JMenuItem("打开");
	private JMenuItem savefile=new JMenuItem("保存");
	private JMenuItem exit=new JMenuItem("退出");
	private JMenu run=new JMenu("运行");
	private JMenuItem analyse=new JMenuItem("分析");
	private JMenu solve=new JMenu("求解");
	private JMenuItem LBEM=new JMenuItem("LBEM");
	private JMenuItem LBEMSet=new JMenuItem("LBEM设置");
	private JMenuItem SOR=new JMenuItem("SOR");
	private JMenuItem SORSet=new JMenuItem("SOR设置");
	private JMenu Advance=new JMenu("高级");
	private JMenuItem Throughout=new JMenuItem("吞吐量分析");
	private JMenuItem Step=new JMenuItem("单步查看");
	
	private JFileChooser fileLoader;
	
	private Peparoni driver=null;
	
	private boolean issave=true;
	
	public static void main(String[] argv)
	{
		SPA_PAT_Frame window=new SPA_PAT_Frame();
		window.setTitle("SPA_PAT");
		window.setSize(800,600);
		window.setVisible(true);
	}
	public SPA_PAT_Frame()
	{
		pepamodel=new PepaPanel();
		pepaconsole=new PepaConsole();
		Container contentPane=this.getContentPane();
		contentPane.add(pepamodel,BorderLayout.CENTER);
		contentPane.add(pepaconsole,BorderLayout.SOUTH);
		
		bar.add(file);
		newfile.setActionCommand("newFile");
		newfile.addActionListener(this);
		file.add(newfile);
		loadfile.setActionCommand("loadFile");
		loadfile.addActionListener(this);
		file.add(loadfile);
		savefile.setActionCommand("saveFile");
		savefile.addActionListener(this);
		file.add(savefile);
		exit.setActionCommand("exit");
		exit.addActionListener(this);
		file.add(exit);
		
		bar.add(run);
		analyse.setActionCommand("analyse");
		analyse.addActionListener(this);
		run.add(analyse);
		
		bar.add(solve);
		LBEM.setActionCommand("LBEM");
		LBEM.addActionListener(this);
		solve.add(LBEM);
		LBEMSet.setActionCommand("LBEMSet");
		LBEMSet.addActionListener(this);
		solve.add(LBEMSet);
		SOR.setActionCommand("SOR");
		SOR.addActionListener(this);
		solve.add(SOR);
		SORSet.setActionCommand("SORSet");
		SORSet.addActionListener(this);
		solve.add(SORSet);
		
		bar.add(Advance);
		Step.setActionCommand("Step");
		Step.addActionListener(this);
		Advance.add(Step);
		Throughout.setActionCommand("Throughout");
		Throughout.addActionListener(this);
		Advance.add(Throughout);
		
		curfile=new JTextField();
		bar.add(Box.createHorizontalStrut(30));
		bar.add(new JLabel("当前文件: "));
		curfile = new JTextField(20);
		curfile.setFocusable(false);
		curfile.setMaximumSize(new Dimension(150,curfile.getPreferredSize().height));
        bar.add(curfile);
		this.setJMenuBar(bar);
		 File modelDirectory = new File("./models");
		 fileLoader = new JFileChooser(modelDirectory.isDirectory()?modelDirectory:new File(System.getProperty("user.dir")));
	     fileLoader.setAcceptAllFileFilterUsed(true);
	     fileLoader.setFileFilter(new PepaFilter());
	     fileLoader.setDialogTitle("打开 .pepa .xmi .zargo .zuml 文件");
	     
	     this.addWindowListener((WindowListener) new WindowAdapter() 
	    {
	    	 public void windowClosing(WindowEvent e) 
	    	 {
	    	 	close();
	    	 }
	    });
	     
	}
	private void close()
	{
		int result = JOptionPane.showConfirmDialog(this,"你确定要退出?","退出?",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);
        if (result == JOptionPane.YES_OPTION)
        	System.exit(0);
	}
	public void actionPerformed(ActionEvent e) 
	{
		// TODO Auto-generated method stub
		 String command = e.getActionCommand();
		if(command.equals("newFile"))
		{
			pepamodel.NewContent();
			curfile.setText("");
			issave=false;
		}else if(command.equals("loadFile"))
		{
			loadFile();
		}else if(command.equals("saveFile"))
		{
			saveFile();
		}else if(command.equals("exit"))
		{
			close();
		}else if(command.equals("analyse"))
		{
			analyse();
		}else if(command.equals("LBEM"))
		{
			Lsolve();
		}else if(command.equals("LBEMSet"))
		{
			new LnbcgDialog((JFrame)this);
		}else if(command.equals("SOR"))
		{
			Ssolve();
		}else if(command.equals("SORSet"))
		{
			new SorDialog((JFrame)this);
		}else if(command.equals("Step"))
		{
			new PepaWalk((JFrame) this, driver);
		}else if(command.equals("Throughout"))
		{
			if(driver==null)
				alertNoModel();
			else{
				new ThroughoutDialog(this);
			}
		}
	}
	private void loadFile()
	{
		int option=fileLoader.showOpenDialog(this);
		if(option==JFileChooser.CANCEL_OPTION) return;
		File targetFile = fileLoader.getSelectedFile();
		try 
		{	
			pepafilename=targetFile.getCanonicalPath();

			 StringBuffer alpha = new StringBuffer();
		     BufferedReader bufferedReader;
			
		     bufferedReader = new BufferedReader(new FileReader(this.pepafilename));
			
		     for(int i =bufferedReader.read();i!=-1;i = bufferedReader.read())
			 {
			    alpha.append((char) i);
			 }
		     
		     bufferedReader.close();

		     curfile.setText(targetFile.getName());
		     pepamodel.setContent(alpha.toString());
		     
		     PepaConsole.addArgument("--打开文件:"+pepafilename+"\n");
		}catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		issave=true;
		pepamodel.setFocus(0);
	}
	private void saveFile()
	{
		if(!issave)
		{
			JFileChooser saver = new JFileChooser("./models")
			{
				 public void approveSelection()
				 {
	                    File f = this.getSelectedFile();
	                    String filename = f.getName().endsWith(".pepa")?f.getName():f.getName().concat(".pepa");
	                    f = new File(f.getParent(),filename);
	                    if(f.exists() && (JOptionPane.showConfirmDialog(this,
	                            "The file "+filename+
	                            " already exists, would you like to overwrite it?",
	                            "Overwrite?",
	                            JOptionPane.YES_NO_OPTION,
	                            JOptionPane.WARNING_MESSAGE) != JOptionPane.OK_OPTION)){return ;}
	                    else{this.setSelectedFile(f);}
	                    super.approveSelection();
				 }
			};
			saver.setAcceptAllFileFilterUsed(false);
			saver.setFileFilter(new PepaFilter());
			if(saver.showSaveDialog(this) != JFileChooser.APPROVE_OPTION) 
				return;
			File f = saver.getSelectedFile();
			try {
				pepafilename=f.getCanonicalPath();
				BufferedWriter bw = new BufferedWriter(new FileWriter(pepafilename,false));
				bw.write(pepamodel.getContent());
				bw.flush();
	            bw.close();
	            PepaConsole.addArgument("--保存文件:"+pepafilename+"\n");
	            issave=true;
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
	}
	private void analyse()
	{
	    setValidate(false);
	     
	    String content=pepamodel.getContent();
	    if(content.length()==0)
	    	alertNoModel();
	    else
	    {
		driver=new Peparoni();
		
			driver.pepaModel(content);
			try {
				driver.derive();
			} catch (RateException e) {
				// TODO Auto-generated catch block
				PepaConsole.addArgument("--"+e.toString()+"\n");
			}
			setValidate(true);
		
		pepamodel.setFocus(1);
	    }
	}
	private void Lsolve()
	{
		driver.solve();
		pepamodel.setFocus(2);
	}
	private void Ssolve()
	{
		driver.SORsolve();
		pepamodel.setFocus(2);
	}
	private void setValidate(boolean f)
	{
		LBEM.setEnabled(f);
		SOR.setEnabled(f);
		Step.setEnabled(f);
	}
	private void setModel(boolean f)
	{
		analyse.setEnabled(f);
		setValidate(false);
	}
	private void alertNoModel()
	{
		String info="请导入模型!";
		int result = JOptionPane.showConfirmDialog(this,info,"Question", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
        if(result==JOptionPane.YES_OPTION) loadFile();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -