src/main/java/org/imsglobal/lti2/LTI2Servlet.java
@SuppressWarnings("unused")
	public void handleSettingsRequest(HttpServletRequest request,HttpServletResponse response,
			String[] parts) throws java.io.IOException
	{

		String URL = request.getRequestURL().toString();
System.out.println("URL="+URL);
		String scope = parts[4];
System.out.println("scope="+scope);

		String acceptHdr = request.getHeader("Accept");
		String contentHdr = request.getContentType();
		boolean acceptComplex = acceptHdr == null || acceptHdr.indexOf(StandardServices.TOOLSETTINGS_FORMAT) >= 0 ;

System.out.println("accept="+acceptHdr+" ac="+acceptComplex);

		// Check the JSON on PUT and check the oauth_body_hash
		IMSJSONRequest jsonRequest = null;
		JSONObject requestData = null;
		if ( "PUT".equals(request.getMethod()) ) {
			try {
				jsonRequest = new IMSJSONRequest(request);
				requestData = (JSONObject) JSONValue.parse(jsonRequest.getPostBody());
			} catch (Exception e) {
				response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
				doErrorJSON(request,response, jsonRequest, "Could not parse JSON", e);
				return;
			}
		}

		String consumer_key = TEST_KEY;
		String profile = PERSIST.get("profile");
		JSONObject providerProfile = (JSONObject) JSONValue.parse(profile);
		JSONObject security_contract = (JSONObject) providerProfile.get(LTI2Constants.SECURITY_CONTRACT);
		String oauth_secret = (String) security_contract.get(LTI2Constants.SHARED_SECRET);

		// Validate the incoming message
		LtiVerificationResult result = BasicLTIUtil.validateMessage(request, URL, oauth_secret);
		if (!result.getSuccess()) {
			response.setStatus(HttpStatus.SC_FORBIDDEN);
			doErrorJSON(request,response, jsonRequest, result.getMessage(), null);
			return;
		}

		// The URLs for the various settings resources
		String settingsUrl = getServiceURL(request) + SVC_Settings;
		String proxy_url = settingsUrl + "/" + LTI2Util.SCOPE_ToolProxy + "/" + consumer_key;
		String binding_url = settingsUrl + "/" + LTI2Util.SCOPE_ToolProxyBinding + "/" + "TBD";
		String link_url = settingsUrl + "/" + LTI2Util.SCOPE_LtiLink + "/" + "TBD";

		// Load and parse the old settings...
		JSONObject link_settings = LTI2Util.parseSettings(PERSIST.get(LTI2Util.SCOPE_LtiLink));
		JSONObject binding_settings = LTI2Util.parseSettings(PERSIST.get(LTI2Util.SCOPE_ToolProxyBinding));
		JSONObject proxy_settings = LTI2Util.parseSettings(PERSIST.get(LTI2Util.SCOPE_ToolProxy));

		// For a GET request we depend on LTI2Util to do the GET logic
		if ( "GET".equals(request.getMethod()) ) {
			Object obj = LTI2Util.getSettings(request, scope,
				link_settings, binding_settings, proxy_settings,
				link_url, binding_url, proxy_url);

			if ( obj instanceof String ) {
				response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
				doErrorJSON(request,response, jsonRequest, (String) obj, null);
				return;
			}

			if ( acceptComplex ) {
				response.setContentType(StandardServices.TOOLSETTINGS_FORMAT);
			} else {
				response.setContentType(StandardServices.TOOLSETTINGS_SIMPLE_FORMAT);
			}

			JSONObject jsonResponse = (JSONObject) obj;
			response.setStatus(HttpServletResponse.SC_OK);
			PrintWriter out = response.getWriter();
System.out.println("jsonResponse="+jsonResponse);
			out.println(jsonResponse.toString());
			return;
		} else if ( "PUT".equals(request.getMethod()) ) {
			// This is assuming the rule that a PUT of the complex settings
			// format that there is only one entry in the graph and it is
			// the same as our current URL.  We parse without much checking.
			String settings = null;
			try {
				JSONArray graph = (JSONArray) requestData.get(LTI2Constants.GRAPH);
				if ( graph.size() != 1 ) {
					response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
					doErrorJSON(request,response, jsonRequest, "Only one graph entry allowed", null);
					return;
				}
				JSONObject firstChild = (JSONObject) graph.get(0);
				JSONObject custom = (JSONObject) firstChild.get(LTI2Constants.CUSTOM);
				settings = custom.toString();
			} catch (Exception e) {
				settings = jsonRequest.getPostBody();
			}
			PERSIST.put(scope,settings);
System.out.println("Stored settings scope="+scope);
System.out.println("settings="+settings);
			response.setStatus(HttpServletResponse.SC_OK);
		} else {
			response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
			doErrorJSON(request,response, jsonRequest, "Method not handled="+request.getMethod(), null);
		}
	}
@SuppressWarnings("unused")
	public void handleSettingsRequest(HttpServletRequest request,HttpServletResponse response,
			String[] parts) throws java.io.IOException
	{

		String URL = request.getRequestURL().toString();
System.out.println("URL="+URL);
		String scope = parts[4];
System.out.println("scope="+scope);

		String acceptHdr = request.getHeader("Accept");
		String contentHdr = request.getContentType();
		boolean acceptComplex = acceptHdr == null || acceptHdr.indexOf(StandardServices.TOOLSETTINGS_FORMAT) >= 0 ;

System.out.println("accept="+acceptHdr+" ac="+acceptComplex);

		// Check the JSON on PUT and check the oauth_body_hash
		IMSJSONRequest jsonRequest = null;
		JSONObject requestData = null;
		if ( "PUT".equals(request.getMethod()) ) {
			try {
				jsonRequest = new IMSJSONRequest(request);
				requestData = (JSONObject) JSONValue.parse(jsonRequest.getPostBody());
			} catch (Exception e) {
				response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
				doErrorJSON(request,response, jsonRequest, "Could not parse JSON", e);
				return;
			}
		}

		String consumer_key = TEST_KEY;
		String profile = PERSIST.get("profile");
		JSONObject providerProfile = (JSONObject) JSONValue.parse(profile);
		JSONObject security_contract = (JSONObject) providerProfile.get(LTI2Constants.SECURITY_CONTRACT);
		String oauth_secret = (String) security_contract.get(LTI2Constants.SHARED_SECRET);

		// Validate the incoming message
		LtiVerificationResult result = BasicLTIUtil.validateMessage(request, URL, oauth_secret);
		if (!result.getSuccess()) {
			response.setStatus(HttpStatus.SC_FORBIDDEN);
			doErrorJSON(request,response, jsonRequest, result.getMessage(), null);
			return;
		}

		// The URLs for the various settings resources
		String settingsUrl = getServiceURL(request) + SVC_Settings;
		String proxy_url = settingsUrl + "/" + LTI2Util.SCOPE_ToolProxy + "/" + consumer_key;
		String binding_url = settingsUrl + "/" + LTI2Util.SCOPE_ToolProxyBinding + "/" + "TBD";
		String link_url = settingsUrl + "/" + LTI2Util.SCOPE_LtiLink + "/" + "TBD";

		// Load and parse the old settings...
		JSONObject link_settings = LTI2Util.parseSettings(PERSIST.get(LTI2Util.SCOPE_LtiLink));
		JSONObject binding_settings = LTI2Util.parseSettings(PERSIST.get(LTI2Util.SCOPE_ToolProxyBinding));
		JSONObject proxy_settings = LTI2Util.parseSettings(PERSIST.get(LTI2Util.SCOPE_ToolProxy));

		// For a GET request we depend on LTI2Util to do the GET logic
		if ( "GET".equals(request.getMethod()) ) {
			Object obj = LTI2Util.getSettings(request, scope,
				link_settings, binding_settings, proxy_settings,
				link_url, binding_url, proxy_url);

			if ( obj instanceof String ) {
				response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
				doErrorJSON(request,response, jsonRequest, (String) obj, null);
				return;
			}

			if ( acceptComplex ) {
				response.setContentType(StandardServices.TOOLSETTINGS_FORMAT);
			} else {
				response.setContentType(StandardServices.TOOLSETTINGS_SIMPLE_FORMAT);
			}

			JSONObject jsonResponse = (JSONObject) obj;
			response.setStatus(HttpServletResponse.SC_OK);
			PrintWriter out = response.getWriter();
System.out.println("jsonResponse="+jsonResponse);
			out.println(jsonResponse.toString());
			return;
		} else if ( "PUT".equals(request.getMethod()) ) {
			// This is assuming the rule that a PUT of the complex settings
			// format that there is only one entry in the graph and it is
			// the same as our current URL.  We parse without much checking.
			String settings = null;
			try {
				JSONArray graph = (JSONArray) requestData.get(LTI2Constants.GRAPH);
				if ( graph.size() != 1 ) {
					response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
					doErrorJSON(request,response, jsonRequest, "Only one graph entry allowed", null);
					return;
				}
				JSONObject firstChild = (JSONObject) graph.get(0);
				JSONObject custom = (JSONObject) firstChild.get(LTI2Constants.CUSTOM);
				settings = custom.toString();
			} catch (Exception e) {
				settings = jsonRequest.getPostBody();
			}
			PERSIST.put(scope,settings);
System.out.println("Stored settings scope="+scope);
System.out.println("settings="+settings);
			response.setStatus(HttpServletResponse.SC_OK);
		} else {
			response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
			doErrorJSON(request,response, jsonRequest, "Method not handled="+request.getMethod(), null);
		}
	}
@ SuppressWarnings ( "unused" ) public void handleSettingsRequest ( HttpServletRequest request , HttpServletResponse response , String [ ] parts ) throws java . io . IOException { String URL = request . getRequestURL ( ) . toString ( ) ; System . out . println ( "URL=" + URL ) ; String scope = parts [ 4 ] ; System . out . println ( "scope=" + scope ) ; String acceptHdr = request . getHeader ( "Accept" ) ; String contentHdr = request . getContentType ( ) ; boolean acceptComplex = acceptHdr == null || acceptHdr . indexOf ( StandardServices . TOOLSETTINGS_FORMAT ) >= 0 ; System . out . println ( "accept=" + acceptHdr + " ac=" + acceptComplex ) ; // Check the JSON on PUT and check the oauth_body_hash IMSJSONRequest jsonRequest = null ; JSONObject requestData = null ; if ( "PUT" . equals ( request . getMethod ( ) ) ) { try { jsonRequest = new IMSJSONRequest ( request ) ; requestData = ( JSONObject ) JSONValue . parse ( jsonRequest . getPostBody ( ) ) ; } catch ( Exception e ) { response . setStatus ( HttpServletResponse . SC_BAD_REQUEST ) ; doErrorJSON ( request , response , jsonRequest , "Could not parse JSON" , e ) ; return ; } } String consumer_key = TEST_KEY ; String profile = PERSIST . get ( "profile" ) ; JSONObject providerProfile = ( JSONObject ) JSONValue . parse ( profile ) ; JSONObject security_contract = ( JSONObject ) providerProfile . get ( LTI2Constants . SECURITY_CONTRACT ) ; String oauth_secret = ( String ) security_contract . get ( LTI2Constants . SHARED_SECRET ) ; // Validate the incoming message LtiVerificationResult result = BasicLTIUtil . validateMessage ( request , URL , oauth_secret ) ; if ( ! result . getSuccess ( ) ) { response . setStatus ( HttpStatus . SC_FORBIDDEN ) ; doErrorJSON ( request , response , jsonRequest , result . getMessage ( ) , null ) ; return ; } // The URLs for the various settings resources String settingsUrl = getServiceURL ( request ) + SVC_Settings ; String proxy_url = settingsUrl + "/" + LTI2Util . SCOPE_ToolProxy + "/" + consumer_key ; String binding_url = settingsUrl + "/" + LTI2Util . SCOPE_ToolProxyBinding + "/" + "TBD" ; String link_url = settingsUrl + "/" + LTI2Util . SCOPE_LtiLink + "/" + "TBD" ; // Load and parse the old settings... JSONObject link_settings = LTI2Util . parseSettings ( PERSIST . get ( LTI2Util . SCOPE_LtiLink ) ) ; JSONObject binding_settings = LTI2Util . parseSettings ( PERSIST . get ( LTI2Util . SCOPE_ToolProxyBinding ) ) ; JSONObject proxy_settings = LTI2Util . parseSettings ( PERSIST . get ( LTI2Util . SCOPE_ToolProxy ) ) ; // For a GET request we depend on LTI2Util to do the GET logic if ( "GET" . equals ( request . getMethod ( ) ) ) { Object obj = LTI2Util . getSettings ( request , scope , link_settings , binding_settings , proxy_settings , link_url , binding_url , proxy_url ) ; if ( obj instanceof String ) { response . setStatus ( HttpServletResponse . SC_BAD_REQUEST ) ; doErrorJSON ( request , response , jsonRequest , ( String ) obj , null ) ; return ; } if ( acceptComplex ) { response . setContentType ( StandardServices . TOOLSETTINGS_FORMAT ) ; } else { response . setContentType ( StandardServices . TOOLSETTINGS_SIMPLE_FORMAT ) ; } JSONObject jsonResponse = ( JSONObject ) obj ; response . setStatus ( HttpServletResponse . SC_OK ) ; PrintWriter out = response . getWriter ( ) ; System . out . println ( "jsonResponse=" + jsonResponse ) ; out . println ( jsonResponse . toString ( ) ) ; return ; } else if ( "PUT" . equals ( request . getMethod ( ) ) ) { // This is assuming the rule that a PUT of the complex settings // format that there is only one entry in the graph and it is // the same as our current URL.  We parse without much checking. String settings = null ; try { JSONArray graph = ( JSONArray ) requestData . get ( LTI2Constants . GRAPH ) ; if ( graph . size ( ) != 1 ) { response . setStatus ( HttpServletResponse . SC_BAD_REQUEST ) ; doErrorJSON ( request , response , jsonRequest , "Only one graph entry allowed" , null ) ; return ; } JSONObject firstChild = ( JSONObject ) graph . get ( 0 ) ; JSONObject custom = ( JSONObject ) firstChild . get ( LTI2Constants . CUSTOM ) ; settings = custom . toString ( ) ; } catch ( Exception e ) { settings = jsonRequest . getPostBody ( ) ; } PERSIST . put ( scope , settings ) ; System . out . println ( "Stored settings scope=" + scope ) ; System . out . println ( "settings=" + settings ) ; response . setStatus ( HttpServletResponse . SC_OK ) ; } else { response . setStatus ( HttpServletResponse . SC_BAD_REQUEST ) ; doErrorJSON ( request , response , jsonRequest , "Method not handled=" + request . getMethod ( ) , null ) ; } }
So we write obtuse code.
So we write obtuse code .