<%@ page contentType="text/xml; charset=UTF-8"%><%@ page language="java" %><%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <% java.util.List valid_params = new java.util.ArrayList(); valid_params.add("metadataPrefix"); valid_params.add("from"); valid_params.add("until"); valid_params.add("set"); valid_params.add("verb"); valid_params.add("identifier"); valid_params.add("resumptionToken"); int valid_oai_req = 0; String base_dir = request.getContextPath(); // String oai_url = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+base_dir+"/OAI"; String oai_url = "http://repository.k-int.com/mla/OAI"; org.springframework.web.context.WebApplicationContext ctx = org.springframework.web.context.support.WebApplicationContextUtils.getRequiredWebApplicationContext(application); for ( java.util.Enumeration e = request.getParameterNames(); ( ( e.hasMoreElements() ) && ( valid_oai_req == 0 ) ) ; ) { String p = (String) e.nextElement(); if ( !valid_params.contains(p) ) { System.err.println(p+" is an invalid OAI parameter"); valid_oai_req = 4; } if ( request.getParameterValues(p).length > 1 ) { // Cannot have repeated parameters in an OAI request valid_oai_req = 4; } } java.sql.Timestamp earliest_oai_timestamp = null; String system_name = null; String admin_email = null; String metadata_prefix = (String) request.getParameter("metadataPrefix"); java.sql.Timestamp response_time = new java.sql.Timestamp(System.currentTimeMillis()); java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss'Z'"); String oai_repository_identifier = "mla.repository.k-int.com"; String resumption_token = request.getParameter("resumptionToken"); String from = request.getParameter("from"); String until = request.getParameter("until"); String set = request.getParameter("set"); Long start_trans = null; if ( resumption_token != null ) { String[] parsed_resumption_token = resumption_token.split(";"); if ( parsed_resumption_token.length != 2 ) { valid_oai_req=2; } else { start_trans = new Long(Long.parseLong(parsed_resumption_token[0])); metadata_prefix = parsed_resumption_token[1]; } } else { // If not resumption, there must be a metadataPrefix specified in request if ( metadata_prefix == null ) { valid_oai_req = 4; } } int hpp = 50; org.hibernate.Session sess = null; try { org.hibernate.SessionFactory factory = (org.hibernate.SessionFactory) ctx.getBean("RepoSessionFactory"); sess = factory.openSession(); // Lookup the requested metadata prefix com.k_int.repository.core.datamodel.ItemTypeHDO item_type = com.k_int.repository.core.datamodel.ItemTypeHDO.lookupByCode(sess,metadata_prefix); org.hibernate.Criteria crit = sess.createCriteria(com.k_int.repository.core.datamodel.RepoTransactionHDO.class); crit.setMaxResults(hpp+1); if ( from != null ) { java.util.Date from_ts = formatter.parse(from, new java.text.ParsePosition(0)); if ( from_ts == null ) { System.err.println("from timestamp is null"); valid_oai_req = 1; } else { crit.add( org.hibernate.criterion.Restrictions.gt( "transactionTimestamp", from_ts)); } } if ( until != null ) { java.util.Date until_ts = formatter.parse(until, new java.text.ParsePosition(0)); if ( until_ts == null ) { System.err.println("until timestamp is null"); valid_oai_req = 1; } else { crit.add( org.hibernate.criterion.Restrictions.lt( "transactionTimestamp", until_ts)); } } if ( set != null ) { // crit.add( org.hibernate.criterion.Restrictions.eq( "repoObj.collection.name", set)); crit.createCriteria("repoObj").createCriteria("collection").add( org.hibernate.criterion.Restrictions.eq( "name", set)); } if ( start_trans != null ) { crit.add( org.hibernate.criterion.Restrictions.ge( "id", start_trans)); } crit.addOrder( org.hibernate.criterion.Order.asc("id") ); java.util.List repo_items = crit.list(); String query_string = request.getQueryString(); if ( query_string != null ) { query_string = query_string.replace("&","&").replace("<","<").replace(">",">"); } else query_string = ""; String req_str = oai_url + "?" + java.net.URLEncoder.encode(query_string,"UTF8"); %> <%=formatter.format(response_time)%> <%=req_str%> <% if ( valid_oai_req != 0 ) { switch ( valid_oai_req ) { case 4: %><% break; case 2: %><% break; default: case 1: %><% break; } } else if ( repo_items.size() == 0 ) { %><% } else { %> <% int ctr = 0; java.util.Iterator i = repo_items.iterator(); java.util.List processed_so_far = new java.util.ArrayList(); for ( ; ( i.hasNext() && ( ctr < 50 ) ); ) { com.k_int.repository.core.datamodel.RepoTransactionHDO trans = (com.k_int.repository.core.datamodel.RepoTransactionHDO) i.next(); Long obj_id = trans.getRepoObj().getId(); ctr++; if ( processed_so_far.contains(obj_id) ) { // Skipping as already processed an item with this id } else { processed_so_far.add(obj_id); String status = ""; if ( trans.getRepoObj().getStatus() == 1 ) status=" status=\"deleted\""; %>
> oai:<%=oai_repository_identifier%>:<%=trans.getRepoObj().getCollection().getName()%>:<%=trans.getRepoObj().getId()%> <%=formatter.format(trans.getTransactionTimestamp())%>
<% } } if ( i.hasNext() ) { com.k_int.repository.core.datamodel.RepoTransactionHDO trans = (com.k_int.repository.core.datamodel.RepoTransactionHDO) i.next(); %><%=trans.getId()%>;<%=metadata_prefix%><% } %>
<% } %> <% } finally { try { sess.close(); } catch ( Exception e ) { e.printStackTrace(); } } %>