Package com.esri.gpt.catalog.search

Source Code of com.esri.gpt.catalog.search.XsltResourceIdentifier

/* 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.catalog.search;
import com.esri.gpt.framework.util.Val;
import com.esri.gpt.framework.xml.DomUtil;
import com.esri.gpt.framework.xml.XsltTemplate;
import com.esri.gpt.framework.xml.XsltTemplates;

import java.io.IOException;
import java.io.StringWriter;
import java.util.HashMap;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;

/**
* Identifies resource and content type
*/
public class XsltResourceIdentifier extends ResourceIdentifier {

// class variables =============================================================
 
/** Cached templates */
private static XsltTemplates XSLTTEMPLATES = new XsltTemplates();

/** XSLT for hinting resource identification : "gpt/metadata/HintResourceIdentification.xslt" */
public static final String XSLT_HINT_RESOURCE_IDENTIFICATION
                            = "gpt/metadata/HintResourceIdentification.xslt";

// instance variables ==========================================================

/** Default constructor. */
public XsltResourceIdentifier() {
}

// properties ==================================================================

// methods =====================================================================

/**
* Guesses the ArcGIS Server SOAP endpoint for a MapServer server.
* </br>Only MapServer services are considered.
* @param server the server URL
* @return the ArcGIS MapServer SOAP endpoint (without "?wsdl", null if unknown)
*/
@Override
public String guessAgsMapServerSoapUrl(String server) {
  String strServer = Val.chkStr(server).toLowerCase();
  return Val.chkStr(guessFromXslt("getAgsMapServerSoapUrl", strServer));
}

/**
* Guesses the ArcGIS Server rest endpoint for a service.
* @param serviceUrl the service URL
* @return the service's ArcGIS Server rest endpoint (null if unknown)
*/
@Override
public String guessAgsServiceRestUrl(String serviceUrl) {
  String strServer = Val.chkStr(serviceUrl).toLowerCase();
  return Val.chkStr(guessFromXslt("getAgsRestServerRootUrl",strServer));
}

/**
* Guesses the ArcIMS content type based upon a supplied resource type.
* @param resourceType the resource type
* @return the ArcIMS content type (empty String if none)
*/
@Override
public String guessArcIMSContentTypeFromResourceType(String resourceType) {
  resourceType = Val.chkStr(resourceType).toLowerCase();
  return Val.chkStr(guessFromXslt("guessArcIMSContentTypeFromResourceType",
      resourceType));
}

/**
* Guesses the ArcIMS content type based upon a given url.
* @param url the resource url
* @return the ArcIMS content type (empty String if none)
*/
@Override
public String guessArcIMSContentTypeFromUrl(String url) {
  url = Val.chkStr(url).toLowerCase();
  return Val.chkStr(guessFromXslt("guessArcIMSContentTypeFromUrl", url));
}

/**
* Guesses a service type from a URL.
*
* @param url
*          the url
* @return the service type
*/
@Override
public String guessServiceTypeFromUrl(String url) {
  url = Val.chkStr(url).toLowerCase();
  return Val.chkStr(guessFromXslt("guessServiceTypeFromUrl", url));
}

/**
* Gets a compiled XSLT template.
* @param xsltPath the path to an XSLT
* @return the compiled template
* @throws IOException if an IO exception occurs
* @throws TransformerException if a transformation exception occurs
* @throws SAXException if a SAX parsing exception occurs
*/
private synchronized XsltTemplate getCompiledTemplate(String xsltPath)
  throws TransformerException {
  String sKey = xsltPath;
  XsltTemplate template = XSLTTEMPLATES.get(sKey);
  if (template == null) {
    template = XsltTemplate.makeTemplate(xsltPath);
    XSLTTEMPLATES.put(sKey,template);
  }
  return template;
}

/**
*
* @param operation
* @param input
* @return Guess
*/
private String guessFromXslt(String operation, String input) {

  try {
    XsltTemplate template = getCompiledTemplate(XSLT_HINT_RESOURCE_IDENTIFICATION);

    Document dom = makeDom();
    if (dom != null) {
      DOMSource source = new DOMSource();

      StringWriter writer = new StringWriter();
      StreamResult result = new StreamResult(writer);
      HashMap<String, String> params = new HashMap<String, String>();
      params.put("operation", operation);
      params.put("input", input);
      template.transform(source, result, params);

      Document outputDom = null;
      try {
        outputDom = DomUtil.makeDomFromString(Val.chkStr(writer.toString()),
            true);
      } catch (ParserConfigurationException e) {
        // TODO Auto-generated catch block
        // e.printStackTrace();
      } catch (SAXException e) {
        // TODO Auto-generated catch block
        // e.printStackTrace();
      } catch (IOException e) {
        // TODO Auto-generated catch block
        // e.printStackTrace();
      }
      Node node = outputDom.getFirstChild();
      String s = node.getTextContent();
      return s;
    }

  } catch (TransformerConfigurationException e) {
    // TODO Auto-generated catch block
    // e.printStackTrace();
  } catch (TransformerException e) {
    // TODO Auto-generated catch block
    // e.printStackTrace();
  }
  return "";
}

/**
* Builds document from xml string
*
* @return dom
*/
private Document makeDom() {
  try {
    String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><dummyXml/>";
    return DomUtil.makeDomFromString(xml, false);
  } catch (ParserConfigurationException e) {
  } catch (SAXException e) {
  } catch (IOException e) {
  }
  return null;
}
}
TOP

Related Classes of com.esri.gpt.catalog.search.XsltResourceIdentifier

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.