source: main/trunk/greenstone3/src/java/org/greenstone/gsdl3/collection/XMLCollection.java@ 27617

Last change on this file since 27617 was 26446, checked in by kjdon, 12 years ago

trying to tidy up the collection classes. Move some general stuff to servicecluster and reuse the code a bit more

  • Property svn:keywords set to Author Date Id Revision
File size: 5.1 KB
Line 
1package org.greenstone.gsdl3.collection;
2
3import org.greenstone.gsdl3.util.*;
4import org.greenstone.gsdl3.core.*;
5import org.greenstone.gsdl3.service.*;
6
7
8// java XML classes we're using
9import org.w3c.dom.Document;
10import org.w3c.dom.Node;
11import org.w3c.dom.Element;
12import org.w3c.dom.NodeList;
13
14import java.io.File;
15import java.util.HashMap;
16
17import org.apache.log4j.*;
18
19/* for a collection that hasn't been built with greenstone build stuff. expects a documentList in the collectionConfig file, and it stores this. this is where doc level metadata comes from */
20public class XMLCollection
21 extends Collection {
22
23 static Logger logger = Logger.getLogger(org.greenstone.gsdl3.collection.XMLCollection.class.getName());
24
25 protected Element document_list = null;
26 /** overwrite this to keep the document list
27 * find the metadata and display elems from the two config files and add it to the appropriate lists
28 */
29 protected boolean findAndLoadInfo(Element coll_config_xml,
30 Element build_config_xml){
31
32 // metadata
33 Element meta_list = (Element)GSXML.getChildByTagName(coll_config_xml, GSXML.METADATA_ELEM+GSXML.LIST_MODIFIER);
34 addMetadata(meta_list);
35 meta_list = (Element)GSXML.getChildByTagName(build_config_xml, GSXML.METADATA_ELEM+GSXML.LIST_MODIFIER);
36 addMetadata(meta_list);
37
38 meta_list = this.doc.createElement(GSXML.METADATA_ELEM + GSXML.LIST_MODIFIER);
39 GSXML.addMetadata(this.doc, meta_list, "httpPath", this.site_http_address+"/collect/"+this.cluster_name);
40 addMetadata(meta_list);
41
42 // display stuff
43 Element display_list = (Element)GSXML.getChildByTagName(coll_config_xml, GSXML.DISPLAY_TEXT_ELEM+GSXML.LIST_MODIFIER);
44 if (display_list != null) {
45 resolveMacros(display_list);
46 addDisplayItems(display_list);
47 }
48
49 //plugin stuff
50 // Element import_list = (Element)GSXML.getChildByTagName(coll_config_xml, GSXML.IMPORT_ELEM);
51 // if (import_list != null)
52 // {
53 // Element plugin_list = (Element)GSXML.getChildByTagName(import_list, GSXML.PLUGIN_ELEM+GSXML.LIST_MODIFIER);
54 // addPlugins(plugin_list);
55 // }
56
57 // are we a private collection??
58 if (this.metadata_list != null) {
59
60 Element meta_elem = (Element) GSXML.getNamedElement(this.metadata_list, GSXML.METADATA_ELEM, GSXML.NAME_ATT, "public");
61 if (meta_elem != null) {
62
63 String value = GSXML.getValue(meta_elem).toLowerCase().trim();
64 if (value.equals("false")) {
65 is_public = false;
66 }
67 }
68 }
69 Element config_doc_list = (Element)GSXML.getChildByTagName(coll_config_xml, GSXML.DOCUMENT_ELEM+GSXML.LIST_MODIFIER);
70 if (config_doc_list != null) {
71 document_list = (Element)this.doc.importNode(config_doc_list, true);
72 } else {
73 document_list = this.doc.createElement(GSXML.DOCUMENT_ELEM+GSXML.LIST_MODIFIER);
74 }
75 return true;
76
77 }
78
79 /** handles requests made to the ServiceCluster itself
80 *
81 * @param req - the request Element- <request>
82 * @return the result Element - should be <response>
83 */
84 protected Element processMessage(Element request) {
85
86 Element response = this.doc.createElement(GSXML.RESPONSE_ELEM);
87 response.setAttribute(GSXML.FROM_ATT, this.cluster_name);
88 String type = request.getAttribute(GSXML.TYPE_ATT);
89 String lang = request.getAttribute(GSXML.LANG_ATT);
90 response.setAttribute(GSXML.TYPE_ATT, type);
91
92 if (type.equals(GSXML.REQUEST_TYPE_DESCRIBE)) {
93 // create the collection element
94 Element description = (Element)this.description.cloneNode(false);
95 response.appendChild(description);
96 // check the param list
97 Element param_list = (Element) GSXML.getChildByTagName(request, GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER);
98 if (param_list == null) {
99 addAllDisplayInfo(description, lang);
100 description.appendChild(this.service_list);
101 description.appendChild(this.metadata_list);
102 description.appendChild(this.library_param_list);
103 description.appendChild(this.document_list);
104 return response;
105 }
106
107 // go through the param list and see what components are wanted
108 NodeList params = param_list.getElementsByTagName(GSXML.PARAM_ELEM);
109 for (int i=0; i<params.getLength(); i++) {
110
111 Element param = (Element)params.item(i);
112 // Identify the structure information desired
113 if (param.getAttribute(GSXML.NAME_ATT) == GSXML.SUBSET_PARAM ) {
114 String info = param.getAttribute(GSXML.VALUE_ATT);
115 if (info.equals(GSXML.SERVICE_ELEM+GSXML.LIST_MODIFIER)) {
116 description.appendChild(this.service_list);
117 } else if (info.equals(GSXML.METADATA_ELEM+GSXML.LIST_MODIFIER)) {
118 description.appendChild(metadata_list);
119 } else if (info.equals(GSXML.DISPLAY_TEXT_ELEM+GSXML.LIST_MODIFIER)) {
120 addAllDisplayInfo(description, lang);
121
122 } else if (info.equals(GSXML.DOCUMENT_ELEM+GSXML.LIST_MODIFIER)) {
123 description.appendChild(this.document_list);
124 // } else if (info.equals(GSXML.PLUGIN_ELEM+GSXML.LIST_MODIFIER)) {
125 // description.appendChild(this.plugin_item_list);
126 // }
127 } else if (info.equals("libraryParamlist")) {
128
129 description.appendChild(this.library_param_list);
130 }
131
132 }
133 }
134 return response;
135 }
136 return super.processMessage(request);
137
138 }
139
140}
Note: See TracBrowser for help on using the repository browser.