Annotation of upload-applet/ServerWriter.java, revision 1.1.1.1

1.1       rogo        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>