JinnyChat.java :  » HTTP » http-bot » jinnychat » Java Open Source

Java Open Source » HTTP » http bot 
http bot » jinnychat » JinnyChat.java
package jinnychat;

import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.IOException;
import java.io.StringReader;
import java.io.UnsupportedEncodingException;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import org.apache.http.client.ClientProtocolException;
import org.ccil.cowan.tagsoup.Parser;
import org.json.JSONException;
import org.json.JSONObject;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import su.msk.dunno.httpbot.main.Bot;
import su.msk.dunno.httpbot.prototypes.AModule;
import su.msk.dunno.httpbot.prototypes.Order;
import su.msk.dunno.httpbot.support.Conn;
import su.msk.dunno.httpbot.support.parsers.FormParser;

public class JinnyChat extends AModule
{
  private String nickname = "Anonymous";
  
  private JinnyChatGUI gui;
  private JSONObject addPostForm;
  private JinnyChatParser chatParser = new JinnyChatParser();
  //public StringBuffer currentText = new StringBuffer("");
  private int from = 0;
  private int to = 50;
  
  public JinnyChat()
  {
    try {
      nickname = Bot.getSystemParams().getProperty("nickname");
      gui = new JinnyChatGUI();
      gui.jLabel_updatingchat.setVisible(true);
      Conn.instance().executeGet("http://jinny19861.0fees.net/mcht.php");
      addPostForm = FormParser.instance().parse().getJSONObject(0);

    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  
  @Override public void doAction() 
  {
    if(gui.isAddPost) addNewPost();
    updateChat();
  }

  @Override protected void executeOrder(Order currentOrder) {}
  
  private void addNewPost() 
  {
    try
    {
      if(gui.jTextField_nickname.getText() == null || "".equals(gui.jTextField_nickname.getText())) gui.jTextField_nickname.setText("Anonymous");
      if(gui.jTextArea_newmessage.getText() != null && !"".equals(gui.jTextArea_newmessage.getText()))
      {
        String name = gui.jTextField_nickname.getText();      
        String message = gui.jTextArea_newmessage.getText();
        String threadId = gui.jTextField_threadid.getText();
        //gui.jLabel_chat.setText(currentText.toString());
        addPostForm.put("name", name);
        addPostForm.put("msg", message);
        addPostForm.put("thread_id", threadId);
        Conn.instance().addPostData(addPostForm);
        Conn.instance().executePost(addPostForm.getString("link-to-action"));          
      }
    }
    catch (JSONException e) {
      e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
    } catch (ClientProtocolException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    } catch (SAXException e) {
      e.printStackTrace();
    } catch (java.lang.IllegalArgumentException e) {
      // ignore this
    }
    gui.jTextArea_newmessage.setText("");
    gui.jLabel_sendingmessage.setVisible(false);
    gui.isAddPost = false;
    gui.jLabel_updatingchat.setVisible(true);
  }
  
  private void updateChat()
  {
    try {
      from = Integer.valueOf(gui.jTextField_from.getText());
    } catch(NumberFormatException e) {
      from = 0;
      gui.jTextField_from.setText("0");
    }
    try {
      to = Integer.valueOf(gui.jTextField_to.getText());
    } catch(NumberFormatException e) {
      to = 50;
      gui.jTextField_to.setText("50");
    }
    
    String threadId = gui.jTextField_threadid.getText();
    
    try 
    {
      Conn.instance().executeGet("http://jinny19861.0fees.net/mcht.php?thread_id="+threadId+"&from="+from+"&to="+to);
      String chat = chatParser.parse();
      gui.jLabel_chat.setText(chat);
    } 
    catch (ClientProtocolException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    } catch (JSONException e) {
      e.printStackTrace();
    } catch (SAXException e) {
      e.printStackTrace();
    }
    gui.jLabel_updatingchat.setVisible(false);
  }
  
  class JinnyChatGUI extends JFrame
  {
    private static final long serialVersionUID = -1670705173282345859L;
    
    
    private JFrame frame;
    private JMenuBar menu;
    private JMenu forums;
    private JMenuItem item_2ch,item_ochan,item_flocal,item_jchat,item_exit;
    private jChatListener jChatListener;
    JTextArea jTextArea_newmessage;
    private JScrollPane jScrollPane2;
    private JTextField jTextField_to;
    private JLabel jLabel_to;
    private JTextField jTextField_from;
    private JLabel jLabel_posts_from;
    JTextField jTextField_nickname;
    private JLabel jLabel_nickname;
    private JScrollPane jScrollPane1;
    JLabel jLabel_chat;
    private JTextField jTextField_threadid;
    private JLabel jLabel_threadid;
    
    JLabel jLabel_sendingmessage;
    private JLabel jLabel_updatingchat;
    
    boolean isAddPost = false;
    private boolean isCtrlPressed = false;
    
    public JinnyChatGUI() throws Exception 
    {
      super();
      initGUI();
    }
    
    private void initGUI() 
    {
      try {
        frame = new JFrame();
        frame.setLayout(null);
        jChatListener = new jChatListener(this);
        menu = new JMenuBar();
        forums = new JMenu("forums");
        {
        item_2ch = new JMenuItem("2ch");
        item_ochan = new JMenuItem("0chan");
        item_flocal = new JMenuItem("flocal");
        item_jchat = new JMenuItem("jChat");
        item_exit = new JMenuItem("exit");
        }
        
        {
          item_2ch.addActionListener(jChatListener);
          item_ochan.addActionListener(jChatListener);
          item_flocal.addActionListener(jChatListener);
          item_jchat.addActionListener(jChatListener);
          item_exit.addActionListener(jChatListener);
          
        }
        
        {
          
          forums.add(item_2ch);
          forums.add(item_ochan);
          forums.add(item_flocal);
          forums.add(item_jchat);
          forums.addSeparator();
          forums.add(item_exit);
          
          
        }
        menu.add(forums);
      //  menuBar.add(menuOption());
      //  menuBar.add(menuInfo());
        frame.setJMenuBar(menu);
        {
          jScrollPane2 = new JScrollPane();
          frame.add(jScrollPane2);
          jScrollPane2.setBounds(12, 606, 507, 68);
          {
            jTextArea_newmessage = new JTextArea();
            jScrollPane2.setViewportView(jTextArea_newmessage);          
            jTextArea_newmessage.setBounds(12, 668, 324, 16);
          }
        }
        jTextArea_newmessage.addKeyListener(new KeyListener()
        {
          public void keyPressed(KeyEvent arg0) 
          {
            switch(arg0.getKeyCode())
            {
            case KeyEvent.VK_CONTROL:
              isCtrlPressed = true;
              break;
            case KeyEvent.VK_ENTER:
              if(isCtrlPressed && !jLabel_sendingmessage.isVisible() && !jLabel_updatingchat.isVisible()) 
              {
                isAddPost = true;
                jLabel_sendingmessage.setVisible(true);
                /*    Calendar cal = Calendar.getInstance();
                    SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
                    String time = sdf.format(cal.getTime());
                
                currentText.setLength(0);
                currentText.append(jLabel_chat.getText());
                String current_message = "<font color=red><b>"+jTextField_nickname.getText() +"&nbsp;</b></font>" +
                    "("+time+") <br>" +
                    "<font color=#666666 >"+jTextArea_newmessage.getText()+"</font> <br><br>";
                  
                jLabel_chat.setText(currentText.insert(6, current_message).toString());*/
              }
              break;
            }
          }

          public void keyReleased(KeyEvent arg0) 
          {
            switch(arg0.getKeyCode())
            {
            case KeyEvent.VK_CONTROL:
              isCtrlPressed = false;
              break;
            }
          }

          public void keyTyped(KeyEvent arg0) {}        
        });
        {
          jScrollPane1 = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
          frame.add(jScrollPane1);
          jScrollPane1.setBounds(12, 12, 507, 547);
          {
            String imgPath = System.getProperty("user.dir").replace("\\", "/")+"/pics/conata.jpg";

            jLabel_chat = new JLabel("<html><div align='center'><img src='file:///"+imgPath+"' /></div>");
            jLabel_chat.setVerticalAlignment(JLabel.TOP);
            jScrollPane1.setViewportView(jLabel_chat);
            jLabel_chat.setBounds(12, 12, 507, 547);
            jLabel_chat.setFont(new Font("", Font.PLAIN, 12));
            jLabel_chat.setBackground(Color.WHITE);
            jLabel_chat.setOpaque(true);
          }
          jScrollPane1.getVerticalScrollBar().setUnitIncrement(16);
        }
        {
          jLabel_nickname = new JLabel();
          frame.add(jLabel_nickname);
          jLabel_nickname.setBounds(12, 571, 33, 23);
          jLabel_nickname.setText(": ");
        }
        {
          jTextField_nickname = new JTextField();
          frame.add(jTextField_nickname);
          jTextField_nickname.setBounds(50, 571, 73, 23);
          jTextField_nickname.setText(nickname);
        }
        {
          jLabel_sendingmessage = new JLabel();
          frame.add(jLabel_sendingmessage);
          jLabel_sendingmessage.setBounds(12, 674, 323, 19);
          jLabel_sendingmessage.setText(" ...");
          jLabel_sendingmessage.setVisible(false);
        }
        {
          jLabel_updatingchat = new JLabel();
          frame.add(jLabel_updatingchat);
          jLabel_updatingchat.setBounds(12, 674, 323, 19);
          jLabel_updatingchat.setText(" ...");
          jLabel_updatingchat.setVisible(false);
        }
        {
          jLabel_posts_from = new JLabel();
          frame.add(jLabel_posts_from);
          jLabel_posts_from.setBounds(129, 571, 67, 23);
          jLabel_posts_from.setText(", :");
        }
        {
          jTextField_from = new JTextField();
          frame.add(jTextField_from);
          jTextField_from.setBounds(195, 571, 30, 23);
        }
        {
          jLabel_to = new JLabel();
          frame.add(jLabel_to);
          jLabel_to.setBounds(235, 571, 25, 23);
          jLabel_to.setText(": ");
        }
        {
          jTextField_to = new JTextField();
          frame.add(jTextField_to);
          jTextField_to.setBounds(260, 571, 30, 23);
        }
        {
          jLabel_threadid = new JLabel();
          frame.add(jLabel_threadid);
          jLabel_threadid.setBounds(294, 571, 40, 23);
          jLabel_threadid.setText(":");
        }
        {
          jTextField_threadid = new JTextField();
          frame.add(jTextField_threadid);
          jTextField_threadid.setBounds(334, 571, 185, 23);
          jTextField_threadid.setText("main");
        }
        frame.setTitle("jChat");
        frame.setSize(547, 750);
        frame.setResizable(false);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  }
  
  class jChatListener implements  ActionListener {

    public JinnyChatGUI gui;
    
    private jChatListener(JinnyChatGUI gui)
    {
      this.gui=gui;
    }
    
    private void chatMode()
    {
      gui.jTextField_nickname.setVisible(true);
      gui.jTextField_from.setVisible(true);
      gui.jTextField_to.setVisible(true);
      gui.jTextField_threadid.setVisible(true);
      gui.jTextArea_newmessage.setVisible(true);
      gui.jLabel_nickname.setVisible(true);
      gui.jLabel_posts_from.setVisible(true);
      gui.jLabel_to.setVisible(true);
      gui.jLabel_threadid.setVisible(true);
      gui.jScrollPane1.setBounds(12, 12, 507, 547);

      
    }
    
    private void forumMode()
    {
      gui.jTextField_nickname.setVisible(false);
      gui.jTextField_from.setVisible(false);
      gui.jTextField_to.setVisible(false);
      gui.jTextField_threadid.setVisible(false);
      gui.jTextArea_newmessage.setVisible(false);
      gui.jLabel_nickname.setVisible(false);
      gui.jLabel_posts_from.setVisible(false);
      gui.jLabel_to.setVisible(false);
      gui.jLabel_threadid.setVisible(false);
      gui.jScrollPane1.setBounds(12, 12, 507, 590);

      
    


      

      
    }
    
    
    
    public void actionPerformed(ActionEvent arg0) {
      
      // TODO Auto-generated method stub
      
      if (arg0.getSource()==gui.item_2ch)
      {
        forumMode();
        //Con link
        //handler for parser
        
        
      }
      
      if (arg0.getSource()==gui.item_ochan)
      {
        forumMode();
        //Con link
        //handler for parser
        
      }
      if (arg0.getSource()==gui.item_flocal)
      {
        forumMode();
        //Con link
        //handler for parser
        
      }
      if (arg0.getSource()==gui.item_jchat)
      {
        chatMode();
        //Con link
        //handler for parser
        
      }
      
      if (arg0.getSource()==gui.item_exit)
      {
        System.exit(0);
        
      }
      
    }

  }

}




class JinnyChatParser
{
  private JinnyChatHandler h;
  private Parser parser = new Parser();
  
  public String parse() throws IOException, SAXException, JSONException
  {
    return parse(new String(Conn.instance().currentHtml));
  }
  
  public String parse(String html) throws IOException, SAXException, JSONException
  {
    h = new JinnyChatHandler();
    parser.setContentHandler(h);
    parser.parse(new InputSource(new StringReader(html)));
    return h.getParsed();
  }
}

class JinnyChatHandler extends DefaultHandler
{
  private StringBuilder chatData = new StringBuilder("<html>");
  private int obtainStatus = 0;
  
  private StringBuilder nickname = new StringBuilder();
  private StringBuilder date = new StringBuilder();
  private StringBuilder message = new StringBuilder();
  
  public void startElement(String uri, 
                String local_name, 
                String raw_name, 
                Attributes amap) throws SAXException
  {
    if("div".equalsIgnoreCase(raw_name)) 
    {
      String id = amap.getValue("id");
      if("name".equalsIgnoreCase(id)) obtainStatus = 1;  // nickname
      else if("date".equalsIgnoreCase(id)) obtainStatus = 2;  // date
      else if("msg".equalsIgnoreCase(id)) obtainStatus = 3;  // message
    }
  }
  
  public void characters(char[] ch, int start, int length) throws SAXException
  {
    String value = new String(ch, start, length);
    switch(obtainStatus)
    {
    case 1: nickname.append(value); break;
    case 2: date.append(value); break;
    case 3: message.append(value); break;
    }
  }
  
  public void endElement(String uri, 
                  String local_name, 
                  String raw_name) throws SAXException
  {
    if("div".equalsIgnoreCase(raw_name) && obtainStatus == 3)
    {
      chatData.append("<font color=red><b>"+nickname.toString().replace("\n", "").replace("\t", "")+"&nbsp;</b></font>"+
          "("+date.toString().replace("\n", "").replace("\t", "")+")<br>"+
          "<font color=#666666 >"+ addEnters(removeEdgeSpecials(message)).replace("\n", "<br/>")+"</font> <br/> <br>");
      obtainStatus = 0;
    
      
      nickname = new StringBuilder();
      date = new StringBuilder();
      message = new StringBuilder();
    }
  }
  
  private String removeEdgeSpecials(StringBuilder sb)
  {
    int start = 0;
    int end = 0;
    
    int i = 0;
    while(i < sb.length() && (sb.charAt(i) == '\n' || sb.charAt(i) == '\t')) i++;
    start = i;
    
    i = sb.length()-1;
    while(i >= 0 && (sb.charAt(i) == '\n' || sb.charAt(i) == '\t')) i--;
    end = i;
    
    return sb.substring(start, end);
  }
  
  private String addEnters(String message)
  {
    if(message.length() > 58)
    {
      int space = findInt(message);
      if(space != 0) message = message.substring(0, space).replace("\n", " ") + "<br/>" + addEnters(message.substring(space));
    }
    return message;
  }
  
  private int findInt(String message)
  {
    if(message.length() > 58)
    {
      if(message.substring(0, 58).contains("\n\n")) return 0;
      for(int i = 58; i >= 0; i--)
      {
        char c = message.charAt(i);
        if(c == ' ') return i;
      }
    }
    return 0;
  }
  
  public String getParsed()
  {
    return chatData.toString();
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.