package com.xiaomi.infra.galaxy.sds.examples; import com.xiaomi.infra.galaxy.sds.client.ClientFactory; import com.xiaomi.infra.galaxy.sds.thrift.AuthService; import com.xiaomi.infra.galaxy.sds.thrift.CommonConstants; import com.xiaomi.infra.galaxy.sds.thrift.Credential; import com.xiaomi.infra.galaxy.sds.thrift.Datum; import com.xiaomi.infra.galaxy.sds.thrift.DatumUtil; import com.xiaomi.infra.galaxy.sds.thrift.GetRequest; import com.xiaomi.infra.galaxy.sds.thrift.GetResult; import com.xiaomi.infra.galaxy.sds.thrift.OAuthInfo; import com.xiaomi.infra.galaxy.sds.thrift.PutRequest; import com.xiaomi.infra.galaxy.sds.thrift.ScanRequest; import com.xiaomi.infra.galaxy.sds.thrift.ScanResult; import com.xiaomi.infra.galaxy.sds.thrift.TableService; import libthrift091.TException; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; public class ExtAppTableAccessor { private static TableService.Iface tableClient; private static String[] categories = { "work", "travel", "food" }; private static int M = 10; private String endpoint; private String tableName; private OAuthInfo oauthInfo; public ExtAppTableAccessor(String tableName, String endpoint, OAuthInfo oauthInfo ) throws TException { this.tableName = tableName; this.endpoint = endpoint; this.oauthInfo = oauthInfo; init(); } private void init() throws TException { ClientFactory clientFactory = new ClientFactory(); AuthService.Iface authClient = clientFactory .newAuthClient(endpoint + CommonConstants.AUTH_SERVICE_PATH); Credential credential = authClient .createCredential(oauthInfo); clientFactory = new ClientFactory().setCredential(credential); tableClient = clientFactory .newTableClient(endpoint + CommonConstants.TABLE_SERVICE_PATH, 10000, 3000, true, 3); } private void printResult(Map<String, Datum> resultToPrint) { for (Map.Entry<String, Datum> e : resultToPrint.entrySet()) { System.out.println( String.format("[%s] => %s", e.getKey(), DatumUtil.fromDatum(e.getValue()).toString())); } } //When access data, user need not specify the entity group public void putData() throws Exception { Date now = new Date(); for (int i = 0; i < M; i++) { PutRequest putRequest = new PutRequest(); putRequest.setTableName(tableName); putRequest.putToRecord("noteId", DatumUtil.toDatum((long) i)); putRequest.putToRecord("title", DatumUtil.toDatum("Title " + i)); putRequest.putToRecord("content", DatumUtil.toDatum("note " + i)); putRequest.putToRecord("version", DatumUtil.toDatum((long) i)); putRequest.putToRecord("mtime", DatumUtil.toDatum(now.getTime())); putRequest.putToRecord("category", DatumUtil.toDatum(categories[i % categories.length])); tableClient.put(putRequest); System.out.println("Put record # " + i); } } public void getData() throws Exception { GetRequest getRequest = new GetRequest(); getRequest.setTableName(tableName); getRequest.putToKeys("noteId", DatumUtil.toDatum((long) (new Random().nextInt(M)))); GetResult getResult = tableClient.get(getRequest); printResult(getResult.getItem()); } public void scanData() throws Exception { Map<String, Datum> startKey = new HashMap<String, Datum>(); startKey.put("noteId", DatumUtil.toDatum((long) 1)); Map<String, Datum> stopKey = new HashMap<String, Datum>(); stopKey.put("noteId", DatumUtil.toDatum((long) 5)); List<String> attributes = new ArrayList<String>(); attributes.add("title"); ScanRequest scanRequest = new ScanRequest() .setTableName(tableName) .setStartKey(startKey) .setStopKey(stopKey) .setLimit(100) .setAttributes(attributes); ScanResult scanResult = tableClient.scan(scanRequest); List<Map<String, Datum>> kvsList = scanResult.getRecords(); for (Map<String, Datum> kvs : kvsList) { for (Map.Entry<String, Datum> e : kvs.entrySet()) { System.out.println(e.getKey() + "\t" + DatumUtil.fromDatum(e.getValue())); } } } public void accessData() throws Exception { putData(); getData(); scanData(); } }