Annotation of upload-applet/ServerWriter.java, revision 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>