/* * Copyright (C) 2013 ENTERTAILION LLC * * Licensed 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.entertailion.android.shapeways; import java.util.ArrayList; import java.util.List; import java.util.Map; import oauth.signpost.OAuthConsumer; import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import com.entertailion.android.shapeways.api.Base; import com.entertailion.android.shapeways.api.Base.Result; import com.entertailion.android.shapeways.api.Materials; import com.entertailion.android.shapeways.api.Materials.Material; import com.entertailion.android.shapeways.api.Model; import com.entertailion.android.shapeways.api.Models; import com.entertailion.android.shapeways.api.Orders; import com.entertailion.android.shapeways.api.Prices; import com.entertailion.android.shapeways.api.Printers; import com.entertailion.android.shapeways.api.ShapewaysClient; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonToken; import com.fasterxml.jackson.databind.MappingJsonFactory; import com.fasterxml.jackson.databind.ObjectMapper; public class MainActivity extends Activity { private static final String LOG_TAG = "MainActivity"; private SharedPreferences preferences; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); preferences = PreferenceManager.getDefaultSharedPreferences(this); if (((ShapewaysApplication) getApplicationContext()).getShapewaysClient().getOauthToken() == null) { // Get the OAuth token; launch activity to show webview for user // authorization new Thread(new Runnable() { public void run() { try { Intent intent = new Intent(MainActivity.this, ShapewaysActivity.class); startActivity(intent); } catch (Exception e) { Log.e(LOG_TAG, "run", e); } } }).start(); } ((Button) findViewById(R.id.button_api)).setOnClickListener(new OnClickListener() { public void onClick(View v) { new Thread(new Runnable() { public void run() { getApi(); // getOrders(); // getPrinters(); // getMaterials(); // postOrder(); // getModels(); // getModel(); // deleteModel(); // postPrices(); } }).start(); } }); } private void getApi() { Log.d(LOG_TAG, "getApi"); try { HttpResponse httpResponse = ((ShapewaysApplication) getApplicationContext()).getShapewaysClient().getResponse( ShapewaysClient.API_URL_BASE + ShapewaysClient.API_PATH); String response = EntityUtils.toString(httpResponse.getEntity()); Log.i(LOG_TAG, "response=" + response); // http://wiki.fasterxml.com/JacksonInFiveMinutes ObjectMapper mapper = new ObjectMapper(); Map<String, Object> map = mapper.readValue(response, Map.class); Log.i(LOG_TAG, "map=" + map); Base base = mapper.readValue(response, Base.class); base.setStatusCode(httpResponse.getStatusLine().getStatusCode()); Log.i(LOG_TAG, "result=" + base.getResult()); Log.i(LOG_TAG, "rateLimit.getRemaining=" + base.getRateLimit().getRemaining()); } catch (Exception e) { Log.e(LOG_TAG, "getApi", e); } } private void getOrders() { Log.d(LOG_TAG, "getOrders"); try { HttpResponse httpResponse = ((ShapewaysApplication) getApplicationContext()).getShapewaysClient().getResponse( ShapewaysClient.API_URL_BASE + ShapewaysClient.ORDERS_PATH); String response = EntityUtils.toString(httpResponse.getEntity()); Log.i(LOG_TAG, "response=" + response); // http://wiki.fasterxml.com/JacksonInFiveMinutes ObjectMapper mapper = new ObjectMapper(); Map<String, Object> map = mapper.readValue(response, Map.class); Log.i(LOG_TAG, "map=" + map); Orders orders = mapper.readValue(response, Orders.class); orders.setStatusCode(httpResponse.getStatusLine().getStatusCode()); Log.i(LOG_TAG, "result=" + orders.getResult()); Log.i(LOG_TAG, "getItemCount=" + orders.getItemCount()); if (orders.getItemCount() > 0) { Log.i(LOG_TAG, "item: materialId=" + orders.getItems().get(0).getMaterialId()); Log.i(LOG_TAG, "item: modelId=" + orders.getItems().get(0).getModelId()); Log.i(LOG_TAG, "item: quantity=" + orders.getItems().get(0).getQuantity()); } } catch (Exception e) { Log.e(LOG_TAG, "getOrders", e); } } private void postOrder() { Log.d(LOG_TAG, "postOrder"); try { HttpResponse httpResponse = ((ShapewaysApplication) getApplicationContext()).getShapewaysClient().postResponse( ShapewaysClient.API_URL_BASE + ShapewaysClient.ORDERS_PATH, "{\"modelId\":1002632,\"materialId\":6,\"quantity\":1}"); String response = EntityUtils.toString(httpResponse.getEntity()); Log.i(LOG_TAG, "response=" + response); // http://wiki.fasterxml.com/JacksonInFiveMinutes ObjectMapper mapper = new ObjectMapper(); Map<String, Object> map = mapper.readValue(response, Map.class); Log.i(LOG_TAG, "map=" + map); Orders orders = mapper.readValue(response, Orders.class); orders.setStatusCode(httpResponse.getStatusLine().getStatusCode()); // Log.i(LOG_TAG, "result=" + orders.getResult()); Log.i(LOG_TAG, "reason=" + orders.getReason()); // Log.i(LOG_TAG, "getItemCount=" + orders.getItemCount()); } catch (Exception e) { Log.e(LOG_TAG, "postOrder", e); } } private void getPrinters() { Log.d(LOG_TAG, "getPrinters"); try { HttpResponse httpResponse = ((ShapewaysApplication) getApplicationContext()).getShapewaysClient().getResponse( ShapewaysClient.API_URL_BASE + ShapewaysClient.PRINTERS_PATH); String response = EntityUtils.toString(httpResponse.getEntity()); Log.i(LOG_TAG, "response=" + response); // http://wiki.fasterxml.com/JacksonInFiveMinutes ObjectMapper mapper = new ObjectMapper(); Map<String, Object> map = mapper.readValue(response, Map.class); Log.i(LOG_TAG, "map=" + map); Printers printers = mapper.readValue(response, Printers.class); printers.setStatusCode(httpResponse.getStatusLine().getStatusCode()); Log.i(LOG_TAG, "result=" + printers.getResult()); Log.i(LOG_TAG, "printers=" + printers.getPrinters().size()); } catch (Exception e) { Log.e(LOG_TAG, "getPrinters", e); } } private void getMaterials() { Log.d(LOG_TAG, "getMaterials"); try { HttpResponse httpResponse = ((ShapewaysApplication) getApplicationContext()).getShapewaysClient().getResponse( ShapewaysClient.API_URL_BASE + ShapewaysClient.MATERIALS_PATH); String response = EntityUtils.toString(httpResponse.getEntity()); Log.i(LOG_TAG, "response=" + response); // http://wiki.fasterxml.com/JacksonInFiveMinutes ObjectMapper mapper = new ObjectMapper(); Map<String, Object> map = mapper.readValue(response, Map.class); Log.i(LOG_TAG, "map=" + map); // The response does not use array[] notation for the list of // materials. // So, have to manually parse the JSON to get the list data. MappingJsonFactory f = new MappingJsonFactory(); JsonParser jp = f.createJsonParser(response); Materials materials = new Materials(); materials.setStatusCode(httpResponse.getStatusLine().getStatusCode()); jp.nextToken(); // will return JsonToken.START_OBJECT (verify?) while (jp.nextToken() != JsonToken.END_OBJECT) { String fieldname = jp.getCurrentName(); Log.d(LOG_TAG, "fieldname=" + fieldname); jp.nextToken(); // move to value if ("materials".equals(fieldname)) { // contains an object // Material material = jp.readValueAs(Material.class); boolean end = false; do { Material material = new Material(); while (jp.nextToken() != JsonToken.END_OBJECT) { String namefield = jp.getCurrentName(); Log.d(LOG_TAG, "namefield=" + namefield); jp.nextToken(); // move to value if ("materialId".equals(namefield)) { material.setMaterialId(Integer.parseInt(jp.getText())); } else if ("title".equals(namefield)) { material.setTitle(jp.getText()); } else if ("supportsColorFiles".equals(namefield)) { material.setSupportsColorFiles(Integer.parseInt(jp.getText())); } else if ("printerId".equals(namefield)) { material.setPrinterId(jp.getText()); } else if ("swatch".equals(namefield)) { material.setSwatch(jp.getText()); } else { Log.w(LOG_TAG, "Unrecognized material field: " + namefield); } } materials.getMaterials().add(material); JsonToken token = jp.nextToken(); Log.d(LOG_TAG, "token=" + token); if (token == JsonToken.FIELD_NAME) { try { Integer.parseInt(jp.getCurrentName()); jp.nextToken(); } catch (Exception ex) { end = true; } } else if (token == JsonToken.END_OBJECT) { end = true; } } while (!end); } else if ("result".equals(fieldname)) { if (jp.getText().equals(Result.success.name())) { materials.setResult(Result.success); } else if (jp.getText().equals(Result.failure.name())) { materials.setResult(Result.failure); } } else { Log.w(LOG_TAG, "Unrecognized materials field: " + fieldname); } } jp.close(); // ensure resources get cleaned up timely and properly Log.i(LOG_TAG, "materials=" + materials.getMaterials().size()); Log.i(LOG_TAG, "material: id=" + materials.getMaterials().get(0).getMaterialId()); Log.i(LOG_TAG, "material: title=" + materials.getMaterials().get(0).getTitle()); Log.i(LOG_TAG, "material: swatch=" + materials.getMaterials().get(0).getSwatch()); } catch (Exception e) { Log.e(LOG_TAG, "getMaterials", e); } } private void getModels() { Log.d(LOG_TAG, "getModels"); try { HttpResponse httpResponse = ((ShapewaysApplication) getApplicationContext()).getShapewaysClient().getResponse( ShapewaysClient.API_URL_BASE + ShapewaysClient.MODELS_PATH); String response = EntityUtils.toString(httpResponse.getEntity()); Log.i(LOG_TAG, "response=" + response); // http://wiki.fasterxml.com/JacksonInFiveMinutes ObjectMapper mapper = new ObjectMapper(); Map<String, Object> map = mapper.readValue(response, Map.class); Log.i(LOG_TAG, "map=" + map); Models models = mapper.readValue(response, Models.class); models.setStatusCode(httpResponse.getStatusLine().getStatusCode()); Log.i(LOG_TAG, "result=" + models.getResult()); Log.i(LOG_TAG, "models=" + models.getModels().size()); } catch (Exception e) { Log.e(LOG_TAG, "getModels", e); } } private void getModel() { Log.d(LOG_TAG, "getModel"); try { String path = String.format(ShapewaysClient.MODEL_INFO_PATH, "1002632"); HttpResponse httpResponse = ((ShapewaysApplication) getApplicationContext()).getShapewaysClient().getResponse(ShapewaysClient.API_URL_BASE + path); String response = EntityUtils.toString(httpResponse.getEntity()); Log.i(LOG_TAG, "response=" + response); // http://wiki.fasterxml.com/JacksonInFiveMinutes ObjectMapper mapper = new ObjectMapper(); Map<String, Object> map = mapper.readValue(response, Map.class); Log.i(LOG_TAG, "map=" + map); Model model = mapper.readValue(response, Model.class); model.setStatusCode(httpResponse.getStatusLine().getStatusCode()); Log.i(LOG_TAG, "result=" + model.getResult()); Log.i(LOG_TAG, "title=" + model.getTitle()); } catch (Exception e) { Log.e(LOG_TAG, "getModels", e); } } private void deleteModel() { Log.d(LOG_TAG, "deleteModel"); try { String path = String.format(ShapewaysClient.MODEL_INFO_PATH, "1005240"); HttpResponse httpResponse = ((ShapewaysApplication) getApplicationContext()).getShapewaysClient().deleteResponse( ShapewaysClient.API_URL_BASE + path); String response = EntityUtils.toString(httpResponse.getEntity()); Log.i(LOG_TAG, "response=" + response); // http://wiki.fasterxml.com/JacksonInFiveMinutes ObjectMapper mapper = new ObjectMapper(); Map<String, Object> map = mapper.readValue(response, Map.class); Log.i(LOG_TAG, "map=" + map); Model model = mapper.readValue(response, Model.class); model.setStatusCode(httpResponse.getStatusLine().getStatusCode()); Log.i(LOG_TAG, "result=" + model.getResult()); Log.i(LOG_TAG, "title=" + model.getTitle()); } catch (Exception e) { Log.e(LOG_TAG, "deleteModel", e); } } private void postPrices() { Log.d(LOG_TAG, "postPrices"); try { HttpResponse httpResponse = ((ShapewaysApplication) getApplicationContext()).getShapewaysClient().postResponse( ShapewaysClient.API_URL_BASE + ShapewaysClient.PRICES_PATH, ""); String response = EntityUtils.toString(httpResponse.getEntity()); Log.i(LOG_TAG, "response=" + response); // http://wiki.fasterxml.com/JacksonInFiveMinutes ObjectMapper mapper = new ObjectMapper(); Map<String, Object> map = mapper.readValue(response, Map.class); Log.i(LOG_TAG, "map=" + map); Prices prices = mapper.readValue(response, Prices.class); prices.setStatusCode(httpResponse.getStatusLine().getStatusCode()); Log.i(LOG_TAG, "result=" + prices.getResult()); Log.i(LOG_TAG, "prices=" + prices.getPrices().size()); } catch (Exception e) { Log.e(LOG_TAG, "postPrices", e); } } // ///////////////// Testing public void doOAuth() { try { OAuthConsumer consumer = new CommonsHttpOAuthConsumer(ShapewaysApplication.CONSUMER_KEY, ShapewaysApplication.CONSUMER_SECRET); consumer.setTokenWithSecret(((ShapewaysApplication) getApplicationContext()).getShapewaysClient().getOauthToken(), ((ShapewaysApplication) getApplicationContext()).getShapewaysClient().getOauthTokenSecret()); // http://hc.apache.org/httpcomponents-client-ga/tutorial/html/fundamentals.html#d5e68 HttpGet request = new HttpGet(ShapewaysClient.API_URL_BASE + ShapewaysClient.API_PATH); consumer.sign(request); HttpClient httpClient = new DefaultHttpClient(); HttpResponse response = httpClient.execute(request); Log.d(LOG_TAG, "response=" + response.getStatusLine()); Log.d(LOG_TAG, "response=" + EntityUtils.toString(response.getEntity())); } catch (Exception e) { Log.e(LOG_TAG, "doOAuth", e); } } public void doOAuth1() { try { OAuthConsumer consumer = new CommonsHttpOAuthConsumer(ShapewaysApplication.CONSUMER_KEY, ShapewaysApplication.CONSUMER_SECRET); consumer.setTokenWithSecret(((ShapewaysApplication) getApplicationContext()).getShapewaysClient().getOauthToken(), ((ShapewaysApplication) getApplicationContext()).getShapewaysClient().getOauthTokenSecret()); // http://hc.apache.org/httpcomponents-client-ga/tutorial/html/fundamentals.html#d5e68 HttpPost request = new HttpPost(ShapewaysClient.API_URL_BASE + ShapewaysClient.ORDERS_PATH); final List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair(ShapewaysClient.MODEL_ID_PARAMETER, "1002632")); nameValuePairs.add(new BasicNameValuePair(ShapewaysClient.MATERIAL_ID_PARAMETER, "6")); nameValuePairs.add(new BasicNameValuePair(ShapewaysClient.QUANTITY_ID_PARAMETER, "1")); // request.setEntity(new UrlEncodedFormEntity(nameValuePairs)); StringEntity se = new StringEntity("{\"modelId\":1002632,\"materialId\":6,\"quantity\":1}"); request.setEntity(se); request.setHeader("Content-Type", "application/json"); consumer.sign(request); HttpClient httpClient = new DefaultHttpClient(); HttpResponse response = httpClient.execute(request); Log.d(LOG_TAG, "response=" + response.getStatusLine()); Log.d(LOG_TAG, "response=" + EntityUtils.toString(response.getEntity())); } catch (Exception e) { Log.e(LOG_TAG, "doOAuth", e); } } }