Annotation of edoc-applet/Upload.java, revision 1.4
1.1 rogo 1: //
2: // Upload.java
3: //
4: //
5: // Created by rogo on Wed Jan 29 2003.
1.4 ! rogo 6: // Copyright (c) 2003 Rogo Soft. All rights reserved.
1.1 rogo 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;
1.4 ! rogo 23: static JFileChooser fileChooser,downloadChooser;
1.1 rogo 24: static String url;
25: static long id = 0L;
26: static Hashtable connections=new Hashtable();
27: static String col = "11"; // Collection /Institute
1.4 ! rogo 28: static String grp ="136"; // Group or Bundle
1.1 rogo 29: static String ses ="";
30: static Bundle bundle;
31: static Bundle bundleRef;
32: JButton upload = new JButton("Upload");
1.3 rogo 33: JButton download = new JButton("Download");
1.1 rogo 34: JRadioButton proxy = new JRadioButton("Proxy");
35: static int fileCount = 0;
36: // static UploadInfo dialog = new UploadInfo();
37: static String mode = "";
38: static String destination = "";
39: static String proxyHost = "";
40: Upload uploader = this;
41: static boolean runningAsApplet=true;
42: static boolean debug=false;
1.4 ! rogo 43: static boolean uploadMode = true;
1.1 rogo 44: static String rootNode = "edoc";
45: public Upload()
46: {
47: if(!runningAsApplet)
48: init();
49: }
50:
51: // start applet code
52: public void init()
53: {
54: this.getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0));
55: this.getContentPane().add(upload);
1.3 rogo 56: this.getContentPane().add(download);
1.1 rogo 57: this.getContentPane().add(proxy);
58: upload.addActionListener(this);
1.3 rogo 59: download.addActionListener(this);
1.1 rogo 60: proxy.addActionListener(this);
61: id = System.currentTimeMillis();
62: Properties prop = System.getProperties();
63:
64: // prop.put("proxySet", "true");
65: // prop.put("http.proxyHost","proxy.unibe.ch");
66: // prop.put("proxyPort", "80");
67: // prop.put("java.protocol.handler.pkgs","HTTPClient");
1.4 ! rogo 68: fileChooser=null;download=null;
1.1 rogo 69: if(!runningAsApplet)
70: {
71: Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
1.4 ! rogo 72: Point p=new Point((screenSize.width-700)/2,(screenSize.height-80)/2);
1.1 rogo 73: JFrame testFrame=new JFrame();
74: testFrame.setTitle("Archimedes Applet");
75: testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
76: testFrame.getContentPane().add(this);
1.4 ! rogo 77: testFrame.setSize(300,80);
1.1 rogo 78: testFrame.setLocation(p);
79: testFrame.setVisible(true);
80: Console console = new Console(testFrame);
81: console.setVisible(true);
82: try
83: {
84: Connection con= new Connection(new URL("http://core.rz-berlin.mpg.de:80/edoctest/adm.epl"));
85: ses=con.getSessionID("name=root&passwd=edoctest&mode=verifylogin");
86: //("name=dwinter&passwd=e1nste1n&mode=verifylogin");
87: con.socket.close();
88: } catch(Exception exc) { }
89: } else
90: {
91: Console console = new Console(new JFrame());
92: console.setVisible(true);
93: ses= getParameter("ses");
94: col = getParameter("col").trim();
95: grp = getParameter("grp").trim();
96: bundleRef = getBundle(getCodeBase()+"oi.epl?mm=list&grp="+grp+"&col="+col);
97: getGenre();
98: //bundle=getBundle("http://core.rz-berlin.mpg.de/edoctest/oi.epl?mm=list&grp=136&col=11");
99:
100: }
101: }
102: public void actionPerformed(ActionEvent e)
103: {
104: if (e.getSource().equals(proxy))
105: {
106: proxyHost = JOptionPane.showInputDialog("Please enter proxy host (format host:port)!");
107: if (proxyHost != null)
108: {
109: if (proxyHost.length() == 0)
110: {
111: proxyHost = "";
112: Properties prop = System.getProperties();
113: prop.remove("proxySet");
114: prop.remove("http.proxyHost");
115: prop.remove("proxyPort");
116:
117: }
118: else
119: {
120: Properties prop = System.getProperties();
121: int index = proxyHost.indexOf(":");
122: String pHost = proxyHost.substring(0, (index > 0) ? index : proxyHost.length());
123: String pPort = (index > 0) ? proxyHost.substring(index + 1) : "80";
124:
125: prop.put("proxySet", "true");
126: prop.put("http.proxyHost",pHost);
127: prop.put("proxyPort", pPort);
128: }
129: System.out.println("pr "); // proxyHost="";
130: } else
131: proxyHost = "";
132: // proxy.setSelected(false);
133: }
134:
1.3 rogo 135: if (e.getActionCommand().equals("Download"))
136: {
137:
1.4 ! rogo 138: if (downloadChooser == null)
! 139: {
! 140: downloadChooser = new JFileChooser();
! 141: downloadChooser.setFileSelectionMode(fileChooser.FILES_AND_DIRECTORIES);
! 142: downloadChooser.setFileFilter(new XMLFilter());
! 143: downloadChooser.setDialogType(JFileChooser.SAVE_DIALOG);
! 144: downloadChooser.addActionListener(new ActionListener()
! 145: {
! 146: public void actionPerformed(ActionEvent e2)
! 147: {
! 148: System.out.println(e2.getActionCommand());
! 149: if (!e2.getActionCommand().toString().equals("ApproveSelection")) return;
! 150: // {
! 151:
1.3 rogo 152: Thread thread = new Thread()
153: {
154: public void run()
155: {
1.4 ! rogo 156: if(runningAsApplet)
! 157: set();
1.3 rogo 158: UploadInfo dialog = new UploadInfo();
159:
1.4 ! rogo 160: File startFile=downloadChooser.getSelectedFile();
1.3 rogo 161: dialog.thread=Thread.currentThread();
162: //System.out.println("Called run with " + fileChooser.getSelectedFile());
163: dialog.setTitle("Download Status Window");
164: dialog.setSize(400, 175);
165: dialog.setLocation(new java.awt.Point(150, 100));
166:
167: long time = System.currentTimeMillis();
168: try
169: {
170: Connection conGet = null;
171: if(!runningAsApplet)
172: conGet=new Connection( new URL("http://core.rz-berlin.mpg.de/edoctest/oi.epl"));
173: else
174: conGet=new Connection( new URL(url+"/oi.epl"));
175:
176: conGet.ses=ses;
177: conGet.dialog=dialog;
178: Bundle bundle = bundleRef;
179: int fileCount = bundle.documents.size();
1.4 ! rogo 180: new File(startFile.getAbsolutePath()+"/images").mkdirs();
! 181: File indexFile = new File(startFile.getAbsolutePath()+"/index.xml");
! 182: if(indexFile.exists())
! 183: bundle = getBundle(indexFile);
! 184: else
! 185: bundleRef.exportToXMLDownload(new File(startFile.getAbsolutePath()+"/index.xml"),startFile);
! 186:
! 187: boolean update = (bundle != bundleRef);
! 188: // System.out.println("update "+update);
! 189: Vector docs = new Vector(); Bundle.Document refDoc = null; Vector list = new Vector();
! 190: if(update)
! 191: for(int k = 0;k <fileCount; ++k)
! 192: {
! 193: Bundle.Document doc = (Bundle.Document)bundleRef.documents.elementAt(k);
! 194: if((refDoc=(Bundle.Document)bundle.docs.get(new Integer(doc.docID)))!=null)
! 195: {
! 196: if(checkForFileDownloaded(startFile.getAbsolutePath(),refDoc,doc))
! 197: {
! 198: if(!doc.downloadAgain)
! 199: list.addElement(doc.fileName);
! 200: docs.addElement(doc);//empty
! 201: }
! 202: } else docs.addElement(doc);
! 203: }
! 204: if(!update)
! 205: docs=bundleRef.documents;
! 206: System.out.println(docs.size());
! 207: fileCount=docs.size();boolean keepAllFiles=false,newVersionforAll=false;
1.3 rogo 208: for(int i=0;i< fileCount;++i)
209: {
1.4 ! rogo 210: Bundle.Document doc=(Bundle.Document)docs.get(i);
! 211:
! 212: if(update&&(refDoc=(Bundle.Document)bundle.docs.get(new Integer(doc.docID)))!=null&&!doc.downloadAgain)
! 213: {
! 214: System.out.println(refDoc+" "+doc.fileName);
! 215:
! 216: if(!newVersionforAll&&!keepAllFiles)
! 217: {
! 218: Object[] options = new Object[] { "Cancel","Replace existing files", "Keep existing files" };
! 219: Object[] options2 = new Object[] { "Cancel","Replace existing file", "Keep existing file" };
! 220:
! 221: int option = (list.size()>1) ? showDialog("Warning : several files exist on the client \n Press show list to see the list! \n What do you want to do?", "several Files exist!", options,list):showDialog("Warning : file "+refDoc.fileName+" exists on the client \n What do you want to do?", " File "+doc.fileName+" exists!", options2);
! 222: ;
! 223: if(option == 0) break;// mode = "old";
! 224: if(option == 1)
! 225: {
! 226: mode ="old";
! 227: newVersionforAll = true;
! 228: keepAllFiles = false;
! 229: }
! 230: if(option == 2)
! 231: {
! 232: count++;
! 233: System.out.println("Heh Document exists!"+ doc);
! 234: System.out.println("Skipping");
! 235: newVersionforAll = false;
! 236: keepAllFiles = true;
! 237: //continue;
! 238: }
! 239: }
! 240: if(keepAllFiles)
! 241: {
! 242: if(!doc.downloadAgain)
! 243: continue;
! 244: }
! 245: }// to bundle if
! 246: else
! 247: if(update)
! 248: {
! 249: bundle.docs.put(new Integer(doc.docID),doc);
! 250: bundle.documents.addElement(doc);
! 251: bundle.docsLocator.put(doc.locator,doc);
! 252: }
1.3 rogo 253: if(doc.fileLink=="") continue;
254: System.out.println(doc.title);
255: conGet.url=new URL(doc.fileLink);
256: conGet.get();
1.4 ! rogo 257:
! 258: writeChunked(conGet,new File(startFile.getAbsolutePath()+"/images/"+doc.fileName),i+1, fileCount,doc.size, dialog);
! 259: String md5 =getMD5(conGet.md);
! 260: if(md5.equals(doc.md5cs)) System.out.println("download sucess");
! 261: else
! 262: {
! 263: System.out.println(" md5 "+md5 +" "+doc.md5cs+ " "+doc.fileName);
! 264: break;
! 265: }
! 266:
! 267: if(debug)
! 268: System.out.println(" md5 "+md5 +" "+doc.md5cs+ " "+doc.fileName);
! 269:
1.3 rogo 270: }
1.4 ! rogo 271: // close connection
! 272: conGet.socket.close();
! 273: dialog.setVisible(false);
1.3 rogo 274: long time2 =System.currentTimeMillis();
1.4 ! rogo 275: showDialog("Finished download of " + fileCount + " files in " + ((time2 - time) / 1000) + " seconds", "Finished Download");
! 276: if(update)
! 277: bundle.exportToXMLDownload(new File(startFile.getAbsolutePath()+"/index.xml"),startFile);
1.3 rogo 278: System.out.println("Time for download needed "+(time2-time));
1.4 ! rogo 279:
! 280: } catch(Exception e5)
! 281: {
! 282: dialog.setVisible(false);
! 283: ByteArrayOutputStream b = new ByteArrayOutputStream();
! 284: PrintStream stream = new PrintStream(b);
! 285: e5.printStackTrace(stream);
! 286: //connections.remove(startFile.getAbsolutePath());
! 287: showErrorDialog(b.toString(), "Download failed");
! 288: }
! 289: catch(Error err)
! 290: {
! 291:
! 292: showErrorDialog(err.toString(), "Download failed");
! 293: System.out.println("Error caught "+ err);
! 294: }
! 295: }
1.3 rogo 296: };
297: thread.start();
1.4 ! rogo 298: }
! 299: });
1.3 rogo 300: }
1.4 ! rogo 301: downloadChooser.showDialog(new JFrame()," Download ");
! 302: }
! 303: if (e.getActionCommand().equals("Upload"))
1.1 rogo 304: {
305:
306: //url=getParameter("url");
307: if(runningAsApplet)
308: set();
309: //System.out.println("url " + url); //+ " " + getCodeBase());
310: upload.setEnabled(false);
311: makeUpload();
312: upload.setEnabled(true);
313: }
314:
315: }
316: public void set()
317: {
318: col = getParameter("col").trim();
319: grp = getParameter("grp").trim();
320: ses = getParameter("ses").trim();
321: System.out.println("uploading to grp "+grp+" col "+col);
322: destination = "";
323: // destination = getParameter("destinationFolder");
324: if (destination == null)
325: destination = "";
326: // e.g."/rogo/servlet/RWServlet/"
327: URL appletURL = getCodeBase();
328: String serverInfo = appletURL.getHost() + ":" + appletURL.getPort();
329: // this.url = (servletURL.startsWith("http")) ? servletURL + url : "http://" + serverInfo + servletURL + url;
330: this.url=appletURL.toString();
331: Properties prop = System.getProperties();
332:
333: // prop.put("proxySet", "true");
334: // prop.put("http.proxyHost","proxy.unibe.ch");
335: // prop.put("proxyPort", "80");
336: // prop.put("java.protocol.handler.pkgs","HTTPClient");
337: Enumeration en = prop.propertyNames();
338: if(debug)
339: while (en.hasMoreElements())
340: {
341: String key = (String) en.nextElement();
342: System.out.println("key: " + key + " value: " + prop.get(key));
343:
344: }
345: System.out.println(url+"oi.epl?mm=list&grp="+grp+"&col="+col);
346:
347: }
348: public static void makeUpload()
349: {
350: try
351: {
352: if (fileChooser == null)
353: {
354: fileChooser = new JFileChooser();
355: // fileChooser.setFileSelectionMode(fileChooser.FILES_AND_DIRECTORIES);
356: fileChooser.setFileFilter(new XMLFilter());
357: fileChooser.setDialogType(JFileChooser.OPEN_DIALOG);
358: fileChooser.addActionListener(new ActionListener()
359: {
360: public void actionPerformed(ActionEvent e2)
361: {
362: System.out.println(e2.getActionCommand());
363: if (!e2.getActionCommand().toString().equals("ApproveSelection")) return;
364: // {
365:
366: Thread thread = new Thread()
367: {
368: public void run()
369: {
370: UploadInfo dialog = new UploadInfo();
371:
372: File startFile=new File(".");
373: try
374: {
375: dialog.thread=Thread.currentThread();
376: System.out.println("Called run with " + fileChooser.getSelectedFile());
377: dialog.setTitle("Upload Status Window");
378: dialog.setSize(400, 175);
379: dialog.setLocation(new java.awt.Point(150, 100));
380: Update update = new Update();
381: startFile = fileChooser.getSelectedFile(); //new File(fileChooser.getFile());
382: int fileCount = 0;
383: int count = 1;
384: long time = System.currentTimeMillis();
385: if( connections.get(startFile.getAbsolutePath())!=null)
386: throw new Error("Upload already running!");
387:
388: if (startFile.isDirectory())
389: {
390: fileCount = countFiles(startFile, fileCount);
391: System.out.println("Number of files to send: " + fileCount);
392: bundle=getBundle(startFile);
393: writeDirectory(startFile, startFile, fileCount, count, dialog, update);
394:
395: } else
396: {
397: fileCount = 1;
398: //writeStream(startFile, startFile, fileCount, count, dialog, update);
399: bundle = getBundle(startFile);
400: writeStream(startFile,bundle, dialog);
401:
402: }
403:
404: long time2 = System.currentTimeMillis();
405: System.out.println("needed " + (time2 - time) + " ms for " + count--);
406: dialog.setVisible(false);
407: if (startFile.isDirectory())
408: showDialog("Finished upload of " + startFile + " containing " + fileCount + " " + ((fileCount > 1) ? " files" : " file") + " in " + ((time2 - time) / 1000) + " seconds", "Finished Upload");
409: else
410: showDialog("Finished upload of " + startFile + " in " + ((time2 - time) / 1000) + " seconds", "Finished Upload");
411: connections.remove(startFile.getAbsolutePath());
412: } catch (Exception e)
413: {
414: dialog.setVisible(false);
415: ByteArrayOutputStream b = new ByteArrayOutputStream();
416: PrintStream stream = new PrintStream(b);
417: e.printStackTrace(stream);
418: connections.remove(startFile.getAbsolutePath());
419:
420: showErrorDialog(b.toString(), "Upload failed");
421: } catch (Error e8)
422: {
423: dialog.setVisible(false);
424: if( e8.toString().indexOf("Upload already running!")<0)
425: connections.remove(startFile.getAbsolutePath());
426: showErrorDialog(e8.toString(), "Upload failed");
427: }
428:
429: }
430: };
431: thread.setPriority(Thread.MIN_PRIORITY);
432: /* dialog = new UploadInfo();
433: dialog.setTitle("Upload Status Window");
434: dialog.setSize(400, 155);
435: dialog.setLocation(new java.awt.Point(150, 100));
436: */
437: thread.start();
438: // } // else
439: //System.exit(0);
440: }
441: });
442:
443: }
444: count = 1;
445: mode = "";
446: fileChooser.showDialog(new JFrame(), "Upload");
447:
448: } catch (Exception e)
449: {
450: System.out.println("Ha " + e);
451: }
452: }
453: private static int countFiles(File file, int fileCount)
454: {
455: if (file.isDirectory())
456: {
457: String[] files = file.list(new UploadFilter());
458:
459: for (int j = 0; j < files.length; ++j)
460: {
461: File f = new File(file + File.separator + files[j]);
462: if (f.isDirectory())
463: {
464: fileCount = countFiles(f, fileCount);
465: } else
466: fileCount = fileCount + 1;
467: }
468:
469: }
470: return fileCount;
471: }
472:
473: private static int writeDirectory(File file, File startFile, int fileCount, int count, UploadInfo dialog, Update update) throws Exception
474: {
475: if (file.isDirectory())
476: {
477: String[] files = file.list(new UploadFilter());
478: for (int j = 0; j < files.length; ++j)
479: {
480: File f = new File(file + File.separator + files[j]);
481: System.out.println(file + " " + f);
482:
483: if (f.isDirectory())
484: {
485: count = writeDirectory(f, startFile, fileCount, count, dialog, update);
486: } else
487: count = writeStream(f, startFile, fileCount, count, dialog, update);
488: }
489: }
490: return count;
491: }
492: private static int writeStream(File file, File startFile, int fileCount, int count, UploadInfo dialog, Update updateMode) throws Exception
493: {
494: // try
495: //{
496: String response = "", mode = "";
497: String path = file.getAbsolutePath();
498: String name = (startFile.isDirectory()) ? startFile.getName() + "/" + path.substring(startFile.getAbsolutePath().length() + 1) : file.getName();
499: if (destination != "")
500: name = (startFile.isDirectory()) ? destination + "/" + path.substring(startFile.getAbsolutePath().length() + 1) : destination + "/" + file.getName();
501:
502: System.out.println("hi " + name + " " + destination + " " + startFile.getName());
503: FileInputStream f = new FileInputStream(file.getAbsolutePath());
504: int length = f.available();
505: int readCount = 0;
506: byte[] b = (length > 512000) ? new byte[512000] : new byte[length];
507: System.out.println(file.getName() + " " + ((length > 1000000) ? (length / 1048576) + " MByte" : length + " Bytes"));
508: String fileName = file.getName() + " " + ((length > 1000000) ? (length / 1048576) + " MByte" : length + " Bytes");
509: dialog.title.setText("Uploading " + startFile);
510: dialog.progress.setValue(0);
511: dialog.file.setText(fileName);
512: dialog.status.setText(count + " of " + fileCount + ((fileCount > 1) ? " files" : " file"));
513: //dialog.pack();
514: //dialog.validate();
515: if (dialog.isVisible())
516: dialog.repaint();
517: else
518: dialog.show();
519: /*
520: URL httpCon = new URL(url + getSHA((id + "").getBytes()) + "/" + convertUml(name) + "?id=" + getSHA((id + "").getBytes()) + "&count=" + count + "&nf=" + fileCount + "&md5=" + md5 + "&mode=" + mode);
521: Connection con = null;
522: con=(Connection)connections.get(startFile.getAbsolutePath());
523: if(con==null)
524: {
525: con=new Connection(httpCon);
526: connections.put(startFile.getAbsolutePath(),con);
527: } else
528: con.url=httpCon;
529: OutputStream mout = con.out; //con.getOutputStream();
530: */
531: // dialog.progress.setValue((int) (((double) readCount / (double) length) * 100.0));
532: // count = filecount
533: Connection conPost = null;
534: System.out.println("hostURL "+url);
535: if(!runningAsApplet)
536: conPost=new Connection( new URL("http://core.rz-berlin.mpg.de/edoctest/oi.epl"));
537: else
538: conPost=new Connection( new URL(url+"/oi.epl"));
539:
540: // new URL("http://localhost:8080/examples/servlet/rogo/"));
541: conPost.ses=ses;
542: conPost.dialog=dialog;
543: Bundle.Document doc=(Bundle.Document)bundle.documents.get(count);
544: System.out.println(doc.title);
545: conPost.post(file,"new",doc.docID+"",doc.title,doc.locator,doc.comment);
546:
1.2 rogo 547: // conPost.post(new File("./test2.jpg"),picture.elementAt(i).toString(),artist.elementAt(i).toString(),source.elementAt(i).toString());
1.3 rogo 548: System.out.println(getMD5(conPost.md));
1.1 rogo 549: dialog.progress.setValue(100);
550: count++;
551: return count;
552: }
553: private static int writeStream(File startFile,Bundle bundle, UploadInfo dialog) throws Exception
554: {
555: int count = 1,fileCount = bundle.documents.size();
556: int index = startFile.getAbsolutePath().lastIndexOf(File.separator);
557:
558:
1.2 rogo 559: String path = startFile.getAbsolutePath().substring(0,index+1);
560: System.out.println(path);
561: mode = "new";
562: boolean newVersionforAll = false, keepAllFiles = false;
1.3 rogo 563: Vector list=new Vector();Vector docs=new Vector();Bundle.Document refDoc=null;
1.1 rogo 564: for(int k=0;k<fileCount;++k)
565: {
566: Bundle.Document doc = (Bundle.Document)bundle.documents.elementAt(k);
1.3 rogo 567: if((refDoc=(Bundle.Document)bundleRef.docsLocator.get(doc.locator))!=null)
568: {
569: if(checkForNewFile(path,doc,refDoc))
570: {
571: list.addElement(doc.fileName);
572: docs.addElement(doc);
573: }
574: } else docs.addElement(doc);
1.1 rogo 575: }
576:
1.3 rogo 577: for(int k=0;k<docs.size();++k)
1.1 rogo 578: {
1.3 rogo 579: Bundle.Document doc = (Bundle.Document)docs.elementAt(k);
1.1 rogo 580:
581: String response = "";
582: dialog.title.setText("Uploading " + path+doc.fileName);
583: dialog.progress.setValue(0);
584: String fileName = doc.fileName+ " " + ((doc.size > 1000000) ? (doc.size / 1048576) + " MByte" : doc.size + " Bytes");
585: dialog.file.setText(fileName);
586: dialog.status.setText(count + " of " + fileCount + ((fileCount > 1) ? " files" : " file"));
587: //dialog.pack();
588: //dialog.validate();
589: if (dialog.isVisible())
590: dialog.repaint();
591: else
592: dialog.show();
1.3 rogo 593: if(bundleRef.docsLocator.get(doc.locator)!=null)
1.1 rogo 594: {
1.2 rogo 595: if(!newVersionforAll&&!keepAllFiles)
1.1 rogo 596: {
1.2 rogo 597: Object[] options = new Object[] { "Cancel","Replace existing files", "Keep existing files" };
598: Object[] options2 = new Object[] { "Cancel","Replace existing file", "Keep existing file" };
1.1 rogo 599:
1.2 rogo 600: int option = (list.size()>1) ? showDialog("Warning : several files exist on the server \n Press show list to see the list! \n What do you want to do?", "several Files exist!", options,list):showDialog("Warning : file "+doc.fileName+" exists on the server \n What do you want to do?", " File "+doc.fileName+" exists!", options2);
601: ;
602: if(option == 0) break;// mode = "old";
1.1 rogo 603: if(option == 1)
604: {
605: mode ="old";
1.2 rogo 606: newVersionforAll = true;
607: keepAllFiles = false;
1.1 rogo 608: }
609: if(option == 2)
610: {
611: count++;
612: System.out.println("Heh Document exists!"+ doc);
613: System.out.println("Skipping");
1.2 rogo 614: newVersionforAll = false;
615: keepAllFiles = true;
1.1 rogo 616: continue;
617: }
618: }
1.3 rogo 619: refDoc= (Bundle.Document) bundleRef.docsLocator.get(doc.locator);
1.1 rogo 620: doc.docID=refDoc.docID;
1.2 rogo 621: if(keepAllFiles)
622: {
623: count++;
624: continue;
625: }
626: //count++;
1.1 rogo 627: // System.out.println("Heh Document exists!"+ doc);
628: // System.out.println("Skipping");
629: // continue;
630: } else mode ="new";
631: Connection conPost = null;
632: if(!runningAsApplet)
633: conPost=new Connection( new URL("http://core.rz-berlin.mpg.de/edoctest/oi.epl"));
634: else
635: conPost=new Connection( new URL(url+"/oi.epl"));
636:
637: // new URL("http://localhost:8080/examples/servlet/rogo/"));
638: conPost.ses=ses;
639: conPost.dialog=dialog;
640: conPost.post(path,doc,mode);
1.3 rogo 641: String md5=getMD5(conPost.md);
1.2 rogo 642: System.out.println("MD5 is equal ?"+doc.md5cs.equals(md5)+" doc_md5 "+doc.md5cs+" md5 "+md5);
1.1 rogo 643: if(!doc.md5cs.equals(md5))
644: {
645: Object[] options = { "Retry", "Cancel" };
646: int option = showDialog("Transfer failed! \n What do you want to do?", "Transfer failed ", options);
647: if(option == 0)
648: {
649: if(!runningAsApplet)
650: conPost=new Connection( new URL("http://core.rz-berlin.mpg.de/edoctest/oi.epl"));
651: else
652: conPost=new Connection(new URL(url+"/oi.epl"));
653: conPost.ses=ses;
654: conPost.dialog=dialog;
655: conPost.post(path,doc,mode);
1.3 rogo 656: md5=getMD5(conPost.md);
657: if(!doc.md5cs.equals(md5)) showDialog("Transfer failed","Transfer failed again! ");
1.1 rogo 658: }
659: } // System.out.println(getMD5(md));
660: dialog.progress.setValue(100);
661: count++;
662: }
1.3 rogo 663: bundle.exportToXML(new File(path+"/temp.xml"));
1.1 rogo 664: return count;
665: }
666:
667: public static String getMD5(MessageDigest md) throws Exception
668: {
669: byte[] bytes = md.digest();
670: // System.out.println("digest " + bytes.length);
671: StringBuffer sb = new StringBuffer();
672: int decValue;
673: for (int i = 0; i < bytes.length; i++)
674: {
675: String hexVal = Integer.toHexString(bytes[i] & 0xFF);
676: if (hexVal.length() == 1)
677: hexVal = "0" + hexVal; // put a leading zero
678: sb.append(hexVal);
679: }
680: return sb.toString();
681: }
682: public static String getSHA(byte[] b) throws Exception
683: {
684: MessageDigest md = MessageDigest.getInstance("SHA");
685: md.update(b, 0, b.length);
686: //System.out.println("digest");
687: byte[] bytes = md.digest();
688: StringBuffer sb = new StringBuffer();
689: int decValue;
690: for (int i = 0; i < bytes.length; i++)
691: {
692: String hexVal = Integer.toHexString(bytes[i] & 0xFF);
693: if (hexVal.length() == 1)
694: hexVal = "0" + hexVal; // put a leading zero
695: sb.append(hexVal);
696: }
697:
698: return sb.toString();
699: }
1.3 rogo 700: public static boolean checkForNewFile(String path,Bundle.Document doc,Bundle.Document refDoc) throws Exception
701: {
702: String name = doc.fileLink.trim().startsWith("file://") ?doc.fileLink.trim().substring(7):doc.fileLink.trim();
1.4 ! rogo 703: //System.out.println(name);
1.3 rogo 704: boolean isNewFile=false;
705: String filePath = name.startsWith("/") ? name:path+name;
1.4 ! rogo 706: File file = new File(filePath);
! 707: if(!file.exists())
! 708: {
! 709:
! 710: showErrorDialog("Warning \n"+filePath +" does not exist !","Warning file does not exist !");
! 711: return false;
! 712: }
! 713: if(file.isDirectory()) return false;
1.3 rogo 714: FileInputStream f=new FileInputStream( filePath);
715: int length=f.available();
716: if(length!=refDoc.size) isNewFile=true;
717: else
718: {
719:
720: //new File(filePath).setLastModified(System.currentTimeMillis()-690000000L);
721: Date actualTime = new Date(new File(filePath).lastModified());
722: Date modified = new Date(doc.modified);//new File(filePath).lastModified());
723: // System.out.println("actual Date "+actualTime);
724: // System.out.println("Date file modified "+modified);
725: // System.out.println("Time difference in minutes "+((actualTime.getTime()-modified.getTime())/60000L));
726: // if file has been modified longer than 10 hours do not compare md5 --> file is not newer
1.4 ! rogo 727: if(actualTime.getTime()==modified.getTime())
! 728: {
! 729: f.close();
! 730: return false;
! 731: }
! 732:
1.3 rogo 733: MessageDigest md = MessageDigest.getInstance("MD5");
734: byte[] b=new byte[512000];
735: int readCount =0;
736: while (readCount < length)
737: {
738: if (readCount + b.length > length)
739: f.read(b, 0, length - readCount); // mout.flush();
740: else
741: f.read(b);
742: if (readCount + b.length > length)
743: {
744: md.update(b, 0, length - readCount);
745: }
746: else
747: {
748: md.update(b, 0, b.length);
749: }
750: readCount += b.length;
751: }
752: isNewFile = !getMD5(md).equals(refDoc.md5cs);
753:
754: }
1.4 ! rogo 755: // close file
! 756: f.close();
! 757: if(isNewFile)
! 758: System.out.println(name+" "+refDoc.fileName);
! 759: // System.out.println("is new file ? "+isNewFile+" length is equal ?"+(length==refDoc.size));
1.3 rogo 760: return isNewFile;
761: }
1.4 ! rogo 762: public static boolean checkForFileDownloaded(String path,Bundle.Document doc,Bundle.Document refDoc) throws Exception
! 763: {
! 764: String name = doc.fileLink.trim().startsWith("file://") ?doc.fileLink.trim().substring(7):doc.fileLink.trim();
! 765: //System.out.println(name);
! 766: boolean isNewFile=false;
! 767: String filePath = name.startsWith("/") ? name:path+name;
! 768: File file = new File(filePath);
! 769: if(!file.exists())
! 770: {
! 771: refDoc.downloadAgain = true;
! 772: return true;
! 773: }
! 774: if(file.isDirectory()) return false;
! 775: FileInputStream f=new FileInputStream( filePath);
! 776: int length=f.available();
! 777: if(length!=refDoc.size)
! 778: {
! 779: // System.out.println(doc.fileName+" "+refDoc.fileName+" "+doc.size+" "
! 780: // +refDoc.size+" "+length);
! 781: refDoc.downloadAgain = doc.size>length;
! 782: isNewFile = true;
! 783: }
! 784: else
! 785: {
! 786: isNewFile = !doc.md5cs.equals(refDoc.md5cs);
! 787: }
! 788:
! 789: f.close();
! 790: if(isNewFile)
! 791: System.out.println(name+" "+refDoc.fileName);
! 792: // System.out.println("is new file ? "+isNewFile+" length is equal ?"+(length==refDoc.size));
! 793:
! 794: return isNewFile;
! 795: }
! 796:
1.1 rogo 797: public static String convertUml(String newName)
798: {
799: StringBuffer alterMe = new StringBuffer(newName.trim());
800: int length = alterMe.length();
801: int j = 0;
802: while (j < length)
803: { //if(Character.isSpaceChar(alterMe.charAt(j)))
804: // alterMe.setCharAt(j,'_');
805: if (alterMe.charAt(j) == ' ')
806: {
807: alterMe.setCharAt(j, '%');
808: alterMe.insert(j + 1, "20");
809: length = length + 2;
810: }
811: /* if(Character.isSpaceChar(alterMe.charAt(j))
812: alterMe.setCharAt(j,'_');
813: */
814: ++j;
815: }
816: return alterMe.toString();
817: }
818: public static class UploadInfo extends JDialog
819: {
820: JLabel file = new JLabel(" ");
821: JLabel status = new JLabel(" ");
822: JLabel title = new JLabel(" ");
823: JPanel content = new JPanel();
824: JPanel titlePanel = new JPanel();
825: JPanel labelPanel = new JPanel();
826: JPanel statusPanel = new JPanel();
827: JPanel buttonPanel = new JPanel();
828:
829: JProgressBar progress = new JProgressBar();
830: JButton cancel = new JButton("Cancel");
831: Thread thread;
832: public UploadInfo()
833: {
834:
835: content = new JPanel(true);
836: //content.setBorder(BorderFactory.createRaisedBevelBorder());
837: content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
838: title = new JLabel("Uploading " + startFile);
839: title.setHorizontalTextPosition(title.CENTER);
840: titlePanel.add(title);
841: buttonPanel.add(cancel);
842: // content.add(titlePanel);
843: content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
844: content.add(labelPanel);
845: content.add(new JLabel(""));
846: content.add(progress);
847: content.add(statusPanel);
848: content.add(buttonPanel);
849: content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
850: labelPanel.add(file);
851: statusPanel.add(status);
852: getContentPane().add(titlePanel, "North");
853: getContentPane().add(content, "Center");
854: cancel.addActionListener(new ActionListener()
855: {
856: public void actionPerformed(ActionEvent e)
857: {
858: setVisible(false);
859: thread.stop();
860: }
861:
862: });
863: pack();
864:
865: }
866:
867: }
868: static class Update
869: {
870: boolean value = false;
871: public Update()
872: {
873: value = false;
874: }
875: }
876: public static int showDialog(String message, String title, Object[] options)
877: {
878: int option = JOptionPane.showOptionDialog(null, message, title, JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]);
879: return option;
880:
881: }
882: public static int showDialog(String message, String title, Object[] options,Vector fileList)
883: {
1.2 rogo 884: JOptionPane pane = new JOptionPane( message, JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]);
885: pane.setMessageType(JOptionPane.WARNING_MESSAGE); // Configure
886: final JDialog dialog = pane.createDialog(null, title);
887: JList list=null;
1.1 rogo 888: if(fileList==null)
889: list= new JList(new String[]{"click","here","test","bla","world","hello"});
1.2 rogo 890: else list = new JList(fileList);
1.3 rogo 891:
1.2 rogo 892: JScrollPane scpane = new JScrollPane(list);
893: scpane.setPreferredSize(new Dimension(150,150));
894:
895: JLabel label = new JLabel("Files to be updated : ");
896: label.setPreferredSize(new Dimension(150,30));
897: final JPanel panel = new JPanel();
898: panel.setLayout(new BorderLayout());
899: panel.add(label,"North");
900: panel.add(scpane,"Center");
901: JButton showList= new JButton("show List");
902: showList.addActionListener(new ActionListener()
903: {
904: public void actionPerformed(ActionEvent e)
905: {
906: JDialog window = new JDialog(dialog);
907: window.getContentPane().add(panel);
908: window.pack();
909: window.show();
910: }
911: });
912: JPanel buttonPanel = new JPanel();
913: buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.Y_AXIS));
914: buttonPanel.add(Box.createRigidArea(new Dimension(0,30)));
915: buttonPanel.add(showList);
916: dialog.getContentPane().add(buttonPanel,"East");
917: dialog.pack();
918: dialog.show();
1.1 rogo 919: Object selectedValue = pane.getValue();
1.2 rogo 920: if(selectedValue == null)
921: return 2;
922: //If there is not an array of option buttons:
923: if(options == null) {
924: if(selectedValue instanceof Integer)
925: return ((Integer)selectedValue).intValue();
926: return 2;
927: }
928: //If there is an array of option buttons:
929: for(int counter = 0, maxCounter = options.length;counter < maxCounter; counter++)
930: {
931: if(options[counter].equals(selectedValue))
932: return counter;
933: }
934: return 2;
935:
1.1 rogo 936: }
937:
938: public static void showDialog(String message, String title)
939: {
940: JOptionPane.showMessageDialog(null, message, title, JOptionPane.PLAIN_MESSAGE);
941:
942: }
943: public static void showErrorDialog(String message, String title)
944: {
945: JOptionPane.showMessageDialog(null, message, title, JOptionPane.ERROR_MESSAGE);
946: }
947:
948:
949:
950: // end applet code
951:
952: public static StringBuffer readChunked(Connection conTest) throws Exception
953: {
954: InputStream r= conTest.in;
955: //InputStreamReader r= new InputStreamReader(new FileInputStream("FMPro.xml"),"UTF-8");
956: //InputStreamReader r=// new InputStreamReader(new URL(fileMakerTest).openStream(),"UTF-8");
957: //new InputStreamReader(conTest.in,"UTF-8");
958: //while(conTest.in.available()==0);
959: //u.openStream();
960: //InputStream r = new InputStream(f);
961: StringBuffer sb = new StringBuffer();
962: int c,countC=0,limit=conTest.in.available();
963: // r.skip(211);
964: String response = conTest.getResponseMessage();
965: String lowerCase= response.toLowerCase();
966: int index =lowerCase.indexOf("charset");
967: int index2 =lowerCase.indexOf("=",index);
968: int index3 =lowerCase.indexOf("\r",index2);
969: String charset=(index>0) ? response.substring(index2+1,index3):"";
970: charset="";//charset.toUpperCase();
971: System.err.println(response);
972: if(lowerCase.indexOf("chunked")<0)
973: {
974: ByteArrayOutputStream local=new ByteArrayOutputStream();
975: while(r.available()==0);
976: System.err.println(r.available());
977: while ((c = r.read()) != -1)
978: {
979: byte b=(byte)c;
980: local.write(b);
981: if(debug)
982: System.out.print((char)c);
983: }
984: if(charset!="")
985: sb.append(local.toString(charset));
986: else
987: sb.append(local.toString());
988: if(debug)
989: System.out.print(sb);
990: return sb;
991: }
992:
993: // read chunk size
994: while ((c = r.read()) != -1)
995: {
996: ++countC;
997: char ch=(char)c;
998:
999: if(Character.digit(ch, 16) != -1)
1000: sb.append((char)c);
1001: if(ch=='\r')
1002: {
1003: ch=(char)r.read();
1004: if( ch=='\n')
1005: break;
1006: }
1007: // System.out.print((char)c);
1008: }
1009: int bufSize=Integer.parseInt(sb.toString().trim(), 16);
1010:
1011: System.err.println("chunk size "+Integer.parseInt(sb.toString().trim(), 16)+" bytes"+" limit "+limit);
1012: //sb.append((char)r.read());
1013: // sb.append((char)r.read());
1014: sb=new StringBuffer();//.delete(0,sb.length());
1015: byte[] b=new byte[bufSize];
1016: countC=0;
1017: StringBuffer localBuff=new StringBuffer();
1018: while (true)
1019: {
1020: // sb.append(" new Chunk "+r.available()+" \r\n ");
1021: int readCount = 0;
1022: int available = 0;
1023: int readSize = b.length; int loop=0;
1024: while (readCount < bufSize)
1025: {
1026: available=r.available();
1027:
1028: if(available>=bufSize)
1029: readSize=bufSize;
1030: else
1031: readSize=available;
1032:
1033: if(readCount + readSize > bufSize)
1034: {
1035: readSize = r.read(b, readCount, bufSize - readCount); // mout.flush();
1036:
1037: }
1038: else
1039: {
1040: readSize = r.read(b,readCount,readSize);
1041: }
1042: if(loop>=200) throw new Error("Connection timed out");
1043: if(readSize==0)
1044: {
1045: long time = System.currentTimeMillis();
1046: while(System.currentTimeMillis()-time<100);
1047: } else loop=0;
1048:
1049: if(debug)
1050: System.out.println(++loop+" read "+readCount+" bytes"+" readSize "+readSize);
1051: readCount+=readSize;
1052:
1053: }
1054:
1055:
1056: //while(r.available()<bufSize); // critical if connection closed
1057: // r.read(b,0,bufSize);
1058: //System.err.println(r.available());
1059: r.read();r.read();
1060: if(charset!="")
1061: sb.append(new String(b,0,bufSize,charset));
1062: else
1063: sb.append(new String(b,0,bufSize));
1064: if(debug)
1065: System.out.println(new String(b,0,bufSize));
1066: while ( (c = r.read()) != -1)
1067: {
1068: // ++countC;
1069: char ch=(char)c;
1070: //System.err.println("read lf "+(ch=='\r')+" or cr "+( ch=='\n')+" "+(Character.digit(ch, 16) == -1));
1071: //if((ch!='\r')&&( ch!='\n')) System.err.println("read ch "+" "+ch+" "+Character.isSpace(ch));
1072: if(Character.digit(ch, 16) != -1)
1073: localBuff.append(ch);
1074: if(ch=='\r')
1075: {
1076: ch=(char)r.read();
1077: if( ch=='\n')
1078: break;
1079: }
1080: }
1081: if(debug)
1082: System.out.println("chunk size "+localBuff);
1083: if(localBuff.length()>0)
1084: {
1085: // System.err.println("new chunk size "+Integer.parseInt(localBuff.toString().trim(), 16)+" bytes");
1086: // System.err.println((char)r.read());
1087: bufSize=Integer.parseInt(localBuff.toString().trim(), 16);
1088: //localBuff.delete(0,localBuff.length());
1089: localBuff=new StringBuffer();
1090: } // else bufSize=0;
1091: ++countC;
1092: // sb.append("new Chunk"+r.available()+"\r\n ");
1093: if(bufSize==0)//(bufSize))
1094: break;
1095: // System.err.println(" in Chunk "+bufSize+" buffers used "+(countC)+" \r\n ");
1096: // // System.out.print((char)c);
1097: }
1098: // System.out.println(sb);
1099: return sb;
1100: }
1.3 rogo 1101: public static void writeChunked(Connection conTest,File f,int count,int fileCount,int fileSize,UploadInfo dialog) throws Exception
1102: {
1103: InputStream r= conTest.in;
1104: FileOutputStream file_out = new FileOutputStream(f);
1105: BufferedOutputStream fout = new BufferedOutputStream(file_out);
1106: int c,countC=0,limit=conTest.in.available();
1107: // r.skip(211);
1108: String response = conTest.getResponseMessage();
1109: String lowerCase= response.toLowerCase();
1110: int index =lowerCase.indexOf("charset");
1111: int index2 =lowerCase.indexOf("=",index);
1112: int index3 =lowerCase.indexOf("\r",index2);
1113: String charset=(index>0) ? response.substring(index2+1,index3):"";
1114: charset="";//charset.toUpperCase();
1115: System.err.println(response);
1116: dialog.title.setText("Downloading to " + f.toString());
1117: dialog.progress.setValue(0);
1118: MessageDigest md =conTest.md;
1119: md.reset();
1120: String fileName = f.getName()+ " " + ((fileSize > 1000000) ? (fileSize / 1048576) + " MByte" : fileSize+ " Bytes");
1121: dialog.file.setText(fileName);
1122: dialog.status.setText(count + " of " + fileCount + ((fileCount > 1) ? " files" : " file"));
1123: //dialog.pack();
1124: //dialog.validate();
1125: if (dialog.isVisible())
1126: dialog.repaint();
1127: else
1128: dialog.show();
1129:
1130: if(lowerCase.indexOf("chunked")<0)
1131: {
1132: while(r.available()==0);
1133: System.err.println(r.available());
1134: while ((c = r.read()) != -1)
1135: {
1136: byte b=(byte)c;
1137: fout.write(b);
1138: //md.update(b, 0, b.length);
1139: if(debug)
1140: System.out.print((char)c);
1141: }
1142: /*
1143: if(charset!="")
1144: fout.write(local.toString(charset));
1145: else
1146: fout.write(local.toString());
1147: */
1148: //if(debug)
1149: // System.out.print(sb);
1150: //return sb;
1151: }
1152: StringBuffer sb = new StringBuffer();
1153: // read chunk size
1154: while ((c = r.read()) != -1)
1155: {
1156: ++countC;
1157: char ch=(char)c;
1158:
1159: if(Character.digit(ch, 16) != -1)
1160: sb.append((char)c);
1161: if(ch=='\r')
1162: {
1163: ch=(char)r.read();
1164: if( ch=='\n')
1165: break;
1166: }
1.4 ! rogo 1167: //System.out.print((char)c);
1.3 rogo 1168: }
1.4 ! rogo 1169: int bufSize=Integer.parseInt(sb.toString().trim(), 16),newBufSize=0;
1.3 rogo 1170:
1171: System.err.println("chunk size "+Integer.parseInt(sb.toString().trim(), 16)+" bytes"+" limit "+limit);
1172: // sb.append((char)r.read());
1.4 ! rogo 1173: // sb.append((char)r.read());
! 1174: sb = new StringBuffer();//.delete(0,sb.length());
1.3 rogo 1175: byte[] b=new byte[bufSize];
1.4 ! rogo 1176: countC=0;int size = 0;
1.3 rogo 1177: StringBuffer localBuff=new StringBuffer();
1178: while (true)
1179: {
1180: // sb.append(" new Chunk "+r.available()+" \r\n ");
1.4 ! rogo 1181: int readCount = 0;
1.3 rogo 1182: int available = 0;
1183: int readSize = b.length; int loop=0;
1.4 ! rogo 1184: while (readCount < bufSize)
1.3 rogo 1185: {
1186: available=r.available();
1187:
1188: if(available>=bufSize)
1189: readSize=bufSize;
1190: else
1191: readSize=available;
1192:
1193: if(readCount + readSize > bufSize)
1194: {
1.4 ! rogo 1195: readSize = r.read(b, readCount, bufSize - readCount);
1.3 rogo 1196: }
1197: else
1198: {
1199: readSize = r.read(b,readCount,readSize);
1200: }
1.4 ! rogo 1201: if(loop>=60)
! 1202: {
! 1203: loop = 0;
! 1204: conTest.socket.close();
! 1205: conTest.reconnect();
! 1206: conTest.get();
! 1207: r= conTest.in;
! 1208: file_out = new FileOutputStream(f);
! 1209: fout = new BufferedOutputStream(file_out);
! 1210: countC=0;size=0;readCount= 0;conTest.md.reset();
! 1211: response = conTest.getResponseMessage();
! 1212: System.out.println(response);
! 1213: while ((c = r.read()) != -1)
! 1214: {
! 1215: ++countC;
! 1216: char ch=(char)c;
! 1217:
! 1218: if(Character.digit(ch, 16) != -1)
! 1219: sb.append((char)c);
! 1220: if(ch=='\r')
! 1221: {
! 1222: ch=(char)r.read();
! 1223: if( ch=='\n')
! 1224: break;
! 1225: }
! 1226: // System.out.print((char)c);
! 1227: }
! 1228: bufSize=Integer.parseInt(sb.toString().trim(), 16);
! 1229: }
! 1230: //throw new Error("Connection timed out");
! 1231: if(readSize==0)
! 1232: {
! 1233: long time = System.currentTimeMillis();
! 1234: while(System.currentTimeMillis()-time<100);
! 1235: } else loop=0;
! 1236:
! 1237: //if(debug)
! 1238: // System.out.println(++loop+" read "+readCount+" bytes"+" readSize "+readSize);
1.3 rogo 1239: readCount+=readSize;
1240:
1.4 ! rogo 1241: }
1.3 rogo 1242:
1243: //while(r.available()<bufSize); // critical if connection closed
1244: // r.read(b,0,bufSize);
1245: //System.err.println(r.available());
1.4 ! rogo 1246: char ch2=(char)r.read();
! 1247: // if(ch2=='\r') System.out.print("CR");
! 1248: ch2=(char)r.read();
! 1249: // if(ch2=='\n') System.out.println("LF");
1.3 rogo 1250: // if(debug)
1251: // System.out.println(new String(b,0,bufSize));
1252: while ( (c = r.read()) != -1)
1253: {
1254: // ++countC;
1255: char ch=(char)c;
1256: //System.err.println("read lf "+(ch=='\r')+" or cr "+( ch=='\n')+" "+(Character.digit(ch, 16) == -1));
1257: //if((ch!='\r')&&( ch!='\n')) System.err.println("read ch "+" "+ch+" "+Character.isSpace(ch));
1.4 ! rogo 1258: // System.out.print(ch);
1.3 rogo 1259: if(Character.digit(ch, 16) != -1)
1260: localBuff.append(ch);
1261: if(ch=='\r')
1262: {
1263: ch=(char)r.read();
1264: if( ch=='\n')
1265: break;
1266: }
1267: }
1268: if(localBuff.length()>0)
1269: {
1270: // System.err.println("new chunk size "+Integer.parseInt(localBuff.toString().trim(), 16)+" bytes");
1271: // System.err.println((char)r.read());
1.4 ! rogo 1272: newBufSize=Integer.parseInt(localBuff.toString().trim(), 16);
! 1273: //if(bufSize==3041) bufSize=3040;
! 1274: if(debug)
! 1275: System.out.println("chunk size "+Integer.parseInt(localBuff.toString().trim(), 16)+" "+size);
! 1276:
1.3 rogo 1277: //localBuff.delete(0,localBuff.length());
1278: localBuff=new StringBuffer();
1279: } // else bufSize=0;
1.4 ! rogo 1280: if((char)b[bufSize-1]=='\n')
! 1281: {
! 1282: if(debug)
! 1283: System.out.println("LF found "+((char)b[bufSize-1]=='\n'));
! 1284: if(newBufSize==0) bufSize=bufSize-1;
! 1285:
! 1286: }
! 1287: fout.write(b,0,bufSize);
! 1288: md.update(b, 0, bufSize);
! 1289: size += bufSize;
! 1290: bufSize=newBufSize;
! 1291: dialog.progress.setValue((int) (((double) size / (double) fileSize) * 100.0));
! 1292: ++countC;
! 1293: if(bufSize==0)
1.3 rogo 1294: break;
1295: // System.err.println(" in Chunk "+bufSize+" buffers used "+(countC)+" \r\n ");
1296: // // System.out.print((char)c);
1297: }
1298: // System.out.println(sb);
1299: fout.flush();
1300: fout.close();
1301:
1302: file_out.close();
1303: //return sb;
1304: }
1305:
1.1 rogo 1306: public static Hashtable getMetaData(String url)
1307: {
1308: Hashtable data=new Hashtable();
1309: Vector artist=new Vector();
1310: Vector picture=new Vector();
1311: Vector idnr = new Vector();
1312: Vector source = new Vector();
1313: data.put("artist",artist);
1314: data.put("picture",picture);
1315: data.put("IDNR",idnr);
1316: data.put("source",source);
1317: try
1318: {
1319: String fileMakerTest="http://localhost/FMRes/FMPro?-db=Bildarchiv%20Daston&-layID=69&-token=25&-max=1000&-format=-dso_xml&-mode=browse&-findall";
1320: 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";
1321: //Connection con= new Connection(new URL("http://core.rz-berlin.mpg.de:80/edoctest/adm.epl"));
1322: //String ses=con.getSessionID("name=root&passwd=&mode=verifylogin");
1323:
1324: Connection conTest=new Connection(new URL(fileMakerTest));//new URL(url));
1325: // conTest.ses=ses;
1326: conTest.get();
1327: StringBuffer sb=readChunked(conTest);
1328: if(debug)
1329: System.out.println("file "+sb);
1330: // parse string and build document tree
1331: Node root = new Xparse().parse(sb.toString());
1332: Vector contents=root.index.v;
1333: for (int i=0;i<contents.size();++i)
1334: {
1335: Node n=(Node)contents.elementAt(i);
1336: if(n.type.equals("element"))
1337: {
1338: // System.out.println("tag "+n.name+" with contents ");
1339: // System.out.println(n.getCharacters());
1340: if(n.name.indexOf("artist")>=0) artist.addElement(n.getCharacters());
1341: if(n.name.indexOf("picture")>=0) picture.addElement(n.getCharacters());
1342: if(n.name.indexOf("IDNR")>=0) idnr.addElement(n.getCharacters());
1343: if(n.name.indexOf("source")>=0) source.addElement(n.getCharacters());
1344: //contents=n.contents.v;i=0;
1345: }
1346: }
1347: }catch(Exception e8) { e8.printStackTrace(); }
1348: return data;
1349: }
1350:
1351: public static Bundle getBundle(File f)
1352: {
1353: File xmlFile=null;
1354: Bundle bundle=new Bundle();
1355: if(f.isDirectory())
1356: {
1357: String[] files=f.list();
1358: for(int j=0;j<files.length;++j)
1359: {
1360: if(files[j].endsWith("xml"))
1361: {
1362: xmlFile=new File(f.getAbsolutePath()+"/"+files[j]);
1363: break;
1364: }
1365: }
1366: } else xmlFile=f;
1367: try
1368: {
1369: // read XML Metadata from a file
1370: FileReader r=new FileReader(xmlFile);
1.4 ! rogo 1371: BufferedReader buffr = new BufferedReader(r);
1.1 rogo 1372: StringBuffer sb=new StringBuffer();
1373: int c=0;
1.4 ! rogo 1374: while ((c = buffr.read()) != -1)
1.1 rogo 1375: {
1376: char ch=(char)c;
1377: sb.append(ch);
1378: // System.out.print((char)c);
1379: }
1380: addToBundle(bundle,sb);
1381: } catch(Exception e) { e.printStackTrace();}
1382:
1383:
1384: return bundle;
1385: }
1386: public static Bundle getBundle(String url)
1387: {
1388: Bundle bundle=new Bundle();
1389:
1390: try
1391: {
1392: if(url=="") url="http://core.rz-berlin.mpg.de:80/edoctest/oi.epl?mm=list&grp=90";
1393: // read XML document from URL into a string
1394: URL u = new URL(url);
1395: // FileReader r=new FileReader();
1396: long time = System.currentTimeMillis();
1397:
1398: //Connection con= new Connection(new URL("http://core.rz-berlin.mpg.de:80/edoctest/adm.epl"));
1399: // String ses=con.getSessionID("name=root&passwd=edoctest&mode=verifylogin");
1400: // con.socket.close();
1401: Connection conTest=new Connection(new URL(url));
1402: conTest.ses=ses;
1403: conTest.get();
1404: StringBuffer sb=readChunked(conTest);
1405: // sb.delete( sb.toString().indexOf("<rt>"),sb.length());
1406: //System.out.println(sb);
1407: String rt =addToBundle(bundle,sb);
1408: StringBuffer sb2=null;
1409: int index=sb.toString().indexOf("<edoc>",3)+6,index2=0;
1410: //for(int i=20;i<260;i=i+20)
1411:
1412:
1413: while(true)
1414: {
1415: if(rt.equals("finished")) break;
1416: conTest.url=new URL(url+"&rt="+rt);
1417: conTest.get();
1418: sb2=readChunked(conTest);
1419: //sb2.delete(0,index);
1420: // index2=sb2.toString().indexOf("<rt>",index);
1421: // sb2.delete(index2,sb2.length());
1422: //sb.append(sb2);
1423: rt=addToBundle(bundle,sb2);
1424: }
1425: //sb.append("</edoc>");
1426: //System.out.println(sb);
1427: long timeEnd = System.currentTimeMillis();
1428: System.err.println("time to get bundle data "+(timeEnd-time));
1429:
1430: /*
1431: // read XML Metadata from a file
1432: FileReader r=new FileReader("list7.xml");
1433: sb=new StringBuffer();
1434: // String response= conTest.getResponseMessage();
1435: int c=0;
1436: while ((c = r.read()) != -1)
1437: {
1438: char ch=(char)c;
1439: sb.append(ch);
1440: // System.out.print((char)c);
1441: }
1442: */
1443: String data=sb.toString().length()+"";
1444: // System.out.println(new String(sb.toString().getBytes(),"UTF-8"));
1445: // System.out.println(sb.toString());
1446: //addToBundle(bundle,sb);
1447: // System.out.println(sb.toString());
1448: // System.exit(0);
1.4 ! rogo 1449: conTest.socket.close();
1.1 rogo 1450: } catch(Exception e) {e.printStackTrace();}
1451: return bundle;
1452: }
1453: public static String addToBundle(Bundle bundle,StringBuffer sb)
1454: {
1455: boolean finished = false;
1456: String rtTag="finished";
1457: // parse string and build document tree
1458: Node root = new Xparse().parse(sb.toString());
1459: /*
1460: Vector contents=root.index.v;
1461: for (int i=0;i<contents.size();++i)
1462: {
1463: Node n=(Node)contents.elementAt(i);
1464: if(n.type.equals("element"))
1465: {
1466: // System.out.println("tag "+n.name+" with contents ");
1467: // System.out.println(n.getCharacters());
1468: //contents=n.contents.v;i=0;
1469: }
1470: // System.out.println(n.type);
1471:
1472: }
1473: */
1474: Node tempNode=root.find(rootNode,new int[] {1});
1475: if(tempNode==null) return rtTag;
1476: int count=1;
1477: /*
1478: for(int i=0;i<tempNode.contents.v.size();++i)
1479: {
1480: // System.out.println(((Node)tempNode.contents.v.elementAt(i)).attributes+" "+i);
1481: }*/
1482: if(tempNode.contents.v.size()==0) return rtTag;
1483: Node notNull=null;
1484: Node rtNode=root.find(rootNode+"/rt",new int[] {1,1});
1485: rtTag=(rtNode==null) ? "finished":rtNode.getCharacters();
1486: System.out.println("rt tag is "+ rtTag);
1487: int length=0;//(tempNode.contents.length()-1)/2;
1488: for(int i=0;i<tempNode.contents.v.size();++i) {
1489: Node node=(Node)tempNode.contents.v.elementAt(i);
1490: if(node.type.equals("element"))
1491: if(node.name.equals("doc"))length++;
1492: // System.out.println(((Node)tempNode.contents.v.elementAt(i)).attributes+" "+i);
1493: }
1494: if(length==0) rtTag="finished";
1495: while(count<=length)
1496: {
1497: //System.out.println(count+" "+length);
1498: tempNode=root.find(rootNode+"/doc",new int[] {1,count});
1499: if(tempNode==null)
1500: {
1501: rtTag="finished";
1502: break;
1503: }
1504: Bundle.Document doc = new Bundle.Document();
1505: Hashtable attributes=tempNode.attributes;
1506: int docID=0;
1507: int ver=0;
1508: if(attributes != null)
1509: {
1510: docID=Integer.parseInt((String)attributes.get("id"));
1511: ver=Integer.parseInt((String)attributes.get("ver"));
1512: doc.addData("docID",(String)attributes.get("id"));
1513: doc.addData("ver",(String)attributes.get("ver"));
1514: }
1515: bundle.docs.put(new Integer(docID),doc);
1516: bundle.documents.addElement(doc);
1517: // System.out.println("id " +docID+" ver "+ver);
1518: Node fileNode=root.find(rootNode+"/doc/file",new int[] {1,count,1});
1519: attributes=(fileNode==null)? null:fileNode.attributes;
1520: int fileID=0;
1521: int fileVer=0;
1522: if(attributes != null)
1523: {
1524: fileID=Integer.parseInt((String)attributes.get("id"));
1525: fileVer=Integer.parseInt((String)attributes.get("ver"));
1526: doc.addData("fileID",(String)attributes.get("id"));
1527: doc.addData("fileVer",(String)attributes.get("ver"));
1528: // System.out.println("fileid " +fileID+" ver "+fileVer);
1529: }
1530: // add all Document tags to actual Document
1531: for(int i=0;i<tempNode.contents.v.size();++i)
1532: {
1533: Node node=(Node)tempNode.contents.v.elementAt(i);
1534: if(node.type.equals("element"))
1535: {
1536: //System.out.println(node.name+" "+node.getCharacters()+" "+node.contents.v.size());
1537: if(node.contents.v.size()>1)
1538: {
1539: for(int j=0;j<node.contents.v.size();++j)
1540: {
1541: Node node2=(Node)node.contents.v.elementAt(j);
1542: if(node2.type.equals("element"))
1543: {
1544: doc.addData(node2.name,node2.getCharacters());
1545: //System.out.println(node2.name+" "+node2.getCharacters()+" "+node2.contents.v.size());
1546: }
1547: }
1548: } else doc.addData(node.name,node.getCharacters());
1549: }
1550: }
1551: bundle.docsLocator.put(doc.locator,doc);
1552:
1553: //System.out.println( bundle.docsLocator);//doc.extraTags);
1554: /*
1555: notNull=root.find("edoc/doc/title",new int[]{1,count,1});
1556: String title=(notNull!=null) ? notNull.getCharacters():"missing";
1557: // System.out.println("edoc/doc/title "+title);
1558: notNull=root.find("edoc/doc/comment",new int[]{1,count,1});
1559: String comment = (notNull!=null) ? notNull.getCharacters():"missing";
1560: // System.out.println("edoc/doc/comment "+comment);
1561: notNull =root.find("edoc/doc/placeofevent",new int[]{1,count,1});
1562: String placeofevent = (notNull!=null) ? notNull.getCharacters():"missing";
1563: // System.out.println("edoc/doc/placeofevent "+placeofevent);
1564: notNull=root.find("edoc/doc/locater",new int[]{1,count,1});
1565: String locator=(notNull!=null) ? notNull.getCharacters():"missing";
1566: // System.out.println("edoc/doc/locater "+locator);
1567: notNull = root.find("edoc/doc/file/filename",new int[]{1,count,1,1});
1568: String fileName=(notNull!=null) ? notNull.getCharacters():"missing";
1569: // System.out.println("edoc/doc/file/filename "+fileName);
1570: notNull = root.find("edoc/doc/file/mimetype",new int[]{1,count,1,1});
1571: String mimeType=(notNull!=null) ? notNull.getCharacters():"missing";
1572: // System.out.println("edoc/doc/file/mimetype "+mimeType);
1573: notNull = root.find("edoc/doc/file/md5cs",new int[]{1,count,1,1});
1574: String md5cs = (notNull!=null) ? notNull.getCharacters():"missing";
1575: // System.out.println("edoc/doc/file/md5cs "+md5cs);
1576: notNull=root.find("edoc/doc/file/size",new int[]{1,count,1,1});
1577: int size =(notNull!=null) ? Integer.parseInt(notNull.getCharacters()):0;
1578: // System.out.println("edoc/doc/file/size "+size);
1579: notNull = root.find("edoc/doc/file/filelink",new int[]{1,count,1,1});
1580: String fileLink = (notNull!=null) ? notNull.getCharacters():"missing";
1581: // System.out.println("edoc/doc/file/filelink "+fileLink);
1582: Bundle.Document doc=new Bundle. Document(docID,ver,title,locator,comment,placeofevent,fileID,fileVer,fileName,mimeType,md5cs,size,fileLink);
1583: bundle.docs.put(new Integer(docID),doc);
1584: bundle.documents.addElement(doc);
1585: */
1586: count++;
1587: }
1588: // System.out.println(bundle.docs.size());
1589: return rtTag;
1590: }
1591: public static void getGenre()
1592: {
1593:
1594: try
1595: {
1596: String url="http://core.rz-berlin.mpg.de:80/edoctest/oi.epl?mm=help&sm=genres";
1597: // read XML document from URL into a string
1598: URL u = new URL(url);
1599: // FileReader r=new FileReader();
1600: long time = System.currentTimeMillis();
1601: // debug=true;
1602: Connection conTest=new Connection(new URL(url));
1603: conTest.ses=ses;
1604: conTest.get();
1605: StringBuffer sb=readChunked(conTest);
1606: Bundle.genresId.clear();
1607: Bundle.genresLabel.clear();
1608: Bundle.genresName.clear();
1609: Bundle.genVec.removeAllElements();
1610: getGenreList(sb);
1611: long timeEnd = System.currentTimeMillis();
1612: System.err.println("time to get genre data "+(timeEnd-time));
1613: // Enumeration en = Bundle.genres.keys();
1614: //while(en.hasMoreElements()
1615: if(debug)
1616: {
1617: Collections.sort(Bundle.genVec);
1618: // Bundle.Genre.debug=true;
1619:
1620: for(int i=0;i<Bundle.genVec.size();++i)
1621: System.out.println(Bundle.genresId.get(Bundle.genVec.get(i)));
1622: //System.out.println( Bundle.genres);
1623: }
1.4 ! rogo 1624: conTest.socket.close();
1.1 rogo 1625: } catch(Exception e) {e.printStackTrace();}
1626: }
1627: public static String getGenreList(StringBuffer sb)
1628: {
1629: boolean finished = false;
1630: String rtTag="finished";
1631: // parse string and build document tree
1632: Node root = new Xparse().parse(sb.toString());
1633: /*
1634: Vector contents=root.index.v;
1635: for (int i=0;i<contents.size();++i)
1636: {
1637: Node n=(Node)contents.elementAt(i);
1638: if(n.type.equals("element"))
1639: {
1640: // System.out.println("tag "+n.name+" with contents ");
1641: // System.out.println(n.getCharacters());
1642: //contents=n.contents.v;i=0;
1643: }
1644: // System.out.println(n.type);
1645:
1646: }
1647: */
1648: Node tempNode=root.find(rootNode,new int[] {1});
1649: if(tempNode==null) return rtTag;
1650: int count=1;
1651: /*
1652: for(int i=0;i<tempNode.contents.v.size();++i)
1653: {
1654: // System.out.println(((Node)tempNode.contents.v.elementAt(i)).attributes+" "+i);
1655: }*/
1656: if(tempNode.contents.v.size()==0) return rtTag;
1657: Node notNull=null;
1658: int length=0;
1659: for(int i=0;i<tempNode.contents.v.size();++i) {
1660: Node node=(Node)tempNode.contents.v.elementAt(i);
1661: if(node.type.equals("element"))
1662: if(node.name.equals("genre"))length++;
1663: // System.out.println(((Node)tempNode.contents.v.elementAt(i)).attributes+" "+i);
1664: }
1665: if(length==0) rtTag="finished";
1666: while(count<=length)
1667: {
1668: //System.out.println(count+" "+length);
1669: tempNode=root.find(rootNode+"/genre",new int[] {1,count});
1670: if(tempNode==null)
1671: {
1672: rtTag="finished";
1673: break;
1674: }
1675: Bundle.Genre genre= new Bundle.Genre();
1676: Hashtable attributes=tempNode.attributes;
1677: Integer id=null;
1678: if(attributes != null)
1679: {
1680: genre.id=new Integer((String)attributes.get("id"));
1681: }
1682: for(int i=0;i<tempNode.contents.v.size();++i)
1683: {
1684: Node node=(Node)tempNode.contents.v.elementAt(i);
1685: if(node.type.equals("element"))
1686: {
1687: //System.out.println(node.name+" "+node.getCharacters()+" "+node.contents.v.size());
1688: if(node.contents.v.size()>1)
1689: {
1690: for(int j=0;j<node.contents.v.size();++j)
1691: {
1692: Node node2=(Node)node.contents.v.elementAt(j);
1693: if(node2.type.equals("element"))
1694: {
1695: //genre.addData(node2.name,node2.getCharacters());
1696: //System.out.println(node2.name+" "+node2.getCharacters()+" "+node2.contents.v.size());
1697: }
1698: }
1699: } else genre.addData(node.name,node.getCharacters());
1700: }
1701: }
1702: Bundle.genresId.put(genre.id,genre);
1703: Bundle.genresLabel.put(genre.label.toLowerCase(),genre.id);
1704: Bundle.genresName.put(genre.name.toLowerCase(),genre.id);
1705: Bundle.genVec.addElement(genre.id);
1706: count++;
1707: }
1708: // System.out.println(bundle.docs.size());
1709: return rtTag;
1710: }
1711:
1712: public static void main(String args[])
1713: {
1714: // System.out.println("Bundle for http://core.rz-berlin.mpg.de/edocmike/oi.epl?mm=list&grp=90");
1715: // getBundle("");
1716: // System.out.println("Bundle for http://core.rz-berlin.mpg.de/edocmike/oi.epl?mm=list&grp=89");
1717: // getBundle("http://core.rz-berlin.mpg.de/edoctest/oi.epl?mm=list&grp=136");
1718: // getBundle("http://core.rz-berlin.mpg.de/edoctest/oi.epl?mm=list&grp=136");
1719: runningAsApplet=false;
1.2 rogo 1720: //Object[] options = new Object[] { "Cancel","Replace existing files", "Keep existing files" };
1.1 rogo 1721:
1.2 rogo 1722: // int option = showDialog("Warning : several files exist on the server \n Press show list to see the list! \n What do you want to do?", "Files exist!", options,null);
1723: //System.out.println("User selected "+options[option]);
1724: // System.exit(0); // due to now internet
1.1 rogo 1725: long time = System.currentTimeMillis();
1726: new Upload();
1727: // bundle=getBundle("http://core.rz-berlin.mpg.de/edoctest/oi.epl?mm=list&grp=136&col=11");
1728: url="http://core.rz-berlin.mpg.de/edoctest/";
1729: bundleRef = getBundle(url+"oi.epl?mm=list&grp="+grp+"&col="+col);
1730: getGenre();
1731: //getMetaData("");
1732: // if(true)System.exit(0);
1733: /* Hashtable data=getMetaData("");
1734: //if(true)System.exit(0);
1735: try
1736: {
1737: // old edocmike
1738: Connection con= new Connection(new URL("http://core.rz-berlin.mpg.de:80/edoctest/adm.epl"));
1739: String ses=con.getSessionID("name=root&passwd=&mode=verifylogin");
1740: //("name=dwinter&passwd=e1nste1n&mode=verifylogin");
1741: con.socket.close();
1742: Vector artist=(Vector)data.get("artist");
1743: Vector picture=(Vector)data.get("picture");
1744: Vector idnr=(Vector)data.get("IDNR");
1745: Vector source=(Vector)data.get("source");
1746: Connection conPost=new Connection( new URL("http://core.rz-berlin.mpg.de:80/edoctest/oi.epl"));
1747: // new URL("http://localhost:8080/examples/servlet/rogo/"));
1748: conPost.ses=ses;
1749:
1750: for(int i=135;i<136;++i)//i<artist.size();++i)
1751: {
1752: // System.out.println("artist "+artist.elementAt(i));
1753: // System.out.println("picture nr "+ i +" name "+picture.elementAt(i));
1754: // System.out.println("file" +idnr.elementAt(i));
1755: // System.out.println("source"+source.elementAt(i));
1756: // if(!new File("/Volumes/data/tmp/Bildarchiv-Daston/400/"+idnr.elementAt(i)).exists())
1757: // System.out.println("file "+idnr.elementAt(i) +" does not exist");
1758: // if(idnr.elementAt(i)!=null)
1759: // if(idnr.elementAt(i).toString().indexOf("Ÿ")>=0||idnr.elementAt(i).toString().indexOf("š")>=0||idnr.elementAt(i).toString().indexOf("Š")>=0)
1760: // System.out.println("file "+idnr.elementAt(i) +" contains umlaut ");
1761:
1762: if(new File("/Volumes/data/tmp/Bildarchiv-Daston/400/"+idnr.elementAt(i)).exists())
1763: 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());
1764: // conPost.post(new File("./test2.jpg"),picture.elementAt(i).toString(),artist.elementAt(i).toString(),source.elementAt(i).toString());
1765:
1766: }// to for
1767:
1768: } catch(Exception e)
1769: {
1770: e.printStackTrace();
1771: }
1772: */
1773: long time2 = System.currentTimeMillis();
1774: // System.out.println("time elapsed for upload " +((time2-time)/1000)+" seconds");
1775: }
1776: static class Connection
1777: {
1778: Socket socket;
1779: URL url;
1780: BufferedInputStream in;
1781: PrintStream out;
1782: String pHost;
1783: int pPort = 80;
1784: String proxyHost="";
1785: String ses="";
1786: HttpURLConnection con;
1787: UploadInfo dialog = new UploadInfo();
1.3 rogo 1788: MessageDigest md ;
1789:
1.1 rogo 1790: public Connection(URL url) throws Exception
1791: {
1792: Properties prop = System.getProperties();
1793: pHost = null;
1794: pPort = 80;
1795: Enumeration en = prop.propertyNames();
1796: while (en.hasMoreElements())
1797: {
1798: String key = (String) en.nextElement();
1799: if (key.toString().indexOf("proxyHost") >= 0)
1800: {
1801: Object host = prop.get(key);
1802: if (host != null)
1803: pHost = host.toString();
1804: }
1805: if (key.toString().indexOf("proxyPort") >= 0)
1806: {
1807: Object port = prop.get(key);
1808: if (port != null)
1809: pPort = Integer.parseInt(port.toString());
1810: }
1811: }
1812:
1813: if (proxyHost != "")
1814: {
1815: int index = proxyHost.indexOf(":");
1816: pHost = proxyHost.substring(0, (index > 0) ? index : proxyHost.length());
1817: pPort = (index > 0) ? Integer.parseInt(proxyHost.substring(index + 1)) : 80;
1818: }
1819: int port = (url.getPort()>0) ? url.getPort():80;
1820: socket = new Socket((pHost != null) ? pHost : url.getHost(), (pHost != null) ? pPort :port );
1821: socket.setTcpNoDelay(true);
1822: in = new BufferedInputStream(socket.getInputStream(),2);
1823: out = new PrintStream(new BufferedOutputStream(socket.getOutputStream()),true);
1824: this.url = url;
1.3 rogo 1825: try
1826: {
1827: md = MessageDigest.getInstance("MD5");
1828:
1829: } catch(Exception e) { e.printStackTrace();}
1830:
1.1 rogo 1831: }
1832: public String getSessionID(String data)
1833: {
1834: try
1835: {
1836: int size=data.length();
1837: // System.out.println("Yeah i called connect");
1838: // socket = new Socket((pHost != null) ? pHost : url.getHost(), (pHost != null) ? pPort : url.getPort());
1839: // socket.setTcpNoDelay(true);
1840: in = new BufferedInputStream(socket.getInputStream());
1841: out = new PrintStream(new BufferedOutputStream(socket.getOutputStream()),true);
1842:
1843: 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());
1844: out.print(data);
1845: out.flush();
1846: String response=getResponseMessage();
1847: int index=response.indexOf("Set-Cookie");
1848: int index2=response.indexOf("\r\n",index);
1849: String cookie=response.substring(index,index2);
1850: index=cookie.indexOf("=");
1851:
1852: // // System.out.print(response);
1853: System.err.println("Session key: "+cookie.substring(index+1));
1854: return cookie.substring(index+1);//sessionID
1855: } catch (Exception e)
1856: {
1857: // System.out.println(e);
1858: }
1859: return "";
1860: }
1861: public void post(File file,String mode,String docID,String title,String author,String source) {
1862: try
1863: {
1864: // System.out.println("Yeah i called post");
1865: in = new BufferedInputStream(socket.getInputStream());
1866: out = new PrintStream(new BufferedOutputStream(socket.getOutputStream()),true);
1867: /*if(in.isClosed())
1868: {
1869: socket = new Socket((pHost != null) ? pHost : url.getHost(), (pHost != null) ? pPort : url.getPort());
1870: socket.setTcpNoDelay(true);
1871: in = new BufferedInputStream(socket.getInputStream());
1872: out = new PrintStream(new BufferedOutputStream(socket.getOutputStream()),true);
1873: }*/
1874: FileInputStream f=new FileInputStream(file);
1875: int length=f.available();
1876: // ses="37b9cec1da340f16f5ef603112e6fe84";
1877: /*
1878: String data = "--xYzZY\r\nContent-Disposition: form-data; name=\"mm\"\r\n\r\ninput\r\n"+
1879: "--xYzZY\r\nContent-Disposition: form-data; name=\"ses\"\r\n\r\n"+ses+"\r\n"
1880: +"--xYzZY\r\nContent-Disposition: form-data; name=\"col\"\r\n\r\n"+"11"+"\r\n"
1881: +"--xYzZY\r\nContent-Disposition: form-data; name=\"grp\"\r\n\r\n"+"78"+"\r\n"
1882: +"--xYzZY\r\nContent-Disposition: form-data; name=\"bun\"\r\n\r\n"+"78"+"\r\n"
1883: +"--xYzZY\r\nContent-Disposition: form-data; name=\"sm\"\r\n\r\n"+"new"+"\r\n"
1884: // +"--xYzZY\r\nContent-Disposition: form-data; name=\"ver\"\r\n\r\n"+"0"+"\r\n"
1885: +"--xYzZY\r\nContent-Disposition: form-data; name=\"docid\"\r\n\r\n"+"10924"+"\r\n"
1886: +"--xYzZY\r\nContent-Disposition: form-data; name=\"gentyp\"\r\n\r\n"+"43"+"\r\n"
1887: +"--xYzZY\r\nContent-Disposition: form-data; name=\"title\"\r\n\r\n"+"sometitlexyz"+"\r\n"
1888: +"--xYzZY\r\nContent-Disposition: form-data; name=\"placeofevent\"\r\n\r\n"+"someplaceofevent"+"\r\n"
1889: +"--xYzZY\r\nContent-Disposition: form-data; name=\"locater\"\r\n\r\n"+"somelocator"+"\r\n"
1890: +"--xYzZY\r\nContent-Disposition: form-data; name=\"authorcomment\"\r\n\r\n"+"somecomment"+"\r\n"
1891: +"--xYzZY\r\nContent-Disposition: form-data; name=\"nfiles\"\r\n\r\n"+"1"+"\r\n"
1892: +"--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
1893: */
1894:
1895: FormData formData=new FormData(file,ses,col,grp,mode,"0",docID);
1896: //format for const File file,String ses,String col,String grp,String sm,String ver,String docid
1897: formData.addEntry("title",title);
1898: formData.addEntry("placeofevent",author);
1899: formData.addEntry("comment",source);
1900: formData.addEntry("locater",source);
1901: formData.addFile(formData.file.getName(),"image/tiff",length+"");
1902: String data=formData.buff.toString();
1903: String ftacc1="--xYzZY\r\nContent-Disposition: form-data; name=\"ftacc1\"\r\n\r\n"+"PUBLIC"+"\r\n";
1904:
1905: System.err.println("cl "+(data.length()+length+ 13 + ftacc1.length()));
1906: 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"
1907: +"Cookie: EMBPERL_UID="+ses+"\r\nHost: " + url.getHost() + "\r\n\r\n"));//.getBytes());
1908: //+"Host: " + url.getHost() + "\r\n\r\n"));
1909: // 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());
1910: out.print(data);
1911: if(debug)
1912: System.out.print(data);
1913: // System.out.println("Finished upload");
1914: // System.out.println("Content-Length "+(data.length()+11+length));
1915: // System.out.print("\r\n--xYzZY--\r\n");// 11 bytes
1916: // System.out.print("\r\n");
1917: sendFile(f,out);
1918: out.print("\r\n");
1919: out.print(ftacc1);
1920: if(debug)
1921: System.out.print(ftacc1);
1922: out.print("--xYzZY--\r\n");
1923: if(debug)
1924: System.out.print("--xYzZY--\r\n");
1925: // System.err.println("Yeah i called connect");
1926: dialog.progress.setValue(99);
1927: String response=getResponseMessage();
1928: System.err.print(response);
1929: if(response.toLowerCase().indexOf("content-length")>=0||(response.toLowerCase().indexOf("content-type")>=0))
1930: {
1931: int c=0;
1932: while ((c = in.read()) != -1)
1933: {
1934: System.err.print((char)c);
1935: }
1936: }
1937: } catch (Exception e)
1938: {
1939: // System.out.println(e);
1940: }
1941: }
1942: public void post(String path,Bundle.Document doc,String mode) throws Exception{
1943: // try
1944: // {
1945: System.out.println("Yeah i called post");
1946: in = new BufferedInputStream(socket.getInputStream());
1947: out = new PrintStream(new BufferedOutputStream(socket.getOutputStream()),true);
1948: /*if(in.isClosed())
1949: {
1950: socket = new Socket((pHost != null) ? pHost : url.getHost(), (pHost != null) ? pPort : url.getPort());
1951: socket.setTcpNoDelay(true);
1952: in = new BufferedInputStream(socket.getInputStream());
1953: out = new PrintStream(new BufferedOutputStream(socket.getOutputStream()),true);
1954: }*/
1955: String name = doc.fileLink.trim().startsWith("file://") ?doc.fileLink.trim().substring(7):doc.fileLink.trim();
1956: System.out.println(name);
1957: String filePath = name.startsWith("/") ? name:path+name;
1958: FileInputStream f=new FileInputStream( filePath);
1959: int length=f.available();
1960:
1961: FormData formData=new FormData(new File(doc.fileName),ses,col,grp,mode,"1",doc.docID+"",doc.type);// "1" means new version if mode == old
1962: //format for const File file,String ses,String col,String grp,String sm,String ver,String docid
1963: Enumeration en = doc.metaTags.keys();
1964: while(en.hasMoreElements())
1965: {
1966: String key=(String)en.nextElement();
1967: formData.addEntry(key,(String)doc.metaTags.get(key));
1968: }
1969: formData.addFile(formData.file.getName(),doc.mimeType,length+"");
1970: String data=formData.buff.toString();
1971: //System.out.print(data);
1972: String ftacc1="--xYzZY\r\nContent-Disposition: form-data; name=\"ftacc1\"\r\n\r\n"+"PUBLIC"+"\r\n";
1973:
1974: System.err.println("cl "+(data.length()+length+ 13 + ftacc1.length()));
1975: 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"
1976: +"Cookie: EMBPERL_UID="+ses+"\r\nHost: " + url.getHost() + "\r\n\r\n"));//.getBytes());
1977: //+"Host: " + url.getHost() + "\r\n\r\n"));
1978: // 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());
1979: out.print(data);
1980: if(out.checkError()) throw new Error("Error while sending form data");
1981: if(debug)
1982: System.out.print(data);
1983: // System.out.println("Finished upload");
1984: // System.out.println("Content-Length "+(data.length()+11+length));
1985: // System.out.print("\r\n--xYzZY--\r\n");// 11 bytes
1986: // System.out.print("\r\n");
1987: sendFile(f,out);
1988: out.print("\r\n");
1989: out.print(ftacc1);
1990: if(debug)
1991: System.out.print(ftacc1);
1992: out.print("--xYzZY--\r\n");
1993: if(debug)
1994: System.out.print("--xYzZY--\r\n");
1995: // System.err.println("Yeah i called connect");
1996: dialog.progress.setValue(99);
1997: // String response=getResponseMessage();
1998: // System.err.print(response);
1999: int c=0;StringBuffer sb = new StringBuffer();
2000: sb=readChunked(this);
2001: if(debug)
2002: System.out.println(sb);
2003: if(sb.length()>0)
2004: addToBundle(bundleRef,sb);
1.3 rogo 2005: // updating document with edoc Data
1.1 rogo 2006: Bundle.Document newDoc =(Bundle.Document) bundleRef.docsLocator.get(doc.locator);
2007: doc.md5cs=newDoc.md5cs;
2008: doc.size=newDoc.size;
2009: doc.fileID=newDoc.fileID;
2010: doc.docID=newDoc.docID;
2011: doc.ver=newDoc.ver;
2012: doc.fileVer=newDoc.fileVer;
1.3 rogo 2013: doc.modified = new File(filePath).lastModified();
2014:
1.1 rogo 2015: }
2016:
2017: public void sendFile(FileInputStream f,PrintStream out) throws Exception
2018: {
2019: int length=f.available();
2020: md.reset();
2021: dialog.progress.setValue(0);
1.3 rogo 2022: byte[] b=new byte[16204];
1.1 rogo 2023: int readCount =0;
2024: while (readCount < length)
2025: {
2026: if (readCount + b.length > length)
2027: f.read(b, 0, length - readCount); // mout.flush();
2028: else
2029: f.read(b);
2030: if (readCount + b.length > length)
2031: {
2032: out.write(b, 0, length - readCount); // mout.flush();
2033: md.update(b, 0, length - readCount);
2034: if(out.checkError()) throw new Error("Error while sending file data");
2035: //if(debug)
2036: //System.out.write(b, 0, length - readCount); // mout.flush();
2037: }
2038: else
2039: {
2040: // if(debug)
2041: //System.out.write(b); // mout.flush();
2042: out.write(b);
2043: if(out.checkError()) throw new Error("Error while sending file data");
2044: md.update(b, 0, b.length);
2045: }
2046: readCount += b.length;
2047: dialog.progress.setValue((int) (((double) readCount / (double) length) * 100.0));
2048: }
2049:
2050: }
2051: public void get() throws Exception
2052: {
2053: try
2054: {
1.4 ! rogo 2055: // System.out.println("Yeah i called get with "+url );
1.1 rogo 2056: // socket = new Socket((pHost != null) ? pHost : url.getHost(), (pHost != null) ? pPort : url.getPort());
2057: // socket.setTcpNoDelay(true);
2058: in = new BufferedInputStream(socket.getInputStream());
2059: out = new PrintStream(new BufferedOutputStream(socket.getOutputStream()),true);
2060:
2061: // 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());
2062: out.print(("GET " + url + " HTTP/1.1\r\nCookie: EMBPERL_UID="+ses+"\r\nHost: " + url.getHost() + "\r\n\r\n"));
2063: out.flush();
2064: } catch (Exception e)
2065: {
2066: int port = (url.getPort()>0) ? url.getPort():80;
2067:
2068: socket = new Socket((pHost != null) ? pHost : url.getHost(), (pHost != null) ? pPort : url.getPort());
2069: socket.setTcpNoDelay(true);
2070: in = new BufferedInputStream(socket.getInputStream());
2071: out = new PrintStream(new BufferedOutputStream(socket.getOutputStream()),true);
2072: // out.print(("PUT " + url + " HTTP/1.1\r\nContent-Type:text/html\r\nContent-Length:" + size + "\r\nHost: " + url. getHost() + "\r\n\r\n"));
2073: out.flush();
2074: // System.out.println("Error "+e);
2075: }
2076:
2077: /*
2078: con = new HTTPClient.HttpURLConnection(url);//(HttpURLConnection) url.openConnection(); // con.setRequestMethod("GET");
2079: con.setUseCaches(false);
2080: con.setRequestMethod("PUT");
2081: con.setDoOutput(true);
2082: con.setRequestProperty("Content-Length", ""+size);
2083: // con.connect();
2084: // System.out.println(con.getClass());
2085: out = new DataOutputStream(con.getOutputStream());
2086: */
2087: }
2088: public boolean update() throws Exception
2089: {
2090: boolean exists = false;
2091: String response = "";
2092: try
2093: {
2094:
2095: URL url = null;//createURL(this.url.toString(), getSHA((id + "").getBytes()));
2096: // con = new HTTPClient.HttpURLConnection(url);//(HttpURLConnection) url.openConnection(); // con.setRequestMethod("GET");
2097: //con.setUseCaches(false);
2098: // con.setRequestMethod("HEAD");
2099: //con.setDoOutput(true);
2100: // con.connect();
2101:
2102: out.print(("HEAD " + url + " HTTP/1.1\r\nConnection:Keep-Alive\r\nHost: " + url.getHost() + "\r\n\r\n"));//.getBytes());
2103: out.flush();
2104: response = getResponseMessage();
2105: exists = response.indexOf("OK") >= 0;
2106: // System.out.println("Head "+response);
2107:
2108: } catch (Exception e)
2109: {
2110: socket = new Socket((pHost != null) ? pHost : url.getHost(), (pHost != null) ? pPort : url.getPort());
2111: socket.setTcpNoDelay(true);
2112: in = new BufferedInputStream(socket.getInputStream());
2113: out = new PrintStream(new BufferedOutputStream(socket.getOutputStream()),true);
2114: // out.writeBytes("HEAD " + url + " HTTP/1.1\r\n Connection:Keep-Alive\r\n \r\nHost: " + url.getHost() + //"\r\n\r\n");
2115: URL url = null;//createURL(this.url.toString(), getSHA((id + "").getBytes()));
2116: out.print(("HEAD " + url + " HTTP/1.1\r\nConnection:Keep-Alive\r\nHost: " + url.getHost() + "\r\n\r\n"));//.getBytes());
2117: out.flush();
2118: response = getResponseMessage();
2119: // System.out.println("Head " + response);
2120: exists = response.indexOf("OK") >= 0;
2121: //// System.out.println("Error from Head "+e);
2122: // e.printStackTrace();
2123: return exists;
2124:
2125: }
2126: return exists;
2127: }
2128:
2129: public String getResponseMessage()
2130: {
2131:
2132: int b=0;StringBuffer between=new StringBuffer();int count=0;
2133: try
2134: {
2135: int loop =0;int available = 0;
2136: while((available=in.available())==0)
2137: {
2138: if(loop>=3000) throw new Error("Connection timed out");
2139: long time = System.currentTimeMillis();
2140: while(System.currentTimeMillis()-time<100);
2141: if(available==0) loop++; else loop=0;
2142: }
2143: System.out.println("heh there are bytes "+in.available()+" available");
2144: int limit = in.available();
2145: while(true )
2146: {
2147: b=in.read();
2148: if(b=='\r')
2149: {
2150: between.append((char)b);
2151: // System.out.print("CR found ");
2152: b=in.read();
2153: if(b=='\n')
2154: {
2155: // System.out.print("LF found ");
2156: between.append((char)b);
2157: if((b=in.read())=='\r')
2158: {
2159: b=in.read();
2160: // System.out.print("end found ");
2161: break;
2162: }
2163: }
2164: }
2165: between.append((char)b);
2166: // System.out.print((char)b);
2167: // System.out.println("read "+count+" bytes");
2168: count++;
2169: if(count==limit) break;
2170: }
2171:
2172: } catch(Exception e) {
2173: e.printStackTrace();
2174: // System.out.println("Error found");
2175: if(e.toString().indexOf("peer")>=0)
2176: return getResponseMessage();
2177: else throw new Error("Error while reading response");
2178: }
2179:
2180: /*
2181: String response = "";
2182: try
2183: {
2184: response = con.getResponseMessage();
2185: // con.disconnect();
2186: } catch (Exception e)
2187: {
2188: showErrorDialog(e.getMessage(),"Shit happens");
2189: }
2190: */
2191: String response = between.toString();
2192: if(response.indexOf("close") >= 0)
2193: reconnect();
2194: return response;
2195:
2196: }
2197: public void disconnect() throws Exception
2198: {
2199: //socket.close();
2200: // con.disconnect();
2201: }
2202: public void reconnect()
2203: {
2204: try
2205: {
2206: System.out.println("Reconnect called");
2207: int port= (url.getPort()>=0) ? url.getPort():80;
2208: socket = new Socket((pHost != null) ? pHost : url.getHost(), (pHost != null) ? pPort :port);
2209: socket.setTcpNoDelay(true);
2210: in = new BufferedInputStream(socket.getInputStream());
2211: out = new PrintStream(new BufferedOutputStream(socket.getOutputStream()),true);
2212:
2213: } catch(Exception e)
2214: {
2215: showErrorDialog(e.getMessage(),"Shit happens");
2216: }
2217:
2218: }
2219:
2220: }
2221: public static class FormData
2222: {
2223: public StringBuffer buff=new StringBuffer();
2224: File file;
2225: public FormData()
2226: {}
2227: public FormData(File file,String ses,String col,String grp,String sm,String ver,String docid)
2228: {
2229: this(file,ses,col,grp,sm,ver,docid,"Archimedes Image Collection");
2230: }
2231: public FormData(File file,String ses,String col,String grp,String sm,String ver,String docid,String type)
2232: {
2233: this.file=file;
2234: addEntry("mm","input");
2235: addEntry("ses",ses);
2236: addEntry("col",col);
2237: addEntry("grp",grp);
2238: //addEntry("bun",bun);
2239:
2240: if(sm.equals("old"))
2241: {
2242: addEntry("sm","old");
2243: addEntry("ver",ver);
2244: addEntry("docid",docid);
2245:
2246: }
2247: else
2248: addEntry("sm","new");
2249: System.out.println("Type is "+type);
2250: type=type.toLowerCase().trim();
2251: Object genre=null;
2252: if((genre=Bundle.genresLabel.get(type))!=null)
2253: addEntry("gentyp",genre.toString());
2254: else if((genre=Bundle.genresName.get(type))!=null)
2255: addEntry("gentyp",genre.toString());
2256: else
2257: {
2258: Integer id=new Integer("0");
2259: id= new Integer(type);
2260: if((genre=Bundle.genresId.get(id))!=null)
2261: addEntry("gentyp",((Bundle.Genre)genre).id.toString());
2262: }
2263: System.out.println("Numerical Type is "+genre);
2264: }
2265: public void addEntry(String entry,String data)
2266: {
2267: buff.append("--xYzZY\r\nContent-Disposition: form-data; name=\"");
2268: buff.append(entry);
2269: buff.append("\"; charset=utf-8 \r\n\r\n");
2270: buff.append(data);
2271: buff.append("\r\n");
2272: }
2273: public void addFile(String name,String type,String length)
2274: {
2275: addEntry("nfiles","1");
2276: buff.append("--xYzZY\r\nContent-Disposition: form-data; name=\"file1\"");
2277: buff.append("; filename=\""+name+"\""+"\r\nContent-Length: "+length+"\r\n"+"Content-Type:"+type+"\r\n");
2278: buff.append("\r\n");
2279: }
2280:
2281: public void addEnd()
2282: {
2283: buff.append("\r\n--xYzZY--\r\n");
2284: }
2285:
2286: }
2287: static class UploadFilter implements FilenameFilter
2288: {
2289: public UploadFilter() {}
2290: public boolean accept(File dir, String name)
2291: {
2292: if(name.startsWith(".") || name.endsWith(".xml")) return false;
2293: else return true;
2294: }
2295: }
2296:
2297: static class DotFileFilter implements FilenameFilter
2298: {
2299: public DotFileFilter() {}
2300: public boolean accept(File dir, String name)
2301: {
2302: if(name.startsWith(".")) return false;
2303: else return true;
2304: }
2305: }
2306: static class XMLFilter extends javax.swing.filechooser.FileFilter
2307: {
2308: public boolean accept(java.io.File file)
2309: {
2310: if(file.getName().toLowerCase().endsWith(".xml")||file.isDirectory())
2311: return true ;
2312: else return false;
2313: }
2314: public String getDescription()
2315: {
2316: return "Metadata XML File";
2317: }
2318:
2319: }
2320: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>