You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ace.apache.org by ma...@apache.org on 2011/01/03 15:24:59 UTC

svn commit: r1054628 - /incubator/ace/trunk/ace-webui-vaadin/src/main/java/org/apache/ace/webui/vaadin/VaadinClient.java

Author: marrs
Date: Mon Jan  3 14:24:58 2011
New Revision: 1054628

URL: http://svn.apache.org/viewvc?rev=1054628&view=rev
Log:
ACE-42 Added basic upload support to the 'Add Artifact' dialog. Still needs further refinement, but should work already.

Modified:
    incubator/ace/trunk/ace-webui-vaadin/src/main/java/org/apache/ace/webui/vaadin/VaadinClient.java

Modified: incubator/ace/trunk/ace-webui-vaadin/src/main/java/org/apache/ace/webui/vaadin/VaadinClient.java
URL: http://svn.apache.org/viewvc/incubator/ace/trunk/ace-webui-vaadin/src/main/java/org/apache/ace/webui/vaadin/VaadinClient.java?rev=1054628&r1=1054627&r2=1054628&view=diff
==============================================================================
--- incubator/ace/trunk/ace-webui-vaadin/src/main/java/org/apache/ace/webui/vaadin/VaadinClient.java (original)
+++ incubator/ace/trunk/ace-webui-vaadin/src/main/java/org/apache/ace/webui/vaadin/VaadinClient.java Mon Jan  3 14:24:58 2011
@@ -19,8 +19,11 @@
 package org.apache.ace.webui.vaadin;
 
 import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.OutputStream;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLConnection;
@@ -71,31 +74,33 @@ import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 import org.xml.sax.InputSource;
 
-import com.sun.java.swing.plaf.nimbus.ToggleButtonPainter;
 import com.vaadin.data.Item;
 import com.vaadin.data.Property.ValueChangeEvent;
 import com.vaadin.event.ItemClickEvent;
-import com.vaadin.event.ItemClickEvent.ItemClickListener;
 import com.vaadin.event.Transferable;
+import com.vaadin.event.ItemClickEvent.ItemClickListener;
 import com.vaadin.event.dd.DragAndDropEvent;
 import com.vaadin.event.dd.DropHandler;
 import com.vaadin.event.dd.TargetDetails;
 import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
 import com.vaadin.event.dd.acceptcriteria.Or;
 import com.vaadin.terminal.Sizeable;
-import com.vaadin.ui.AbstractSelect.AbstractSelectTargetDetails;
-import com.vaadin.ui.AbstractSelect.VerticalLocationIs;
 import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
 import com.vaadin.ui.GridLayout;
 import com.vaadin.ui.HorizontalLayout;
 import com.vaadin.ui.ProgressIndicator;
 import com.vaadin.ui.Table;
-import com.vaadin.ui.Table.CellStyleGenerator;
-import com.vaadin.ui.Table.TableTransferable;
 import com.vaadin.ui.TextField;
+import com.vaadin.ui.Upload;
 import com.vaadin.ui.VerticalLayout;
 import com.vaadin.ui.Window;
+import com.vaadin.ui.AbstractSelect.AbstractSelectTargetDetails;
+import com.vaadin.ui.AbstractSelect.VerticalLocationIs;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Table.CellStyleGenerator;
+import com.vaadin.ui.Table.TableTransferable;
+import com.vaadin.ui.Upload.FailedEvent;
+import com.vaadin.ui.Upload.SucceededEvent;
 
 /*
 
@@ -1511,60 +1516,135 @@ public class VaadinClient extends com.va
         }
     }
     
-    private void showAddArtifactDialog(final Window main) {
-        final Window featureWindow = new Window();
-        featureWindow.setModal(true);
-        featureWindow.setCaption("Add artifact");
-        featureWindow.setWidth("50em");
-
-        // Configure the windws layout; by default a VerticalLayout
-        VerticalLayout layout = (VerticalLayout) featureWindow.getContent();
-        layout.setMargin(true);
-        layout.setSpacing(true);
-
-        final TextField search = new TextField("search");
-        final Table artifacts = new ArtifactTable(main);
-
-        search.setValue("");
-        try {
-            getBundles(artifacts);
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-        }
+    private class AddArtifactWindow extends Window {
+    	private File m_file;
+    	private List<URL> m_uploadedArtifacts = new ArrayList<URL>();
+    	
+    	public AddArtifactWindow(final Window main) {
+    		super();
+            setModal(true);
+            setCaption("Add artifact");
+            setWidth("50em");
+            
+            // Configure the windws layout; by default a VerticalLayout
+            VerticalLayout layout = (VerticalLayout) getContent();
+            layout.setMargin(true);
+            layout.setSpacing(true);
 
-        layout.addComponent(search);
-        layout.addComponent(artifacts);
+            final TextField search = new TextField("search");
+            final Table artifacts = new ArtifactTable(main);
+            final Table uploadedArtifacts = new ArtifactTable(main);
+            final Upload uploadArtifact = new Upload("Upload Artifact", new Upload.Receiver() {
+    			public OutputStream receiveUpload(String filename, String MIMEType) {
+    				FileOutputStream fos = null; // Output stream to write to
+    		        try {
+    		        	m_file = new File(filename); //File.createTempFile(filename, "tmp");
+    		            // Open the file for writing.
+    		            fos = new FileOutputStream(m_file);
+    		        }
+    		        catch (final IOException e) {
+    		            // Error while opening the file. Not reported here.
+    		            e.printStackTrace();
+    		            return null;
+    		        }
+    		        return fos; // Return the output stream to write to			
+    	        }
+    		});
+            
+            artifacts.setCaption("Artifacts in repository");
+            uploadedArtifacts.setCaption("Uploaded artifacts");
+            uploadedArtifacts.setSelectable(false);
+            
+            search.setValue("");
+            try {
+                getBundles(artifacts);
+            }
+            catch (Exception e) {
+                e.printStackTrace();
+            }
+            
+            uploadArtifact.setImmediate(true);
+            
+            uploadArtifact.addListener(new Upload.SucceededListener() {
+    			
+    			public void uploadSucceeded(SucceededEvent event) {
+    				System.out.println("upload succeeded: " + event.getFilename());
+    				try {
+    					URL artifact = m_file.toURI().toURL();
+    		            Item item = uploadedArtifacts.addItem(artifact);
+    		            item.getItemProperty("symbolic name").setValue(m_file.getName());
+    		            item.getItemProperty("version").setValue("");
+    					m_uploadedArtifacts.add(artifact);
+					}
+    				catch (IOException e) {
+						// TODO Auto-generated catch block
+						e.printStackTrace();
+					}
+    				
+    			}
+    		});
+            uploadArtifact.addListener(new Upload.FailedListener() {
+    			
+    			public void uploadFailed(FailedEvent event) {
+    				System.out.println("upload failed: " + event);
+    			}
+    		});
+
+            layout.addComponent(search);
+            layout.addComponent(artifacts);
+            layout.addComponent(uploadArtifact);
+            layout.addComponent(uploadedArtifacts);
 
-        Button close = new Button("Add", new Button.ClickListener() {
-            // inline click-listener
-            public void buttonClick(ClickEvent event) {
-                // close the window by removing it from the parent window
-                (featureWindow.getParent()).removeWindow(featureWindow);
-                // TODO add the selected artifacts
-                for (Object id : artifacts.getItemIds()) {
-                    if (artifacts.isSelected(id)) {
-                        for (OBREntry e : m_obrList) {
-                            if (e.getUri().equals(id)) {
-                                System.out.println("Importing " + e);
-                                try {
-                                    importBundle(e);
-                                }
-                                catch (Exception e1) {
-                                    // TODO Auto-generated catch block
-                                    e1.printStackTrace();
+            Button close = new Button("Add", new Button.ClickListener() {
+                // inline click-listener
+                public void buttonClick(ClickEvent event) {
+                    // close the window by removing it from the parent window
+                    (AddArtifactWindow.this.getParent()).removeWindow(AddArtifactWindow.this);
+                    List<ArtifactObject> added = new ArrayList<ArtifactObject>();
+                    // TODO add the selected artifacts
+                    for (Object id : artifacts.getItemIds()) {
+                        if (artifacts.isSelected(id)) {
+                            for (OBREntry e : m_obrList) {
+                                if (e.getUri().equals(id)) {
+                                    System.out.println("Importing " + e);
+                                    try {
+                                        ArtifactObject ao = importBundle(e);
+                                        added.add(ao);
+                                    }
+                                    catch (Exception e1) {
+                                        // TODO Auto-generated catch block
+                                        e1.printStackTrace();
+                                    }
                                 }
                             }
                         }
                     }
+                    for (URL artifact : m_uploadedArtifacts) {
+                    	try {
+                    		ArtifactObject ao = importBundle(artifact);
+                            added.add(ao);
+						}
+                    	catch (IOException e) {
+							e.printStackTrace();
+						}
+                    }
+                    // TODO: make a decision here
+                    // so now we have enough information to show a list of imported artifacts (added)
+                    // but do we want to show this list or do we just assume the user will see the new
+                    // artifacts in the left most column? do we also report failures? or only report
+                    // if there were failures?
                 }
-            }
-        });
-        // The components added to the window are actually added to the window's
-        // layout; you can use either. Alignments are set using the layout
-        layout.addComponent(close);
-        layout.setComponentAlignment(close, "right");
-
+            });
+            // The components added to the window are actually added to the window's
+            // layout; you can use either. Alignments are set using the layout
+            layout.addComponent(close);
+            layout.setComponentAlignment(close, "right");
+            search.focus();
+    	}
+    }
+    
+    private void showAddArtifactDialog(final Window main) {
+        final AddArtifactWindow featureWindow = new AddArtifactWindow(main);
         if (featureWindow.getParent() != null) {
             // window is already showing
             main.getWindow().showNotification("Window is already open");
@@ -1573,7 +1653,6 @@ public class VaadinClient extends com.va
             // window
             main.getWindow().addWindow(featureWindow);
         }
-        search.focus();
     }
     
     public static class ArtifactTable extends Table {
@@ -1675,8 +1754,12 @@ public class VaadinClient extends com.va
         }
     }
 
-    public void importBundle(OBREntry bundle) throws Exception {
-        m_artifactRepository.importArtifact(new URL(new URL(obr), bundle.getUri()), false);
+    public ArtifactObject importBundle(OBREntry bundle) throws IOException {
+        return m_artifactRepository.importArtifact(new URL(new URL(obr), bundle.getUri()), false);
+    }
+    
+    public ArtifactObject importBundle(URL artifact) throws IOException {
+		return m_artifactRepository.importArtifact(artifact, true);
     }
     
     public static class OBREntry {