View Javadoc

1   /***
2    * $Id: StoresView.java,v 1.1 2004/11/08 23:15:38 mch Exp $
3    */
4   package org.astrogrid.store.browser;
5   
6   import java.io.IOException;
7   import java.net.URLEncoder;
8   import java.util.Enumeration;
9   import java.util.Hashtable;
10  import javax.servlet.http.HttpServletRequest;
11  import javax.servlet.http.HttpServletResponse;
12  import org.apache.commons.logging.Log;
13  import org.apache.commons.logging.LogFactory;
14  import org.astrogrid.datacenter.DsaDomHelper;
15  import org.astrogrid.registry.RegistryException;
16  import org.astrogrid.registry.client.RegistryDelegateFactory;
17  import org.astrogrid.registry.client.query.RegistryService;
18  import org.astrogrid.store.browser.Browser;
19  import org.astrogrid.util.DomHelper;
20  import org.w3c.dom.Document;
21  import org.w3c.dom.Element;
22  
23  /***
24   * An object that represents the list of stores in the 'navbar'; generates
25   * HTML for the browser servlet
26   */
27  public class StoresView  {
28  
29     /*** map of store names to uris */
30     Hashtable stores = new Hashtable();
31     
32     Browser browser = null;
33     
34     protected static final Log log = LogFactory.getLog(Browser.class);
35  
36     
37     /*** Constructor - populates nav bar for given user */
38     public StoresView(Browser parent) {
39        this.browser = parent;
40  //    stores.put("Disk", "file://");
41        stores.put("HomeSpace", parent.getUser().getIvorn());
42  //      stores.put("Local", "myspace:"+new URL("http", request.getServerName(), request.getServerPort(), request.getContextPath()).toString() +"/services/Manager");
43        stores.put("Twmbarlwm:8080", "myspace:http://twmbarlwm.star.le.ac.uk:8888/astrogrid-mySpace-SNAPSHOT/services/Manager");
44        populateRegisteredStores();
45     }
46        
47      /*** Writes out view to response writer */
48     public void writeView(HttpServletRequest request, HttpServletResponse response) throws IOException {
49        response.getWriter().print(
50           "<div id='storesView'>"+
51              "<table border=2 color='#AAAAAA'><tr><td>"+
52              "   <table border=0 cellspacing=4>");
53        
54        Enumeration storeKey = stores.keys();
55        while (storeKey.hasMoreElements()) {
56           String name = (String) storeKey.nextElement();
57           String uri = (String) stores.get(name);
58           
59           response.getWriter().print(
60              "   <tr><td align='center'><a href='"+Browser.refRoot+"store="+URLEncoder.encode(uri)+"&storeName="+URLEncoder.encode(name)+"'>"+name+"</a></td></tr>\n"
61           );
62        }
63  
64        //add special manual enter-your-own form
65        response.getWriter().print(
66           "   <tr><td><form action='Browser'>"+
67                    "<input type='text' name='store'/>"+
68                    "<input type='submit' value='Go'/>"+
69                 "</form></td></tr>");
70  
71        //close table
72        response.getWriter().print(
73              "</table>"+
74              "</td></tr></table>"+
75          "</div>");
76     }
77  
78     //adds stores in the default registry to the hashtable
79     public void populateRegisteredStores() {
80  
81        Element[] myspaceResources;
82        try {
83           myspaceResources = getMySpaces();
84        }
85        catch (RegistryException re) {
86           log.error(re);
87           return;
88        }
89           
90        //for each of the ones found, add to list
91        for (int i = 0; i < myspaceResources.length; i++) {
92           stores.put(DomHelper.getValue(myspaceResources[i], "Title"),
93                      DomHelper.getValue(DsaDomHelper.getSingleChildByTagName(myspaceResources[i], "Interface"), "AccessURL"));
94        }
95           
96     }
97     
98     /*** Queries Registry for myspaces */
99     public Element[] getMySpaces() throws RegistryException {
100       String selectQuery = "<query><selectionSequence>" +
101              "<selection item='searchElements' itemOp='EQ' value='all'/>" +
102              "<selectionOp op='$and$'/>" +
103              "<selectionSequence>"+
104                "<selection item='vr:Identifier/vr:ResourceKey' itemOp='CONTAINS' value='myspace'/>"+
105                "<selectionOp op='OR'/>" +
106                "<selection item='vr:Title' itemOp='CONTAINS' value='myspace'/>"+
107              "</selectionSequence>"+
108            "</selectionSequence></query>";
109       
110       RegistryService client = RegistryDelegateFactory.createQuery();
111 
112       Document response = client.submitQuery(selectQuery);
113 
114       String s = DomHelper.DocumentToString(response); //for debug
115 
116       /*
117       NodeList resources = response.getElementsByTagNameNS("*", "Resource");
118       Vector myspaces = new Vector();
119       for (int i = 0; i < resources.getLength(); i++) {
120          if ( ((Element) resources.item(i)).getAttribute("xsi:type").equals("CeaServiceType")) {
121             myspaces.add(resources.item(i));
122          }
123       }
124        */
125       return new Element[] {};
126    }
127    
128 
129    /***
130     *
131     */
132    public static void main(String[] args) throws RegistryException {
133         
134          new StoresView(null).getMySpaces();
135    }
136 }