You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ace.apache.org by br...@apache.org on 2013/04/29 16:35:55 UTC

svn commit: r1477106 - in /ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin: AddArtifactWindow.java ResourceTable.java

Author: bramk
Date: Mon Apr 29 14:35:55 2013
New Revision: 1477106

URL: http://svn.apache.org/r1477106
Log:
ACE-217 Added (unchecked) purge option to OBR resources view


Added:
    ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/ResourceTable.java
Modified:
    ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/AddArtifactWindow.java

Modified: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/AddArtifactWindow.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/AddArtifactWindow.java?rev=1477106&r1=1477105&r2=1477106&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/AddArtifactWindow.java (original)
+++ ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/AddArtifactWindow.java Mon Apr 29 14:35:55 2013
@@ -24,6 +24,7 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.net.HttpURLConnection;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLConnection;
@@ -31,6 +32,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
 
+import javax.servlet.http.HttpServletResponse;
 import javax.xml.xpath.XPath;
 import javax.xml.xpath.XPathConstants;
 import javax.xml.xpath.XPathExpressionException;
@@ -304,7 +306,7 @@ abstract class AddArtifactWindow extends
         setModal(true);
         setWidth("50em");
 
-        m_artifactsTable = new ArtifactTable();
+        m_artifactsTable = new ResourceTable();
         m_artifactsTable.setCaption("Artifacts in repository");
 
         final IndexedContainer dataSource = (IndexedContainer) m_artifactsTable.getContainerDataSource();
@@ -623,17 +625,19 @@ abstract class AddArtifactWindow extends
         }
 
         // Create a list of all bundle names
-        for (OBREntry s : obrList) {
-            String uri = s.getUri();
-            String name = s.getName();
-            String version = s.getVersion();
+        for (final OBREntry entry : obrList) {
+            
+            String uri = entry.getUri();
+            String name = entry.getName();
+            String version = entry.getVersion();
 
             Item item = dataSource.addItem(uri);
-            item.getItemProperty(ArtifactTable.PROPERTY_SYMBOLIC_NAME).setValue(name);
-            item.getItemProperty(ArtifactTable.PROPERTY_VERSION).setValue(version);
+            item.getItemProperty(ResourceTable.PROPERTY_SYMBOLIC_NAME).setValue(name);
+            item.getItemProperty(ResourceTable.PROPERTY_VERSION).setValue(version);
+            item.getItemProperty(ResourceTable.PROPERTY_PURGE).setValue(createDeleteOBREntryButton(entry));
         }
     }
-
+    
     /**
      * Builds a list of all OBR artifacts currently in use.
      * 
@@ -777,4 +781,71 @@ abstract class AddArtifactWindow extends
 
         return obrList;
     }
+    
+    /**
+     * Delete an entry from the OBR.
+     * 
+     * @param entry
+     *            The OBREntry
+     * @param obrBaseUrl
+     *            The OBR base url
+     * @return The HTTP response code
+     * @throws IOException
+     *             If the HTTP operation fails
+     */
+    private int deleteOBREntry(OBREntry entry, URL obrBaseUrl) throws IOException {
+
+        HttpURLConnection connection = null;
+        try {
+            URL endpointUrl = new URL(obrBaseUrl, entry.getUri());
+            connection = (HttpURLConnection) openConnection(endpointUrl);
+            connection.setDoInput(true);
+            connection.setDoOutput(false);
+            connection.setInstanceFollowRedirects(false);
+            connection.setRequestMethod("DELETE");
+            connection.connect();
+            return connection.getResponseCode();
+        }
+        finally {
+            if (connection != null) {
+                connection.disconnect();
+            }
+        }
+    }
+    
+    /**
+     * Create a new button that delete an OBREntry on-click.
+     * 
+     * @param entry
+     *            The entry
+     * @return The button
+     */
+    private Button createDeleteOBREntryButton(final OBREntry entry) {
+
+        return new Button("X", new ClickListener() {
+
+            @Override
+            public void buttonClick(ClickEvent event) {
+
+                try {
+                    int code = deleteOBREntry(entry, m_obrUrl);
+                    if (code == HttpServletResponse.SC_OK) {
+                        m_artifactsTable.removeItem(entry.getUri());
+                        m_artifactsTable.refreshRowCache();
+                    }
+                    else {
+                        getWindow().showNotification("The OBR returned an unexpected response code: " + code,
+                            Notification.TYPE_ERROR_MESSAGE);
+
+                    }
+                }
+                catch (IOException e) {
+                    getWindow().showNotification("Failed to delete resource!", "<br/>Reason: " + e.getMessage(),
+                        Notification.TYPE_ERROR_MESSAGE);
+                    e.printStackTrace();
+                }
+
+            }
+        });
+    }
 }
\ No newline at end of file

Added: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/ResourceTable.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/ResourceTable.java?rev=1477106&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/ResourceTable.java (added)
+++ ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/ResourceTable.java Mon Apr 29 14:35:55 2013
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ace.webui.vaadin;
+
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Table;
+
+/**
+ * Provides a custom table for displaying OBR resources by their symbolic name and version.
+ */
+public class ResourceTable extends Table {
+
+    public static final String PROPERTY_SYMBOLIC_NAME = "symbolic name";
+    public static final String PROPERTY_VERSION = "version";
+    public static final String PROPERTY_PURGE = "purge";
+
+    public ResourceTable() {
+        super("Artifacts");
+
+        addContainerProperty(PROPERTY_SYMBOLIC_NAME, String.class, null);
+        addContainerProperty(PROPERTY_VERSION, String.class, null);
+        addContainerProperty(PROPERTY_PURGE, Button.class, null);
+
+        setSizeFull();
+
+        setSelectable(true);
+        setMultiSelect(true);
+        setImmediate(true);
+
+        setHeight("15em");
+    }
+}