import java.io.*;
import java.beans.*;
import java.net.URL;
import java.text.*;
import java.sql.*;

import java.awt.*;
import java.awt.Window;
import java.awt.event.*;

import javax.swing.*;
import javax.swing.JOptionPane;
import javax.swing.border.*;
import javax.swing.plaf.*;
import javax.swing.event.*;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JScrollPane;
import javax.swing.DefaultListModel;
import javax.swing.JTable;
import javax.swing.table.*;

import java.lang.*;
import java.lang.System.*;

import java.util.*;
import java.util.List;
import java.util.Vector;
import java.util.ResourceBundle;

public class ProE_WS_03 implements ListSelectionListener {

	public static void main(String[] arg){
		new ProE_WS_03();
	}

	public ProE_WS_03() {

		WindowListener l = new WindowAdapter() {
			public void windowClosing(WindowEvent e) {System.exit(0);}
		};

		container=new JFrame("ProI WorkSpaces");
		container.addWindowListener(l);

		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		Dimension frameSize=new Dimension((int)(screenSize.width/2),(int)(screenSize.height/2));
		int x=(int)(frameSize.width/2);
		int y=(int)(frameSize.height/2);
		container.setBounds(x,y,frameSize.width,frameSize.height);
		container.getContentPane().setLayout( new BorderLayout() );

		JPanel dbconn = new JPanel();
		dbconn.setLayout(new BorderLayout());
		dbconn.add(build_WSlist_Panel(), BorderLayout.NORTH);

		JPanel buttonPanel = new JPanel();
		buttonPanel.setLayout ( new FlowLayout(FlowLayout.CENTER) );
		StartBut = new JButton("Run ProE From Selected/Shown WorkSpace");
		StartBut.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				ProE_Start();
		}});
		buttonPanel.add(StartBut);

		ExitBut = new JButton("EXIT");
		ExitBut.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				CancelPressed();
		}});
		buttonPanel.add(ExitBut);

		container.getContentPane().add(dbconn, BorderLayout.NORTH);
		container.getContentPane().add(buttonPanel, BorderLayout.SOUTH);
		container.pack();
		container.setVisible(true);
	}

	public JPanel build_WSlist_Panel() {

		//		Part Number Panel (JLabel(2), JTextArea & JTextField)

		JPanel WS_Jl_StgPanel = new JPanel();
		WS_Jl_StgPanel.setLayout(new BorderLayout());

		JLabel WS_Jl_StgLabel = new JLabel(" WorkSpaces: ");
		WS_Jl_StgPanel.add(WS_Jl_StgLabel, BorderLayout.NORTH);

		WSlistModel = new DefaultListModel();
		WS_JList = new JList(WSlistModel);
		WS_JList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		WS_JList.addListSelectionListener(this);

		WStextScroller = new JScrollPane( WS_JList,
			ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
			ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
		WStextScroller.setPreferredSize(new Dimension(80, 160));
		WS_Jl_StgPanel.add(WStextScroller);

		WS_Field = new JTextField(20);
		WS_Field.setEditable(false);
		WS_Jl_StgPanel.add(WS_Field, BorderLayout.SOUTH);

		dirV = new Vector();

		if ( WS_JList.getModel().getSize() > 0 ) {
			WS_JList.setModel(WSlistModel = new DefaultListModel());
			WS_Field.setText("");
		}

		rtnLotVec();
		String[] serStgArr = new String[ dirV.size() ];
		dirV.copyInto( serStgArr );

		for (int t = 0; t < serStgArr.length; t++) {
			//System.out.println("serStgArr[t]: " + serStgArr[t]);

			dirStgF = serStgArr[t].substring((serStgArr[t].lastIndexOf("\\")+1),serStgArr[t].length());
			WSlistModel.addElement(dirStgF);
		}

		return WS_Jl_StgPanel;
	}

	public void rtnLotVec() {
		for (int t = 0; t < proi_dir.length; t++) {
			File dFile = new File(proi_dir[t]);
			if(dFile.exists()) {
				proi_path = proi_dir[t];
				//System.out.println("Directory: " + proi_dir[t] + " exists");
			}
		}

		//System.out.println("proi_path: " + proi_path);

		File aFile = new File(proi_path);
		if(!aFile.exists())
			System.out.println("Directory: " + proi_path + " does not exist");
		else if(!aFile.isDirectory())
			System.out.println( proi_path + " is not a directory" );
		else{
			File[] theFiles = aFile.listFiles();
			for(int x=0; x<theFiles.length; x++){
				int dtPos = -1;

				String tmpDir = theFiles[x].toString();
				//System.out.println( "tmpDir: " + tmpDir  );

				String cutDir = tmpDir.substring((tmpDir.lastIndexOf("\\")+1),tmpDir.length());

				dtPos = cutDir.indexOf(".");

				//System.out.println( "dtPos: " +dtPos+ " & dir:" + theFiles[x].toString() );

				if( theFiles[x].isDirectory() && dtPos != 0 ){
					dirV.addElement( theFiles[x].toString() );
				}
			}
		}
	}

	public void valueChanged(ListSelectionEvent e) {
		if (e.getValueIsAdjusting() == false) {
			if (WS_JList.getSelectedIndex() != -1) {
				WS_Snm = WS_JList.getSelectedValue().toString();
				WS_Field.setText("");

				System.out.println("proi_path: " + proi_path);

				//WS_Snm=proi_path+"\\"+WS_Snm;

				WS_Field.setText(WS_Snm);
				WS_JList.clearSelection();
			}
        }
	}

	public void ProE_Start() {
		String WS_Path = WS_Field.getText();

		String proe_file_path = null;

		for (int t = 0; t < proe_dir.length; t++) {
			File eFile = new File(proe_dir[t]);
			if(eFile.exists()) {
				proe_file_path = proe_dir[t];
				//System.out.println("ProE.exe Path: " + proe_file_path + " exists");
			}
		}

		RunCmd("echo set CONTINUE_FROM_OOS=1>ws_run.bat");
		RunCmd("echo set HOMEDRIVE=D:>>ws_run.bat");
		RunCmd("echo set HOMEPATH=\\%USERNAME%>>ws_run.bat");
		RunCmd("echo set PRO_START_DIR=%HOMEDRIVE%%HOMEPATH%\\ptc_startup>>ws_run.bat");
		RunCmd("echo pushd .>>ws_run.bat");
		RunCmd("echo cd /d %PRO_START_DIR%>>ws_run.bat");
		RunCmd("echo set PROI_LOG=%HOMEDRIVE%%HOMEPATH%\\ptc_startup\\proi_logs>>ws_run.bat");
		RunCmd("echo set ILINK_CLIENT_LOADPOINT=%HOMEDRIVE%\\ptc_software\\proiclient>>ws_run.bat");
		RunCmd("echo set PDM_LDB_PATH=%HOMEDRIVE%%HOMEPATH%>>ws_run.bat");
		RunCmd("echo set PROE_LOADPOINT=not_installed>>ws_run.bat");
		RunCmd("echo set PATH=%ILINK_CLIENT_LOADPOINT%\\bin;%PROE_LOADPOINT%\\bin;%PATH%>>ws_run.bat");
		RunCmd("echo set PRO_STDS=J:\\pro_stand>>ws_run.bat");
		RunCmd("echo set PRO_MASTER_LOADPOINT=J:\\ptc_software>>ws_run.bat");
		RunCmd("echo set CM_LOCATION_LOCAL=%PDM_LDB_PATH%\\.proi\\.data\\user.data\\start>>ws_run.bat");
		RunCmd("echo set CM_LOCATION_MASTER=%PRO_STDS%\\proi_cm_commands>>ws_run.bat");
		RunCmd("echo set PROE_LAUNCH_MASTER=%PRO_STDS%\\proe_launch_commands>>ws_run.bat");
		//RunCmd("echo cd .\\"+WS_Path+">>ws_run.bat");
		RunCmd("echo "+proe_file_path+" -w"+WS_Path+">>ws_run.bat");
		RunCmd("set>lj_prog_set_tst01.txt");
		RunCmd("ws_run.bat");
	}

	public void RunCmd ( String runProE ) {
		String s3 = null;
		try {
			Process p3 = Runtime.getRuntime().exec("cmd /C " + runProE );
			BufferedReader stdInput3 = new BufferedReader(new InputStreamReader(p3.getInputStream()));
			BufferedReader stdError3 = new BufferedReader(new InputStreamReader(p3.getErrorStream()));
			while ((s3 = stdInput3.readLine()) != null) { System.out.println( s3 ); }
		}
		catch (IOException e8) {
			System.out.println("Exception Running ProE: " );
			e8.printStackTrace();
			System.exit(-1);
		}
	}

	public void CancelPressed() { System.exit(0); }

	JFrame container;
	JList WS_JList;
	JTextField WS_Field;
	JButton ExitBut, StartBut;
	JScrollPane WStextScroller;
	ListSelectionModel listSelectionModel;
	DefaultListModel WSlistModel;

	Vector dirV;

	String usrnm = System.getProperty("user.name");

	String[] proi_dir = {"C:\\users\\"+usrnm+"\\.proi","D:\\users\\"+usrnm+"\\.proi","E:\\users\\"+usrnm+"\\.proi",
		"C:\\"+usrnm+"\\.proi","D:\\"+usrnm+"\\.proi","E:\\"+usrnm+"\\.proi",
		"D:\\Dev\\HTML\\datajett.com\\public_html\\Java\\proe_ws\\.proi"};

	String[] proe_dir = {"d:\\ptc_software\\proe\\bin\\proe.exe","d:\\ptc_software\\proe\\bin\\proe.exe",
		"W:\\ptc\\ptc_wildfire_2\\bin\\proe.exe","D:\\ptc\\proeWildfire\\bin\\proe.exe"};

	String WS_Snm, dirStgF, proi_path, outCmdStg1, outCmdStg2, outCmdStg3;
}
