Package com.esri.gpt.server.assertion.handler

Source Code of com.esri.gpt.server.assertion.handler.AsnApiHandler

/* 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.server.assertion.handler;
import com.esri.gpt.server.assertion.AsnConfig;
import com.esri.gpt.server.assertion.components.AsnContext;
import com.esri.gpt.server.assertion.components.AsnOperation;
import com.esri.gpt.server.assertion.components.AsnValueType;

import java.io.PrintWriter;
import java.io.StringWriter;

/**
* Generates the API associated with configured operations.
*/
public class AsnApiHandler extends AsnOperationHandler {
 
  /** constructors ============================================================ */
 
  /** Default constructor */
  public AsnApiHandler() {}
 
  /** methods ================================================================= */
 
  /**
   * Handles an assertion operation.
   * @param context the assertion operation context
   * @throws Exception if a processing exception occurs
   */
  public void handle(AsnContext context) throws Exception {
       
    // initialize
    context.getAuthorizer().authorizeQuery(context);
    AsnConfig config = context.getAssertionFactory().getConfiguration();
    PrintWriter writer = null;
    context.getOperationResponse().setOutputFormat("text/plain");
    try {
      String msg;
      StringWriter sw = new StringWriter();
      writer = new PrintWriter(sw);
     
      // header
      writer.println("Assertion Operations");
      writer.println("  enabled="+config.getAreAssertionsEnabled());
      writer.println();
      writer.flush();
     
      // request patterns
      writer.println("Service Request Patterns");
      msg = "[contextPath]/assertion/operations";
      writer.println("  "+msg);
      msg = "[contextPath]/assertion?s=[subject]&p=[predicate]&v=[value]&f=[format]";
      msg += "&start=[start]&max=[max]";
      writer.println("  "+msg);
      writer.println();
      writer.flush();
     
      // request parameters
      writer.println("Service Request Parameters");
      msg = "  s=[subject]   - always required";
      writer.println(msg);
      msg = "  p=[predicate] - always required";
      writer.println(msg);
      msg = "  v=[value]     - only required for operations that have a defined valueType,";
      writer.println(msg);
      msg = "                  a value can be posted in the HTTP request body";
      writer.println(msg);
      msg = "  f=[format]    - response format (optional, xml|json|pjson)";
      writer.println(msg);
      msg = "  start=[start] - starting record";
      msg += " (optional, for queries that return multiple records)";
      writer.println(msg);     
      msg = "  max=[max]     - max records to return";
      msg += " (optional, for queries that return multiple records)";
      writer.println(msg);
      writer.println();
      writer.flush();
     
      // list all operations
      for (AsnOperation op: config.getOperations().values()) {
        String subject = op.getSubject().getURNPrefix();
        if (op.getSubject().getRequiresValuePart()) {
          subject = subject+":[identifier]";
        }
        String predicate = op.getPredicate().getURN();
        writer.println("Operation");
        writer.println("  subject="+subject);
        writer.println("  predicate="+predicate);
       
        // value type
        AsnValueType vType = null;
        if (op.getValue() != null) vType = op.getValue().getValueType();
        if ((vType != null) && vType.getRequired()) {
          String vtName = vType.getValueTypeName();
          if (vtName.equals(AsnValueType.VALUE_TYPENAME_FREE)) {
            writer.println("  valueType="+vtName+", maxLength="+vType.getMaxCharacters());
           } else if (vtName.equals(AsnValueType.VALUE_TYPENAME_CONSTRAINED)) {
            if (vType.getSupportedValues() != null) {
              writer.println("  valueType="+vtName);
              for (String supported: vType.getSupportedValues().values()) {
                writer.println("    supportedValue="+supported);
              }
            }
          }
        }
       
        // index reference
        if (op.getIndexReference() != null) {
          writer.println("  indexReference="+op.getIndexReference().getName());
        }
       
        // authentication required
        boolean authRequired = op.getAuthPolicy().getAuthenticationRequired();
        writer.println("  authenticationRequired="+authRequired);
        writer.println();
        writer.flush();
      }
     
      writer.flush();
      context.getOperationResponse().setResponseString(sw.toString());
    } finally {
      try {if (writer != null) writer.close();} catch (Exception ef) {}
    }
   
  }

}
TOP

Related Classes of com.esri.gpt.server.assertion.handler.AsnApiHandler

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.