package org.greenstone3.ms; import org.w3c.dom.*; import javax.xml.parsers.*; import javax.xml.transform.*; import javax.xml.transform.dom.*; import javax.xml.transform.stream.*; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.Writer; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.Set; import java.util.StringTokenizer; import org.greenstone.gsdl3.core.MessageRouter; import org.greenstone.gsdl3.util.DBInfo; import org.greenstone.gsdl3.util.GDBMWrapper; import org.greenstone.gsdl3.util.GSFile; import org.greenstone.gsdl3.util.GSXML; import org.greenstone.gsdl3.util.XMLConverter; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class MetadataStats { private Document doc=null; private MessageRouter mr = null; private XMLConverter converter=null; private GDBMWrapper gdbm_src = null; private String site_name = "localsite"; private String node_id = "browselist"; private String DLS_SET = "dls"; private String DC_SET = "dublin"; private String OAI_URL = ""; private boolean status = false; private String oai_Prefix =""; //private PrintWriter pw; // servlet final String destination = "/home/cc108/MRWks1/Greenstone3Project/"; private int TotalDoc = 0; //private int TotalElement = 0; private HashMap MDS_list = new HashMap(); private String collection = null; public ArrayList metadataNameList = new ArrayList(); public String myNewDir; private String collection_Name = null; MetadataElement me; /* The constructor connects to the database and retrieve information for the collection */ private static boolean deleteDir(File dir) { if (dir.isDirectory()) { String[] children = dir.list(); for (int i=0; i"); while(true){ Node message = this.doc.createElement(GSXML.MESSAGE_ELEM); Node request = GSXML.createBasicRequest( this.doc, GSXML.REQUEST_TYPE_PROCESS,collection+"/DocumentMetadataRetrieve","en", ""); Node param_list = this.doc.createElement( GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER); param_list.appendChild(GSXML.createParameter( this.doc, "metadata", "all")); //metadatalist-dc Node documentNode_list = this.doc.createElement( GSXML.DOC_NODE_ELEM+GSXML.LIST_MODIFIER); if(docSize>=300){ docSize = docSize - 300; for(int i = 0; i<300; i++){ Element documentNode = this.doc.createElement(GSXML.DOC_NODE_ELEM); documentNode.setAttribute("nodeID",(String)doc_list.get(counter)); documentNode_list.appendChild(documentNode); counter++; } request.appendChild(param_list); request.appendChild(documentNode_list); message.appendChild(request); Node response = mr.process(message); getAttributes(response); response = null; request = null; param_list = null; documentNode_list = null; //System.gc(); } else if(docSize<300){ for(int i = 0; i")){ part = part.replace("", ""); } else if(part.contains("")){ int location = part.indexOf(""); part = part.substring(0,location-1); } children.add(part); System.out.println("..."+part+".....2"); } gdbm_src.closeDatabase(); parseMetadata(children,"all"); TotalDoc = children.size(); System.out.println("Total Doc22222:"+TotalDoc); status = true; } } } public void getAttributes(Node f){ HashMap UsedMap = new HashMap(); Element e = (Element) f; NodeList metadataNode = e.getElementsByTagName("metadata"); int length = metadataNode.getLength(); for (int j = 0; j < length; j++){ Node aNode = metadataNode.item(j); NamedNodeMap NodeMap = aNode.getAttributes(); Node AttributeNode = NodeMap.item(0); String att_name = AttributeNode.getNodeValue(); if(att_name.indexOf("dls.")!=-1){getAvailableMetadataSets(DLS_SET,UsedMap,"dls");} else if(att_name.indexOf("dc.")!=-1){getAvailableMetadataSets(DC_SET,UsedMap,"dc");} } adjust(UsedMap,e); UsedMap = null; e = null; System.gc(); } /* * MATCH UP THE ELEMENTS FROM BOTH DOCUMENTS AND PRE-DEFINED METADATA SET * MOVE THE ELEMENT FROM NOUSEDMAP TO USEDMAP IF THE ELEMENT HAS NOT BEEN DISCOVERED BEFORE * INCREASE THE COUNTER ONCE THE ELEMENT IS RECONGNIZED * CALCULATE THE TIMES OF ELEMENTS USED AND STORE IT INTO THE LIST */ private void adjust(HashMap UsedMap, Element response){ String DocID;; NodeList nList = response.getElementsByTagName("documentNode"); int length = nList.getLength(); for (int j = 0; j