diff --git a/workflow/engine/methods/services/Rest/CRUD.java b/workflow/engine/methods/services/Rest/CRUD.java new file mode 100644 index 000000000..d26b07971 --- /dev/null +++ b/workflow/engine/methods/services/Rest/CRUD.java @@ -0,0 +1,203 @@ +// Main class to sent differen kind of messages to the http server +import org.apache.http.impl.client.DefaultHttpClient; + +// Enter CRUD memebers +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPut; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpDelete; + +// Used to set JSON or XML messages request +import org.apache.http.entity.StringEntity; + +// Needed for response fetch goal +import org.apache.http.HttpResponse; +import org.apache.http.HttpEntity; +import org.apache.http.util.EntityUtils; + +/** +* Single class containing functions to show how to use GET,POST,PUT,DELETE methods. +*/ +public class CRUD +{ + private static String m_user = "workflow"; // This member variable must be changed to its own dev workspace + + private static void PostSample() + { + System.out.println("POST: Enter login params\n"); + + String loginParamsXML = "\n" + +"\n" + +"admin\n" + +"admin\n" + +""; + String URI = "http://"+m_user+".pmos.colosa.net/rest/"+m_user+"/login/"; + + System.out.println( "Request: "+URI + "\n"+ loginParamsXML + "\n"); + + DefaultHttpClient httpClient = new DefaultHttpClient(); + HttpPost postRequest = new HttpPost(URI); + try + { + StringEntity input = new StringEntity( loginParamsXML); + input.setContentType("application/xml"); + postRequest.setEntity(input); + HttpResponse httpResponse = httpClient.execute(postRequest); + + HttpEntity responseEntity = httpResponse.getEntity(); + if( responseEntity != null) + { + String response = new String(); + response = EntityUtils.toString( responseEntity); + System.out.println( "Response: " + response + "\n"); + } + } + catch( java.io.IOException x) + { + throw new RuntimeException("I/O error: " + x.toString()); + } + } + + private static void GetSample() + { + System.out.println("GET: Display TRANSLATION table row\n"); + + String URI = "http://"+m_user+".pmos.colosa.net/rest/"+m_user+"/TRANSLATION/LABEL/LOGIN/en/"; + System.out.println( "Request: " + URI + "\n"); + + DefaultHttpClient httpClient = new DefaultHttpClient(); + HttpGet getRequest = new HttpGet(URI); + try + { + HttpResponse httpResponse = httpClient.execute(getRequest); + + HttpEntity responseEntity = httpResponse.getEntity(); + if( responseEntity != null) + { + String response = new String(); + response = EntityUtils.toString( responseEntity); + System.out.println( "Response: " + response + "\n"); + } + } + catch( java.io.IOException x) + { + throw new RuntimeException("I/O error: " + x.toString()); + } + } + + private static void AnotherPostSample() + { + System.out.println("POST: Insert new row in TRANLATION\n"); + + String URI = "http://"+m_user+".pmos.colosa.net/rest/"+m_user+"/TRANSLATION/"; + String newRow = "BUTTON/ESCAPE/en/sample/2012-05-05/"; + System.out.println( "Request: " + URI + " new row: " + newRow + "\n"); + URI = URI + newRow; + + DefaultHttpClient httpClient = new DefaultHttpClient(); + HttpPost postRequest = new HttpPost(URI); + try + { + HttpResponse httpResponse = httpClient.execute(postRequest); + + HttpEntity responseEntity = httpResponse.getEntity(); + if( responseEntity != null) + { + String response = new String(); + if(response.isEmpty()) + { + System.out.println( "Response: Status code: " + httpResponse.getStatusLine().getStatusCode()+ "\n"); + return; + } + response = EntityUtils.toString( responseEntity); + System.out.println( "Response: " + response + "\n"); + } + } + catch( java.io.IOException x) + { + throw new RuntimeException("I/O error: " + x.toString()); + } + } + + private static void PutSample() + { + System.out.println("POST: Update a row in TRANLATION\n"); + + String URI = "http://"+m_user+".pmos.colosa.net/rest/"+m_user+"/TRANSLATION/"; + String index = "BUTTON/ESCAPE/en/"; + String updateData = "changesample/2011-07-06/"; + + System.out.println( "Request: " + URI + " index: " + index + " updateData: " + updateData + "\n"); + URI = URI + index + updateData; + + DefaultHttpClient httpClient = new DefaultHttpClient(); + HttpPut putRequest = new HttpPut(URI); + try + { + HttpResponse httpResponse = httpClient.execute(putRequest); + + HttpEntity responseEntity = httpResponse.getEntity(); + if( responseEntity != null) + { + String response = new String(); + if(response.isEmpty()) + { + System.out.println( "Response: Status code: " + httpResponse.getStatusLine().getStatusCode()+ "\n"); + return; + } + response = EntityUtils.toString( responseEntity); + System.out.println( "Response: " + response + "\n"); + } + } + catch( java.io.IOException x) + { + throw new RuntimeException("I/O error: " + x.toString()); + } + } + + private static void DeleteSample() + { + System.out.println("DELETE: Remove a row in TRANLATION\n"); + + String URI = "http://"+m_user+".pmos.colosa.net/rest/"+m_user+"/TRANSLATION/"; + String index = "BUTTON/ESCAPE/en/"; + + System.out.println( "Request: " + URI + "index:" + index + "\n"); + URI = URI + index; + + DefaultHttpClient httpClient = new DefaultHttpClient(); + HttpDelete deleteRequest = new HttpDelete(URI); + try + { + HttpResponse httpResponse = httpClient.execute(deleteRequest); + + HttpEntity responseEntity = httpResponse.getEntity(); + if( responseEntity != null) + { + String response = new String(); + if(response.isEmpty()) + { + System.out.println( "Response: Status code: " + httpResponse.getStatusLine().getStatusCode()+ "\n"); + return; + } + response = EntityUtils.toString( responseEntity); + System.out.println( "Response: " + response + "\n"); + } + } + catch( java.io.IOException x) + { + throw new RuntimeException("I/O error: " + x.toString()); + } + } + + public static void main(String args[]) + { + System.out.println("CRUD samples."); + PostSample(); + GetSample(); + AnotherPostSample(); + PutSample(); + DeleteSample(); + + } +} \ No newline at end of file diff --git a/workflow/engine/methods/services/Rest/CURLMessage.php b/workflow/engine/methods/services/Rest/CURLMessage.php new file mode 100644 index 000000000..ae2ed0dbe --- /dev/null +++ b/workflow/engine/methods/services/Rest/CURLMessage.php @@ -0,0 +1,149 @@ +restServer = PROTOCOL_HTTP . COLON.PATH_SEP . PATH_SEP; + $this->restServer .= $_SERVER['SERVER_NAME'] . PATH_SEP; + $this->restServer .= $this->serviceTechnic . PATH_SEP . $workspace . PATH_SEP; + + $this->ch = curl_init(); + curl_setopt($this->ch,CURLOPT_TIMEOUT, 2); + curl_setopt($this->ch,CURLOPT_POST, 1); + curl_setopt($this->ch,CURLOPT_RETURNTRANSFER, 1); + } + /** + * set the message in order to follow the message format + */ + abstract protected function format(array $message); + /** + * Set properties used in a simpleMessage Class like a set in a URI, or formatted as a JSon msg. + */ + abstract protected function setMoreProperties($messageFormated); + /** + * Attach the method to the restServer path, set the type of the message, and the message itself. + */ + protected function setMessageProperties($method,array $message) + { + $messageFormated = $this->format($message); + $this->server_method = $this->restServer . $method; + $this->setMoreProperties($messageFormated); + } + /** + * Send or execute(curl notation) the message using a rest method + **/ + public function send($method,array $message) + { + self::setMessageProperties($method,$message); + $this->output = curl_exec($this->ch); + return $this->output; + } + /** + * Set the message to GET method type + */ + public function sendGET($method,array $message) + { + curl_setopt($this->ch, CURLOPT_HTTPGET,true); + return $this->send($method,$message); + } + /** + * Set the message to POST method type + */ + public function sendPOST($method,array $message) + { + curl_setopt($this->ch,CURLOPT_POST,true); + return $this->send($method,$message); + } + /** + * Set the message to PUT method type + */ + public function sendPUT($method,array $message) + { + curl_setopt($this->ch,CURLOPT_PUT,true); + return $this->send($method,$message); + } + /** + * Set the message to DELETE method type + */ + public function sendDELETE($method,array $message) + { + curl_setopt($this->ch,CURLOPT_CUSTOMREQUEST,"DELETE"); + return $this->send($method,$message); + } + /** + * Display all the data that the response could got. + */ + public function displayResponse() + { + $error = curl_error($this->ch); + $result = array( 'header' => '', + 'body' => '', + 'curl_error' => '', + 'http_code' => '', + 'last_url' => ''); + if ($error != ""){ + $result['curl_error'] = $error; + return $result; + } + $response = $this->output; + $header_size = curl_getinfo($this->ch,CURLINFO_HEADER_SIZE); + $result['header'] = substr($response,0,$header_size); + $result['body'] = substr($response,$header_size); + $result['http_code'] = curl_getinfo($this -> ch,CURLINFO_HTTP_CODE); + $result['last_url'] = curl_getinfo($this -> ch,CURLINFO_EFFECTIVE_URL); + + echo $this->type." Response: ".$response."
"; + foreach($result as $index => $data) + { + if($data != ""){ + echo $index . "=" . $data . "
"; + } + } + echo "
"; + } + /** + * Close the Curl session using the Curl Handle set by curl_init() function. + */ + public function close() + { + curl_close($this->ch); + } +} + +?> diff --git a/workflow/engine/methods/services/Rest/FormatedMessage.php b/workflow/engine/methods/services/Rest/FormatedMessage.php new file mode 100644 index 000000000..191a693fe --- /dev/null +++ b/workflow/engine/methods/services/Rest/FormatedMessage.php @@ -0,0 +1,46 @@ +server_method . PATH_SEP . $messageFormated . "
"; + // + curl_setopt($this->ch,CURLOPT_URL,$this->server_method); + $contentSelected = $this->content . $this->type; + curl_setopt($this->ch,CURLOPT_HTTPHEADER,array($contentSelected)); + curl_setopt($this->ch,CURLOPT_POSTFIELDS,$messageFormated); + } +} +?> \ No newline at end of file diff --git a/workflow/engine/methods/services/Rest/JsonMessage.php b/workflow/engine/methods/services/Rest/JsonMessage.php new file mode 100644 index 000000000..2a8d8f332 --- /dev/null +++ b/workflow/engine/methods/services/Rest/JsonMessage.php @@ -0,0 +1,43 @@ +type = "json"; + } + /** + * Format the array parameter to a json format. + */ + protected function format(array $message) + { + if (empty($message)){ + return ; + } + if (is_array($message)){ + $jsonMessage = json_encode( $message); + } + return $jsonMessage; + } +} + +?> \ No newline at end of file diff --git a/workflow/engine/methods/services/Rest/RestMessage.php b/workflow/engine/methods/services/Rest/RestMessage.php new file mode 100644 index 000000000..f6c7488b6 --- /dev/null +++ b/workflow/engine/methods/services/Rest/RestMessage.php @@ -0,0 +1,47 @@ +type = "rest"; + } + /** + * Format the array parameter to a single rest line format separed by '/'. + */ + protected function format(array $message) + { + $rest = ""; + if (!empty($message)){ + if (is_array($message)){ + foreach($message as $index => $data) + { + $rest .= "/" . $data; + } + $rest .= "/"; + } + } + return $rest; + } +} + +?> diff --git a/workflow/engine/methods/services/Rest/SimpleMessage.php b/workflow/engine/methods/services/Rest/SimpleMessage.php new file mode 100644 index 000000000..94cfd3ec1 --- /dev/null +++ b/workflow/engine/methods/services/Rest/SimpleMessage.php @@ -0,0 +1,43 @@ +server_method . PATH_SEP . $messageFormated . "
"; + // + curl_setopt($this->ch,CURLOPT_URL,$this->server_method.$messageFormated); + } +} +?> \ No newline at end of file diff --git a/workflow/engine/methods/services/Rest/XmlMessage.php b/workflow/engine/methods/services/Rest/XmlMessage.php new file mode 100644 index 000000000..9d33db4fd --- /dev/null +++ b/workflow/engine/methods/services/Rest/XmlMessage.php @@ -0,0 +1,48 @@ +type = "xml"; + } + /** + * Format the array parameter to a xml valid format. TODO: Need to find out a better way to do it. + */ + protected function format(array $message) + { + if (empty($message)){ + return ; + } + if (is_array($message)){ + $xml = ""; + foreach($message as $index => $data) + { + $xml .= "<" . $index . ">" . $data . ""; + } + $xml .= ""; + } + return $xml; + } +} + +?> diff --git a/workflow/engine/methods/services/Rest/testing.php b/workflow/engine/methods/services/Rest/testing.php new file mode 100644 index 000000000..3b93426e0 --- /dev/null +++ b/workflow/engine/methods/services/Rest/testing.php @@ -0,0 +1,37 @@ +'admin' , 'password'=>'admin'); +$method = "login"; + +$jsonm = new JsonMessage(); +$jsonm->send($method,$msg); +$jsonm->displayResponse(); + +$xmlm = new XmlMessage(); +$xmlm->send($method, $msg); +$xmlm->displayResponse(); + +$msg = array( "LABEL", "LOGIN", "en"); +$table = "TRANSLATION"; + +$rest = new RestMessage(); +$rest->sendGET($table,$msg); +$rest->displayResponse(); + +$msg = array( "HOUSE", "PUSHIN", "en", "sample", "2012-06-06" ); +$rest->sendPOST($table,$msg); +$rest->displayResponse(); + +$msg = array( "HOUSE", "PUSHIN", "en", "samplemod", "2012-07-06" ); +$rest->sendPUT($table,$msg); +$rest->displayResponse(); + +$msg = array( "HOUSE", "PUSHIN", "en"); +$rest->sendDELETE($table,$msg); +$rest->displayResponse(); + +?>