package com.esri.gpt.control.rest.repositories; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import com.esri.gpt.catalog.search.SearchConfig; import com.esri.gpt.framework.jsf.MessageBroker; import com.esri.gpt.framework.util.Val; /** * @author TM * * The Class RepositoriesResultSetWrapper. * * Generates csw repository records from the database and appends gpt.xml * repositories */ public class RepositoriesResultSetWrapper extends RepositoriesResultSet { // instance variables ========================================================== /** The _rs. */ private ResultSet _rs; /** The _next iter. */ private int _nextIter = -1; /** The _search repos. */ private LinkedHashMap<String, Map<String, String>> _searchRepos; /** The repositories result metadata. */ private RepositoriesResultMetadata repositoriesResultMetadata; // constructors ================================================================ /** * Instantiates a new repositories result set wrapper. * * @param rs the rs */ public RepositoriesResultSetWrapper(ResultSet rs) { this._rs = rs; boolean allowExt = SearchConfig.getConfiguredInstance().getAllowExternalSearch(); _searchRepos = new LinkedHashMap<String, Map<String, String>>(); LinkedHashMap<String, Map<String, String>> tmpSearchRepos = SearchConfig.getConfiguredInstance().getSearchFactoryRepos(); Iterator<String>iter = tmpSearchRepos.keySet().iterator(); while(iter.hasNext()) { String key = Val.chkStr(iter.next()); if(key.equals("")) { continue; } Map<String, String> params = tmpSearchRepos.get(key); Iterator<String> keyParamsIter = params.keySet().iterator(); while(keyParamsIter.hasNext()) { String paramsKey = keyParamsIter.next(); if(paramsKey.equals("labelResourceKey") && !Val.chkStr(params.get(paramsKey)).equals("")) { Map<String, String> params1 = new LinkedHashMap<String, String>(); Iterator<String> iter1 = params.keySet().iterator(); while(iter1.hasNext()) { String key1 = iter1.next(); if(key1.toLowerCase().equals(("key"))) { params1.put("id", params.get(key1)); } else if (key1.toLowerCase().equals(("labelresourcekey"))) { MessageBroker messageBroker = new MessageBroker(); messageBroker.setBundleBaseName("gpt.resources.gpt"); params1.put("name", messageBroker.retrieveMessage(params.get(key1))); } } if(allowExt || key.toLowerCase().equals("local")) _searchRepos.put(key, params1); break; } } } } // private methods ============================================================= /** * Gets the search repos. * * @return the search repos */ private LinkedHashMap<String, Map<String, String>> getSearchRepos() { return _searchRepos; } // public methods ============================================================== /* (non-Javadoc) * @see com.esri.gpt.control.rest.repositories.RepositoriesResultSet#getMetaData() */ @Override public ResultSetMetaData getMetaData() throws SQLException { if (_nextIter < 0) { return this._rs.getMetaData(); } else { return new RepositoriesResultMetadata(this.getSearchRepos(), _nextIter); } } /* (non-Javadoc) * @see com.esri.gpt.control.rest.repositories.RepositoriesResultSet#next() */ public boolean next() throws SQLException { boolean rsNext = _rs.next(); if(rsNext) { return true; } else { _nextIter++; return _nextIter < getSearchRepos().size(); } } public boolean isDbFinishedIterating() { return _nextIter >= 0; } /* (non-Javadoc) * @see com.esri.gpt.control.rest.repositories.RepositoriesResultSet#getObject(int) */ public Object getObject(int i) throws SQLException { if (_nextIter < 0) { return this._rs.getObject(i); } else { i = i -1; String key = this.getSearchRepos().keySet().toArray()[_nextIter].toString(); return this.getSearchRepos().get(key).values().toArray()[i]; } } }