source: MDService2/branches/MDService_simple2/src/eu/clarin/cmdi/mdservice/proxy/MDRepoProxy.java @ 1511

Last change on this file since 1511 was 1511, checked in by vronk, 13 years ago

brutal refactoring,
added new packages: proxies, internal,
very much restructured Action hierarchy.
Introduced division Action/Proxy?.
This is a first compiling version.
it's total mess.

File size: 3.9 KB
Line 
1package eu.clarin.cmdi.mdservice.proxy;
2
3import java.io.File;
4import java.io.IOException;
5import java.io.InputStream;
6import java.io.StringReader;
7import java.io.StringWriter;
8import java.net.MalformedURLException;
9import java.net.URISyntaxException;
10import java.net.URL;
11import java.util.HashMap;
12import java.io.ByteArrayInputStream;
13
14import javax.xml.parsers.DocumentBuilder;
15import javax.xml.parsers.DocumentBuilderFactory;
16import javax.xml.transform.OutputKeys;
17import javax.xml.transform.Transformer;
18import javax.xml.transform.TransformerException;
19import javax.xml.transform.TransformerFactory;
20import javax.xml.transform.dom.DOMSource;
21import javax.xml.transform.stream.StreamResult;
22
23import org.apache.log4j.Logger;
24import org.w3c.dom.Document;
25import org.w3c.dom.Node;
26import org.w3c.dom.NodeList;
27import org.xml.sax.InputSource;
28
29import eu.clarin.cmdi.mdservice.internal.NoStylesheetException;
30import eu.clarin.cmdi.mdservice.model.Query;
31import eu.clarin.cmdi.mdservice.model.WorkspaceProfile;
32
33/**
34 * Proxy to the Metadata Repository. 
35 * Responds to requests (collections, model, recordset)
36 * by dispatching the requests to appropriate internal methods and filling the inputStream with the result
37 *
38 * It is possible to switch target-repository dynamically  (on every request). I.e. the client explicitly selects one of the repositories.
39 * 
40 * @author vronk
41 *
42 */
43public class MDRepoProxy extends RepoProxy {
44
45        private static final long serialVersionUID = 1L;
46        private static Logger log = Logger.getLogger("MDRepoProxy");
47       
48        private String proxy_key = "mdrepository";
49       
50        /**
51         * Override of the basic method provided by the super-class
52         */     
53        @Override       
54        public String getBaseURI() {           
55                String uri = WorkspaceProfile.getRepositoryPath(getSourceAction().getRepository());             
56                return uri;
57        }
58       
59        @Override
60        public String getProxyKey() {
61                return proxy_key;
62        }
63       
64        /**
65         * A mapping between the actionkeys in the request and the operation-parameter expected by the MDRepository
66         */
67        private final static HashMap<String,String> urls = new HashMap<String,String>();
68         static
69         {       urls.put("collection", "?operation=getCollections&collection=");
70                 urls.put("model", "?operation=queryModel&q=");
71                 urls.put("values", "?operation=scanIndex&q=");
72                 urls.put("recordset", "?operation=searchRetrieve&query=");
73                 urls.put("record", "?operation=searchRetrieve&query=");
74         } 
75 
76         
77        /**
78         * uses base_url + url_pattern (parametrized by actionkey) to form a url
79         * @return the full target-request URL to be sent to the target repository
80         * @throws Exception
81         */
82         @Override
83        public URL getTargetRequest() throws IOException {
84        // URL targetURL =new URL( base_url, compname + ".xml");
85                 return getBaseURL();
86                /*
87                log.debug("MDRPx.getQ:" + getSquery() + " and (" +  getQ() + ")");
88                log.debug("MDRPA.getActionkey:" + getActionkey());             
89               
90                Query query = new Query(getSquery(), getQ(),getActionkey());
91
92        // check if the query could get parsed
93                if (query.isStatus(Query.PARSEERROR)) {
94                        log.debug("MDRPA.query.PARSEERROR:" + query.getMsg());
95                        // pass this bad news to the client
96                        setUserMsg(query.getMsg());
97                        return null;
98                } else {
99                        query.setMaxdepth(getMaxdepth());               
100                        query.setCollection(getCollection());
101                        query.setColumns(getColumns());
102                        query.setMaximumItems(getMaximumItems());
103                        query.setStartItem(getStartItem());
104                        query.setOptions(getOptions());
105                        query.setSort(getSort());
106               
107                        URL targetURL = null;
108                        targetURL =new URL( getBaseURL(), urls.get(getActionkey()) + query.toURLParam() );
109                        Admin.notifyUser("MDRPA.targetURL.query.toURLParam:" + query.toURLParam());
110                        Admin.notifyUser("MDRPA.targetURL:" + targetURL);
111                return targetURL;
112                }
113                */
114                 
115        }
116
117        @Override
118        public InputStream getSourceStream() throws IOException, NoStylesheetException {
119               
120                /*if (getCommand() == null){
121                        try {
122                                return getSourcePz2();
123                        } catch (Exception e) {
124                                // TODO Auto-generated catch block
125                                e.printStackTrace();
126                        }
127                }
128                        */
129                return super.getSourceStream();
130        }
131       
132}
Note: See TracBrowser for help on using the repository browser.