source: MDService2/branches/MDService_simple3/src/eu/clarin/cmdi/mdservice/model/FCSRepositories.java @ 1833

Last change on this file since 1833 was 1833, checked in by gaba, 12 years ago

old imports removed

File size: 6.9 KB
Line 
1package eu.clarin.cmdi.mdservice.model;
2
3import java.io.BufferedInputStream;
4import java.io.ByteArrayInputStream;
5import java.io.File;
6import java.io.FileInputStream;
7import java.io.FileWriter;
8import java.io.IOException;
9import java.io.InputStream;
10import java.io.StringWriter;
11import java.io.UnsupportedEncodingException;
12import java.net.URL;
13import java.text.DateFormat;
14import java.text.SimpleDateFormat;
15import java.util.Date;
16import java.util.HashMap;
17
18import javax.xml.namespace.QName;
19import javax.xml.parsers.DocumentBuilder;
20import javax.xml.parsers.DocumentBuilderFactory;
21import javax.xml.parsers.ParserConfigurationException;
22import javax.xml.transform.OutputKeys;
23import javax.xml.transform.Transformer;
24import javax.xml.transform.TransformerConfigurationException;
25import javax.xml.transform.TransformerException;
26import javax.xml.transform.TransformerFactory;
27import javax.xml.transform.TransformerFactoryConfigurationError;
28import javax.xml.transform.dom.DOMSource;
29import javax.xml.transform.stream.StreamResult;
30import javax.xml.xpath.XPath;
31import javax.xml.xpath.XPathConstants;
32import javax.xml.xpath.XPathExpression;
33import javax.xml.xpath.XPathExpressionException;
34import javax.xml.xpath.XPathFactory;
35
36import org.w3c.dom.DOMException;
37import org.w3c.dom.Document;
38import org.w3c.dom.Element;
39import org.w3c.dom.Node;
40import org.w3c.dom.NodeList;
41import org.xml.sax.SAXException;
42
43import net.sf.json.JSON;
44import net.sf.json.JSONArray;
45import net.sf.json.JSONObject;
46import net.sf.json.JSONSerializer;
47import net.sf.json.xml.XMLSerializer;
48import eu.clarin.cmdi.mdservice.internal.MDTransformer;
49import eu.clarin.cmdi.mdservice.internal.Utils;
50import eu.clarin.cmdi.mdservice.action.FCSAction;
51import eu.clarin.cmdi.mdservice.action.WorkspaceAction;
52import eu.clarin.cmdi.mdservice.internal.NoStylesheetException;
53
54/**
55 
56 */
57
58
59
60public class FCSRepositories{   
61
62        private static FCSRepositories singleton;
63        private static Document fcsrepositories_document;
64       
65        public static HashMap<String,String> fcs_mapping;
66       
67        public FCSRepositories() {
68                if (fcsrepositories_document == null){
69                        Init();
70                }
71        }
72       
73        public static FCSRepositories getFCSRepositories() {
74                if (singleton == null) {
75                        singleton = new FCSRepositories();
76                } 
77                return singleton;
78        }
79       
80        public void Init(){
81                NodeList ilist, nlist;
82                String type = null, name = null, uri = null;
83                NodeList fcsnodes, fcsrepositories_nodelist;
84                Document fcsdoc;
85                Node fcsnode;
86               
87                Repositories rep = Repositories.getRepositories();
88                fcsrepositories_nodelist = (NodeList ) rep.getRepositoriesNodeList();
89                nlist = fcsrepositories_nodelist.item(0).getChildNodes();
90               
91                fcs_mapping = new HashMap<String,String>();
92                fcsrepositories_document  = Utils.createDocument("Repositories");
93               
94                Element keycontainer = fcsrepositories_document.getDocumentElement(); 
95        //keycontainer.setAttributeNS(null, "Version", "1.0");
96                //xmlns:sru="http://www.loc.gov/zing/srw/
97        keycontainer.setAttributeNS("http://www.w3.org/2000/xmlns/",
98                "xmlns:srw",
99                "http://www.loc.gov/zing/srw/");
100        keycontainer.setAttributeNS("http://www.w3.org/2000/xmlns/",
101                "xmlns:sru",
102                "http://www.loc.gov/zing/srw/");
103
104                nlist = fcsrepositories_nodelist.item(0).getChildNodes();
105                for(int i=0;i<nlist.getLength();i++){
106                        if (nlist.item(i).getNodeName().equals("item")){
107                                fcsnode = fcsrepositories_document.adoptNode(nlist.item(i).cloneNode(true));
108                                fcsrepositories_document.getChildNodes().item(0).appendChild(fcsnode);
109                               
110                                ilist  = fcsnode.getChildNodes();
111                                for(int j=0;j<ilist.getLength();j++){
112                                        if (ilist.item(j).getNodeName().equals("type"))
113                                                type = ilist.item(j).getFirstChild().getNodeValue();
114                                        if (ilist.item(j).getNodeName().equals("name"))
115                                                name = ilist.item(j).getFirstChild().getNodeValue();
116                                        if (ilist.item(j).getNodeName().equals("uri"))
117                                                uri = ilist.item(j).getFirstChild().getNodeValue();
118                                }
119                                if (type.equals("fcs.resource")){
120                                        fcsdoc = FCSRepositories.getFCSData(name);
121                                        addFCS2Repositories(fcsnode, fcsdoc, name);
122                                }
123                        }
124                }
125        }
126       
127        public String getFCSMapping(String context){
128                return this.fcs_mapping.get(context);
129        }
130       
131        public void addFCS2Repositories(Node node, Document fcs_doc, String name){
132                Node extraTermNode, extraTermNodeAdopted, eNode;
133                String ename = null;
134                NodeList termsnodelist, termlist;
135               
136                NodeList elist = fcs_doc.getElementsByTagName("sru:extraTermData");
137                for(int i=0;i<elist.getLength();i++){
138                        extraTermNode = elist.item(i);
139                        eNode = extraTermNode;
140                        while (!eNode.getNodeName().equals("sru:value")){
141                                eNode = eNode.getPreviousSibling();
142                        }
143                        if (eNode.getTextContent().equals(name)){
144                                extraTermNodeAdopted = fcsrepositories_document.adoptNode(extraTermNode.cloneNode(true));
145                                node.appendChild(extraTermNodeAdopted);
146                                termsnodelist = extraTermNodeAdopted.getChildNodes().item(1).getChildNodes();
147                                for(int k=0;k<termsnodelist.getLength();k++){
148                                        termlist = termsnodelist.item(k).getChildNodes();
149                                        for(int l=0;l<termlist.getLength();l++){
150                                                if (termlist.item(l).getNodeName().equals("sru:value")){
151                                                        ename = termlist.item(l).getTextContent();
152                                                        this.fcs_mapping.put(ename, name);
153                                                }
154                                        }
155                                }
156                        }
157                }
158        }
159       
160        public static Document getFCSData(String name){
161               
162                Document doc;
163               
164                FCSAction fcsa = new FCSAction();
165                fcsa.setActionkey("fcs");
166                fcsa.setParam("operation", "scan");
167                fcsa.setParam("scanClause", "fcs.resource");
168                fcsa.setParam("x-context", name);
169               
170                try {
171                        fcsa.execute();
172                       
173                        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
174                DocumentBuilder docBuilder;
175                        try {
176                                docBuilder = docFactory.newDocumentBuilder();               
177                                try {
178                                                doc = docBuilder.parse(fcsa.getResultStream());
179                                                return doc;
180                                } catch (SAXException e) {
181                                                // TODO Auto-generated catch block
182                                               
183                                                e.printStackTrace();
184                                }
185                        } catch (ParserConfigurationException e) {
186                                        // TODO Auto-generated catch block
187                                        e.printStackTrace();
188                        }
189                } catch (Exception e) {
190                        // TODO Auto-generated catch block
191                        e.printStackTrace();
192                }
193                return null;
194               
195        }
196       
197        public InputStream getXMLStream() throws TransformerConfigurationException, TransformerException, TransformerFactoryConfigurationError{
198               
199                InputStream srustream = null;
200                InputStream xmlstream = Utils.document2Stream(fcsrepositories_document.getFirstChild());
201                // convert to sru
202                MDTransformer transformer = new MDTransformer();
203                transformer.configure(Utils.getAppConfig("mdservice"), this.getClass().getClassLoader());
204                //transformer.setSrcFile(getTargetRequest());
205                transformer.setParams(MDTransformer.createParamsMap("xml2sruscan"));
206                try {
207                        srustream = transformer.transformXML(xmlstream);
208                } catch (IOException e) {
209                        // TODO Auto-generated catch block
210                        e.printStackTrace();
211                } catch (InterruptedException e) {
212                        // TODO Auto-generated catch block
213                        e.printStackTrace();
214                } catch (NoStylesheetException e) {
215                        // TODO Auto-generated catch block
216                        e.printStackTrace();
217                }
218                return srustream;
219               
220        }
221
222
223       
224}
225
226
Note: See TracBrowser for help on using the repository browser.