File:  [Repository] / upload-applet / ServerWriter.java
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Jun 17 14:59:39 2003 UTC (21 years ago) by rogo
Branches: bli, MAIN
CVS tags: bla, HEAD
First checkin.


    1: /**
    2:  * @author rogo
    3:  *
    4:  * To change this generated comment edit the template variable "typecomment":
    5:  * Window>Preferences>Java>Templates.
    6:  * To enable and disable the creation of type comments go to
    7:  * Window>Preferences>Java>Code Generation.
    8:  */
    9: import java.net.*;
   10: import java.io.*;
   11: import javax.swing.*;
   12: import java.awt.*;
   13: import java.awt.event.*;
   14: import java.security.*;
   15: import java.util.*;
   16: 
   17: public class ServerWriter extends JApplet implements ActionListener
   18: {
   19:   static File startFile;
   20:   static int count = 0;
   21:   static JFileChooser fileChooser;
   22:   static String url;
   23:   static long id = 0L;
   24:   static Hashtable connections=new Hashtable();
   25:   JButton upload = new JButton("Upload");
   26:   JRadioButton proxy = new JRadioButton("Proxy");
   27:   static int fileCount = 0;
   28:   // static UploadInfo dialog = new UploadInfo();
   29:   static String mode = "";
   30:   static String destination = "";
   31:   static String prefix = "";
   32:   static String proxyHost = "";
   33:   ServerWriter uploader = this;
   34:   static final int md5Length = 32;
   35:   public ServerWriter()
   36:   {
   37: 
   38:   }
   39:   public void init()
   40:   {
   41:     this.getContentPane().setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
   42:     this.getContentPane().add(upload);
   43:     this.getContentPane().add(proxy);
   44:     upload.addActionListener(this);
   45:     proxy.addActionListener(this);
   46:     id = System.currentTimeMillis();
   47:        Properties prop = System.getProperties();
   48: 
   49:     // prop.put("proxySet", "true"); 
   50:     // prop.put("http.proxyHost","proxy.unibe.ch");
   51:     // prop.put("proxyPort", "80"); 
   52:       prop.put("java.protocol.handler.pkgs","HTTPClient");
   53:      fileChooser=null;
   54:   }
   55:   public void actionPerformed(ActionEvent e)
   56:   {
   57:     if (e.getSource().equals(proxy))
   58:     {
   59:       proxyHost = JOptionPane.showInputDialog("Please enter proxy host (format host:port)!");
   60:       if (proxyHost != null)
   61:       {
   62:         if (proxyHost.length() == 0)
   63:           {
   64:           proxyHost = "";
   65:           Properties prop = System.getProperties();
   66:           prop.remove("proxySet"); 
   67:           prop.remove("http.proxyHost");
   68:           prop.remove("proxyPort");   
   69:         
   70:           }
   71:          else
   72:          {
   73:            Properties prop = System.getProperties();
   74:         int index = proxyHost.indexOf(":");
   75:         String pHost = proxyHost.substring(0, (index > 0) ? index : proxyHost.length());
   76:         String pPort = (index > 0) ? proxyHost.substring(index + 1) : "80";
   77: 
   78:        prop.put("proxySet", "true"); 
   79:        prop.put("http.proxyHost",pHost);
   80:        prop.put("proxyPort", pPort);   
   81:          }
   82:         System.out.println("pr "); // proxyHost="";
   83:       } else
   84:         proxyHost = "";
   85:       // proxy.setSelected(false);
   86:     }
   87: 
   88:     if (e.getActionCommand().equals("Upload"))
   89:     {
   90: 
   91:       //url=getParameter("url");
   92:       set();
   93:       System.out.println("url " + url); //+ " " + getCodeBase());
   94:       upload.setEnabled(false);
   95:       main(new String[] { "", "" });
   96:       upload.setEnabled(true);
   97:     }
   98: 
   99:   }
  100:   public void set()
  101:   {
  102:     String url = getParameter("baseURL");
  103:     String servletURL = getParameter("servletURL");
  104:     destination = "";
  105:     destination = getParameter("destinationFolder");
  106:     if (destination == null)
  107:       destination = "";
  108:     prefix = getParameter("prefix");
  109:      if(prefix == null) prefix="";
  110:     // e.g."/rogo/servlet/RWServlet/"
  111:     URL appletUrl = getCodeBase();
  112:     String serverInfo = appletUrl.getHost() + ":" + appletUrl.getPort();
  113:     this.url = (servletURL.startsWith("http")) ? servletURL + url : "http://" + serverInfo + servletURL + url;
  114:     Properties prop = System.getProperties();
  115: 
  116:     // prop.put("proxySet", "true"); 
  117:     // prop.put("http.proxyHost","proxy.unibe.ch");
  118:     // prop.put("proxyPort", "80"); 
  119:    //   prop.put("java.protocol.handler.pkgs","HTTPClient");
  120:     Enumeration en = prop.propertyNames();
  121:     while (en.hasMoreElements())
  122:     {
  123:       String key = (String) en.nextElement();
  124:       System.out.println("key: " + key + " value: " + prop.get(key));
  125: 
  126:     }
  127:   }
  128:   public static void main(String[] args)
  129:   {
  130:     try
  131:     {
  132:       if (fileChooser == null)
  133:       {
  134:         fileChooser = new JFileChooser();
  135:         fileChooser.setFileSelectionMode(fileChooser.FILES_AND_DIRECTORIES);
  136:         fileChooser.setFileFilter(new ImageFilter());
  137:         fileChooser.setDialogType(JFileChooser.OPEN_DIALOG);
  138:         fileChooser.addActionListener(new ActionListener()
  139:         {
  140:           public void actionPerformed(ActionEvent e2)
  141:           {
  142:             System.out.println(e2.getActionCommand());
  143:             if (!e2.getActionCommand().toString().equals("ApproveSelection")) return;
  144:             // {
  145: 
  146:             Thread thread = new Thread()
  147:             {
  148:               public void run()
  149:               {
  150:                 UploadInfo dialog = new UploadInfo();
  151:                
  152:                 File startFile=new File(".");
  153:                 try
  154:                 {
  155:                   dialog.thread=Thread.currentThread();
  156:                   System.out.println("Called run with " + fileChooser.getSelectedFile());
  157:                   dialog.setTitle("Upload Status Window");
  158:                   dialog.setSize(400, 175);
  159:                   dialog.setLocation(new java.awt.Point(150, 100));
  160:                   Update update = new Update();
  161:                   startFile = fileChooser.getSelectedFile(); //new File(fileChooser.getFile());
  162:                   int fileCount = 0;
  163:                   int count = 1;
  164:                   System.out.println(startFile);
  165:                   long time = System.currentTimeMillis();
  166:                    if( connections.get(startFile.getAbsolutePath())!=null) 
  167:                    throw new Error("Upload already running!");
  168:   
  169:                   if (startFile.isDirectory())
  170:                   {
  171:                     fileCount = countFiles(startFile, fileCount);
  172:                     System.out.println("Number of files to send: " + fileCount);
  173:                     writeDirectory(startFile, startFile, fileCount, count, dialog, update);
  174: 
  175:                   } else
  176:                   {
  177:                     fileCount = 1;
  178:                     writeStream(startFile, startFile, fileCount, count, dialog, update);
  179: 
  180:                   }
  181: 
  182:                   long time2 = System.currentTimeMillis();
  183:                   System.out.println("needed " + (time2 - time) + " ms for " + count--);
  184:                   dialog.setVisible(false);
  185:                   if (startFile.isDirectory())
  186:                     showDialog("Finished upload of " + startFile + " containing " + fileCount + " " + ((fileCount > 1) ? " files" : " file") + " in " + ((time2 - time) / 1000) + " seconds", "Finished Upload");
  187:                   else
  188:                     showDialog("Finished upload of " + startFile + " in " + ((time2 - time) / 1000) + " seconds", "Finished Upload");
  189:                  connections.remove(startFile.getAbsolutePath());
  190:                 } catch (Exception e)
  191:                 {
  192:                   dialog.setVisible(false);
  193:                   ByteArrayOutputStream b = new ByteArrayOutputStream();
  194:                   PrintStream stream = new PrintStream(b);
  195:                   e.printStackTrace(stream);
  196:                   connections.remove(startFile.getAbsolutePath());
  197:                  
  198:                   showErrorDialog(b.toString(), "Upload failed");
  199:                 } catch (Error e8)
  200:                 {
  201:                    dialog.setVisible(false);
  202:                    if( e8.toString().indexOf("Upload already running!")<0)
  203:                    connections.remove(startFile.getAbsolutePath());
  204:                    showErrorDialog(e8.toString(), "Upload failed");
  205:                 }
  206: 
  207:               }
  208:             };
  209:             thread.setPriority(Thread.MIN_PRIORITY);
  210:             /* dialog = new UploadInfo();
  211:              dialog.setTitle("Upload Status Window");
  212:              dialog.setSize(400, 155);
  213:              dialog.setLocation(new java.awt.Point(150, 100));
  214:              */
  215:             thread.start();
  216:             //          } // else
  217:             //System.exit(0);
  218:           }
  219:         });
  220: 
  221:       }
  222:       count = 1;
  223:       mode = "";
  224:       fileChooser.showDialog(new JFrame(), "Upload");
  225: 
  226:     } catch (Exception e)
  227:     {
  228:       System.out.println("Ha " + e);
  229:     }
  230:   }
  231:   private static int countFiles(File file, int fileCount)
  232:   {
  233:     if (file.isDirectory())
  234:     {
  235:       String[] files = file.list(new DotFileFilter());
  236: 
  237:       for (int j = 0; j < files.length; ++j)
  238:       {
  239:         File f = new File(file + File.separator + files[j]);
  240:         if (f.isDirectory())
  241:         {
  242:           fileCount = countFiles(f, fileCount);
  243:         } else
  244:           fileCount = fileCount + 1;
  245:       }
  246: 
  247:     }
  248:     return fileCount;
  249:   }
  250: 
  251:   private static int writeDirectory(File file, File startFile, int fileCount, int count, UploadInfo dialog, Update update) throws Exception
  252:   {
  253:     if (file.isDirectory())
  254:     {
  255:       String[] files = file.list(new DotFileFilter());
  256:       for (int j = 0; j < files.length; ++j)
  257:       {
  258:         File f = new File(file + File.separator + files[j]);
  259:         System.out.println(file + " " + f);
  260: 
  261:         if (f.isDirectory())
  262:         {
  263:           count = writeDirectory(f, startFile, fileCount, count, dialog, update);
  264:         } else
  265:           count = writeStream(f, startFile, fileCount, count, dialog, update);
  266:       }
  267:     }
  268:     return count;
  269:   }
  270:   private static int writeStream(File file, File startFile, int fileCount, int count, UploadInfo dialog, Update updateMode) throws Exception
  271:   {
  272:     // try
  273:     //{
  274:     String response = "", mode = "";
  275:     String path = file.getAbsolutePath();
  276:     String fName=file.getName();
  277:     String name = (startFile.isDirectory()) ? startFile.getName() + "/" + path.substring(startFile.getAbsolutePath().length() + 1) : file.getName();
  278:     if (destination != "")
  279:       name = (startFile.isDirectory()) ? destination + "/" + path.substring(startFile.getAbsolutePath().length() + 1) : destination + "/" + file.getName();
  280: if(prefix!="")
  281: name=name.substring(0,name.indexOf(fName))+prefix+fName;
  282:     System.out.println("hi " + name + " " + destination + " " + startFile.getName()+" "+file.getName());
  283:     FileInputStream f = new FileInputStream(file.getAbsolutePath());
  284:     int length = f.available();
  285:     int readCount = 0;
  286:     byte[] b = (length > 8192) ? new byte[8192] : new byte[length];
  287:     System.out.println(file.getName() + " " + ((length > 1000000) ? (length / 1048576) + " MByte" : length + " Bytes"));
  288:     String fileName = file.getName() + " " + ((length > 1000000) ? (length / 1048576) + " MByte" : length + " Bytes");
  289:     dialog.title.setText("Uploading " + startFile);
  290:     dialog.progress.setValue(0);
  291:     dialog.file.setText(fileName);
  292:     dialog.status.setText(count + " of " + fileCount + ((fileCount > 1) ? " files" : " file"));
  293:     //dialog.pack();
  294:     //dialog.validate();
  295:     if (dialog.isVisible())
  296:       dialog.repaint();
  297:     else
  298:       dialog.show();
  299: 
  300:     MessageDigest md = MessageDigest.getInstance("MD5");
  301:     FileInputStream f2 = new FileInputStream(file.getAbsolutePath());
  302: 
  303:     readCount = 0;
  304:    
  305:   /*  while (readCount < length)
  306:     {
  307:       if (readCount + b.length > length)
  308:         f2.read(b, 0, length - readCount); //  mout.flush();
  309:       else
  310:         f2.read(b);
  311:       if (readCount + b.length > length)
  312:         md.update(b, 0, length - readCount);
  313:       else
  314:         md.update(b, 0, b.length);
  315:       readCount += b.length;
  316:       //System.out.println("rock " + readCount);
  317: 
  318:     }*/
  319:     String md5 = "rogo";getMD5(md);
  320:     //md = null;
  321:     f2.close();
  322:     f2 = null;
  323:     if (updateMode.value)
  324:       mode = "replace";
  325: 
  326:     URL httpCon = new URL(url + getSHA((id + "").getBytes()) + "/" + convertUml(name) + "?id=" + getSHA((id + "").getBytes()) + "&count=" + count + "&nf=" + fileCount + "&md5=" + md5 + "&mode=" + mode);
  327:     /*  HttpURLConnection con = (HttpURLConnection) httpCon.openConnection(); 
  328:       con.setUseCaches(false);
  329:       con.setRequestMethod("PUT");
  330:       con.setDoOutput(true);
  331:       con.connect();
  332:       */
  333:     Connection con = null;
  334:     con=(Connection)connections.get(startFile.getAbsolutePath());
  335:     if(con==null)
  336:     {
  337:       con=new Connection(httpCon);
  338:       connections.put(startFile.getAbsolutePath(),con);
  339:     } else
  340:     con.url=httpCon;
  341:     OutputStream mout = con.out; //con.getOutputStream();
  342:     // InputStream  min= con.getInputStream();
  343:     //    System.out.println(httpCon);
  344:     //System.out.println("Response " + con.getResponseMessage()+" "+con.getContentLength());
  345:     boolean update =  con.update();
  346:     
  347:     System.out.println("update is" + update);
  348:     
  349:     if (!update || mode.equals("update") || mode.equals("replace"))
  350:       //if(true)
  351:     {
  352:       con.connect(length+md5Length);
  353:       mout = con.out;
  354:       md.reset();
  355:       /*  System.out.println("Free memory "+(Runtime.getRuntime().freeMemory()/ 1048576));
  356:         System.gc(); 
  357:         System.out.println("Free memory after"+(Runtime.getRuntime().freeMemory()/ 1048576));
  358:         System.out.println("Total memory after"+(Runtime.getRuntime().totalMemory()/ 1048576));
  359:        */
  360:       readCount = 0;
  361:       while (readCount < length)
  362:       {
  363:         if (readCount + b.length > length)
  364:           f.read(b, 0, length - readCount); //  mout.flush();
  365:         else
  366:           f.read(b);
  367:         if (readCount + b.length > length)
  368:           mout.write(b, 0, length - readCount); //  mout.flush();
  369:         else
  370:           mout.write(b);
  371:        if (readCount + b.length > length)
  372:           md.update(b, 0, length - readCount);
  373:        else
  374:         md.update(b, 0, b.length);
  375:          readCount += b.length;
  376:         if(((PrintStream)mout).checkError()) throw new Error("Error while sending data");
  377:         dialog.progress.setValue((int) (((double) readCount / (double) length) * 100.0));
  378: 
  379:         if (readCount % 1000 == 0)
  380:         {
  381:           //System.out.println("Free memory while writing"+(Runtime.getRuntime().freeMemory()/ 1048576));
  382:           //System.out.println("Total memory while writing"+(Runtime.getRuntime().totalMemory()/ 1048576));
  383:           //mout.flush();
  384:           //System.out.println(con.getClass());
  385:         }
  386:       }
  387:       md5 = getMD5(md);
  388:       mout.write(md5.getBytes());
  389:        if(((PrintStream)mout).checkError()) throw new Error("Error while sending md5");
  390:       //mout.close();
  391:       //con.disconnect();
  392:        
  393:       response = con.getResponseMessage();
  394:       System.out.println(response + " " + md5);
  395:     }
  396:     if (update && !mode.equals("update") && !mode.equals("replace"))
  397:       //(response.indexOf("Conflict")>=0 && !mode.equals("update") && !mode.equals("replace"))
  398:     {
  399:       updateMode.value = true;
  400:       Object[] options = new Object[] { "Replace folder", "Cancel" }, options2 = new Object[] { "Replace file", "Cancel" };
  401: 
  402:       int option = showDialog("Warning destination exists! \n What do you want to do?", "Destination exists!", (startFile.isDirectory()) ? options : options2);
  403:       if (option == 0)
  404:         mode = "replace";
  405:       //System.out.println("performing update");
  406:       else
  407:         throw new Error("Upload cancelled");
  408:       //mode = "cancel"; //System.out.println("performing replace");
  409:       //System.out.println("Watershine" + name + " " + mode);
  410:       // mout.close();
  411:    
  412:       con.disconnect();
  413:       httpCon = new URL(url + getSHA((id + "").getBytes()) + "/" + convertUml(name) + "?id=" + getSHA((id + "").getBytes()) + "&count=" + count + "&nf=" + fileCount + "&md5=" + md5 + "&mode=" + mode);
  414:       /*    con = (HttpURLConnection) httpCon.openConnection(); 
  415:           con.setRequestMethod("PUT");
  416:           con.setDoOutput(true);
  417:           con.connect();
  418:           mout = con.getOutputStream();
  419:           */
  420:       //con=new Connection(httpCon);
  421:       con.url = httpCon;
  422:       con.connect(length+md5Length);
  423:       md.reset();
  424:       mout = con.out;
  425:       readCount = 0;
  426:       FileInputStream f3 = new FileInputStream(file.getAbsolutePath());
  427:       while (readCount < length)
  428:       {
  429:         if (readCount + b.length > length)
  430:           f3.read(b, 0, length - readCount); //  mout.flush();
  431:         else
  432:           f3.read(b);
  433:         if (readCount + b.length > length)
  434:           mout.write(b, 0, length - readCount); //  mout.flush();
  435:         else
  436:           mout.write(b);
  437:         if (readCount + b.length > length)
  438:         md.update(b, 0, length - readCount);
  439:         else
  440:         md.update(b, 0, b.length);
  441:         readCount += b.length;
  442:        
  443:         if(((PrintStream)mout).checkError()) throw new Error("Error while sending data");
  444:         
  445:         dialog.progress.setValue((int) (((double) readCount / (double) length) * 100.0));
  446: 
  447:       }
  448:       f3.close();
  449:      // mout.flush();
  450:       md5=getMD5(md);
  451:       mout.write(md5.getBytes()); // write md5 code
  452:       if(((PrintStream)mout).checkError()) throw new Error("Error while sending md5");
  453: 
  454:       response = con.getResponseMessage();
  455:       System.out.println("MyResponse " + response);
  456: 
  457:     } else if (response.indexOf(" Checksums not identical!") >= 0)
  458:     {
  459:       Object[] options = { "Retry", "Cancel" };
  460: 
  461:       int option = showDialog("Transfer failed! \n What do you want to do?", "Transfer failed ", options);
  462:       con.disconnect();
  463:       if (option == 0)
  464:       {
  465:         httpCon = new URL(url + getSHA((id + "").getBytes()) + "/" + convertUml(name) + "?id=" + getSHA((id + "").getBytes()) + "&count=" + count + "&nf=" + fileCount + "&md5=" + md5 + "&mode=" + mode);
  466:         /*  con = (HttpURLConnection) httpCon.openConnection(); // con.setRequestMethod("GET");
  467:           con.setRequestMethod("PUT");
  468:           con.setDoOutput(true);
  469:           con.connect();
  470:           mout = con.getOutputStream();
  471:           //     System.out.println(htt  readCount = 0;
  472:         */
  473: 
  474:         con.url = httpCon;
  475:         con.connect(length+md5Length);
  476:         mout = con.out;
  477:         FileInputStream f4 = new FileInputStream(file.getAbsolutePath());
  478:         readCount = 0;
  479:         while (readCount < length)
  480:         {
  481:           if (readCount + b.length > length)
  482:             f4.read(b, 0, length - readCount); //  mout.flush();
  483:           else
  484:             f4.read(b);
  485:           if (readCount + b.length > length)
  486:             mout.write(b, 0, length - readCount); //  mout.flush();
  487:           else
  488:             mout.write(b);
  489:           readCount += b.length;
  490:           if(((PrintStream)mout).checkError()) throw new Error("Error while sending data");
  491:           dialog.progress.setValue((int) (((double) readCount / (double) length) * 100.0));
  492:            
  493:         }
  494:         f4.close();
  495:         mout.write(md5.getBytes());
  496:         if(((PrintStream)mout).checkError()) throw new Error("Error while sending md5");
  497:         response = con.getResponseMessage();
  498:         System.out.println("MyResponse " + response);
  499:       }
  500: 
  501:     } else
  502:       con.disconnect();
  503: 
  504:     f.close();
  505:     count++;
  506:     /*
  507:        } catch (IOException ioe)
  508:        {
  509:          System.out.println("IOException: " + ioe);
  510:          ioe.printStackTrace();
  511:         throw(ioe);
  512:             } catch (Exception e)
  513:        {
  514:          System.out.println("IOException: " + e);
  515:          showErrorDialog(e.toString(),"Upload failed");
  516:        }*/
  517:     return count;
  518:   }
  519:   public static String getMD5(MessageDigest md) throws Exception
  520:   {
  521:     byte[] bytes = md.digest();
  522:     System.out.println("digest " + bytes.length);
  523:     StringBuffer sb = new StringBuffer();
  524:     int decValue;
  525:     for (int i = 0; i < bytes.length; i++)
  526:     {
  527:       String hexVal = Integer.toHexString(bytes[i] & 0xFF);
  528:       if (hexVal.length() == 1)
  529:         hexVal = "0" + hexVal; // put a leading zero
  530:       sb.append(hexVal);
  531:     }
  532:     return sb.toString();
  533:   }
  534:   public static String getSHA(byte[] b) throws Exception
  535:   {
  536:     MessageDigest md = MessageDigest.getInstance("SHA");
  537:     md.update(b, 0, b.length);
  538:     //System.out.println("digest");
  539:     byte[] bytes = md.digest();
  540:     StringBuffer sb = new StringBuffer();
  541:     int decValue;
  542:     for (int i = 0; i < bytes.length; i++)
  543:     {
  544:       String hexVal = Integer.toHexString(bytes[i] & 0xFF);
  545:       if (hexVal.length() == 1)
  546:         hexVal = "0" + hexVal; // put a leading zero
  547:       sb.append(hexVal);
  548:     }
  549: 
  550:     return sb.toString();
  551:   }
  552: 
  553:   public static String convertUml(String newName)
  554:   {
  555:     StringBuffer alterMe = new StringBuffer(newName.trim());
  556:     int length = alterMe.length();
  557:     int j = 0;
  558:     while (j < length)
  559:     { //if(Character.isSpaceChar(alterMe.charAt(j)))
  560:       //  alterMe.setCharAt(j,'_');
  561:       if (alterMe.charAt(j) == ' ')
  562:       {
  563:         alterMe.setCharAt(j, '%');
  564:         alterMe.insert(j + 1, "20");
  565:         length = length + 2;
  566:       }
  567:       /* if(Character.isSpaceChar(alterMe.charAt(j))
  568:        alterMe.setCharAt(j,'_');
  569:       */
  570:       ++j;
  571:     }
  572:     return alterMe.toString();
  573:   }
  574:   public static class UploadInfo extends JDialog
  575:   {
  576:     JLabel file = new JLabel("    ");
  577:     JLabel status = new JLabel("    ");
  578:     JLabel title = new JLabel("     ");
  579:     JPanel content = new JPanel();
  580:     JPanel titlePanel = new JPanel();
  581:     JPanel labelPanel = new JPanel();
  582:     JPanel statusPanel = new JPanel();
  583:     JPanel buttonPanel = new JPanel();
  584: 
  585:     JProgressBar progress = new JProgressBar();
  586:     JButton cancel = new JButton("Cancel");
  587:     Thread thread;
  588:     public UploadInfo()
  589:     {
  590: 
  591:       content = new JPanel(true);
  592:       //content.setBorder(BorderFactory.createRaisedBevelBorder());
  593:       content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
  594:       title = new JLabel("Uploading " + startFile);
  595:       title.setHorizontalTextPosition(title.CENTER);
  596:       titlePanel.add(title);
  597:       buttonPanel.add(cancel);
  598:       // content.add(titlePanel);
  599:       content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
  600:       content.add(labelPanel);
  601:       content.add(new JLabel(""));
  602:       content.add(progress);
  603:       content.add(statusPanel);
  604:       content.add(buttonPanel);
  605:       content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
  606:       labelPanel.add(file);
  607:       statusPanel.add(status);
  608:       getContentPane().add(titlePanel, "North");
  609:       getContentPane().add(content, "Center");
  610:       cancel.addActionListener(new ActionListener()
  611:       {
  612:         public void actionPerformed(ActionEvent e)
  613:         {
  614:           setVisible(false);
  615:           thread.stop();
  616:         }
  617: 
  618:       });
  619:       pack();
  620: 
  621:     }
  622: 
  623:   }
  624:   public static int showDialog(String message, String title, Object[] options)
  625:   {
  626:     int option = JOptionPane.showOptionDialog(null, message, title, JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]);
  627:     return option;
  628: 
  629:   }
  630:   public static void showDialog(String message, String title)
  631:   {
  632:     JOptionPane.showMessageDialog(null, message, title, JOptionPane.PLAIN_MESSAGE);
  633: 
  634:   }
  635:   public static void showErrorDialog(String message, String title)
  636:   {
  637:     JOptionPane.showMessageDialog(null, message, title, JOptionPane.ERROR_MESSAGE);
  638:   }
  639: 
  640:   static class Connection
  641:   {
  642:     Socket socket;
  643:     URL url;
  644:     BufferedInputStream in;
  645:     PrintStream out;
  646:     String pHost;
  647:     int pPort = 80;
  648:     HttpURLConnection con;
  649:     public Connection(URL url) throws Exception
  650:     {
  651:       Properties prop = System.getProperties();
  652:       pHost = null;
  653:       pPort = 80;
  654:       Enumeration en = prop.propertyNames();
  655:       while (en.hasMoreElements())
  656:       {
  657:         String key = (String) en.nextElement();
  658:         if (key.toString().indexOf("proxyHost") >= 0)
  659:         {
  660:           Object host = prop.get(key);
  661:           if (host != null)
  662:             pHost = host.toString();
  663:         }
  664:         if (key.toString().indexOf("proxyPort") >= 0)
  665:         {
  666:           Object port = prop.get(key);
  667:           if (port != null)
  668:             pPort = Integer.parseInt(port.toString());
  669:         }
  670:       }
  671: 
  672:       if (proxyHost != "")
  673:       {
  674:         int index = proxyHost.indexOf(":");
  675:         pHost = proxyHost.substring(0, (index > 0) ? index : proxyHost.length());
  676:         pPort = (index > 0) ? Integer.parseInt(proxyHost.substring(index + 1)) : 80;
  677:       }
  678:   socket = new Socket((pHost != null) ? pHost : url.getHost(), (pHost != null) ? pPort : url.getPort());
  679:      socket.setTcpNoDelay(true);
  680:        in = new BufferedInputStream(socket.getInputStream());
  681:       out = new PrintStream(new BufferedOutputStream(socket.getOutputStream()),true);
  682:       this.url = url;
  683:     }
  684:     public void connect(int size) throws Exception
  685:     {
  686:       try
  687:       {
  688:         //System.out.println("Yeah i called connect");
  689:         //  socket = new Socket((pHost != null) ? pHost : url.getHost(), (pHost != null) ? pPort : url.getPort());
  690:          // socket.setTcpNoDelay(true);
  691:         in = new BufferedInputStream(socket.getInputStream());
  692:         out = new PrintStream(new BufferedOutputStream(socket.getOutputStream()),true);
  693:     
  694:           out.print(("PUT " + url + " HTTP/1.1\r\nContent-Type: text/html\r\nContent-Length:" + size + "\r\nHost: " + url.getHost() + "\r\n\r\n"));//.getBytes());
  695:         out.flush();
  696:       } catch (Exception e)
  697:       {
  698:         socket = new Socket((pHost != null) ? pHost : url.getHost(), (pHost != null) ? pPort : url.getPort());
  699:           socket.setTcpNoDelay(true);
  700:         in = new BufferedInputStream(socket.getInputStream());
  701:         out = new PrintStream(new BufferedOutputStream(socket.getOutputStream()),true);
  702:         out.print(("PUT " + url + " HTTP/1.1\r\nContent-Type:text/html\r\nContent-Length:" + size + "\r\nHost: " + url.getHost() + "\r\n\r\n"));//).getBytes());
  703:         out.flush();
  704:         //System.out.println("Error "+e);
  705:       }
  706:       
  707:   /*    con = new HTTPClient.HttpURLConnection(url);//(HttpURLConnection) url.openConnection(); // con.setRequestMethod("GET");
  708:       con.setUseCaches(false);
  709:       con.setRequestMethod("PUT");
  710:       con.setDoOutput(true);
  711:       con.setRequestProperty("Content-Length", ""+size);
  712:     //  con.connect();      
  713:       System.out.println(con.getClass());
  714:       out = new DataOutputStream(con.getOutputStream());
  715:       */
  716:     }
  717:     public boolean update() throws Exception
  718:     {
  719:       boolean exists = false;
  720:       String response = "";
  721:       try
  722:       {
  723: 
  724:         URL url = createURL(this.url.toString(), getSHA((id + "").getBytes()));
  725:       //  con = new HTTPClient.HttpURLConnection(url);//(HttpURLConnection) url.openConnection(); // con.setRequestMethod("GET");
  726:         //con.setUseCaches(false);
  727:        // con.setRequestMethod("HEAD");
  728:         //con.setDoOutput(true);
  729:        // con.connect();
  730: 
  731:         out.print(("HEAD " + url + " HTTP/1.1\r\nConnection:Keep-Alive\r\nHost: " + url.getHost() + "\r\n\r\n"));//.getBytes());
  732:           out.flush();
  733:         response = getResponseMessage();
  734:         exists = response.indexOf("OK") >= 0;
  735:         System.out.println("Head "+response);
  736:       
  737:          } catch (Exception e)
  738:       {
  739:         socket = new Socket((pHost != null) ? pHost : url.getHost(), (pHost != null) ? pPort : url.getPort());
  740:           socket.setTcpNoDelay(true);
  741:         in = new BufferedInputStream(socket.getInputStream());
  742:         out = new PrintStream(new BufferedOutputStream(socket.getOutputStream()),true);
  743:     //    out.writeBytes("HEAD " + url + " HTTP/1.1\r\n Connection:Keep-Alive\r\n \r\nHost: " + url.getHost() + //"\r\n\r\n");
  744:         URL url = createURL(this.url.toString(), getSHA((id + "").getBytes()));
  745:         out.print(("HEAD " + url + " HTTP/1.1\r\nConnection:Keep-Alive\r\nHost: " + url.getHost() + "\r\n\r\n"));//.getBytes());
  746:         out.flush();
  747:         response = getResponseMessage();
  748:         System.out.println("Head " + response);
  749:         exists = response.indexOf("OK") >= 0;
  750:         //System.out.println("Error from Head "+e);
  751:         // e.printStackTrace();
  752:              return exists;
  753:       
  754:       }
  755:       return exists;
  756:     }
  757:     public URL createURL(String fileToPut, String id) throws Exception
  758:     {
  759:       int index = fileToPut.lastIndexOf("/") + 1;
  760:       String source = fileToPut; //.substring(0, index);
  761:       // String fileName = fileToPut.substring(index);
  762:       index = source.indexOf(id);
  763:       int index2 = index + id.length() + 1;
  764:       int index3 = source.indexOf("/", index2);
  765: 
  766:       //  System.out.println(fileToPut+" "+index2+" "+index3+" "+id);
  767:       //   String dest = (index3 > 0) ? source.substring(0, index) + source.substring(index2, index3)+"/"+fileName : //source.substring(0, index) + fileName;
  768:       // file check versus folder Check if destination !="" folder check is performed
  769:       String dest = (destination!="") ? source.substring(0, index) + source.substring(index2,index3):source.substring(0, index) + source.substring(index2);
  770:       // System.out.println("dest "+source.substring(0,index)+ source.substring(index2));
  771:       // File f = new File(dest);
  772:       //return f.exists();
  773:       return new URL(dest);
  774:     }
  775: 
  776:     public String getResponseMessage()
  777:     {
  778:       
  779:       int b=0;StringBuffer between=new StringBuffer();int count=0;
  780:                   // while(!between.toString().equals("\r"))
  781:                   // {
  782:                    // between=new StringBuffer(40);
  783:           try 
  784:           {
  785:             int loop =0;int available = 0;
  786:             while((available=in.available())==0) 
  787:             {
  788:               if(loop>=600) throw new Error("Connection timed out");
  789:               long time = System.currentTimeMillis();
  790:               while(System.currentTimeMillis()-time<100);
  791:               if(available==0) loop++; else loop=0;
  792:             }
  793:        // System.out.println("heh there are bytes "+in.available()+" available");
  794:         int limit = in.available();
  795:                    while(true )
  796:                    {
  797:                      //Thread.sleep(10);
  798:                      b=in.read();
  799:                      /*
  800:                      if(b=='\r')
  801:                      {
  802:                        b=in.read();
  803:                        b=in.read();
  804:                        count=count+2;
  805:                        // if(b=='\r') break;
  806:                        //else
  807:                         between.append('\n');
  808:                     }
  809:                     */
  810:                     between.append((char)b);
  811:                     //   System.out.print((char)b);
  812:                      //System.out.println("read "+count+" bytes");
  813:                     count++;            
  814:                     if(count==limit) break;
  815:                     }
  816:      
  817:       } catch(Exception e) { 
  818:       e.printStackTrace();
  819:       System.out.println("Error found");
  820:       if(e.toString().indexOf("peer")>=0)
  821:       return getResponseMessage();
  822:       else throw new Error("Error while reading response");
  823:       }
  824:       String response = between.toString();
  825:       if(response.indexOf("close") >= 0)
  826:        reconnect();
  827:       return response; 
  828:       
  829:       /*
  830:       String response = "";
  831:       try
  832:       {
  833:         response = con.getResponseMessage();
  834:       // con.disconnect();
  835:       } catch (Exception e)
  836:       {
  837:         showErrorDialog(e.getMessage(),"Shit happens");
  838:       }
  839:       */
  840: 
  841:     //  return response;
  842:     }
  843:     public void disconnect() throws Exception
  844:     {
  845:      //socket.close();
  846:      // con.disconnect();
  847:     }
  848:     public void reconnect() 
  849:     {
  850:       try 
  851:       {
  852:         System.out.println("Reconnect called");
  853:         int port= (url.getPort()>=0) ? url.getPort():80;
  854:         socket = new Socket((pHost != null) ? pHost : url.getHost(), (pHost != null) ? pPort :port);
  855:         socket.setTcpNoDelay(true);
  856:         in = new BufferedInputStream(socket.getInputStream());
  857:         out = new PrintStream(new BufferedOutputStream(socket.getOutputStream()),true);
  858:         
  859:       } catch(Exception e) 
  860:         {
  861:           showErrorDialog(e.getMessage(),"Shit happens");
  862:         }
  863: 
  864:     }
  865:   }
  866:   static class Update
  867:   {
  868:     boolean value = false;
  869:     public Update()
  870:     {
  871:       value = false;
  872:     }
  873:   }
  874: static class DotFileFilter implements FilenameFilter
  875: {
  876:      public DotFileFilter() {}
  877:     public boolean accept(File dir, String name) 
  878:     {
  879:       if(name.startsWith(".")) return false;
  880:       else return true;
  881:     }
  882:   }
  883:   static class ImageFilter extends javax.swing.filechooser.FileFilter
  884:   {
  885:     public boolean accept(java.io.File file)
  886:     {
  887:        String name=file.getName().toLowerCase();
  888:      if(name.endsWith(".gif")||name.endsWith(".jpg")||name.endsWith(".tif")||name.endsWith(".png")||name.endsWith(".jpeg")||file.isDirectory())
  889:      return true ; 
  890:      else return false;
  891:     }
  892:      public String getDescription()
  893:      {
  894:      return "Image File";
  895:      }
  896:  }
  897: 
  898: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>