[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/dimr/Java-Editor/master/JavaEditor/src/elearning/EEFrame.java [Back]  [Original]

package elearning;

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Reader;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.print.Doc;
import javax.swing.AbstractButton;
import javax.swing.Box;
import javax.swing.BoxLayout;
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.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.SwingUtilities;
import javax.swing.border.TitledBorder;
import javax.swing.event.DocumentListener;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultStyledDocument;
import javax.swing.text.Document;
import javax.swing.text.Style;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyleContext;
import javax.swing.text.StyledDocument;
import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;

import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;

public class EEFrame extends JFrame {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -1709009137090877913L;
	private GridBagLayout layout;
	private GridBagConstraints constraints;
	private EEMenuBar menuBar;
	private EETextPane editor;
	private EEConsole console;
	private EEStatusBar statusBar;
	private File file;
	private Words wordsCounter;
	//private Lines linesCounter;
	private Help helper=new Help();
	private String temp;
	private StyledDocument doc;
	
	public static final String NL = System.getProperty("line.separator"); 
	//CONSTRUCTOR  ****SUPER CLASS
	public EEFrame() throws HeadlessException {
		super("Elearn Editor");
		
		JScrollPane scrollPane;
		
		layout = new GridBagLayout();
		setLayout(layout);
		
		constraints = new GridBagConstraints();
		
		menuBar = new EEMenuBar();
		setJMenuBar(menuBar);
		console=new EEConsole();
		editor = new EETextPane();
	//	applyPaneStyles();
		scrollPane = new JScrollPane(editor);
		scrollPane.setBorder(new TitledBorder("Editor"));
		
		setConstraints(1, 100, GridBagConstraints.BOTH);
		addComponent(scrollPane, 0, 0, 1, 1);
		
		console = new EEConsole();

		
		scrollPane = new JScrollPane(console);
		scrollPane.setBorder(new TitledBorder("Console"));
		
		setConstraints(1, 40, GridBagConstraints.BOTH);
		addComponent(scrollPane, 1 ,0 ,1, 1);
		
		statusBar = new EEStatusBar();
		setConstraints(1, 0, GridBagConstraints.BOTH);
		addComponent(statusBar, 2, 0, 1, 1);
	 
		file = null;

		
	}
	public JTextPane getConsolePane(){
		return this.console;
	}
	
	public JTextPane getTextPane() {
		return this.editor;
	}

	public void setLines(int lines) {
		this.statusBar.setLines(lines);
	}
	
	public void setWords(int words) {
		this.statusBar.setJavaWords(words);
	}

	public Words Words(){
		return new Words();
	}


	private void setConstraints(int weightx, int weighty, int fill) {
		constraints.weightx = weightx;
		constraints.weighty = weighty;
		constraints.fill = fill;
	}
	
	private void addComponent(Component component, int row, int column, int width, int height) {
		constraints.gridx = column;
		constraints.gridy = row;
		constraints.gridwidth = width;
		constraints.gridheight = height;
		layout.setConstraints(component, constraints);
		add(component);
	}
	
	
	/**
	 * INNER CLASSES
	 *------------------------------------------------------------------------------------------------------------------------------------
	 * 
	 */
	
	private class EEMenuBar extends JMenuBar {
		
		
		private static final long serialVersionUID = -2176624051362992835L;
		private JMenu fileMenu, compilationMenu;
		private JMenuItem newItem, openItem, saveItem, saveAsItem, compileItem;
		private JFileChooser fileChooser,newChooser;
		private FileNameExtensionFilter filter=new FileNameExtensionFilter("*.java","java");
		File openFile;//,newFile;
		File newFile;
		int theValue;
		String absolutePath;
	    //JavaCompiler compiler,nextCompiler;
	   
	    FileWriter writer;
		public EEMenuBar() {
			super();
			
			fileMenu = new JMenu("File");
			
			newItem = new JMenuItem("New");
			
			newItem.addActionListener(new ActionListener() {

				@Override
				public void actionPerformed(ActionEvent arg0) {
					newItemAction(arg0);
				}
			});
			
			fileMenu.add(newItem);
			
			openItem = new JMenuItem("Open");
			
			openItem.addActionListener(new ActionListener() {
				
				@Override
				public void actionPerformed(ActionEvent arg0) {
					openItemAction(arg0);
				}
				
			});
			
			fileMenu.add(openItem);
			
			saveItem = new JMenuItem("Save");
			saveItem.addActionListener(new ActionListener() {

				@Override
				public void actionPerformed(ActionEvent ee) {
					saveItemAction(ee);
				}
			});
			
			fileMenu.add(saveItem);
			
			saveAsItem = new JMenuItem("Save As");
			
			saveAsItem.addActionListener(new ActionListener() {

				@Override
				public void actionPerformed(ActionEvent e) {
					saveAsItemAction(e);
				}
				
			});
			
			
			fileMenu.add(saveAsItem);
			
			add(fileMenu);
			
			compilationMenu = new JMenu("Compilation");
			
			compileItem = new JMenuItem("Compile");
			
			compileItem.addActionListener(new ActionListener() {

				@Override
				public void actionPerformed(ActionEvent e) {
					compilationItemAction(e);
					//System.out.println(Compiler.class.getCanonicalName());
				}
				
			});
			
			compilationMenu.add(compileItem);
			
			add(compilationMenu);
			
		}
		private void newItemAction(ActionEvent e){
			newChooser=new JFileChooser("new");
			newChooser.setFileFilter(filter);
			theValue=newChooser.showDialog(this, "Create new..");
			
			if(theValue==newChooser.APPROVE_OPTION){
				try{
					editor.setText("public class "+newChooser.getSelectedFile().getName()+" {"+"\n\n\n\n\n}");  //.getName()
					
					 writer=new FileWriter(new File(newChooser.getSelectedFile().getAbsolutePath())+".java");
					newFile=newChooser.getSelectedFile();
					//File file=new File(newFile);
				}catch(IOException ed){}
					
				
			}
			 
		}
		
		private void openItemAction(ActionEvent e){
			fileChooser=new JFileChooser();
			fileChooser.setFileFilter(filter);
			//System.out.print(editor.getLineCount());
			theValue=fileChooser.showOpenDialog(this);
			//EEStatusBar.this.lines.setText(Help.countLines(Integer.toString((editor.getText()));
			if(theValue==fileChooser.APPROVE_OPTION){
				openFile=fileChooser.getSelectedFile();
			try{
				
				editor.read(new FileReader(openFile.getAbsolutePath()), null);
				
				
		        // fileChooser.setFileFilter(filter);
				
			}catch(IOException ef){
			}
			}else if(theValue==fileChooser.CANCEL_OPTION){
				fileChooser.cancelSelection();
			}
			
			
			}
		
		private void saveItemAction(ActionEvent e){
           String command=((AbstractButton) e.getSource()).getText();//e.getSource().toString();


			try {
				//if(command.equals(newItem.getValue(NAME))){
				if(theValue==fileChooser.APPROVE_OPTION ){
					if(command.equals("Open") |command.equals("Save")){
	
						 writer=new FileWriter(new File(fileChooser.getSelectedFile().getAbsolutePath()));
				                 writer.write(editor.getText());
				                 writer.close();
					//}
				}else if(command.equals("New")){
					
					writer=new FileWriter(absolutePath);
					
					writer.write(editor.getText());
					writer.close();
				}
					
				}
			} catch (IOException e1) {
				
				e1.printStackTrace();
			}
		}
		
		private void saveAsItemAction(ActionEvent e){
			com.itextpdf.text.Document d=new com.itextpdf.text.Document();
			String command=((AbstractButton) e.getSource()).getText();
			if (command == "Open" | command.equals("new"));

//			
			
			fileChooser=new JFileChooser();
			fileChooser.setDialogTitle("Save As");
			//fileChooser.setCurrentDirectory(fileChoose);	
			fileChooser.setFileFilter(filter);
			theValue=fileChooser.showSaveDialog(this);
			
			if(theValue==fileChooser.APPROVE_OPTION){
				try{
					FileWriter writer=new FileWriter(new File(fileChooser.getSelectedFile().getAbsolutePath()));//
					writer.write(editor.getText());
					writer.close();
					PdfWriter.getInstance(d, new FileOutputStream(fileChooser.getSelectedFile().getAbsolutePath()));
					String t=getTextPane().getText();
					
					
					d.open();
					d.add(new Paragraph(t));
					d.close();
				}catch (Exception ee){
					
				}
					
				}
			}
		
		
		private void compilationItemAction(ActionEvent e) {
		
			
		Style success=EEFrame.this.getConsolePane().getStyle("success");
		Style er=EEFrame.this.getConsolePane().getStyle("error");
			
		
               File file;
               FileReader f;
               BufferedReader br;
               OutputStream error;
               List s;
				 if(newChooser==null && fileChooser!=null){
					 try {
					 JavaCompiler compiler=ToolProvider.getSystemJavaCompiler();
				   
				     
			           error=new FileOutputStream("text.txt");
			           int result= compiler.run(null, null, error,"-verbose" ,fileChooser.getSelectedFile().getAbsolutePath());
						if(result==0){
					    
					        file=new File("text.txt");
					         f=new FileReader(file);
					         br=new BufferedReader(f);
					      s=new ArrayList();
					      // String temp=br.readLine();
					         while((temp=br.readLine())!= null){
					        	 s.add(temp);
					        	// System.out.println(sss);
					         }
					         String text=s.toString();
					         StyledDocument cons=EEFrame.this.getConsolePane().getStyledDocument();
					         System.out.print(result);
					            cons.setCharacterAttributes(0, 100, success, true);
					        	 EEFrame.this.console.compilerText(text +" \n\n\nCOMPILATION SUCCESFUL");
					        	 System.out.print(text);
					         
					         file.delete();
					     }else{
					    	 file=new File("text.txt");
					    	 f=new FileReader(file);
					    	 br=new BufferedReader(f);
					    	 int r=compiler.run(null, null,error,"-verbose",fileChooser.getSelectedFile().getAbsolutePath());
					    	 error.close();
					    	 s=new ArrayList();
					    	 while((temp=br.readLine())!=null){
					    		 s.add(temp);
					    	 }
					    	 EEFrame.this.console.compilerText(s.toString()+"\n\n\nCOMPILATION FAILED");
					    	 file.delete();
					     }
					//	file.delete();
					} catch (Exception e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}


				 }
				 
				 if( newChooser!=null &&fileChooser==null){
					 try {
						// compiler.run(null, null, null ,newChooser.getSelectedFile().getAbsolutePath()+".java");
						 JavaCompiler compiler=ToolProvider.getSystemJavaCompiler();
						// compiler.run(null, null, null ,newChooser.getSelectedFile().getAbsolutePath()+".java");
						error=new FileOutputStream("text.txt");
						int r=compiler.run(null,null,error,"-verbose", newChooser.getSelectedFile().getAbsolutePath()+".java");
						System.out.print(r);
						if (r==0){
							file=new File("text.txt");
					         f=new FileReader(file);
					         br=new BufferedReader(f);
					         s=new ArrayList();
					     
					      // String temp=br.readLine();
					         while((temp=br.readLine())!= null){
					        	 s.add(temp);
					        	// System.out.println(temp);
					        	// System.out.println(sss);
					         }
					        String text=s.toString();
					         StyledDocument cons=EEFrame.this.getConsolePane().getStyledDocument();
					       StyledDocument c=EEFrame.this.getConsolePane().getStyledDocument();
					            c.setCharacterAttributes(0, 10, success, true);
					        	 EEFrame.this.console.compilerText(text+"\n\n\nCOMPILATION SUCCESFUL");
					        	// System.out.print(result);
					        	 file.delete();
						} else{
							file=new File("text.txt");
					    	 f=new FileReader(file);
					    	 br=new BufferedReader(f);
					    	 int rr=compiler.run(null, null,error,"-verbose",newChooser.getSelectedFile().getAbsolutePath()+".java");
					    	 error.close();
					    	 s=new ArrayList();
					    	 while((temp=br.readLine())!=null){
					    		 s.add(temp);
					    	 }
					    	 EEFrame.this.console.compilerText(s.toString()+"\n\n\nCOMPILATION FAILED");
					    	 file.delete();
						}
						
					} catch (Exception e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
					// compiler.run(null, null, null ,newChooser.getSelectedFile().getAbsolutePath());
					
				 }
					

		}
		
		
	}//  INNER CLASSIS
	
	
	private class EETextPane extends JTextPane {
		
		/**
		 * 
		 */
		private static final long serialVersionUID = -7437561302249475096L;

		public EETextPane() {
			super();
		//	doc=editor.getStyledDocument();
			Style def = StyleContext.getDefaultStyleContext().getStyle( StyleContext.DEFAULT_STYLE );
			StyleConstants.setForeground(def, Color.BLACK);
			StyleConstants.setFontFamily(def, "Courier");
			StyleConstants.setFontSize(def, 12);
			 
			Style keyword = addStyle("keyword", def);
			StyleConstants.setForeground(keyword, Color.BLUE);
			
			Style literal = addStyle("literal", def);
			StyleConstants.setForeground(literal, Color.ORANGE);
			
			Style comment = addStyle("comment", def);
			StyleConstants.setForeground(comment, Color.GREEN);
			
		}


		public void compilerText(String t){
			this.setText(t);
		}
			
		}


	private class EEConsole extends JTextPane {
		
		/**
		 * 
		 */
		private static final long serialVersionUID = -5968199559991291905L;

		public EEConsole() {
			super();
			
			//add styles to fdocument
			Style def = StyleContext.getDefaultStyleContext().getStyle( StyleContext.DEFAULT_STYLE );
			StyleConstants.setForeground(def, Color.BLACK);
			StyleConstants.setFontFamily(def, "Courier");
			StyleConstants.setFontSize(def, 12);
			 
			Style error = addStyle("error", def);
			StyleConstants.setForeground(error, Color.RED);
			
			Style success = addStyle("success", def);
			StyleConstants.setForeground(success, Color.GREEN);
			//setText(new Integer((EEFrame.this.menuBar.k())).toString());


		}
		
		public void compilerText(String t){
			 this.setText(t);
		}
		
		
	}
	
	private class EEStatusBar extends JPanel {


		/**
		 * 
		 */
		private static final long serialVersionUID = 185007911993347696L;
		private BoxLayout layout;
		private JLabel linesLabel, lines, wordsLabel, words;
		
		public EEStatusBar() {
			super();
			
			layout = new BoxLayout(this, BoxLayout.X_AXIS);
			setLayout(layout);
			
			linesLabel = new JLabel("Lines : ");
			linesLabel.setAlignmentX(LEFT_ALIGNMENT);
			add(linesLabel);
			//words.setText(Integer.toString(Help.count(editor.getText())));  //edo nullPointerEception
			lines = new JLabel("");
			lines.setAlignmentX(LEFT_ALIGNMENT);
			add(lines);
			
			
			//lines.setText(Help.countLines(editor.getText()));
			add(Box.createRigidArea(new Dimension(10,10)));
			
			wordsLabel = new JLabel("Java Words : ");
			wordsLabel.setAlignmentX(LEFT_ALIGNMENT);
			add(wordsLabel);
			
			 
			words = new JLabel("");
			words.setAlignmentX(RIGHT_ALIGNMENT);
			add(words);


		}
		
		public void setLines(int lines) {
			this.lines.setText(String.valueOf(lines));
			
		}
		
		
		public void setJavaWords(int words) {	
			this.words.setText(String.valueOf(words));//(Help.countWords(getTextPane().getText())));
			
		}


	}//  EEStatusBar
	
	
	private class Words implements Runnable{


		public Words(){
		
		}
		@Override
		public void run()
		    {
		      Style keywords = EEFrame.this.getTextPane().getStyle("keyword");
		       Style comment = EEFrame.this.getTextPane().getStyle("comment");
		       Style literal = EEFrame.this.getTextPane().getStyle("literal");
		       while (true) {
		         StyledDocument doc = EEFrame.this.getTextPane().getStyledDocument();
		         String text = EEFrame.this.getTextPane().getText();
		         StringTokenizer st = new StringTokenizer(text);
		         int currentPos = 0;
		         int jWords = 0;
		         StringBuffer b = new StringBuffer();
		         Matcher m = EEFrame.this.helper.getPattern().matcher(b.append(text));
		         while (st.hasMoreTokens()) {
		           String nextToken = st.nextToken();
		           if (nextToken.matches(EEFrame.this.helper.getPattern().toString()))
		           {
		             doc.setCharacterAttributes(currentPos, nextToken.length(), keywords, true);
		 
		             jWords++;
		           }
		 
		           currentPos += nextToken.length() + 1;
		           EEFrame.this.setWords(jWords);
		         }
		 
		         StringTokenizer s = new StringTokenizer(text, EEFrame.NL);
		         int pos = 0;
		         int lines = 1;
		 
		         while (s.hasMoreTokens()) {
		           String token = s.nextToken();
		 
		           if (token.matches(EEFrame.this.helper.commentPattern().toString()))
		           {
		             doc.setCharacterAttributes(pos, token.length(), comment, true);
		           }
		 
		           pos += token.length() + 1;
		           EEFrame.this.setLines(lines++);
		         }
		 
		         StringTokenizer f = new StringTokenizer(text);
		         int p = 0;
		         while (f.hasMoreTokens()) {
		           String next = f.nextToken();
		           if (next.matches(EEFrame.this.helper.literalPattern().toString()))
		           {
		             doc.setCharacterAttributes(p, next.length(), literal, true);
		           }
		           p += next.length() + 1;
		         }
		         try {
		           Thread.sleep(250L);
		         }
		         catch (InterruptedException localInterruptedException)
		         {
		         }
		       }
		     }
		   }
		 }

Web Proxy Viewer  |  New URL  |  Original Page