Annotation of edoc-applet/Upload.java, revision 1.1

1.1     ! rogo        1: //
        !             2: //  Upload.java
        !             3: //  
        !             4: //
        !             5: //  Created by rogo on Wed Jan 29 2003.
        !             6: //  Copyright (c) 2001 __MyCompanyName__. All rights reserved.
        !             7: //
        !             8:  import com.exploringxml.xml.*;
        !             9:  import java.io.*;
        !            10:  import java.util.*;
        !            11:  import java.net.*;
        !            12:  import javax.swing.*;
        !            13:  import java.awt.*;
        !            14:  import java.awt.event.*;
        !            15:  import java.security.*;
        !            16: 
        !            17: 
        !            18: 
        !            19: public class Upload extends JApplet implements ActionListener
        !            20: {
        !            21:   static File startFile;
        !            22:   static int count = 0;
        !            23:   static JFileChooser fileChooser;
        !            24:   static String url;
        !            25:   static long id = 0L;
        !            26:   static Hashtable connections=new Hashtable();
        !            27:   static String col = "11"; // Collection /Institute
        !            28:   static String grp ="141"; // Group or Bundle
        !            29:   static String ses ="";
        !            30:   static Bundle bundle;
        !            31:   static Bundle bundleRef;
        !            32:   JButton upload = new JButton("Upload");
        !            33:   JRadioButton proxy = new JRadioButton("Proxy");
        !            34:   static int fileCount = 0;
        !            35:   // static UploadInfo dialog = new UploadInfo();
        !            36:   static String mode = "";
        !            37:   static String destination = "";
        !            38:   static String proxyHost = "";
        !            39:   Upload uploader = this;
        !            40:   static boolean runningAsApplet=true;
        !            41:   static boolean debug=false;
        !            42:   static String  rootNode = "edoc";
        !            43:   static MessageDigest md ;
        !            44:   static
        !            45:   {
        !            46:       try {
        !            47:         md = MessageDigest.getInstance("MD5");
        !            48:     } catch(Exception e) { e.printStackTrace();}
        !            49:   }
        !            50:   public Upload() 
        !            51:   {
        !            52:     if(!runningAsApplet)
        !            53:     init();
        !            54:   }
        !            55:  
        !            56:  // start applet code
        !            57:    public void init()
        !            58:   {
        !            59:     this.getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0));
        !            60:     this.getContentPane().add(upload);
        !            61:     this.getContentPane().add(proxy);
        !            62:     upload.addActionListener(this);
        !            63:     proxy.addActionListener(this);
        !            64:     id = System.currentTimeMillis();
        !            65:        Properties prop = System.getProperties();
        !            66: 
        !            67:     // prop.put("proxySet", "true"); 
        !            68:     // prop.put("http.proxyHost","proxy.unibe.ch");
        !            69:     // prop.put("proxyPort", "80"); 
        !            70:      // prop.put("java.protocol.handler.pkgs","HTTPClient");
        !            71:      fileChooser=null;
        !            72:     if(!runningAsApplet)
        !            73:     {
        !            74:       Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
        !            75:       Point p=new Point((screenSize.width-300)/2,(screenSize.height-180)/2);
        !            76:       JFrame testFrame=new JFrame();
        !            77:       testFrame.setTitle("Archimedes Applet");
        !            78:       testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        !            79:       testFrame.getContentPane().add(this);
        !            80:       testFrame.setSize(300,180);
        !            81:       testFrame.setLocation(p);
        !            82:       testFrame.setVisible(true);
        !            83:       Console console = new Console(testFrame);
        !            84:       console.setVisible(true);
        !            85:       try 
        !            86:       {
        !            87:         Connection con= new Connection(new URL("http://core.rz-berlin.mpg.de:80/edoctest/adm.epl"));
        !            88:         ses=con.getSessionID("name=root&passwd=edoctest&mode=verifylogin");
        !            89:         //("name=dwinter&passwd=e1nste1n&mode=verifylogin");
        !            90:         con.socket.close();
        !            91:        } catch(Exception exc) { }
        !            92:     } else
        !            93:     {
        !            94:       Console console = new Console(new JFrame());
        !            95:       console.setVisible(true);
        !            96:       ses= getParameter("ses");
        !            97:       col = getParameter("col").trim();
        !            98:       grp = getParameter("grp").trim();
        !            99:       bundleRef = getBundle(getCodeBase()+"oi.epl?mm=list&grp="+grp+"&col="+col);
        !           100:       getGenre(); 
        !           101:       //bundle=getBundle("http://core.rz-berlin.mpg.de/edoctest/oi.epl?mm=list&grp=136&col=11");
        !           102:      
        !           103:     }
        !           104:   }
        !           105:   public void actionPerformed(ActionEvent e)
        !           106:   {
        !           107:     if (e.getSource().equals(proxy))
        !           108:     {
        !           109:       proxyHost = JOptionPane.showInputDialog("Please enter proxy host (format host:port)!");
        !           110:       if (proxyHost != null)
        !           111:       {
        !           112:         if (proxyHost.length() == 0)
        !           113:           {
        !           114:           proxyHost = "";
        !           115:           Properties prop = System.getProperties();
        !           116:           prop.remove("proxySet"); 
        !           117:           prop.remove("http.proxyHost");
        !           118:           prop.remove("proxyPort");   
        !           119:         
        !           120:           }
        !           121:          else
        !           122:          {
        !           123:            Properties prop = System.getProperties();
        !           124:         int index = proxyHost.indexOf(":");
        !           125:         String pHost = proxyHost.substring(0, (index > 0) ? index : proxyHost.length());
        !           126:         String pPort = (index > 0) ? proxyHost.substring(index + 1) : "80";
        !           127: 
        !           128:        prop.put("proxySet", "true"); 
        !           129:        prop.put("http.proxyHost",pHost);
        !           130:        prop.put("proxyPort", pPort);   
        !           131:          }
        !           132:         System.out.println("pr "); // proxyHost="";
        !           133:       } else
        !           134:         proxyHost = "";
        !           135:       // proxy.setSelected(false);
        !           136:     }
        !           137: 
        !           138:     if (e.getActionCommand().equals("Upload"))
        !           139:     {
        !           140: 
        !           141:       //url=getParameter("url");
        !           142:      if(runningAsApplet)
        !           143:       set();
        !           144:       //System.out.println("url " + url); //+ " " + getCodeBase());
        !           145:       upload.setEnabled(false);
        !           146:       makeUpload();
        !           147:       upload.setEnabled(true);
        !           148:     }
        !           149: 
        !           150:   }
        !           151:   public void set()
        !           152:   {
        !           153:     col = getParameter("col").trim();
        !           154:     grp = getParameter("grp").trim();
        !           155:     ses = getParameter("ses").trim();
        !           156:     System.out.println("uploading to grp "+grp+" col "+col);
        !           157:     destination = "";
        !           158:    // destination = getParameter("destinationFolder");
        !           159:     if (destination == null)
        !           160:       destination = "";
        !           161:     // e.g."/rogo/servlet/RWServlet/"
        !           162:     URL appletURL = getCodeBase();
        !           163:     String serverInfo = appletURL.getHost() + ":" + appletURL.getPort();
        !           164:   //  this.url = (servletURL.startsWith("http")) ? servletURL + url : "http://" + serverInfo + servletURL + url;
        !           165:     this.url=appletURL.toString();
        !           166:     Properties prop = System.getProperties();
        !           167:      
        !           168:     // prop.put("proxySet", "true"); 
        !           169:     // prop.put("http.proxyHost","proxy.unibe.ch");
        !           170:     // prop.put("proxyPort", "80"); 
        !           171:    //   prop.put("java.protocol.handler.pkgs","HTTPClient");
        !           172:     Enumeration en = prop.propertyNames();
        !           173:     if(debug)
        !           174:     while (en.hasMoreElements())
        !           175:     {
        !           176:       String key = (String) en.nextElement();
        !           177:       System.out.println("key: " + key + " value: " + prop.get(key));
        !           178: 
        !           179:     }
        !           180:      System.out.println(url+"oi.epl?mm=list&grp="+grp+"&col="+col);
        !           181:     
        !           182:   }
        !           183:   public static void makeUpload()
        !           184:   {
        !           185:     try
        !           186:     {
        !           187:       if (fileChooser == null)
        !           188:       {
        !           189:         fileChooser = new JFileChooser();
        !           190:        // fileChooser.setFileSelectionMode(fileChooser.FILES_AND_DIRECTORIES);
        !           191:         fileChooser.setFileFilter(new XMLFilter());
        !           192:         fileChooser.setDialogType(JFileChooser.OPEN_DIALOG);
        !           193:         fileChooser.addActionListener(new ActionListener()
        !           194:         {
        !           195:           public void actionPerformed(ActionEvent e2)
        !           196:           {
        !           197:             System.out.println(e2.getActionCommand());
        !           198:             if (!e2.getActionCommand().toString().equals("ApproveSelection")) return;
        !           199:             // {
        !           200: 
        !           201:             Thread thread = new Thread()
        !           202:             {
        !           203:               public void run()
        !           204:               {
        !           205:                 UploadInfo dialog = new UploadInfo();
        !           206:                
        !           207:                 File startFile=new File(".");
        !           208:                 try
        !           209:                 {
        !           210:                   dialog.thread=Thread.currentThread();
        !           211:                   System.out.println("Called run with " + fileChooser.getSelectedFile());
        !           212:                   dialog.setTitle("Upload Status Window");
        !           213:                   dialog.setSize(400, 175);
        !           214:                   dialog.setLocation(new java.awt.Point(150, 100));
        !           215:                   Update update = new Update();
        !           216:                   startFile = fileChooser.getSelectedFile(); //new File(fileChooser.getFile());
        !           217:                   int fileCount = 0;
        !           218:                   int count = 1;
        !           219:                   long time = System.currentTimeMillis();
        !           220:                    if( connections.get(startFile.getAbsolutePath())!=null) 
        !           221:                    throw new Error("Upload already running!");
        !           222:   
        !           223:                   if (startFile.isDirectory())
        !           224:                   {
        !           225:                     fileCount = countFiles(startFile, fileCount);
        !           226:                     System.out.println("Number of files to send: " + fileCount);
        !           227:                     bundle=getBundle(startFile);
        !           228:                     writeDirectory(startFile, startFile, fileCount, count, dialog, update);
        !           229: 
        !           230:                   } else
        !           231:                   {
        !           232:                     fileCount = 1;
        !           233:                     //writeStream(startFile, startFile, fileCount, count, dialog, update);
        !           234:                      bundle = getBundle(startFile);
        !           235:                      writeStream(startFile,bundle, dialog);
        !           236: 
        !           237:                   }
        !           238: 
        !           239:                   long time2 = System.currentTimeMillis();
        !           240:                   System.out.println("needed " + (time2 - time) + " ms for " + count--);
        !           241:                   dialog.setVisible(false);
        !           242:                   if (startFile.isDirectory())
        !           243:                     showDialog("Finished upload of " + startFile + " containing " + fileCount + " " + ((fileCount > 1) ? " files" : " file") + " in " + ((time2 - time) / 1000) + " seconds", "Finished Upload");
        !           244:                   else
        !           245:                     showDialog("Finished upload of " + startFile + " in " + ((time2 - time) / 1000) + " seconds", "Finished Upload");
        !           246:                  connections.remove(startFile.getAbsolutePath());
        !           247:                 } catch (Exception e)
        !           248:                 {
        !           249:                   dialog.setVisible(false);
        !           250:                   ByteArrayOutputStream b = new ByteArrayOutputStream();
        !           251:                   PrintStream stream = new PrintStream(b);
        !           252:                   e.printStackTrace(stream);
        !           253:                   connections.remove(startFile.getAbsolutePath());
        !           254:                  
        !           255:                   showErrorDialog(b.toString(), "Upload failed");
        !           256:                 } catch (Error e8)
        !           257:                 {
        !           258:                    dialog.setVisible(false);
        !           259:                    if( e8.toString().indexOf("Upload already running!")<0)
        !           260:                    connections.remove(startFile.getAbsolutePath());
        !           261:                    showErrorDialog(e8.toString(), "Upload failed");
        !           262:                 }
        !           263: 
        !           264:               }
        !           265:             };
        !           266:             thread.setPriority(Thread.MIN_PRIORITY);
        !           267:             /* dialog = new UploadInfo();
        !           268:              dialog.setTitle("Upload Status Window");
        !           269:              dialog.setSize(400, 155);
        !           270:              dialog.setLocation(new java.awt.Point(150, 100));
        !           271:              */
        !           272:             thread.start();
        !           273:             //          } // else
        !           274:             //System.exit(0);
        !           275:           }
        !           276:         });
        !           277: 
        !           278:       }
        !           279:       count = 1;
        !           280:       mode = "";
        !           281:       fileChooser.showDialog(new JFrame(), "Upload");
        !           282: 
        !           283:     } catch (Exception e)
        !           284:     {
        !           285:       System.out.println("Ha " + e);
        !           286:     }
        !           287:   }
        !           288:   private static int countFiles(File file, int fileCount)
        !           289:   {
        !           290:     if (file.isDirectory())
        !           291:     {
        !           292:       String[] files = file.list(new UploadFilter());
        !           293: 
        !           294:       for (int j = 0; j < files.length; ++j)
        !           295:       {
        !           296:         File f = new File(file + File.separator + files[j]);
        !           297:         if (f.isDirectory())
        !           298:         {
        !           299:           fileCount = countFiles(f, fileCount);
        !           300:         } else
        !           301:           fileCount = fileCount + 1;
        !           302:       }
        !           303: 
        !           304:     }
        !           305:     return fileCount;
        !           306:   }
        !           307: 
        !           308:   private static int writeDirectory(File file, File startFile, int fileCount, int count, UploadInfo dialog, Update update) throws Exception
        !           309:   {
        !           310:     if (file.isDirectory())
        !           311:     {
        !           312:       String[] files = file.list(new UploadFilter());
        !           313:       for (int j = 0; j < files.length; ++j)
        !           314:       {
        !           315:         File f = new File(file + File.separator + files[j]);
        !           316:         System.out.println(file + " " + f);
        !           317: 
        !           318:         if (f.isDirectory())
        !           319:         {
        !           320:           count = writeDirectory(f, startFile, fileCount, count, dialog, update);
        !           321:         } else
        !           322:           count = writeStream(f, startFile, fileCount, count, dialog, update);
        !           323:       }
        !           324:     }
        !           325:     return count;
        !           326:   }
        !           327:   private static int writeStream(File file, File startFile, int fileCount, int count, UploadInfo dialog, Update updateMode) throws Exception
        !           328:   {
        !           329:     // try
        !           330:     //{
        !           331:     String response = "", mode = "";
        !           332:     String path = file.getAbsolutePath();
        !           333:     String name = (startFile.isDirectory()) ? startFile.getName() + "/" + path.substring(startFile.getAbsolutePath().length() + 1) : file.getName();
        !           334:     if (destination != "")
        !           335:       name = (startFile.isDirectory()) ? destination + "/" + path.substring(startFile.getAbsolutePath().length() + 1) : destination + "/" + file.getName();
        !           336: 
        !           337:     System.out.println("hi " + name + " " + destination + " " + startFile.getName());
        !           338:     FileInputStream f = new FileInputStream(file.getAbsolutePath());
        !           339:     int length = f.available();
        !           340:     int readCount = 0;
        !           341:     byte[] b = (length > 512000) ? new byte[512000] : new byte[length];
        !           342:     System.out.println(file.getName() + " " + ((length > 1000000) ? (length / 1048576) + " MByte" : length + " Bytes"));
        !           343:     String fileName = file.getName() + " " + ((length > 1000000) ? (length / 1048576) + " MByte" : length + " Bytes");
        !           344:     dialog.title.setText("Uploading " + startFile);
        !           345:     dialog.progress.setValue(0);
        !           346:     dialog.file.setText(fileName);
        !           347:     dialog.status.setText(count + " of " + fileCount + ((fileCount > 1) ? " files" : " file"));
        !           348:     //dialog.pack();
        !           349:     //dialog.validate();
        !           350:     if (dialog.isVisible())
        !           351:       dialog.repaint();
        !           352:     else
        !           353:       dialog.show();
        !           354: /*
        !           355:     URL httpCon = new URL(url + getSHA((id + "").getBytes()) + "/" + convertUml(name) + "?id=" + getSHA((id + "").getBytes()) + "&count=" + count + "&nf=" + fileCount + "&md5=" + md5 + "&mode=" + mode);
        !           356:        Connection con = null;
        !           357:     con=(Connection)connections.get(startFile.getAbsolutePath());
        !           358:     if(con==null)
        !           359:     {
        !           360:       con=new Connection(httpCon);
        !           361:       connections.put(startFile.getAbsolutePath(),con);
        !           362:     } else
        !           363:     con.url=httpCon;
        !           364:     OutputStream mout = con.out; //con.getOutputStream();
        !           365:   */  
        !           366:   //   dialog.progress.setValue((int) (((double) readCount / (double) length) * 100.0));
        !           367:   // count = filecount 
        !           368:      Connection conPost = null;
        !           369:          System.out.println("hostURL "+url);
        !           370:      if(!runningAsApplet)
        !           371:      conPost=new Connection( new URL("http://core.rz-berlin.mpg.de/edoctest/oi.epl"));
        !           372:       else
        !           373:      conPost=new Connection( new URL(url+"/oi.epl"));
        !           374:      
        !           375:        // new    URL("http://localhost:8080/examples/servlet/rogo/"));
        !           376:       conPost.ses=ses;
        !           377:       conPost.dialog=dialog;
        !           378:       Bundle.Document doc=(Bundle.Document)bundle.documents.get(count);
        !           379:       System.out.println(doc.title);
        !           380:       conPost.post(file,"new",doc.docID+"",doc.title,doc.locator,doc.comment);
        !           381:   
        !           382:           // conPost.post(new File("./test2.jpg"),picture.elementAt(i).toString(),artist.elementAt(i).toString(),source.elementAt(i).
        !           383:      System.out.println(getMD5(md));
        !           384:      dialog.progress.setValue(100);
        !           385:      count++;
        !           386:     return count;
        !           387:   }
        !           388:    private static int writeStream(File startFile,Bundle bundle, UploadInfo dialog) throws Exception
        !           389:   {
        !           390:     int count = 1,fileCount = bundle.documents.size();
        !           391:     int index = startFile.getAbsolutePath().lastIndexOf(File.separator);
        !           392:                 
        !           393: 
        !           394:     String path =startFile.getAbsolutePath().substring(0,index+1);
        !           395:     System.out.println(path);mode = "new";
        !           396:     boolean newVersionforAll = false; 
        !           397:     Vector list=new Vector();
        !           398:     for(int k=0;k<fileCount;++k)
        !           399:     {
        !           400:        Bundle.Document doc = (Bundle.Document)bundle.documents.elementAt(k);
        !           401:        if(bundleRef.docsLocator.get(doc.locator)!=null) 
        !           402:        list.addElement(doc.fileName);
        !           403:     }
        !           404: 
        !           405:     for(int k=0;k<fileCount;++k)
        !           406:     {
        !           407:       Bundle.Document doc = (Bundle.Document)bundle.documents.elementAt(k);
        !           408:      
        !           409:       String response = "";
        !           410:       dialog.title.setText("Uploading " + path+doc.fileName);
        !           411:       dialog.progress.setValue(0);
        !           412:       String fileName = doc.fileName+ " " + ((doc.size > 1000000) ? (doc.size / 1048576) + " MByte" : doc.size + " Bytes");
        !           413:       dialog.file.setText(fileName);
        !           414:       dialog.status.setText(count + " of " + fileCount + ((fileCount > 1) ? " files" : " file"));
        !           415:       //dialog.pack();
        !           416:       //dialog.validate();
        !           417:       if (dialog.isVisible())
        !           418:       dialog.repaint();
        !           419:       else
        !           420:       dialog.show();
        !           421:       
        !           422:       if(bundleRef.docsLocator.get(doc.locator)!=null) 
        !           423:       {
        !           424:         if(!newVersionforAll)
        !           425:         {
        !           426:           Object[] options = new Object[] { "New Version for this file","New Version for all files", "Skip file" }; 
        !           427: 
        !           428:          int option = showDialog("Warning "+doc.locator+" exists! \n What do you want to do?", "Destination exists!", options,list);
        !           429:          if(option == 0) mode ="old";
        !           430:          if(option == 1) 
        !           431:          { 
        !           432:            mode ="old";
        !           433:            newVersionforAll=true;
        !           434:          }
        !           435:          if(option == 2) 
        !           436:          {  
        !           437:            count++;
        !           438:            System.out.println("Heh Document exists!"+ doc);
        !           439:            System.out.println("Skipping");
        !           440:            continue;
        !           441:          }  
        !           442:       }
        !           443:       Bundle.Document refDoc= (Bundle.Document) bundleRef.docsLocator.get(doc.locator);
        !           444:       doc.docID=refDoc.docID;
        !           445:         //count++;
        !           446:       // System.out.println("Heh Document exists!"+ doc);
        !           447:       // System.out.println("Skipping");
        !           448:       // continue;
        !           449:       } else mode ="new";
        !           450:       Connection conPost = null;
        !           451:       if(!runningAsApplet)
        !           452:       conPost=new Connection( new URL("http://core.rz-berlin.mpg.de/edoctest/oi.epl"));
        !           453:       else
        !           454:       conPost=new Connection( new URL(url+"/oi.epl"));
        !           455:       
        !           456:       // new    URL("http://localhost:8080/examples/servlet/rogo/"));
        !           457:       conPost.ses=ses;
        !           458:       conPost.dialog=dialog;
        !           459:       conPost.post(path,doc,mode);
        !           460:       String md5=getMD5(md);
        !           461:       System.out.println("MD5 is equal ?"+doc.md5cs.equals(md5));
        !           462:       if(!doc.md5cs.equals(md5))
        !           463:       {
        !           464:          Object[] options = { "Retry", "Cancel" };  
        !           465:          int option = showDialog("Transfer failed! \n What do you want to do?", "Transfer failed ", options);
        !           466:          if(option == 0)
        !           467:          {
        !           468:             if(!runningAsApplet)
        !           469:             conPost=new Connection( new URL("http://core.rz-berlin.mpg.de/edoctest/oi.epl"));
        !           470:             else
        !           471:             conPost=new Connection(new URL(url+"/oi.epl"));
        !           472:             conPost.ses=ses;
        !           473:             conPost.dialog=dialog;
        !           474:             conPost.post(path,doc,mode);      
        !           475:             md5=getMD5(md);
        !           476:          }
        !           477:       }      // System.out.println(getMD5(md));
        !           478:       dialog.progress.setValue(100);
        !           479:       count++;
        !           480:      }
        !           481:      return count;
        !           482:   }
        !           483:  
        !           484:   public static String getMD5(MessageDigest md) throws Exception
        !           485:   {
        !           486:     byte[] bytes = md.digest();
        !           487:    // System.out.println("digest " + bytes.length);
        !           488:     StringBuffer sb = new StringBuffer();
        !           489:     int decValue;
        !           490:     for (int i = 0; i < bytes.length; i++)
        !           491:     {
        !           492:       String hexVal = Integer.toHexString(bytes[i] & 0xFF);
        !           493:       if (hexVal.length() == 1)
        !           494:         hexVal = "0" + hexVal; // put a leading zero
        !           495:       sb.append(hexVal);
        !           496:     }
        !           497:     return sb.toString();
        !           498:   }
        !           499:   public static String getSHA(byte[] b) throws Exception
        !           500:   {
        !           501:     MessageDigest md = MessageDigest.getInstance("SHA");
        !           502:     md.update(b, 0, b.length);
        !           503:     //System.out.println("digest");
        !           504:     byte[] bytes = md.digest();
        !           505:     StringBuffer sb = new StringBuffer();
        !           506:     int decValue;
        !           507:     for (int i = 0; i < bytes.length; i++)
        !           508:     {
        !           509:       String hexVal = Integer.toHexString(bytes[i] & 0xFF);
        !           510:       if (hexVal.length() == 1)
        !           511:         hexVal = "0" + hexVal; // put a leading zero
        !           512:       sb.append(hexVal);
        !           513:     }
        !           514: 
        !           515:     return sb.toString();
        !           516:   }
        !           517: 
        !           518:   public static String convertUml(String newName)
        !           519:   {
        !           520:     StringBuffer alterMe = new StringBuffer(newName.trim());
        !           521:     int length = alterMe.length();
        !           522:     int j = 0;
        !           523:     while (j < length)
        !           524:     { //if(Character.isSpaceChar(alterMe.charAt(j)))
        !           525:       //  alterMe.setCharAt(j,'_');
        !           526:       if (alterMe.charAt(j) == ' ')
        !           527:       {
        !           528:         alterMe.setCharAt(j, '%');
        !           529:         alterMe.insert(j + 1, "20");
        !           530:         length = length + 2;
        !           531:       }
        !           532:       /* if(Character.isSpaceChar(alterMe.charAt(j))
        !           533:        alterMe.setCharAt(j,'_');
        !           534:       */
        !           535:       ++j;
        !           536:     }
        !           537:     return alterMe.toString();
        !           538:   }
        !           539:   public static class UploadInfo extends JDialog
        !           540:   {
        !           541:     JLabel file = new JLabel("    ");
        !           542:     JLabel status = new JLabel("    ");
        !           543:     JLabel title = new JLabel("     ");
        !           544:     JPanel content = new JPanel();
        !           545:     JPanel titlePanel = new JPanel();
        !           546:     JPanel labelPanel = new JPanel();
        !           547:     JPanel statusPanel = new JPanel();
        !           548:     JPanel buttonPanel = new JPanel();
        !           549: 
        !           550:     JProgressBar progress = new JProgressBar();
        !           551:     JButton cancel = new JButton("Cancel");
        !           552:     Thread thread;
        !           553:     public UploadInfo()
        !           554:     {
        !           555: 
        !           556:       content = new JPanel(true);
        !           557:       //content.setBorder(BorderFactory.createRaisedBevelBorder());
        !           558:       content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
        !           559:       title = new JLabel("Uploading " + startFile);
        !           560:       title.setHorizontalTextPosition(title.CENTER);
        !           561:       titlePanel.add(title);
        !           562:       buttonPanel.add(cancel);
        !           563:       // content.add(titlePanel);
        !           564:       content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
        !           565:       content.add(labelPanel);
        !           566:       content.add(new JLabel(""));
        !           567:       content.add(progress);
        !           568:       content.add(statusPanel);
        !           569:       content.add(buttonPanel);
        !           570:       content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
        !           571:       labelPanel.add(file);
        !           572:       statusPanel.add(status);
        !           573:       getContentPane().add(titlePanel, "North");
        !           574:       getContentPane().add(content, "Center");
        !           575:       cancel.addActionListener(new ActionListener()
        !           576:       {
        !           577:         public void actionPerformed(ActionEvent e)
        !           578:         {
        !           579:           setVisible(false);
        !           580:           thread.stop();
        !           581:         }
        !           582: 
        !           583:       });
        !           584:       pack();
        !           585: 
        !           586:     }
        !           587: 
        !           588:   }
        !           589:  static class Update
        !           590:   {
        !           591:     boolean value = false;
        !           592:     public Update()
        !           593:     {
        !           594:       value = false;
        !           595:     }
        !           596:   }
        !           597:   public static int showDialog(String message, String title, Object[] options)
        !           598:   {
        !           599:     int option = JOptionPane.showOptionDialog(null, message, title, JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]);
        !           600:     return option;
        !           601: 
        !           602:   }
        !           603:   public static int showDialog(String message, String title, Object[] options,Vector fileList)
        !           604:   {
        !           605:      JOptionPane pane = new JOptionPane( message, JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]);
        !           606:      pane.setMessageType(JOptionPane.WARNING_MESSAGE); // Configure
        !           607:      JDialog dialog = pane.createDialog(null, title);
        !           608:      JList list=null;
        !           609:     if(fileList==null)
        !           610:     list= new JList(new String[]{"click","here","test","bla","world","hello"});
        !           611:    else list = new JList(fileList);
        !           612:    JScrollPane scpane = new JScrollPane(list);
        !           613:    scpane.setPreferredSize(new Dimension(100,80));
        !           614:      JLabel label=  new JLabel("Files : ");
        !           615:       label.setPreferredSize(new Dimension(50,80));
        !           616:         JPanel panel = new JPanel();
        !           617:        panel.add(label);
        !           618:        panel.add(scpane);
        !           619:        dialog.getContentPane().add(panel,"East");
        !           620:      dialog.pack();
        !           621:      dialog.show();
        !           622:     Object selectedValue = pane.getValue();
        !           623:      if(selectedValue == null)
        !           624:        return 2;
        !           625:      //If there is not an array of option buttons:
        !           626:      if(options == null) {
        !           627:        if(selectedValue instanceof Integer)
        !           628:           return ((Integer)selectedValue).intValue();
        !           629:        return   2;
        !           630:      }
        !           631:      //If there is an array of option buttons:
        !           632:      for(int counter = 0, maxCounter = options.length;
        !           633:         counter < maxCounter; counter++) {
        !           634:         if(options[counter].equals(selectedValue))
        !           635:         return counter;
        !           636:      }
        !           637:      return 2;
        !           638:  
        !           639:   }
        !           640: 
        !           641:   public static void showDialog(String message, String title)
        !           642:   {
        !           643:     JOptionPane.showMessageDialog(null, message, title, JOptionPane.PLAIN_MESSAGE);
        !           644: 
        !           645:   }
        !           646:   public static void showErrorDialog(String message, String title)
        !           647:   {
        !           648:     JOptionPane.showMessageDialog(null, message, title, JOptionPane.ERROR_MESSAGE);
        !           649:   }
        !           650: 
        !           651: 
        !           652:  
        !           653:  // end applet code
        !           654:  
        !           655:   public static StringBuffer readChunked(Connection conTest) throws Exception
        !           656:   {
        !           657:     InputStream r= conTest.in;
        !           658:     //InputStreamReader r= new InputStreamReader(new FileInputStream("FMPro.xml"),"UTF-8"); 
        !           659:     //InputStreamReader r=// new InputStreamReader(new URL(fileMakerTest).openStream(),"UTF-8");
        !           660:     //new InputStreamReader(conTest.in,"UTF-8");
        !           661:     //while(conTest.in.available()==0);
        !           662:     //u.openStream();
        !           663:     //InputStream r = new InputStream(f);
        !           664:     StringBuffer sb = new StringBuffer();
        !           665:     int c,countC=0,limit=conTest.in.available();
        !           666:     // r.skip(211);
        !           667:     String response = conTest.getResponseMessage();
        !           668:     String lowerCase= response.toLowerCase();
        !           669:     int index =lowerCase.indexOf("charset");
        !           670:     int index2 =lowerCase.indexOf("=",index);
        !           671:     int index3 =lowerCase.indexOf("\r",index2);
        !           672:     String charset=(index>0) ? response.substring(index2+1,index3):"";
        !           673:     charset="";//charset.toUpperCase();
        !           674:     System.err.println(response);
        !           675:     if(lowerCase.indexOf("chunked")<0)
        !           676:     {
        !           677:       ByteArrayOutputStream local=new ByteArrayOutputStream();
        !           678:       while(r.available()==0); 
        !           679:       System.err.println(r.available());
        !           680:       while ((c = r.read()) != -1) 
        !           681:       {
        !           682:         byte b=(byte)c;
        !           683:         local.write(b);             
        !           684:         if(debug)
        !           685:         System.out.print((char)c);
        !           686:       }
        !           687:       if(charset!="")
        !           688:       sb.append(local.toString(charset));
        !           689:       else
        !           690:       sb.append(local.toString());
        !           691:       if(debug)
        !           692:       System.out.print(sb);
        !           693:       return sb;
        !           694:     }
        !           695:       
        !           696:     // read chunk size
        !           697:     while ((c = r.read()) != -1) 
        !           698:     {
        !           699:       ++countC;
        !           700:       char ch=(char)c;
        !           701:       
        !           702:       if(Character.digit(ch, 16) != -1)
        !           703:       sb.append((char)c);
        !           704:       if(ch=='\r')
        !           705:       {
        !           706:         ch=(char)r.read();
        !           707:         if( ch=='\n') 
        !           708:         break;
        !           709:       }
        !           710:       // System.out.print((char)c);
        !           711:     }   
        !           712:     int bufSize=Integer.parseInt(sb.toString().trim(), 16);
        !           713:     
        !           714:     System.err.println("chunk size "+Integer.parseInt(sb.toString().trim(), 16)+" bytes"+" limit "+limit);
        !           715:     //sb.append((char)r.read());
        !           716:     // sb.append((char)r.read());
        !           717:     sb=new StringBuffer();//.delete(0,sb.length());
        !           718:     byte[] b=new byte[bufSize];
        !           719:     countC=0;
        !           720:     StringBuffer localBuff=new StringBuffer();
        !           721:     while (true) 
        !           722:     {
        !           723:       // sb.append(" new  Chunk "+r.available()+" \r\n ");
        !           724:        int  readCount = 0;
        !           725:       int available  = 0;
        !           726:       int readSize    = b.length; int loop=0;
        !           727:        while (readCount < bufSize)
        !           728:       {
        !           729:         available=r.available();
        !           730: 
        !           731:         if(available>=bufSize)
        !           732:         readSize=bufSize;
        !           733:         else
        !           734:         readSize=available;
        !           735: 
        !           736:       if(readCount + readSize > bufSize)
        !           737:       {
        !           738:         readSize = r.read(b, readCount, bufSize - readCount); //  mout.flush();
        !           739:    
        !           740:       }
        !           741:       else
        !           742:       {
        !           743:         readSize = r.read(b,readCount,readSize);
        !           744:       }
        !           745:     if(loop>=200) throw new Error("Connection timed out");
        !           746:     if(readSize==0) 
        !           747:     {
        !           748:       long time = System.currentTimeMillis();
        !           749:       while(System.currentTimeMillis()-time<100);
        !           750:     } else loop=0;
        !           751:     
        !           752:     if(debug)
        !           753:     System.out.println(++loop+" read "+readCount+" bytes"+" readSize "+readSize);
        !           754:     readCount+=readSize;
        !           755:     
        !           756:     }
        !           757:       
        !           758:       
        !           759:       //while(r.available()<bufSize); // critical if connection closed
        !           760:     //  r.read(b,0,bufSize); 
        !           761:       //System.err.println(r.available());
        !           762:       r.read();r.read();
        !           763:       if(charset!="")
        !           764:       sb.append(new String(b,0,bufSize,charset));
        !           765:       else
        !           766:       sb.append(new String(b,0,bufSize));
        !           767:       if(debug)
        !           768:       System.out.println(new String(b,0,bufSize));
        !           769:       while ( (c = r.read()) != -1) 
        !           770:       {
        !           771:         //      ++countC;
        !           772:         char ch=(char)c;
        !           773:         //System.err.println("read lf "+(ch=='\r')+" or cr "+( ch=='\n')+" "+(Character.digit(ch, 16) == -1));
        !           774:         //if((ch!='\r')&&( ch!='\n')) System.err.println("read ch "+" "+ch+" "+Character.isSpace(ch));
        !           775:         if(Character.digit(ch, 16) != -1)
        !           776:         localBuff.append(ch);
        !           777:         if(ch=='\r')
        !           778:         {
        !           779:           ch=(char)r.read();
        !           780:           if( ch=='\n') 
        !           781:           break;
        !           782:         }
        !           783:       }
        !           784:        if(debug)
        !           785:        System.out.println("chunk size "+localBuff);
        !           786:       if(localBuff.length()>0)
        !           787:       {
        !           788:         // System.err.println("new chunk size "+Integer.parseInt(localBuff.toString().trim(), 16)+" bytes");
        !           789:         // System.err.println((char)r.read());
        !           790:         bufSize=Integer.parseInt(localBuff.toString().trim(), 16);
        !           791:         //localBuff.delete(0,localBuff.length());
        !           792:          localBuff=new StringBuffer();
        !           793:       } // else bufSize=0;
        !           794:       ++countC;
        !           795:      // sb.append("new  Chunk"+r.available()+"\r\n ");
        !           796:      if(bufSize==0)//(bufSize)) 
        !           797:       break;
        !           798:       // System.err.println(" in  Chunk "+bufSize+"   buffers used "+(countC)+" \r\n ");
        !           799:       // // System.out.print((char)c);
        !           800:     }
        !           801:     // System.out.println(sb);
        !           802:     return sb;
        !           803:   }
        !           804:   public static Hashtable getMetaData(String url) 
        !           805:   {
        !           806:     Hashtable data=new Hashtable();
        !           807:     Vector artist=new Vector();
        !           808:     Vector picture=new Vector();
        !           809:     Vector idnr   = new Vector();
        !           810:     Vector source   = new Vector();
        !           811:     data.put("artist",artist);
        !           812:     data.put("picture",picture);
        !           813:     data.put("IDNR",idnr);
        !           814:     data.put("source",source);
        !           815:     try
        !           816:     {
        !           817:       String   fileMakerTest="http://localhost/FMRes/FMPro?-db=Bildarchiv%20Daston&-layID=69&-token=25&-max=1000&-format=-dso_xml&-mode=browse&-findall";
        !           818:       String fileMakerTest2="http://localhost/FMRes/FMPro?-db=bildarchiv%20daston&-layid=1&-format=-dso_xml&-max=899&-skip=6&-token.0=25&-mode=browse&-lop=and&-find";
        !           819:       //Connection con= new Connection(new URL("http://core.rz-berlin.mpg.de:80/edoctest/adm.epl"));
        !           820:       //String ses=con.getSessionID("name=root&passwd=&mode=verifylogin");
        !           821:       
        !           822:       Connection conTest=new Connection(new URL(fileMakerTest));//new URL(url));
        !           823:       //  conTest.ses=ses;
        !           824:       conTest.get();
        !           825:       StringBuffer sb=readChunked(conTest);
        !           826:       if(debug)
        !           827:       System.out.println("file "+sb);
        !           828:       // parse string and build document tree
        !           829:       Node  root = new Xparse().parse(sb.toString());
        !           830:       Vector contents=root.index.v;
        !           831:       for (int i=0;i<contents.size();++i)
        !           832:       {
        !           833:         Node n=(Node)contents.elementAt(i);
        !           834:         if(n.type.equals("element"))
        !           835:         {
        !           836:           // System.out.println("tag "+n.name+" with contents ");
        !           837:           // System.out.println(n.getCharacters());
        !           838:           if(n.name.indexOf("artist")>=0) artist.addElement(n.getCharacters());
        !           839:           if(n.name.indexOf("picture")>=0) picture.addElement(n.getCharacters());
        !           840:           if(n.name.indexOf("IDNR")>=0) idnr.addElement(n.getCharacters());
        !           841:           if(n.name.indexOf("source")>=0) source.addElement(n.getCharacters());
        !           842:           //contents=n.contents.v;i=0;
        !           843:         }
        !           844:       }
        !           845:     }catch(Exception e8) { e8.printStackTrace(); }
        !           846:     return data;
        !           847:   }
        !           848: 
        !           849:   public static Bundle getBundle(File f) 
        !           850:   {
        !           851:      File xmlFile=null;
        !           852:      Bundle bundle=new Bundle();
        !           853:      if(f.isDirectory())
        !           854:      {
        !           855:        String[] files=f.list();
        !           856:        for(int j=0;j<files.length;++j)
        !           857:        {
        !           858:          if(files[j].endsWith("xml"))
        !           859:          {
        !           860:            xmlFile=new File(f.getAbsolutePath()+"/"+files[j]);
        !           861:            break;
        !           862:          }
        !           863:        } 
        !           864:     } else xmlFile=f;
        !           865:        try 
        !           866:        {
        !           867:           // read XML Metadata from a file
        !           868:           FileReader r=new FileReader(xmlFile);
        !           869:           StringBuffer sb=new StringBuffer();
        !           870:           int c=0;
        !           871:           while ((c = r.read()) != -1) 
        !           872:           {
        !           873:             char ch=(char)c;
        !           874:             sb.append(ch);
        !           875:             // System.out.print((char)c);
        !           876:           }
        !           877:           addToBundle(bundle,sb);
        !           878:       } catch(Exception e) { e.printStackTrace();} 
        !           879:         
        !           880:     
        !           881:     return bundle;
        !           882:   }
        !           883:   public static Bundle getBundle(String url) 
        !           884:   {
        !           885:     Bundle bundle=new Bundle();
        !           886:     
        !           887:     try 
        !           888:     {
        !           889:       if(url=="") url="http://core.rz-berlin.mpg.de:80/edoctest/oi.epl?mm=list&grp=90";
        !           890:       // read XML document from URL into a string
        !           891:       URL u = new URL(url);
        !           892:       //  FileReader r=new FileReader();
        !           893:       long time = System.currentTimeMillis();
        !           894: 
        !           895:       //Connection con= new Connection(new URL("http://core.rz-berlin.mpg.de:80/edoctest/adm.epl"));
        !           896:      // String ses=con.getSessionID("name=root&passwd=edoctest&mode=verifylogin");
        !           897:     //  con.socket.close();
        !           898:       Connection conTest=new Connection(new URL(url));
        !           899:       conTest.ses=ses;
        !           900:       conTest.get();
        !           901:       StringBuffer sb=readChunked(conTest);
        !           902:        // sb.delete( sb.toString().indexOf("<rt>"),sb.length());
        !           903:       //System.out.println(sb);
        !           904:       String rt =addToBundle(bundle,sb);
        !           905:       StringBuffer  sb2=null;
        !           906:       int index=sb.toString().indexOf("<edoc>",3)+6,index2=0;
        !           907:       //for(int i=20;i<260;i=i+20)
        !           908:       
        !           909:       
        !           910:       while(true)
        !           911:       {
        !           912:         if(rt.equals("finished")) break;
        !           913:         conTest.url=new URL(url+"&rt="+rt);
        !           914:         conTest.get();
        !           915:         sb2=readChunked(conTest);
        !           916:         //sb2.delete(0,index);
        !           917:         // index2=sb2.toString().indexOf("<rt>",index);
        !           918:         // sb2.delete(index2,sb2.length());
        !           919:          //sb.append(sb2);
        !           920:          rt=addToBundle(bundle,sb2);
        !           921:       }
        !           922:        //sb.append("</edoc>");
        !           923:       //System.out.println(sb);
        !           924:       long timeEnd = System.currentTimeMillis();
        !           925:       System.err.println("time to get bundle data "+(timeEnd-time));
        !           926:       
        !           927:       /*   
        !           928:       // read XML Metadata from a file
        !           929:       FileReader r=new FileReader("list7.xml");
        !           930:       sb=new StringBuffer();
        !           931:       // String response= conTest.getResponseMessage();
        !           932:       int c=0;
        !           933:       while ((c = r.read()) != -1) 
        !           934:       {
        !           935:         char ch=(char)c;
        !           936:         sb.append(ch);
        !           937:         // System.out.print((char)c);
        !           938:       }
        !           939:       */
        !           940:       String data=sb.toString().length()+"";
        !           941:       // System.out.println(new String(sb.toString().getBytes(),"UTF-8"));
        !           942:       // System.out.println(sb.toString());
        !           943:       //addToBundle(bundle,sb);
        !           944:       // System.out.println(sb.toString());
        !           945:       // System.exit(0);
        !           946: 
        !           947:     } catch(Exception e) {e.printStackTrace();} 
        !           948:     return bundle;
        !           949:   }
        !           950:   public static String  addToBundle(Bundle bundle,StringBuffer sb)
        !           951:   {
        !           952:     boolean finished = false;
        !           953:     String  rtTag="finished";
        !           954:     // parse string and build document tree
        !           955:     Node  root = new Xparse().parse(sb.toString());
        !           956:     /*  
        !           957:     Vector contents=root.index.v;
        !           958:     for (int i=0;i<contents.size();++i)
        !           959:     {
        !           960:       Node n=(Node)contents.elementAt(i);
        !           961:       if(n.type.equals("element"))
        !           962:       {
        !           963:         // System.out.println("tag "+n.name+" with contents ");
        !           964:         // System.out.println(n.getCharacters());
        !           965:         //contents=n.contents.v;i=0;
        !           966:       }
        !           967:       // System.out.println(n.type);
        !           968:     
        !           969:     }
        !           970:     */
        !           971:     Node tempNode=root.find(rootNode,new int[] {1});
        !           972:     if(tempNode==null) return rtTag;
        !           973:     int count=1;
        !           974:     /* 
        !           975:     for(int i=0;i<tempNode.contents.v.size();++i)
        !           976:     {
        !           977:       // System.out.println(((Node)tempNode.contents.v.elementAt(i)).attributes+" "+i);
        !           978:     }*/
        !           979:     if(tempNode.contents.v.size()==0) return rtTag;
        !           980:     Node notNull=null;
        !           981:     Node rtNode=root.find(rootNode+"/rt",new int[] {1,1});
        !           982:     rtTag=(rtNode==null) ? "finished":rtNode.getCharacters();
        !           983:     System.out.println("rt tag is "+ rtTag);
        !           984:     int length=0;//(tempNode.contents.length()-1)/2;
        !           985:     for(int i=0;i<tempNode.contents.v.size();++i)    {
        !           986:       Node node=(Node)tempNode.contents.v.elementAt(i);
        !           987:       if(node.type.equals("element"))
        !           988:       if(node.name.equals("doc"))length++;
        !           989:       // System.out.println(((Node)tempNode.contents.v.elementAt(i)).attributes+" "+i);
        !           990:     }
        !           991:    if(length==0) rtTag="finished";        
        !           992:     while(count<=length)
        !           993:     {
        !           994:        //System.out.println(count+" "+length);
        !           995:       tempNode=root.find(rootNode+"/doc",new int[] {1,count});
        !           996:       if(tempNode==null)
        !           997:       {
        !           998:         rtTag="finished";
        !           999:         break;
        !          1000:       }    
        !          1001:       Bundle.Document doc = new Bundle.Document();
        !          1002:       Hashtable attributes=tempNode.attributes;
        !          1003:       int docID=0;
        !          1004:       int ver=0;
        !          1005:        if(attributes != null)
        !          1006:       {
        !          1007:         docID=Integer.parseInt((String)attributes.get("id"));
        !          1008:         ver=Integer.parseInt((String)attributes.get("ver"));
        !          1009:         doc.addData("docID",(String)attributes.get("id"));
        !          1010:         doc.addData("ver",(String)attributes.get("ver"));
        !          1011:       }
        !          1012:       bundle.docs.put(new Integer(docID),doc);
        !          1013:       bundle.documents.addElement(doc);
        !          1014:       // System.out.println("id " +docID+" ver "+ver);
        !          1015:       Node fileNode=root.find(rootNode+"/doc/file",new int[] {1,count,1});
        !          1016:       attributes=(fileNode==null)? null:fileNode.attributes;
        !          1017:       int fileID=0;
        !          1018:       int fileVer=0;
        !          1019:       if(attributes != null)
        !          1020:       {
        !          1021:         fileID=Integer.parseInt((String)attributes.get("id"));
        !          1022:         fileVer=Integer.parseInt((String)attributes.get("ver"));
        !          1023:         doc.addData("fileID",(String)attributes.get("id"));
        !          1024:         doc.addData("fileVer",(String)attributes.get("ver"));
        !          1025:         // System.out.println("fileid " +fileID+" ver "+fileVer);
        !          1026:       }
        !          1027:    // add all Document tags to actual Document
        !          1028:       for(int i=0;i<tempNode.contents.v.size();++i)
        !          1029:       {   
        !          1030:         Node node=(Node)tempNode.contents.v.elementAt(i);
        !          1031:         if(node.type.equals("element"))
        !          1032:          {
        !          1033:            //System.out.println(node.name+" "+node.getCharacters()+" "+node.contents.v.size());
        !          1034:            if(node.contents.v.size()>1) 
        !          1035:            {
        !          1036:              for(int j=0;j<node.contents.v.size();++j)
        !          1037:              {  
        !          1038:                Node node2=(Node)node.contents.v.elementAt(j);
        !          1039:                if(node2.type.equals("element"))
        !          1040:                 {
        !          1041:                   doc.addData(node2.name,node2.getCharacters());
        !          1042:                   //System.out.println(node2.name+" "+node2.getCharacters()+" "+node2.contents.v.size());
        !          1043:                 }
        !          1044:              }
        !          1045:            } else doc.addData(node.name,node.getCharacters());
        !          1046:         }
        !          1047:       }
        !          1048:       bundle.docsLocator.put(doc.locator,doc); 
        !          1049:    
        !          1050:       //System.out.println( bundle.docsLocator);//doc.extraTags);
        !          1051:       /*
        !          1052:       notNull=root.find("edoc/doc/title",new int[]{1,count,1});
        !          1053:       String title=(notNull!=null) ? notNull.getCharacters():"missing";
        !          1054:       // System.out.println("edoc/doc/title "+title);
        !          1055:       notNull=root.find("edoc/doc/comment",new int[]{1,count,1});
        !          1056:       String comment = (notNull!=null) ? notNull.getCharacters():"missing";
        !          1057:       // System.out.println("edoc/doc/comment "+comment);
        !          1058:       notNull =root.find("edoc/doc/placeofevent",new int[]{1,count,1});
        !          1059:       String placeofevent = (notNull!=null) ? notNull.getCharacters():"missing";
        !          1060:       // System.out.println("edoc/doc/placeofevent "+placeofevent);
        !          1061:       notNull=root.find("edoc/doc/locater",new int[]{1,count,1});
        !          1062:       String locator=(notNull!=null) ? notNull.getCharacters():"missing";
        !          1063:       // System.out.println("edoc/doc/locater "+locator);
        !          1064:       notNull = root.find("edoc/doc/file/filename",new int[]{1,count,1,1});
        !          1065:       String fileName=(notNull!=null) ? notNull.getCharacters():"missing";
        !          1066:       // System.out.println("edoc/doc/file/filename "+fileName);
        !          1067:       notNull = root.find("edoc/doc/file/mimetype",new int[]{1,count,1,1});
        !          1068:       String mimeType=(notNull!=null) ? notNull.getCharacters():"missing";
        !          1069:       // System.out.println("edoc/doc/file/mimetype "+mimeType);
        !          1070:       notNull = root.find("edoc/doc/file/md5cs",new int[]{1,count,1,1});
        !          1071:       String md5cs = (notNull!=null) ? notNull.getCharacters():"missing";
        !          1072:       // System.out.println("edoc/doc/file/md5cs "+md5cs);
        !          1073:         notNull=root.find("edoc/doc/file/size",new int[]{1,count,1,1});
        !          1074:         int size  =(notNull!=null) ? Integer.parseInt(notNull.getCharacters()):0;
        !          1075:       // System.out.println("edoc/doc/file/size "+size);
        !          1076:       notNull = root.find("edoc/doc/file/filelink",new int[]{1,count,1,1});
        !          1077:       String fileLink = (notNull!=null) ? notNull.getCharacters():"missing";
        !          1078:       // System.out.println("edoc/doc/file/filelink "+fileLink);
        !          1079:       Bundle.Document doc=new Bundle.  Document(docID,ver,title,locator,comment,placeofevent,fileID,fileVer,fileName,mimeType,md5cs,size,fileLink);
        !          1080:       bundle.docs.put(new Integer(docID),doc);
        !          1081:       bundle.documents.addElement(doc);
        !          1082:       */
        !          1083:       count++;
        !          1084:     }
        !          1085:     // System.out.println(bundle.docs.size());
        !          1086:   return rtTag;
        !          1087:   }
        !          1088:   public static void getGenre() 
        !          1089:   {
        !          1090:     
        !          1091:     try 
        !          1092:     {
        !          1093:       String  url="http://core.rz-berlin.mpg.de:80/edoctest/oi.epl?mm=help&sm=genres";
        !          1094:       // read XML document from URL into a string
        !          1095:       URL u = new URL(url);
        !          1096:       //  FileReader r=new FileReader();
        !          1097:       long time = System.currentTimeMillis();
        !          1098:       // debug=true;
        !          1099:       Connection conTest=new Connection(new URL(url));
        !          1100:       conTest.ses=ses;
        !          1101:       conTest.get();
        !          1102:       StringBuffer sb=readChunked(conTest);
        !          1103:       Bundle.genresId.clear();
        !          1104:       Bundle.genresLabel.clear();
        !          1105:       Bundle.genresName.clear();
        !          1106:       Bundle.genVec.removeAllElements();
        !          1107:       getGenreList(sb); 
        !          1108:       long timeEnd = System.currentTimeMillis();
        !          1109:       System.err.println("time to get genre data "+(timeEnd-time));
        !          1110:      // Enumeration en = Bundle.genres.keys();
        !          1111:       //while(en.hasMoreElements()
        !          1112:        if(debug)
        !          1113:        {
        !          1114:          Collections.sort(Bundle.genVec);
        !          1115:          //  Bundle.Genre.debug=true;
        !          1116:      
        !          1117:          for(int i=0;i<Bundle.genVec.size();++i)
        !          1118:          System.out.println(Bundle.genresId.get(Bundle.genVec.get(i)));
        !          1119:         //System.out.println( Bundle.genres);
        !          1120:        } 
        !          1121:     } catch(Exception e) {e.printStackTrace();} 
        !          1122:   }
        !          1123:  public static String  getGenreList(StringBuffer sb)
        !          1124:   {
        !          1125:     boolean finished = false;
        !          1126:     String  rtTag="finished";
        !          1127:     // parse string and build document tree
        !          1128:     Node root = new Xparse().parse(sb.toString());
        !          1129:     /*  
        !          1130:     Vector contents=root.index.v;
        !          1131:     for (int i=0;i<contents.size();++i)
        !          1132:     {
        !          1133:       Node n=(Node)contents.elementAt(i);
        !          1134:       if(n.type.equals("element"))
        !          1135:       {
        !          1136:         // System.out.println("tag "+n.name+" with contents ");
        !          1137:         // System.out.println(n.getCharacters());
        !          1138:         //contents=n.contents.v;i=0;
        !          1139:       }
        !          1140:       // System.out.println(n.type);
        !          1141:     
        !          1142:     }
        !          1143:     */
        !          1144:     Node tempNode=root.find(rootNode,new int[] {1});
        !          1145:     if(tempNode==null) return rtTag;
        !          1146:     int count=1;
        !          1147:     /* 
        !          1148:     for(int i=0;i<tempNode.contents.v.size();++i)
        !          1149:     {
        !          1150:       // System.out.println(((Node)tempNode.contents.v.elementAt(i)).attributes+" "+i);
        !          1151:     }*/
        !          1152:     if(tempNode.contents.v.size()==0) return rtTag;
        !          1153:     Node notNull=null;
        !          1154:     int length=0;
        !          1155:     for(int i=0;i<tempNode.contents.v.size();++i)    {
        !          1156:       Node node=(Node)tempNode.contents.v.elementAt(i);
        !          1157:       if(node.type.equals("element"))
        !          1158:       if(node.name.equals("genre"))length++;
        !          1159:       // System.out.println(((Node)tempNode.contents.v.elementAt(i)).attributes+" "+i);
        !          1160:     }
        !          1161:    if(length==0) rtTag="finished";        
        !          1162:     while(count<=length)
        !          1163:     {
        !          1164:        //System.out.println(count+" "+length);
        !          1165:       tempNode=root.find(rootNode+"/genre",new int[] {1,count});
        !          1166:       if(tempNode==null)
        !          1167:       {
        !          1168:         rtTag="finished";
        !          1169:         break;
        !          1170:       }    
        !          1171:         Bundle.Genre genre= new Bundle.Genre();
        !          1172:         Hashtable attributes=tempNode.attributes;
        !          1173:         Integer id=null;
        !          1174:        if(attributes != null)
        !          1175:       {
        !          1176:         genre.id=new Integer((String)attributes.get("id"));
        !          1177:       }
        !          1178:       for(int i=0;i<tempNode.contents.v.size();++i)
        !          1179:       {   
        !          1180:         Node node=(Node)tempNode.contents.v.elementAt(i);
        !          1181:         if(node.type.equals("element"))
        !          1182:          {
        !          1183:            //System.out.println(node.name+" "+node.getCharacters()+" "+node.contents.v.size());
        !          1184:            if(node.contents.v.size()>1) 
        !          1185:            {
        !          1186:              for(int j=0;j<node.contents.v.size();++j)
        !          1187:              {  
        !          1188:                Node node2=(Node)node.contents.v.elementAt(j);
        !          1189:                if(node2.type.equals("element"))
        !          1190:                 {
        !          1191:                   //genre.addData(node2.name,node2.getCharacters());
        !          1192:                   //System.out.println(node2.name+" "+node2.getCharacters()+" "+node2.contents.v.size());
        !          1193:                 }
        !          1194:              }
        !          1195:            } else genre.addData(node.name,node.getCharacters());
        !          1196:         }
        !          1197:       }
        !          1198:       Bundle.genresId.put(genre.id,genre);
        !          1199:       Bundle.genresLabel.put(genre.label.toLowerCase(),genre.id);
        !          1200:       Bundle.genresName.put(genre.name.toLowerCase(),genre.id);
        !          1201:       Bundle.genVec.addElement(genre.id);
        !          1202:       count++;
        !          1203:     }
        !          1204:     // System.out.println(bundle.docs.size());
        !          1205:   return rtTag;
        !          1206:   }
        !          1207:  
        !          1208:   public static void main(String args[])
        !          1209:   {
        !          1210:     // System.out.println("Bundle for http://core.rz-berlin.mpg.de/edocmike/oi.epl?mm=list&grp=90");
        !          1211:     // getBundle("");
        !          1212:     // System.out.println("Bundle for http://core.rz-berlin.mpg.de/edocmike/oi.epl?mm=list&grp=89");
        !          1213:    // getBundle("http://core.rz-berlin.mpg.de/edoctest/oi.epl?mm=list&grp=136");
        !          1214:     // getBundle("http://core.rz-berlin.mpg.de/edoctest/oi.epl?mm=list&grp=136");
        !          1215:     runningAsApplet=false;
        !          1216:        //  Object[] options = new Object[] { "New Version for this file","New Version for all files", "Skip file" }; 
        !          1217: 
        !          1218:      //    int option = showDialog("Warning  exists! \n What do you want to do?", "Destination exists!", options,null);
        !          1219:      
        !          1220:     long time = System.currentTimeMillis();
        !          1221:     new Upload();
        !          1222:   // bundle=getBundle("http://core.rz-berlin.mpg.de/edoctest/oi.epl?mm=list&grp=136&col=11");
        !          1223:      url="http://core.rz-berlin.mpg.de/edoctest/";
        !          1224:      bundleRef = getBundle(url+"oi.epl?mm=list&grp="+grp+"&col="+col);
        !          1225:      getGenre();
        !          1226:    //getMetaData(""); 
        !          1227:         // if(true)System.exit(0);
        !          1228:    /* Hashtable data=getMetaData("");
        !          1229:     //if(true)System.exit(0);
        !          1230:     try 
        !          1231:     {
        !          1232:       // old edocmike
        !          1233:       Connection con= new Connection(new URL("http://core.rz-berlin.mpg.de:80/edoctest/adm.epl"));
        !          1234:       String ses=con.getSessionID("name=root&passwd=&mode=verifylogin");
        !          1235:       //("name=dwinter&passwd=e1nste1n&mode=verifylogin");
        !          1236:       con.socket.close();
        !          1237:       Vector artist=(Vector)data.get("artist");
        !          1238:       Vector picture=(Vector)data.get("picture");
        !          1239:       Vector idnr=(Vector)data.get("IDNR");
        !          1240:       Vector source=(Vector)data.get("source");
        !          1241:       Connection conPost=new Connection( new URL("http://core.rz-berlin.mpg.de:80/edoctest/oi.epl"));
        !          1242:       // new    URL("http://localhost:8080/examples/servlet/rogo/"));
        !          1243:       conPost.ses=ses;
        !          1244:   
        !          1245:       for(int i=135;i<136;++i)//i<artist.size();++i)
        !          1246:       {
        !          1247:         // System.out.println("artist "+artist.elementAt(i));
        !          1248:         // System.out.println("picture nr "+ i +" name "+picture.elementAt(i));
        !          1249:         // System.out.println("file" +idnr.elementAt(i));
        !          1250:         // System.out.println("source"+source.elementAt(i));
        !          1251:         // if(!new File("/Volumes/data/tmp/Bildarchiv-Daston/400/"+idnr.elementAt(i)).exists())
        !          1252:         // System.out.println("file "+idnr.elementAt(i) +" does not exist");
        !          1253:         // if(idnr.elementAt(i)!=null)
        !          1254:         // if(idnr.elementAt(i).toString().indexOf("Ÿ")>=0||idnr.elementAt(i).toString().indexOf("š")>=0||idnr.elementAt(i).toString().indexOf("Š")>=0)
        !          1255:       // System.out.println("file "+idnr.elementAt(i) +" contains umlaut ");
        !          1256:       
        !          1257:       if(new File("/Volumes/data/tmp/Bildarchiv-Daston/400/"+idnr.elementAt(i)).exists())
        !          1258:       conPost.post(new File("/Volumes/data/tmp/Bildarchiv-Daston/400/"+idnr.elementAt(i)),picture.elementAt(i).toString(),artist.elementAt(i). toString(),source.elementAt(i).toString());
        !          1259:       // conPost.post(new File("./test2.jpg"),picture.elementAt(i).toString(),artist.elementAt(i).toString(),source.elementAt(i).toString());
        !          1260:       
        !          1261:         }// to for
        !          1262:     
        !          1263:     } catch(Exception e) 
        !          1264:      {
        !          1265:         e.printStackTrace();
        !          1266:      }
        !          1267:    */
        !          1268:    long time2 = System.currentTimeMillis(); 
        !          1269:    // System.out.println("time elapsed for upload " +((time2-time)/1000)+" seconds");
        !          1270:   }
        !          1271:  static class Connection
        !          1272:   {
        !          1273:     Socket socket;
        !          1274:     URL url;
        !          1275:     BufferedInputStream in;
        !          1276:     PrintStream out;
        !          1277:     String pHost;
        !          1278:     int pPort = 80;
        !          1279:     String proxyHost="";
        !          1280:     String ses="";
        !          1281:     HttpURLConnection con;
        !          1282:     UploadInfo dialog = new UploadInfo();
        !          1283:     public Connection(URL url) throws Exception
        !          1284:     {
        !          1285:       Properties prop = System.getProperties();
        !          1286:       pHost = null;
        !          1287:       pPort = 80;
        !          1288:       Enumeration en = prop.propertyNames();
        !          1289:       while (en.hasMoreElements())
        !          1290:       {
        !          1291:         String key = (String) en.nextElement();
        !          1292:         if (key.toString().indexOf("proxyHost") >= 0)
        !          1293:         {
        !          1294:           Object host = prop.get(key);
        !          1295:           if (host != null)
        !          1296:             pHost = host.toString();
        !          1297:         }
        !          1298:         if (key.toString().indexOf("proxyPort") >= 0)
        !          1299:         {
        !          1300:           Object port = prop.get(key);
        !          1301:           if (port != null)
        !          1302:             pPort = Integer.parseInt(port.toString());
        !          1303:         }
        !          1304:       }
        !          1305: 
        !          1306:       if (proxyHost != "")
        !          1307:       {
        !          1308:         int index = proxyHost.indexOf(":");
        !          1309:         pHost = proxyHost.substring(0, (index > 0) ? index : proxyHost.length());
        !          1310:         pPort = (index > 0) ? Integer.parseInt(proxyHost.substring(index + 1)) : 80;
        !          1311:       }
        !          1312:       int port = (url.getPort()>0) ? url.getPort():80;
        !          1313:       socket = new Socket((pHost != null) ? pHost : url.getHost(), (pHost != null) ? pPort :port );
        !          1314:       socket.setTcpNoDelay(true);
        !          1315:       in = new BufferedInputStream(socket.getInputStream(),2);
        !          1316:       out = new PrintStream(new BufferedOutputStream(socket.getOutputStream()),true);
        !          1317:       this.url = url;
        !          1318:     }
        !          1319:    public String getSessionID(String data) 
        !          1320:    {
        !          1321:      try
        !          1322:       {
        !          1323:         int size=data.length();
        !          1324:         // System.out.println("Yeah i called connect");
        !          1325:         //  socket = new Socket((pHost != null) ? pHost : url.getHost(), (pHost != null) ? pPort : url.getPort());
        !          1326:         // socket.setTcpNoDelay(true);
        !          1327:         in = new BufferedInputStream(socket.getInputStream());
        !          1328:         out = new PrintStream(new BufferedOutputStream(socket.getOutputStream()),true);
        !          1329:     
        !          1330:           out.print(("POST " + url + " HTTP/1.1\r\nContent-Type: application/x-www-form-urlencoded'\r\nContent-Length:" + size + "\r\nHost: " + url.getHost() + "\r\n\r\n"));//.getBytes());
        !          1331:         out.print(data);
        !          1332:         out.flush();
        !          1333:         String response=getResponseMessage();
        !          1334:         int index=response.indexOf("Set-Cookie");
        !          1335:         int index2=response.indexOf("\r\n",index);
        !          1336:         String cookie=response.substring(index,index2);
        !          1337:         index=cookie.indexOf("=");
        !          1338:         
        !          1339:        // // System.out.print(response);
        !          1340:         System.err.println("Session key: "+cookie.substring(index+1));
        !          1341:         return cookie.substring(index+1);//sessionID
        !          1342:       } catch (Exception e)
        !          1343:       {
        !          1344:         // System.out.println(e);
        !          1345:       }
        !          1346:    return "";
        !          1347:    }
        !          1348:    public void post(File file,String mode,String docID,String title,String author,String source) {
        !          1349:      try
        !          1350:       {
        !          1351:         // System.out.println("Yeah i called post");
        !          1352:         in = new BufferedInputStream(socket.getInputStream());
        !          1353:         out = new PrintStream(new BufferedOutputStream(socket.getOutputStream()),true);
        !          1354:         /*if(in.isClosed())
        !          1355:         {
        !          1356:           socket = new Socket((pHost != null) ? pHost : url.getHost(), (pHost != null) ? pPort : url.getPort());
        !          1357:           socket.setTcpNoDelay(true);
        !          1358:           in = new BufferedInputStream(socket.getInputStream());
        !          1359:           out = new PrintStream(new BufferedOutputStream(socket.getOutputStream()),true);
        !          1360:         }*/
        !          1361:         FileInputStream f=new FileInputStream(file);
        !          1362:         int length=f.available();
        !          1363:         // ses="37b9cec1da340f16f5ef603112e6fe84";
        !          1364:         /*
        !          1365:         String data = "--xYzZY\r\nContent-Disposition: form-data; name=\"mm\"\r\n\r\ninput\r\n"+
        !          1366:         "--xYzZY\r\nContent-Disposition: form-data; name=\"ses\"\r\n\r\n"+ses+"\r\n"
        !          1367:         +"--xYzZY\r\nContent-Disposition: form-data; name=\"col\"\r\n\r\n"+"11"+"\r\n"
        !          1368:         +"--xYzZY\r\nContent-Disposition: form-data; name=\"grp\"\r\n\r\n"+"78"+"\r\n"
        !          1369:           +"--xYzZY\r\nContent-Disposition: form-data; name=\"bun\"\r\n\r\n"+"78"+"\r\n"
        !          1370:         +"--xYzZY\r\nContent-Disposition: form-data; name=\"sm\"\r\n\r\n"+"new"+"\r\n"
        !          1371:         // +"--xYzZY\r\nContent-Disposition: form-data; name=\"ver\"\r\n\r\n"+"0"+"\r\n"
        !          1372:           +"--xYzZY\r\nContent-Disposition: form-data; name=\"docid\"\r\n\r\n"+"10924"+"\r\n"
        !          1373:         +"--xYzZY\r\nContent-Disposition: form-data; name=\"gentyp\"\r\n\r\n"+"43"+"\r\n"
        !          1374:         +"--xYzZY\r\nContent-Disposition: form-data; name=\"title\"\r\n\r\n"+"sometitlexyz"+"\r\n"
        !          1375:         +"--xYzZY\r\nContent-Disposition: form-data; name=\"placeofevent\"\r\n\r\n"+"someplaceofevent"+"\r\n"
        !          1376:         +"--xYzZY\r\nContent-Disposition: form-data; name=\"locater\"\r\n\r\n"+"somelocator"+"\r\n"
        !          1377:         +"--xYzZY\r\nContent-Disposition: form-data; name=\"authorcomment\"\r\n\r\n"+"somecomment"+"\r\n"
        !          1378:         +"--xYzZY\r\nContent-Disposition: form-data; name=\"nfiles\"\r\n\r\n"+"1"+"\r\n"
        !          1379:         +"--xYzZY\r\nContent-Disposition: form-data; name=\"file1\"; filename=\"test1.jpg\"\r\n"+"Content-Length: "+length+"\r\n"+"Content-Type: image/jpeg"+"\r\n\r\n"; // file data+end data
        !          1380:         */
        !          1381:           
        !          1382:       FormData formData=new FormData(file,ses,col,grp,mode,"0",docID);
        !          1383:       //format for const File file,String ses,String col,String grp,String sm,String ver,String docid
        !          1384:       formData.addEntry("title",title);
        !          1385:       formData.addEntry("placeofevent",author);
        !          1386:       formData.addEntry("comment",source);
        !          1387:       formData.addEntry("locater",source);  
        !          1388:       formData.addFile(formData.file.getName(),"image/tiff",length+"");
        !          1389:       String data=formData.buff.toString();
        !          1390:       String ftacc1="--xYzZY\r\nContent-Disposition: form-data; name=\"ftacc1\"\r\n\r\n"+"PUBLIC"+"\r\n";
        !          1391: 
        !          1392:       System.err.println("cl "+(data.length()+length+ 13 + ftacc1.length()));
        !          1393:       out.print(("POST " + url + " HTTP/1.1\r\n"+"Content-Length:"+(data.length()+length+13+ftacc1.length())+"\r\n"+"Content-Type: multipart/form-data, boundary=xYzZY\r\n" 
        !          1394:       +"Cookie: EMBPERL_UID="+ses+"\r\nHost: " + url.getHost() + "\r\n\r\n"));//.getBytes());
        !          1395:     //+"Host: " + url.getHost() + "\r\n\r\n"));
        !          1396:     //        out.print(("POST " + url + " HTTP/1.1\r\nContent-Type: application/x-www-form-//urlencoded'\r\nContent-//Length:" + size + "\r\nCookie: EMBPERL_UID="+ses+"\r\nHost: " + url.getHost() + "\r\n\r\n"));//.getBytes());
        !          1397:     out.print(data);
        !          1398:      if(debug)   
        !          1399:      System.out.print(data);
        !          1400:     // System.out.println("Finished upload");
        !          1401:     // System.out.println("Content-Length "+(data.length()+11+length));
        !          1402:     // System.out.print("\r\n--xYzZY--\r\n");// 11 bytes
        !          1403:     // System.out.print("\r\n");
        !          1404:     sendFile(f,out);
        !          1405:     out.print("\r\n");
        !          1406:     out.print(ftacc1);
        !          1407:      if(debug)  
        !          1408:      System.out.print(ftacc1);
        !          1409:     out.print("--xYzZY--\r\n");
        !          1410:      if(debug)  
        !          1411:      System.out.print("--xYzZY--\r\n");
        !          1412:     //  System.err.println("Yeah i called connect");
        !          1413:      dialog.progress.setValue(99);
        !          1414:     String response=getResponseMessage();
        !          1415:     System.err.print(response);
        !          1416:     if(response.toLowerCase().indexOf("content-length")>=0||(response.toLowerCase().indexOf("content-type")>=0))
        !          1417:     {
        !          1418:       int c=0;
        !          1419:       while ((c = in.read()) != -1) 
        !          1420:       {
        !          1421:           System.err.print((char)c);
        !          1422:       }
        !          1423:     }
        !          1424:       } catch (Exception e)
        !          1425:       {
        !          1426:         // System.out.println(e);
        !          1427:       }
        !          1428:    }
        !          1429:    public void post(String path,Bundle.Document doc,String mode) throws Exception{
        !          1430:    //  try
        !          1431:      // {
        !          1432:          System.out.println("Yeah i called post");
        !          1433:         in = new BufferedInputStream(socket.getInputStream());
        !          1434:         out = new PrintStream(new BufferedOutputStream(socket.getOutputStream()),true);
        !          1435:         /*if(in.isClosed())
        !          1436:         {
        !          1437:           socket = new Socket((pHost != null) ? pHost : url.getHost(), (pHost != null) ? pPort : url.getPort());
        !          1438:           socket.setTcpNoDelay(true);
        !          1439:           in = new BufferedInputStream(socket.getInputStream());
        !          1440:           out = new PrintStream(new BufferedOutputStream(socket.getOutputStream()),true);
        !          1441:         }*/
        !          1442:         String name = doc.fileLink.trim().startsWith("file://") ?doc.fileLink.trim().substring(7):doc.fileLink.trim();
        !          1443:         System.out.println(name);
        !          1444:         String filePath = name.startsWith("/") ? name:path+name;
        !          1445:         FileInputStream f=new FileInputStream( filePath);
        !          1446:         int length=f.available();
        !          1447:           
        !          1448:         FormData formData=new FormData(new File(doc.fileName),ses,col,grp,mode,"1",doc.docID+"",doc.type);// "1" means new version if mode == old
        !          1449:         //format for const File file,String ses,String col,String grp,String sm,String ver,String docid
        !          1450:         Enumeration en = doc.metaTags.keys();
        !          1451:       while(en.hasMoreElements())
        !          1452:       {
        !          1453:         String key=(String)en.nextElement();
        !          1454:         formData.addEntry(key,(String)doc.metaTags.get(key));
        !          1455:       }
        !          1456:       formData.addFile(formData.file.getName(),doc.mimeType,length+"");
        !          1457:       String data=formData.buff.toString();
        !          1458:       //System.out.print(data);
        !          1459:       String ftacc1="--xYzZY\r\nContent-Disposition: form-data; name=\"ftacc1\"\r\n\r\n"+"PUBLIC"+"\r\n";
        !          1460: 
        !          1461:       System.err.println("cl "+(data.length()+length+ 13 + ftacc1.length()));
        !          1462:       out.print(("POST " + url + " HTTP/1.1\r\n"+"Content-Length:"+(data.length()+length+13+ftacc1.length())+"\r\n"+"Content-Type: multipart/form-data, boundary=xYzZY\r\n" 
        !          1463:       +"Cookie: EMBPERL_UID="+ses+"\r\nHost: " + url.getHost() + "\r\n\r\n"));//.getBytes());
        !          1464:     //+"Host: " + url.getHost() + "\r\n\r\n"));
        !          1465:     //        out.print(("POST " + url + " HTTP/1.1\r\nContent-Type: application/x-www-form-//urlencoded'\r\nContent-//Length:" + size + "\r\nCookie: EMBPERL_UID="+ses+"\r\nHost: " + url.getHost() + "\r\n\r\n"));//.getBytes());
        !          1466:     out.print(data);
        !          1467:       if(out.checkError()) throw new Error("Error while sending form data");
        !          1468:      if(debug)   
        !          1469:      System.out.print(data);
        !          1470:     // System.out.println("Finished upload");
        !          1471:     // System.out.println("Content-Length "+(data.length()+11+length));
        !          1472:     // System.out.print("\r\n--xYzZY--\r\n");// 11 bytes
        !          1473:     // System.out.print("\r\n");
        !          1474:     sendFile(f,out);
        !          1475:     out.print("\r\n");
        !          1476:     out.print(ftacc1);
        !          1477:      if(debug)  
        !          1478:      System.out.print(ftacc1);
        !          1479:     out.print("--xYzZY--\r\n");
        !          1480:      if(debug)  
        !          1481:      System.out.print("--xYzZY--\r\n");
        !          1482:     //  System.err.println("Yeah i called connect");
        !          1483:      dialog.progress.setValue(99);
        !          1484:    // String response=getResponseMessage();
        !          1485:    // System.err.print(response);
        !          1486:       int c=0;StringBuffer sb = new StringBuffer();
        !          1487:       sb=readChunked(this);
        !          1488:      if(debug)
        !          1489:      System.out.println(sb);
        !          1490:      if(sb.length()>0)
        !          1491:      addToBundle(bundleRef,sb);
        !          1492:         try 
        !          1493:         {
        !          1494:           
        !          1495:           Bundle.Document newDoc =(Bundle.Document) bundleRef.docsLocator.get(doc.locator);
        !          1496:           doc.md5cs=newDoc.md5cs;
        !          1497:           doc.size=newDoc.size;
        !          1498:           doc.fileID=newDoc.fileID;
        !          1499:           doc.docID=newDoc.docID;
        !          1500:           doc.ver=newDoc.ver;
        !          1501:           doc.fileVer=newDoc.fileVer;
        !          1502:           bundle.exportToXML(new File("./metaout.xml"));
        !          1503:         } catch(Exception e7) { e7.printStackTrace();}
        !          1504:     }
        !          1505:   
        !          1506:     public void sendFile(FileInputStream f,PrintStream out) throws Exception
        !          1507:     {
        !          1508:         int length=f.available();
        !          1509:         md.reset();
        !          1510:         dialog.progress.setValue(0);
        !          1511:         byte[] b=new byte[512];
        !          1512:         int   readCount =0;
        !          1513:         while (readCount < length)
        !          1514:         {
        !          1515:           if (readCount + b.length > length)
        !          1516:             f.read(b, 0, length - readCount); //  mout.flush();
        !          1517:           else
        !          1518:             f.read(b);
        !          1519:           if (readCount + b.length > length)
        !          1520:           {
        !          1521:           out.write(b, 0, length - readCount); //  mout.flush();
        !          1522:           md.update(b, 0, length - readCount);
        !          1523:             if(out.checkError()) throw new Error("Error while sending file data");
        !          1524:           //if(debug)  
        !          1525:           //System.out.write(b, 0, length - readCount); //  mout.flush();
        !          1526:           }
        !          1527:           else
        !          1528:         {
        !          1529:          //  if(debug)  
        !          1530:            //System.out.write(b); //  mout.flush();
        !          1531:           out.write(b);
        !          1532:           if(out.checkError()) throw new Error("Error while sending file data");
        !          1533:           md.update(b, 0, b.length);
        !          1534:         }
        !          1535:         readCount += b.length;
        !          1536:         dialog.progress.setValue((int) (((double) readCount / (double) length) * 100.0));        
        !          1537:         }
        !          1538:      
        !          1539:     }
        !          1540:     public void get() throws Exception
        !          1541:     {
        !          1542:       try
        !          1543:       {
        !          1544:         // System.out.println("Yeah i called connect");
        !          1545:         //  socket = new Socket((pHost != null) ? pHost : url.getHost(), (pHost != null) ? pPort : url.getPort());
        !          1546:         // socket.setTcpNoDelay(true);
        !          1547:         in = new BufferedInputStream(socket.getInputStream());
        !          1548:         out = new PrintStream(new BufferedOutputStream(socket.getOutputStream()),true);
        !          1549:     
        !          1550:          // 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());
        !          1551:           out.print(("GET " + url + " HTTP/1.1\r\nCookie: EMBPERL_UID="+ses+"\r\nHost: " + url.getHost() + "\r\n\r\n"));
        !          1552:         out.flush();
        !          1553:       } catch (Exception e)
        !          1554:       {
        !          1555:         int port = (url.getPort()>0) ? url.getPort():80;
        !          1556:         
        !          1557:         socket = new Socket((pHost != null) ? pHost : url.getHost(), (pHost != null) ? pPort : url.getPort());
        !          1558:         socket.setTcpNoDelay(true);
        !          1559:         in = new BufferedInputStream(socket.getInputStream());
        !          1560:         out = new PrintStream(new BufferedOutputStream(socket.getOutputStream()),true);
        !          1561:         // out.print(("PUT " + url + " HTTP/1.1\r\nContent-Type:text/html\r\nContent-Length:" + size + "\r\nHost: " + url.       getHost() + "\r\n\r\n"));
        !          1562:         out.flush();
        !          1563:         // System.out.println("Error "+e);
        !          1564:       }
        !          1565:       
        !          1566:       /*  
        !          1567:       con = new HTTPClient.HttpURLConnection(url);//(HttpURLConnection) url.openConnection(); // con.setRequestMethod("GET");
        !          1568:       con.setUseCaches(false);
        !          1569:       con.setRequestMethod("PUT");
        !          1570:       con.setDoOutput(true);
        !          1571:       con.setRequestProperty("Content-Length", ""+size);
        !          1572:       // con.connect();      
        !          1573:       // System.out.println(con.getClass());
        !          1574:       out = new DataOutputStream(con.getOutputStream());
        !          1575:      */
        !          1576:     }
        !          1577:     public boolean update() throws Exception
        !          1578:     {
        !          1579:       boolean exists = false;
        !          1580:       String response = "";
        !          1581:       try
        !          1582:       {
        !          1583: 
        !          1584:         URL url = null;//createURL(this.url.toString(), getSHA((id + "").getBytes()));
        !          1585:       //  con = new HTTPClient.HttpURLConnection(url);//(HttpURLConnection) url.openConnection(); // con.setRequestMethod("GET");
        !          1586:         //con.setUseCaches(false);
        !          1587:        // con.setRequestMethod("HEAD");
        !          1588:         //con.setDoOutput(true);
        !          1589:        // con.connect();
        !          1590: 
        !          1591:         out.print(("HEAD " + url + " HTTP/1.1\r\nConnection:Keep-Alive\r\nHost: " + url.getHost() + "\r\n\r\n"));//.getBytes());
        !          1592:           out.flush();
        !          1593:         response = getResponseMessage();
        !          1594:         exists = response.indexOf("OK") >= 0;
        !          1595:         // System.out.println("Head "+response);
        !          1596:       
        !          1597:          } catch (Exception e)
        !          1598:       {
        !          1599:         socket = new Socket((pHost != null) ? pHost : url.getHost(), (pHost != null) ? pPort : url.getPort());
        !          1600:           socket.setTcpNoDelay(true);
        !          1601:         in = new BufferedInputStream(socket.getInputStream());
        !          1602:         out = new PrintStream(new BufferedOutputStream(socket.getOutputStream()),true);
        !          1603:     //    out.writeBytes("HEAD " + url + " HTTP/1.1\r\n Connection:Keep-Alive\r\n \r\nHost: " + url.getHost() + //"\r\n\r\n");
        !          1604:         URL url = null;//createURL(this.url.toString(), getSHA((id + "").getBytes()));
        !          1605:         out.print(("HEAD " + url + " HTTP/1.1\r\nConnection:Keep-Alive\r\nHost: " + url.getHost() + "\r\n\r\n"));//.getBytes());
        !          1606:         out.flush();
        !          1607:         response = getResponseMessage();
        !          1608:         // System.out.println("Head " + response);
        !          1609:         exists = response.indexOf("OK") >= 0;
        !          1610:         //// System.out.println("Error from Head "+e);
        !          1611:         // e.printStackTrace();
        !          1612:              return exists;
        !          1613:       
        !          1614:       }
        !          1615:       return exists;
        !          1616:     }
        !          1617:   
        !          1618:       public String getResponseMessage()
        !          1619:     {
        !          1620:       
        !          1621:       int b=0;StringBuffer between=new StringBuffer();int count=0;
        !          1622:     try 
        !          1623:     {
        !          1624:        int loop =0;int available = 0;
        !          1625:        while((available=in.available())==0) 
        !          1626:        {
        !          1627:          if(loop>=3000) throw new Error("Connection timed out");
        !          1628:          long time = System.currentTimeMillis();
        !          1629:          while(System.currentTimeMillis()-time<100);
        !          1630:          if(available==0) loop++; else loop=0;
        !          1631:        }
        !          1632:        System.out.println("heh there are bytes "+in.available()+" available");
        !          1633:       int limit = in.available();
        !          1634:       while(true )
        !          1635:       {
        !          1636:         b=in.read();
        !          1637:         if(b=='\r') 
        !          1638:         {
        !          1639:           between.append((char)b);
        !          1640:           // System.out.print("CR found ");
        !          1641:           b=in.read();
        !          1642:           if(b=='\n')
        !          1643:           {                        
        !          1644:              // System.out.print("LF found ");
        !          1645:              between.append((char)b);
        !          1646:              if((b=in.read())=='\r')
        !          1647:              {
        !          1648:                 b=in.read();
        !          1649:                 // System.out.print("end found ");
        !          1650:                 break;
        !          1651:              }
        !          1652:           }
        !          1653:        }
        !          1654:        between.append((char)b);
        !          1655:        // System.out.print((char)b);
        !          1656:        // System.out.println("read "+count+" bytes");
        !          1657:        count++;            
        !          1658:        if(count==limit) break;
        !          1659:       }
        !          1660: 
        !          1661:       } catch(Exception e) { 
        !          1662:       e.printStackTrace();
        !          1663:       // System.out.println("Error found");
        !          1664:       if(e.toString().indexOf("peer")>=0)
        !          1665:       return getResponseMessage();
        !          1666:       else throw new Error("Error while reading response");
        !          1667:       }
        !          1668:           
        !          1669:       /*
        !          1670:       String response = "";
        !          1671:       try
        !          1672:       {
        !          1673:         response = con.getResponseMessage();
        !          1674:       // con.disconnect();
        !          1675:       } catch (Exception e)
        !          1676:       {
        !          1677:         showErrorDialog(e.getMessage(),"Shit happens");
        !          1678:       }
        !          1679:       */
        !          1680:       String response = between.toString();
        !          1681:       if(response.indexOf("close") >= 0)
        !          1682:        reconnect();
        !          1683:       return response; 
        !          1684:      
        !          1685:     }
        !          1686:     public void disconnect() throws Exception
        !          1687:     {
        !          1688:      //socket.close();
        !          1689:      // con.disconnect();
        !          1690:     }
        !          1691:     public void reconnect() 
        !          1692:     {
        !          1693:        try 
        !          1694:        {
        !          1695:           System.out.println("Reconnect called");
        !          1696:           int port= (url.getPort()>=0) ? url.getPort():80;
        !          1697:           socket = new Socket((pHost != null) ? pHost : url.getHost(), (pHost != null) ? pPort :port);
        !          1698:           socket.setTcpNoDelay(true);
        !          1699:           in = new BufferedInputStream(socket.getInputStream());
        !          1700:           out = new PrintStream(new BufferedOutputStream(socket.getOutputStream()),true);
        !          1701: 
        !          1702:        } catch(Exception e) 
        !          1703:          {
        !          1704:            showErrorDialog(e.getMessage(),"Shit happens");
        !          1705:          }
        !          1706:        
        !          1707:     }
        !          1708:  
        !          1709:   }
        !          1710:   public static class FormData 
        !          1711:   {
        !          1712:     public StringBuffer buff=new StringBuffer();
        !          1713:     File file;
        !          1714:     public FormData() 
        !          1715:     {}
        !          1716:     public FormData(File file,String ses,String col,String grp,String sm,String ver,String docid) 
        !          1717:     {
        !          1718:      this(file,ses,col,grp,sm,ver,docid,"Archimedes Image Collection");
        !          1719:     }
        !          1720:      public FormData(File file,String ses,String col,String grp,String sm,String ver,String docid,String type) 
        !          1721:     {
        !          1722:       this.file=file;
        !          1723:       addEntry("mm","input");
        !          1724:       addEntry("ses",ses);
        !          1725:       addEntry("col",col);
        !          1726:       addEntry("grp",grp);
        !          1727:       //addEntry("bun",bun);
        !          1728:         
        !          1729:       if(sm.equals("old"))
        !          1730:       {
        !          1731:         addEntry("sm","old");  
        !          1732:         addEntry("ver",ver);  
        !          1733:         addEntry("docid",docid);  
        !          1734:       
        !          1735:       }
        !          1736:       else 
        !          1737:         addEntry("sm","new");  
        !          1738:         System.out.println("Type is "+type);
        !          1739:         type=type.toLowerCase().trim();
        !          1740:         Object genre=null;
        !          1741:         if((genre=Bundle.genresLabel.get(type))!=null)
        !          1742:         addEntry("gentyp",genre.toString());
        !          1743:         else  if((genre=Bundle.genresName.get(type))!=null)
        !          1744:          addEntry("gentyp",genre.toString());
        !          1745:         else
        !          1746:         {
        !          1747:           Integer id=new Integer("0");
        !          1748:           id= new Integer(type);
        !          1749:           if((genre=Bundle.genresId.get(id))!=null)
        !          1750:           addEntry("gentyp",((Bundle.Genre)genre).id.toString());
        !          1751:         }
        !          1752:    System.out.println("Numerical Type is "+genre);
        !          1753:   } 
        !          1754:   public void addEntry(String entry,String data)
        !          1755:   {
        !          1756:     buff.append("--xYzZY\r\nContent-Disposition: form-data; name=\"");
        !          1757:     buff.append(entry);
        !          1758:     buff.append("\"; charset=utf-8 \r\n\r\n");
        !          1759:     buff.append(data);
        !          1760:     buff.append("\r\n"); 
        !          1761:   }
        !          1762:   public void addFile(String name,String type,String length)
        !          1763:   {
        !          1764:     addEntry("nfiles","1");
        !          1765:     buff.append("--xYzZY\r\nContent-Disposition: form-data; name=\"file1\"");
        !          1766:     buff.append("; filename=\""+name+"\""+"\r\nContent-Length: "+length+"\r\n"+"Content-Type:"+type+"\r\n");
        !          1767:     buff.append("\r\n"); 
        !          1768:   }
        !          1769:     
        !          1770:   public void addEnd() 
        !          1771:   {
        !          1772:     buff.append("\r\n--xYzZY--\r\n");
        !          1773:   }
        !          1774:   
        !          1775:   }
        !          1776:  static class UploadFilter implements FilenameFilter
        !          1777:   {
        !          1778:     public UploadFilter() {}
        !          1779:     public boolean accept(File dir, String name) 
        !          1780:     {
        !          1781:       if(name.startsWith(".") || name.endsWith(".xml")) return false;
        !          1782:       else return true;
        !          1783:     }
        !          1784:   }
        !          1785:  
        !          1786: static class DotFileFilter implements FilenameFilter
        !          1787: {
        !          1788:      public DotFileFilter() {}
        !          1789:     public boolean accept(File dir, String name) 
        !          1790:     {
        !          1791:       if(name.startsWith(".")) return false;
        !          1792:       else return true;
        !          1793:     }
        !          1794:   }
        !          1795:   static class XMLFilter extends javax.swing.filechooser.FileFilter
        !          1796:   {
        !          1797:     public boolean accept(java.io.File file)
        !          1798:     {
        !          1799:      if(file.getName().toLowerCase().endsWith(".xml")||file.isDirectory())
        !          1800:      return true ; 
        !          1801:      else return false;
        !          1802:     }
        !          1803:      public String getDescription()
        !          1804:      {
        !          1805:      return "Metadata XML File";
        !          1806:      }
        !          1807: 
        !          1808: }
        !          1809: }

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