/* See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * Esri Inc. licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.esri.gpt.control.webharvest.client.csw; import com.esri.gpt.framework.resource.api.Native; import com.esri.gpt.framework.resource.api.SourceUri; import com.esri.gpt.framework.resource.common.CommonPublishable; import com.esri.gpt.framework.resource.common.UrlUri; import com.esri.gpt.framework.util.ResourceXml; import com.esri.gpt.framework.util.Val; import com.esri.gpt.server.csw.client.*; import java.io.IOException; import java.util.Iterator; import java.util.logging.Logger; import javax.xml.transform.TransformerException; /** * CSW service proxy. */ class CswProxy { /** logger */ private static final Logger LOGGER = Logger.getLogger(CswProxy.class.getCanonicalName()); /** service info */ private CswInfo info; /** CSW catalog */ private CswCatalog catalog; /** CSW search request */ private CswSearchRequest request; /** * Creates instance of the proxy. * @param info service info * @param catalog CSW catalog */ public CswProxy(CswInfo info, CswCatalog catalog) { if (info==null) throw new IllegalArgumentException("No info provided."); if (catalog==null) throw new IllegalArgumentException("No catalog provided."); this.info = info; this.catalog = catalog; this.request = new CswSearchRequest(); CswSearchCriteria cswCriteria = new CswSearchCriteria(); cswCriteria.setSearchText(""); CswSearchResponse cswResponse = new CswSearchResponse(); this.request.setCatalog(catalog); this.request.setCriteria(cswCriteria); this.request.setCswSearchResponse(cswResponse); } /** * Gets CSW catalog. * @return CSW catalog */ public CswCatalog getCatalog() { return catalog; } public String read(String sourceUri) throws IOException, NullReferenceException { LOGGER.finer("Reading metadata of source URI: \"" +sourceUri+ "\" through proxy: "+this); sourceUri = Val.chkStr(sourceUri); String fullMetadata = ""; try { request.getMetadataByID(sourceUri); Iterator itr = request.getResponse().getRecords().iterator(); if (itr.hasNext()) { com.esri.gpt.server.csw.client.CswRecord rec = (com.esri.gpt.server.csw.client.CswRecord) itr.next(); fullMetadata = rec.getFullMetadata(); } String mdText = Val.chkStr(fullMetadata); LOGGER.finer("Received metadata of source URI: \"" +sourceUri+ "\" through proxy: "+this); LOGGER.finest(mdText); return mdText; // } catch (NullReferenceException ex) { // throw new IOException("Error accessing metadata. Cause: "+ex.getMessage()); } catch (InvalidOperationException ex) { throw new IOException("Error accessing metadata. Cause: "+ex.getMessage()); } catch (TransformerException ex) { throw new IOException("Error accessing metadata. Cause: "+ex.getMessage()); } } /** * Gets native resource. * @return native resource */ public Native getNativeResource() { return new NativeImpl(); } @Override public String toString() { return info.toString(); } /** * Destroys proxy. */ public void destroy() { info.destroy(); } /** * Native implementation. */ private class NativeImpl extends CommonPublishable implements Native { @Override public SourceUri getSourceUri() { return new UrlUri(info.getUrl()); } @Override public String getContent() throws IOException { ResourceXml resourceXml = new ResourceXml(); return resourceXml.makeResourceXmlFromResponse(info.getUrl()); } } }