content: package com.youtube.rest.inventory;
  
  import javax.ws.rs.Consumes;
  import javax.ws.rs.DELETE;
  import javax.ws.rs.POST;
  import javax.ws.rs.PUT;
  import javax.ws.rs.Path;
  import javax.ws.rs.PathParam;
  import javax.ws.rs.Produces;
  import javax.ws.rs.core.MediaType;
  import javax.ws.rs.core.Response;
  
  import org.codehaus.jettison.json.JSONArray;
  import org.codehaus.jettison.json.JSONObject;
  
  import com.youtube.dao.Schema308tube;
  
  @Path("/v3/inventory")
  public class V3_inventory {
  
  	/**
  	 * This method will allow you to insert data the PC_PARTS table.
  	 * This is a example of using JSONArray and JSONObject
  	 * 
  	 * Note: This is apart of the Jersey version 1 but I'm not sure if
  	 * 			its apart of the version 2 Jersey.  Go to http://json.org/java/
  	 * 			if you need the source files.
  	 * 
  	 * @param incomingData
  	 * @return
  	 * @throws Exception
  	 */
  	@POST
  	@Consumes({MediaType.APPLICATION_FORM_URLENCODED,MediaType.APPLICATION_JSON})
  	@Produces(MediaType.APPLICATION_JSON)
  	public Response addPcParts2(String incomingData) throws Exception {
  		
  		String returnString = null;
  		JSONArray jsonArray = new JSONArray();
  		JSONObject jsonObject = new JSONObject();
  		Schema308tube dao = new Schema308tube();
  		
  		try {
  			
  			/*
  			 * We can create a new instance and it will accept a JSON string
  			 * By doing this, we can now access the data.
  			 */
  			JSONObject partsData = new JSONObject(incomingData);
  			System.out.println( "jsonData: " + partsData.toString() );
  			
  			/*
  			 * In order to access the data, you will need to use one of the method in JSONArray
  			 * or JSONObject.  I recommend using the optXXXX methods instead of the get method.
  			 * 
  			 * Example:
  			 * partsData.get("PC_PARTS_TITLE");
  			 * The example above will get you the data, the problem is, if PC_PARTS_TITLE does
  			 * not exist, it will generate a java error.  If you are using get, you need to use
  			 * the has method first partsData.has("PC_PARTS_TITLE");. 
  			 * 
  			 * Example:
  			 * partsData.optString("PC_PARTS_TITLE");
  			 * The optString example above will also return data but if PC_PARTS_TITLE does not
  			 * exist, it will return a BLANK string.
  			 * 
  			 * partsData.optString("PC_PARTS_TITLE", "NULL");
  			 * You can add a second parameter, it will return NULL if PC_PARTS_TITLE does not
  			 * exist.
  			 */
  			int http_code = dao.insertIntoPC_PARTS(partsData.optString("PC_PARTS_TITLE"), 
  														partsData.optString("PC_PARTS_CODE"), 
  														partsData.optString("PC_PARTS_MAKER"), 
  														partsData.optString("PC_PARTS_AVAIL"), 
  														partsData.optString("PC_PARTS_DESC") );
  			
  			if( http_code == 200 ) {
  				/*
  				 * The put method allows you to add data to a JSONObject.
  				 * The first parameter is the KEY (no spaces)
  				 * The second parameter is the Value
  				 */
  				jsonObject.put("HTTP_CODE", "200");
  				jsonObject.put("MSG", "Item has been entered successfully, Version 3");
  				/*
  				 * When you are dealing with JSONArrays, the put method is used to add
  				 * JSONObjects into JSONArray.
  				 */
  				returnString = jsonArray.put(jsonObject).toString();
  			} else {
  				return Response.status(500).entity("Unable to enter Item").build();
  			}
  			
  			System.out.println( "returnString: " + returnString );
  			
  		} catch(Exception e) {
  			e.printStackTrace();
  			return Response.status(500).entity("Server was not able to process your request").build();
  		}
  		
  		return Response.ok(returnString).build();
  	}
  	
  	/**
  	 * This method will allow you to update data in the PC_PARTS table.
  	 * In this example we are using both PathParms and the message body (payload).
  	 * 
  	 * @param brand
  	 * @param item_number
  	 * @param incomingData
  	 * @return
  	 * @throws Exception
  	 */
  	@Path("/{brand}/{item_number}")
  	@PUT
  	@Consumes({MediaType.APPLICATION_FORM_URLENCODED,MediaType.APPLICATION_JSON})
  	@Produces(MediaType.APPLICATION_JSON)
  	public Response updateItem(@PathParam("brand") String brand,
  									@PathParam("item_number") int item_number,
  									String incomingData) 
  								throws Exception {
  		
  		//System.out.println("incomingData: " + incomingData);
  		//System.out.println("brand: " + brand);
  		//System.out.println("item_number: " + item_number);
  		
  		int pk;
  		int avail;
  		int http_code;
  		String returnString = null;
  		JSONArray jsonArray = new JSONArray();
  		JSONObject jsonObject = new JSONObject();
  		Schema308tube dao = new Schema308tube();
  		
  		try {
  			
  			JSONObject partsData = new JSONObject(incomingData); //we are using json objects to parse data
  			pk = partsData.optInt("PC_PARTS_PK", 0);
  			avail = partsData.optInt("PC_PARTS_AVAIL", 0);
  			
  			//call the correct sql method
  			http_code = dao.updatePC_PARTS(pk, avail);
  			
  			if(http_code == 200) {
  				jsonObject.put("HTTP_CODE", "200");
  				jsonObject.put("MSG", "Item has been updated successfully");
  			} else {
  				return Response.status(500).entity("Server was not able to process your request").build();
  			}
  			
  			returnString = jsonArray.put(jsonObject).toString();
  			
  		} catch(Exception e) {
  			e.printStackTrace();
  			return Response.status(500).entity("Server was not able to process your request").build();
  		}
  		
  		return Response.ok(returnString).build();
  	}
  	
  	/**
  	 * This method will allow you to delete data in the PC_PARTS table.
  	 * 
  	 * We really only need the primary key from the message body but I kept
  	 * the same URL path as the update (PUT) to let you see that we can use the same
  	 * URL path for each http method (GET, POST, PUT, DELETE, HEAD)
  	 * 
  	 * @param brand
  	 * @param item_number
  	 * @param incomingData
  	 * @return
  	 * @throws Exception
  	 */
  	@Path("/{brand}/{item_number}")
  	@DELETE
  	@Consumes({MediaType.APPLICATION_FORM_URLENCODED,MediaType.APPLICATION_JSON})
  	@Produces(MediaType.APPLICATION_JSON)
  	public Response deleteItem(@PathParam("brand") String brand,
  									@PathParam("item_number") int item_number,
  									String incomingData) 
  								throws Exception {
  		
  		//System.out.println("incomingData: " + incomingData);
  		//System.out.println("brand: " + brand);
  		//System.out.println("item_number: " + item_number);
  		
  		int pk;
  		int http_code;
  		String returnString = null;
  		JSONArray jsonArray = new JSONArray();
  		JSONObject jsonObject = new JSONObject();
  		Schema308tube dao = new Schema308tube();
  		
  		try {
  			
  			JSONObject partsData = new JSONObject(incomingData);
  			pk = partsData.optInt("PC_PARTS_PK", 0);
  			
  			http_code = dao.deletePC_PARTS(pk);
  			
  			if(http_code == 200) {
  				jsonObject.put("HTTP_CODE", "200");
  				jsonObject.put("MSG", "Item has been deleted successfully");
  			} else {
  				return Response.status(500).entity("Server was not able to process your request").build();
  			}
  			
  			returnString = jsonArray.put(jsonObject).toString();
  			
  		} catch(Exception e) {
  			e.printStackTrace();
  			return Response.status(500).entity("Server was not able to process your request").build();
  		}
  		
  		return Response.ok(returnString).build();
  	}
  }
  