/*
 * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 * $Id: JAXRSClient.java 74172 2014-10-30 14:11:06Z supol $
 */
package com.sun.ts.tests.jaxrs.ee.rs.beanparam.form.plain;

import javax.ws.rs.core.Response.Status;

import com.sun.ts.tests.jaxrs.ee.rs.Constants;
import com.sun.ts.tests.jaxrs.ee.rs.beanparam.BeanParamCommonClient;

/*
 * @class.setup_props: webServerHost;
 *                     webServerPort;
 *                     ts_home;
 * @since 2.0.1                     
 */
public class JAXRSClient extends BeanParamCommonClient {
	private static final long serialVersionUID = 201L;

	public JAXRSClient() {
		setContextRoot("/jaxrs_ee_rs_beanparam_form_plain_web/resource");
	}

	/**
	 * Entry point for different-VM execution. It should delegate to method
	 * run(String[], PrintWriter, PrintWriter), and this method should not
	 * contain any test configuration.
	 */
	public static void main(String[] args) {
		new JAXRSClient().run(args);
	}

	/* Run test */

	/*
	 * @testName: formParamEntityWithConstructorTest
	 * @assertion_ids: JAXRS:SPEC:3.5; JAXRS:SPEC:5.2;
	 *                 JAXRS:JAVADOC:6; JAXRS:JAVADOC:12; JAXRS:JAVADOC:12.1;
	 * @test_Strategy: Verify that named FormParam is handled properly
	 */
	public void formParamEntityWithConstructorTest() throws Fault {
		super.paramEntityWithConstructorTest();
	}

	/*
	 * @testName: formParamEntityWithValueOfTest
	 * @assertion_ids: JAXRS:SPEC:3.5; JAXRS:SPEC:5.3;
	 *                 JAXRS:JAVADOC:6; JAXRS:JAVADOC:12; JAXRS:JAVADOC:12.1;
	 * @test_Strategy: Verify that named FormParam is handled properly
	 */
	public void formParamEntityWithValueOfTest() throws Fault {
		super.paramEntityWithValueOfTest();
	}

	/*
	 * @testName: formParamEntityWithFromStringTest
	 * @assertion_ids: JAXRS:SPEC:3.5; JAXRS:SPEC:5.3;
	 *                 JAXRS:JAVADOC:6; JAXRS:JAVADOC:12; JAXRS:JAVADOC:12.1;
	 * @test_Strategy: Verify that named FormParam is handled properly
	 */
	public void formParamEntityWithFromStringTest() throws Fault {
		super.paramEntityWithFromStringTest();
	}

	/*
	 * @testName: formParamSetEntityWithFromStringTest
	 * @assertion_ids: JAXRS:SPEC:3.5; JAXRS:SPEC:5.4;
	 * 					JAXRS:JAVADOC:6; JAXRS:JAVADOC:12; JAXRS:JAVADOC:12.1;
	 * @test_Strategy: Verify that named FormParam is handled properly
	 */
	public void formParamSetEntityWithFromStringTest() throws Fault {
		super.paramCollectionEntityWithFromStringTest(CollectionName.SET);
	}

	/*
	 * @testName: formParamSortedSetEntityWithFromStringTest
	 * @assertion_ids: JAXRS:SPEC:3.5; JAXRS:SPEC:5.4;
	 * 					JAXRS:JAVADOC:6; JAXRS:JAVADOC:12; JAXRS:JAVADOC:12.1;
	 * @test_Strategy: Verify that named FormParam is handled properly
	 */
	public void formParamSortedSetEntityWithFromStringTest() throws Fault {
		super.paramCollectionEntityWithFromStringTest(CollectionName.SORTED_SET);
	}

	/*
	 * @testName: formParamListEntityWithFromStringTest
	 * @assertion_ids: JAXRS:SPEC:3.5; JAXRS:SPEC:5.4;
	 * 					JAXRS:JAVADOC:6; JAXRS:JAVADOC:12; JAXRS:JAVADOC:12.1;
	 * @test_Strategy: Verify that named FormParam is handled properly
	 */
	public void formParamListEntityWithFromStringTest() throws Fault {
		super.paramCollectionEntityWithFromStringTest(CollectionName.LIST);
	}

	/*
	 * @testName: formFieldParamEntityWithConstructorTest
	 * @assertion_ids: JAXRS:SPEC:3.5; JAXRS:SPEC:5.2;
	 *                 JAXRS:JAVADOC:6;
	 * @test_Strategy: Verify that named FormParam is handled properly
	 */
	public void formFieldParamEntityWithConstructorTest() throws Fault {
		super.fieldEntityWithConstructorTest();
	}

	/*
	 * @testName: formFieldParamEntityWithValueOfTest
	 * @assertion_ids: JAXRS:SPEC:3.5; JAXRS:SPEC:5.3;
	 *                 JAXRS:JAVADOC:6;
	 * @test_Strategy: Verify that named FormParam is handled properly
	 */
	public void formFieldParamEntityWithValueOfTest() throws Fault {
		super.fieldEntityWithValueOfTest();
	}

	/*
	 * @testName: formFieldParamEntityWithFromStringTest
	 * @assertion_ids: JAXRS:SPEC:3.5; JAXRS:SPEC:5.3;
	 *                 JAXRS:JAVADOC:6;
	 * @test_Strategy: Verify that named FormParam is handled properly
	 */
	public void formFieldParamEntityWithFromStringTest() throws Fault {
		super.fieldEntityWithFromStringTest();
	}

	/*
	 * @testName: formFieldParamSetEntityWithFromStringTest
	 * @assertion_ids: JAXRS:SPEC:3.5; JAXRS:SPEC:5.4;
	 * 					JAXRS:JAVADOC:6;
	 * @test_Strategy: Verify that named FormParam is handled properly
	 */
	public void formFieldParamSetEntityWithFromStringTest() throws Fault {
		super.fieldCollectionEntityWithFromStringTest(CollectionName.SET);
	}

	/*
	 * @testName: formFieldParamSortedSetEntityWithFromStringTest
	 * @assertion_ids: JAXRS:SPEC:3.5; JAXRS:SPEC:5.4;
	 * 					JAXRS:JAVADOC:6;
	 * @test_Strategy: Verify that named FormParam is handled properly
	 */
	public void formFieldParamSortedSetEntityWithFromStringTest() throws Fault {
		super.fieldCollectionEntityWithFromStringTest(CollectionName.SORTED_SET);
	}

	/*
	 * @testName: formFieldParamListEntityWithFromStringTest
	 * @assertion_ids: JAXRS:SPEC:3.5; JAXRS:SPEC:5.4;
	 * 					JAXRS:JAVADOC:6;
	 * @test_Strategy: Verify that named FormParam is handled properly
	 */
	public void formFieldParamListEntityWithFromStringTest() throws Fault {
		super.fieldCollectionEntityWithFromStringTest(CollectionName.LIST);
	}

	/*
	 * @testName: formParamEntityWithEncodedTest
	 * @assertion_ids: JAXRS:SPEC:3.1; JAXRS:SPEC:7;
	 * 					JAXRS:SPEC:12.2;
	 * @test_Strategy: Verify that named FormParam @Encoded is handled
	 */
	public void formParamEntityWithEncodedTest() throws Fault {
		super.paramEntityWithEncodedTest();
	}

	/*
	 * @testName: formFieldParamEntityWithEncodedTest
	 * @assertion_ids: JAXRS:SPEC:3.1; JAXRS:SPEC:7;
	 * @test_Strategy: Verify that named FormParam @Encoded is handled
	 */
	public void formFieldParamEntityWithEncodedTest() throws Fault {
		super.fieldEntityWithEncodedTest();
	}

	/*
	 * @testName: formParamThrowingWebApplicationExceptionTest
	 * @assertion_ids: JAXRS:SPEC:12.3;
	 * @test_Strategy: Exceptions thrown during construction of parameter 
	 *   			   values are treated the same as exceptions thrown
	 *				   during construction of field or bean property values, 
	 *				   see Section 3.2.
	 */
	public void formParamThrowingWebApplicationExceptionTest() throws Fault {
		super.paramThrowingWebApplicationExceptionTest();
		super.paramThrowingWebApplicationExceptionTest();
	}

	/*
	 * @testName: formFieldThrowingWebApplicationExceptionTest
	 * @assertion_ids: JAXRS:SPEC:3.1; JAXRS:SPEC:8;
	 * @test_Strategy: A WebApplicationException thrown during construction of 
	 * 					field or property values using 2 or 3 above is 
	 * 					processed directly as described in section 3.3.4.
	 */
	public void formFieldThrowingWebApplicationExceptionTest() throws Fault {
		super.fieldThrowingWebApplicationExceptionTest();
		super.fieldThrowingWebApplicationExceptionTest();
	}

	/*
	 * @testName: formParamThrowingIllegalArgumentExceptionTest
	 * @assertion_ids: JAXRS:SPEC:12.3;
	 * @test_Strategy: Exceptions thrown during construction of parameter values 
	 * 					are treated the same as exceptions thrown during 
	 * 					construction of field or bean property values, see 
	 * 					section 3.2.
	 */
	public void formParamThrowingIllegalArgumentExceptionTest() throws Fault {
		setProperty(Property.UNORDERED_SEARCH_STRING, Status.BAD_REQUEST.name());
		super.paramThrowingIllegalArgumentExceptionTest();
		setProperty(Property.UNORDERED_SEARCH_STRING, Status.BAD_REQUEST.name());
		super.paramThrowingIllegalArgumentExceptionTest();
	}

	/*
	 * @testName: formFieldThrowingIllegalArgumentExceptionTest 
	 * @assertion_ids: JAXRS:SPEC:9; JAXRS:SPEC:9.2; 
	 * 					JAXRS:SPEC:10;
	 * @test_Strategy: Other exceptions thrown during construction of field or 
	 * 					property values using 2 or 3 above are treated as client 
	 * 					errors:
	 *
	 *					if the field or property is annotated with @FormParam 
	 *					or @CookieParam then an implementation MUST generate a 
	 *					WebApplicationException that wraps the thrown exception 
	 *					with a client error response (400 status) and no entity.
	 */
	public void formFieldThrowingIllegalArgumentExceptionTest() throws Fault {
		setProperty(Property.UNORDERED_SEARCH_STRING, Status.BAD_REQUEST.name());
		super.fieldThrowingIllegalArgumentExceptionTest();
		setProperty(Property.UNORDERED_SEARCH_STRING, Status.BAD_REQUEST.name());
		super.fieldThrowingIllegalArgumentExceptionTest();
	}

	@Override
	protected String buildRequest(String param) {
		if (!"".equals(param)) {
			setProperty(Property.CONTENT, "ANYTHING&", param, "&",
					Constants.INNER, param);
		} else {
			setProperty(Property.CONTENT, "ANYTHING");
		}
		return buildRequest(Request.POST, fieldBeanParam);
	}

	@Override
	protected//
	String buildRequestForException(String param, int entity) throws Fault {
		if (entity == 1)
			setProperty(Property.CONTENT, "ANYTHING&", param);
		else
			setProperty(Property.CONTENT, "ANYTHING&", Constants.INNER, param);
		return buildRequest(Request.POST, fieldBeanParam);
	}
}
