001// ______________________________________________________
002// Generated by codegen - https://gitee.com/l0km/codegen 
003// template: thrift/client_thrifty/perservice/client.async.decorator.class.vm
004// ______________________________________________________
005package net.gdface.facedb.thrift;
006import java.nio.ByteBuffer;
007import java.util.Date;
008import java.util.List;
009import java.util.Map;
010import net.gdface.facedb.FaceDb;
011import net.gdface.facedb.SearchResult;
012import net.gdface.facedb.db.FaceBean;
013import net.gdface.facedb.db.FeatureBean;
014import net.gdface.facedb.db.ImageBean;
015import net.gdface.image.MatType;
016import net.gdface.sdk.CodeInfo;
017import net.gdface.sdk.CompareResult;
018import net.gdface.thrift.TypeTransformer;
019
020import java.io.IOException;
021import com.google.common.base.Function;
022import com.google.common.net.HostAndPort;
023import com.google.common.util.concurrent.FutureCallback;
024import com.google.common.util.concurrent.ListenableFuture;
025import com.google.common.util.concurrent.SettableFuture;
026import com.microsoft.thrifty.ThriftException;
027import com.microsoft.thrifty.service.AsyncClientBase;
028import com.microsoft.thrifty.service.ServiceMethodCallback;
029
030import net.gdface.thrift.ClientFactory;
031import static com.google.common.base.Preconditions.*;
032
033/**
034 * 基于thrift/swift框架生成的client端代码提供{@link FaceDb}接口的异步RPC实现(线程安全)<br>
035 * 转发所有{@link FaceDb}接口方法到{@link net.gdface.facedb.thrift.client.FaceDbClient}实例<br>
036 * 所有服务端抛出的{@link RuntimeException}异常被封装到{@link ServiceRuntimeException}中抛出<br>
037 * Example:<br>
038 * <pre>
039 *        FaceDbThriftClientAsync thriftInstance = ClientFactory
040 *            .builder()
041 *            .setHostAndPort("127.0.0.1",26413)
042 *            .build(FaceDbThriftClientAsync.class);
043 * </pre>
044 * 计算机生成代码(generated by automated tools ThriftServiceDecoratorGenerator @author guyadong)<br>
045 * @author guyadong
046 *
047 */
048public class FaceDbThriftClientAsync {
049    private final ClientFactory factory;
050
051    public ClientFactory getFactory() {
052        return factory;
053    }
054    public FaceDbThriftClientAsync(ClientFactory factory) {
055        super();
056        this.factory = checkNotNull(factory,"factory is null");
057    }
058    /**
059     * @param host RPC service host
060     * @param port RPC service port 
061     */
062    public FaceDbThriftClientAsync(String host,int port) {
063        this(ClientFactory.builder().setHostAndPort(host,port));
064    }
065    /**
066     * @param hostAndPort RPC service host and port 
067     */
068    public FaceDbThriftClientAsync(HostAndPort hostAndPort) {
069        this(ClientFactory.builder().setHostAndPort(hostAndPort));
070    }
071    /**
072     * test if connectable for RPC service
073     * @return return {@code true} if connectable ,otherwise {@code false}
074     */
075    public boolean testConnect(){
076        return factory.testConnect();
077    }
078    private class MethodCallback<L,R> implements ServiceMethodCallback<R>{
079            private final AsyncClientBase.Listener closeListener = new AsyncClientBase.Listener(){
080                @Override
081                public void onTransportClosed() {
082                }
083        
084                @Override
085                public void onError(Throwable error) {
086                    MethodCallback.this.onError(error);
087                }
088            };
089        final net.gdface.facedb.thrift.client.FaceDbClient service = factory.applyInstance(net.gdface.facedb.thrift.client.FaceDbClient.class,closeListener);
090        final SettableFuture<L> feature = SettableFuture.create();
091        final Function<R,L> transformer;
092
093        MethodCallback(Function<R, L> transformer) {
094            this.transformer = transformer;
095        }
096
097        @Override
098        public void onSuccess(R result) {
099            feature.set(transformer.apply(result));            
100            try {
101                service.close();
102            } catch (IOException e) {
103            }
104        }
105
106        @Override 
107        public void onError(Throwable error) {            
108            if(error instanceof ThriftException ){
109                if(((ThriftException)error).kind == ThriftException.Kind.MISSING_RESULT  ){
110                    this.onSuccess(null);
111                }
112            }
113            feature.setException(error);
114            try {
115                service.close();
116            } catch (IOException e) {
117            }
118        }
119    }
120    @Override
121    public String toString() {
122        StringBuilder builder = new StringBuilder();
123        builder.append("FaceDbThriftClientAsync [factory=");
124        builder.append(factory);
125        builder.append(",interface=");
126        builder.append(FaceDb.class.getName());
127        builder.append("]");
128        return builder.toString();
129    }
130    /**
131     * 默认的{@link FutureCallback}实现
132     * @author guyadong
133     *
134     * @param <V>
135     */
136    public static class DefaultCallback<V> implements FutureCallback<V>{
137        @Override
138        public void onSuccess(V result) {
139            // DO NOTHING
140        }
141        @Override
142        public void onFailure(Throwable t) {
143            try{
144                throw t;
145            }
146            catch(net.gdface.facedb.thrift.client.NotFoundBeanException e){
147                onNotFoundBeanException(e);
148            }
149            catch(net.gdface.facedb.thrift.client.DuplicateRecordException e){
150                onDuplicateRecordException(e);
151            }
152            catch(net.gdface.facedb.thrift.client.ImageErrorException e){
153                onImageErrorException(e);
154            }
155            catch(net.gdface.facedb.thrift.client.NotFaceDetectedException e){
156                onNotFaceDetectedException(e);
157            }
158            catch(net.gdface.facedb.thrift.client.ServiceRuntimeException e){
159                onServiceRuntimeException(e);
160            }
161            catch(Throwable e){
162                onThrowable(e);
163            }
164        }
165        protected void onNotFoundBeanException(net.gdface.facedb.thrift.client.NotFoundBeanException e){
166            System.out.println(e.serviceStackTraceMessage);
167        }
168        protected void onDuplicateRecordException(net.gdface.facedb.thrift.client.DuplicateRecordException e){
169            System.out.println(e.serviceStackTraceMessage);
170        }
171        protected void onImageErrorException(net.gdface.facedb.thrift.client.ImageErrorException e){
172            System.out.println(e.serviceStackTraceMessage);
173        }
174        protected void onNotFaceDetectedException(net.gdface.facedb.thrift.client.NotFaceDetectedException e){
175            System.out.println(e.serviceStackTraceMessage);
176        }
177        protected void onServiceRuntimeException(net.gdface.facedb.thrift.client.ServiceRuntimeException e){
178            System.out.println(e.serviceStackTraceMessage);
179        }
180        protected void onThrowable(Throwable e){
181            e.printStackTrace();
182        }
183    }
184    /**
185     * see also {@link net.gdface.facedb.FaceDb#addFeature(byte[],java.util.Map)}
186     */
187    public ListenableFuture<FeatureBean> addFeature(byte[] feature,
188        Map<ByteBuffer, CodeInfo> faces){
189        MethodCallback<FeatureBean,net.gdface.facedb.thrift.client.FeatureBean> nativeCallback = 
190            new MethodCallback<FeatureBean,net.gdface.facedb.thrift.client.FeatureBean>(
191                new Function<net.gdface.facedb.thrift.client.FeatureBean,FeatureBean>() {
192                        @Override
193                        public FeatureBean apply(net.gdface.facedb.thrift.client.FeatureBean input) {
194                            return TypeTransformer.getInstance().to(
195                    input,
196                    net.gdface.facedb.thrift.client.FeatureBean.class,
197                    FeatureBean.class);
198                }});
199        nativeCallback.service.addFeature(
200                TypeTransformer.getInstance().to(
201                    feature,
202                    byte[].class,
203                    okio.ByteString.class),
204            TypeTransformer.getInstance().to(
205                    faces,
206                    ByteBuffer.class,
207                    CodeInfo.class,
208                    okio.ByteString.class,
209                    net.gdface.facedb.thrift.client.CodeInfo.class),nativeCallback);
210        return nativeCallback.feature;
211    }
212    public void addFeature(byte[] feature,
213        Map<ByteBuffer, CodeInfo> faces,
214        FutureCallback<FeatureBean>callback){
215        factory.addCallback(addFeature(feature,faces), callback);
216    }
217    /**
218     * see also {@link net.gdface.facedb.FaceDb#addImage(byte[],java.util.List)}
219     */
220    public ListenableFuture<ImageBean> addImage(byte[] imgData,
221        List<CodeInfo> features){
222        MethodCallback<ImageBean,net.gdface.facedb.thrift.client.ImageBean> nativeCallback = 
223            new MethodCallback<ImageBean,net.gdface.facedb.thrift.client.ImageBean>(
224                new Function<net.gdface.facedb.thrift.client.ImageBean,ImageBean>() {
225                        @Override
226                        public ImageBean apply(net.gdface.facedb.thrift.client.ImageBean input) {
227                            return TypeTransformer.getInstance().to(
228                    input,
229                    net.gdface.facedb.thrift.client.ImageBean.class,
230                    ImageBean.class);
231                }});
232        nativeCallback.service.addImage(
233                TypeTransformer.getInstance().to(
234                    imgData,
235                    byte[].class,
236                    okio.ByteString.class),
237            TypeTransformer.getInstance().to(
238                    features,
239                    CodeInfo.class,
240                    net.gdface.facedb.thrift.client.CodeInfo.class),nativeCallback);
241        return nativeCallback.feature;
242    }
243    public void addImage(byte[] imgData,
244        List<CodeInfo> features,
245        FutureCallback<ImageBean>callback){
246        factory.addCallback(addImage(imgData,features), callback);
247    }
248    /**
249     * see also {@link net.gdface.facedb.FaceDb#addImageIfAbsent(byte[],net.gdface.sdk.CodeInfo,double)}
250     */
251    public ListenableFuture<ImageBean> addImageIfAbsent(byte[] imgData,
252        CodeInfo code,
253        double similarty){
254        MethodCallback<ImageBean,net.gdface.facedb.thrift.client.ImageBean> nativeCallback = 
255            new MethodCallback<ImageBean,net.gdface.facedb.thrift.client.ImageBean>(
256                new Function<net.gdface.facedb.thrift.client.ImageBean,ImageBean>() {
257                        @Override
258                        public ImageBean apply(net.gdface.facedb.thrift.client.ImageBean input) {
259                            return TypeTransformer.getInstance().to(
260                    input,
261                    net.gdface.facedb.thrift.client.ImageBean.class,
262                    ImageBean.class);
263                }});
264        nativeCallback.service.addImageIfAbsent(
265                TypeTransformer.getInstance().to(
266                    imgData,
267                    byte[].class,
268                    okio.ByteString.class),
269            TypeTransformer.getInstance().to(
270                    code,
271                    CodeInfo.class,
272                    net.gdface.facedb.thrift.client.CodeInfo.class),
273            similarty,nativeCallback);
274        return nativeCallback.feature;
275    }
276    public void addImageIfAbsent(byte[] imgData,
277        CodeInfo code,
278        double similarty,
279        FutureCallback<ImageBean>callback){
280        factory.addCallback(addImageIfAbsent(imgData,code,similarty), callback);
281    }
282    /**
283     * see also {@link net.gdface.facedb.FaceDb#compareFaces(java.lang.String,byte[],net.gdface.sdk.CodeInfo[])}
284     */
285    public ListenableFuture<double[]> compareFaces(String featureId,
286        byte[] imgData,
287        CodeInfo[] facePos){
288        MethodCallback<double[],java.util.List<Double>> nativeCallback = 
289            new MethodCallback<double[],java.util.List<Double>>(
290                new Function<java.util.List<Double>,double[]>() {
291                        @Override
292                        public double[] apply(java.util.List<Double> input) {
293                            return TypeTransformer.getInstance().todoubleArray(
294                    input,
295                    double.class,
296                    double.class);
297                }});
298        nativeCallback.service.compareFaces(
299                featureId,
300            TypeTransformer.getInstance().to(
301                    imgData,
302                    byte[].class,
303                    okio.ByteString.class),
304            TypeTransformer.getInstance().to(
305                    facePos,
306                    CodeInfo.class,
307                    net.gdface.facedb.thrift.client.CodeInfo.class),nativeCallback);
308        return nativeCallback.feature;
309    }
310    public void compareFaces(String featureId,
311        byte[] imgData,
312        CodeInfo[] facePos,
313        FutureCallback<double[]>callback){
314        factory.addCallback(compareFaces(featureId,imgData,facePos), callback);
315    }
316    /**
317     * see also {@link net.gdface.facedb.FaceDb#compareFeature(java.lang.String,byte[])}
318     */
319    public ListenableFuture<Double> compareFeature(String featureId,
320        byte[] feature){
321        MethodCallback<Double,Double> nativeCallback = 
322            new MethodCallback<Double,Double>(
323                new Function<Double,Double>() {
324                        @Override
325                        public Double apply(Double input) {
326                            return input;
327                }});
328        nativeCallback.service.compareFeature(
329                featureId,
330            TypeTransformer.getInstance().to(
331                    feature,
332                    byte[].class,
333                    okio.ByteString.class),nativeCallback);
334        return nativeCallback.feature;
335    }
336    public void compareFeature(String featureId,
337        byte[] feature,
338        FutureCallback<Double>callback){
339        factory.addCallback(compareFeature(featureId,feature), callback);
340    }
341    /**
342     * see also {@link net.gdface.facedb.FaceDb#compareFeatureId(java.lang.String,java.lang.String)}
343     */
344    public ListenableFuture<Double> compareFeatureId(String featureId1,
345        String featureId2){
346        MethodCallback<Double,Double> nativeCallback = 
347            new MethodCallback<Double,Double>(
348                new Function<Double,Double>() {
349                        @Override
350                        public Double apply(Double input) {
351                            return input;
352                }});
353        nativeCallback.service.compareFeatureId(
354                featureId1,
355            featureId2,nativeCallback);
356        return nativeCallback.feature;
357    }
358    public void compareFeatureId(String featureId1,
359        String featureId2,
360        FutureCallback<Double>callback){
361        factory.addCallback(compareFeatureId(featureId1,featureId2), callback);
362    }
363    /**
364     * see also {@link net.gdface.facedb.FaceDb#compareFeatures(java.lang.String,net.gdface.sdk.CodeInfo[])}
365     */
366    public ListenableFuture<double[]> compareFeatures(String featureId,
367        CodeInfo[] features){
368        MethodCallback<double[],java.util.List<Double>> nativeCallback = 
369            new MethodCallback<double[],java.util.List<Double>>(
370                new Function<java.util.List<Double>,double[]>() {
371                        @Override
372                        public double[] apply(java.util.List<Double> input) {
373                            return TypeTransformer.getInstance().todoubleArray(
374                    input,
375                    double.class,
376                    double.class);
377                }});
378        nativeCallback.service.compareFeatures(
379                featureId,
380            TypeTransformer.getInstance().to(
381                    features,
382                    CodeInfo.class,
383                    net.gdface.facedb.thrift.client.CodeInfo.class),nativeCallback);
384        return nativeCallback.feature;
385    }
386    public void compareFeatures(String featureId,
387        CodeInfo[] features,
388        FutureCallback<double[]>callback){
389        factory.addCallback(compareFeatures(featureId,features), callback);
390    }
391    /**
392     * see also {@link net.gdface.facedb.FaceDb#dbCapacity()}
393     */
394    public ListenableFuture<Map<String, String>> dbCapacity(){
395        MethodCallback<Map<String, String>,Map<String,String>> nativeCallback = 
396            new MethodCallback<Map<String, String>,Map<String,String>>(
397                new Function<Map<String,String>,Map<String, String>>() {
398                        @Override
399                        public Map<String, String> apply(Map<String,String> input) {
400                            return TypeTransformer.getInstance().to(
401                    input,
402                    String.class,
403                    String.class,
404                    String.class,
405                    String.class);
406                }});
407        nativeCallback.service.dbCapacity(
408                nativeCallback);
409        return nativeCallback.feature;
410    }
411    public void dbCapacity(FutureCallback<Map<String, String>>callback){
412        factory.addCallback(dbCapacity(), callback);
413    }
414    /**
415     * see also {@link net.gdface.facedb.FaceDb#deleteFeature(java.lang.String,boolean)}
416     */
417    public ListenableFuture<Boolean> deleteFeature(String featureId,
418        boolean cascade){
419        MethodCallback<Boolean,Boolean> nativeCallback = 
420            new MethodCallback<Boolean,Boolean>(
421                new Function<Boolean,Boolean>() {
422                        @Override
423                        public Boolean apply(Boolean input) {
424                            return input;
425                }});
426        nativeCallback.service.deleteFeature(
427                featureId,
428            cascade,nativeCallback);
429        return nativeCallback.feature;
430    }
431    public void deleteFeature(String featureId,
432        boolean cascade,
433        FutureCallback<Boolean>callback){
434        factory.addCallback(deleteFeature(featureId,cascade), callback);
435    }
436    /**
437     * see also {@link net.gdface.facedb.FaceDb#deleteFeatures(java.util.List,boolean)}
438     */
439    public ListenableFuture<Integer> deleteFeatures(List<String> featureIdList,
440        boolean cascade){
441        MethodCallback<Integer,Integer> nativeCallback = 
442            new MethodCallback<Integer,Integer>(
443                new Function<Integer,Integer>() {
444                        @Override
445                        public Integer apply(Integer input) {
446                            return input;
447                }});
448        nativeCallback.service.deleteFeatures(
449                featureIdList,
450            cascade,nativeCallback);
451        return nativeCallback.feature;
452    }
453    public void deleteFeatures(List<String> featureIdList,
454        boolean cascade,
455        FutureCallback<Integer>callback){
456        factory.addCallback(deleteFeatures(featureIdList,cascade), callback);
457    }
458    /**
459     * see also {@link net.gdface.facedb.FaceDb#deleteImage(java.lang.String,boolean)}
460     */
461    public ListenableFuture<Boolean> deleteImage(String imgMd5,
462        boolean cascade){
463        MethodCallback<Boolean,Boolean> nativeCallback = 
464            new MethodCallback<Boolean,Boolean>(
465                new Function<Boolean,Boolean>() {
466                        @Override
467                        public Boolean apply(Boolean input) {
468                            return input;
469                }});
470        nativeCallback.service.deleteImage(
471                imgMd5,
472            cascade,nativeCallback);
473        return nativeCallback.feature;
474    }
475    public void deleteImage(String imgMd5,
476        boolean cascade,
477        FutureCallback<Boolean>callback){
478        factory.addCallback(deleteImage(imgMd5,cascade), callback);
479    }
480    /**
481     * see also {@link net.gdface.facedb.FaceDb#deleteImages(java.util.List,boolean)}
482     */
483    public ListenableFuture<Integer> deleteImages(List<String> imgMd5List,
484        boolean cascade){
485        MethodCallback<Integer,Integer> nativeCallback = 
486            new MethodCallback<Integer,Integer>(
487                new Function<Integer,Integer>() {
488                        @Override
489                        public Integer apply(Integer input) {
490                            return input;
491                }});
492        nativeCallback.service.deleteImages(
493                imgMd5List,
494            cascade,nativeCallback);
495        return nativeCallback.feature;
496    }
497    public void deleteImages(List<String> imgMd5List,
498        boolean cascade,
499        FutureCallback<Integer>callback){
500        factory.addCallback(deleteImages(imgMd5List,cascade), callback);
501    }
502    /**
503     * see also {@link net.gdface.facedb.FaceDb#detectAndAddFeatures(byte[],int)}
504     */
505    public ListenableFuture<ImageBean> detectAndAddFeatures(byte[] imgData,
506        int faceNum){
507        MethodCallback<ImageBean,net.gdface.facedb.thrift.client.ImageBean> nativeCallback = 
508            new MethodCallback<ImageBean,net.gdface.facedb.thrift.client.ImageBean>(
509                new Function<net.gdface.facedb.thrift.client.ImageBean,ImageBean>() {
510                        @Override
511                        public ImageBean apply(net.gdface.facedb.thrift.client.ImageBean input) {
512                            return TypeTransformer.getInstance().to(
513                    input,
514                    net.gdface.facedb.thrift.client.ImageBean.class,
515                    ImageBean.class);
516                }});
517        nativeCallback.service.detectAndAddFeatures(
518                TypeTransformer.getInstance().to(
519                    imgData,
520                    byte[].class,
521                    okio.ByteString.class),
522            faceNum,nativeCallback);
523        return nativeCallback.feature;
524    }
525    public void detectAndAddFeatures(byte[] imgData,
526        int faceNum,
527        FutureCallback<ImageBean>callback){
528        factory.addCallback(detectAndAddFeatures(imgData,faceNum), callback);
529    }
530    /**
531     * see also {@link net.gdface.facedb.FaceDb#detectAndCompareFaces(java.lang.String,byte[],int)}
532     */
533    public ListenableFuture<CompareResult> detectAndCompareFaces(String featureId,
534        byte[] imgData,
535        int faceNum){
536        MethodCallback<CompareResult,net.gdface.facedb.thrift.client.CompareResult> nativeCallback = 
537            new MethodCallback<CompareResult,net.gdface.facedb.thrift.client.CompareResult>(
538                new Function<net.gdface.facedb.thrift.client.CompareResult,CompareResult>() {
539                        @Override
540                        public CompareResult apply(net.gdface.facedb.thrift.client.CompareResult input) {
541                            return TypeTransformer.getInstance().to(
542                    input,
543                    net.gdface.facedb.thrift.client.CompareResult.class,
544                    CompareResult.class);
545                }});
546        nativeCallback.service.detectAndCompareFaces(
547                featureId,
548            TypeTransformer.getInstance().to(
549                    imgData,
550                    byte[].class,
551                    okio.ByteString.class),
552            faceNum,nativeCallback);
553        return nativeCallback.feature;
554    }
555    public void detectAndCompareFaces(String featureId,
556        byte[] imgData,
557        int faceNum,
558        FutureCallback<CompareResult>callback){
559        factory.addCallback(detectAndCompareFaces(featureId,imgData,faceNum), callback);
560    }
561    /**
562     * see also {@link net.gdface.facedb.FaceDb#detectAndGetCodeInfo(byte[])}
563     */
564    public ListenableFuture<CodeInfo[]> detectAndGetCodeInfo(byte[] imgData){
565        MethodCallback<CodeInfo[],java.util.List<net.gdface.facedb.thrift.client.CodeInfo>> nativeCallback = 
566            new MethodCallback<CodeInfo[],java.util.List<net.gdface.facedb.thrift.client.CodeInfo>>(
567                new Function<java.util.List<net.gdface.facedb.thrift.client.CodeInfo>,CodeInfo[]>() {
568                        @Override
569                        public CodeInfo[] apply(java.util.List<net.gdface.facedb.thrift.client.CodeInfo> input) {
570                            return TypeTransformer.getInstance().toArray(
571                    input,
572                    net.gdface.facedb.thrift.client.CodeInfo.class,
573                    CodeInfo.class);
574                }});
575        nativeCallback.service.detectAndGetCodeInfo(
576                TypeTransformer.getInstance().to(
577                    imgData,
578                    byte[].class,
579                    okio.ByteString.class),nativeCallback);
580        return nativeCallback.feature;
581    }
582    public void detectAndGetCodeInfo(byte[] imgData,
583        FutureCallback<CodeInfo[]>callback){
584        factory.addCallback(detectAndGetCodeInfo(imgData), callback);
585    }
586    /**
587     * see also {@link net.gdface.facedb.FaceDb#detectAndGetCodeInfo(net.gdface.image.MatType,byte[],int,int)}
588     */
589    public ListenableFuture<CodeInfo[]> detectAndGetCodeInfo(MatType matType,
590        byte[] matData,
591        int width,
592        int height){
593        MethodCallback<CodeInfo[],java.util.List<net.gdface.facedb.thrift.client.CodeInfo>> nativeCallback = 
594            new MethodCallback<CodeInfo[],java.util.List<net.gdface.facedb.thrift.client.CodeInfo>>(
595                new Function<java.util.List<net.gdface.facedb.thrift.client.CodeInfo>,CodeInfo[]>() {
596                        @Override
597                        public CodeInfo[] apply(java.util.List<net.gdface.facedb.thrift.client.CodeInfo> input) {
598                            return TypeTransformer.getInstance().toArray(
599                    input,
600                    net.gdface.facedb.thrift.client.CodeInfo.class,
601                    CodeInfo.class);
602                }});
603        nativeCallback.service.detectAndGetCodeInfoMat(
604                TypeTransformer.getInstance().to(
605                    matType,
606                    MatType.class,
607                    net.gdface.facedb.thrift.client.MatType.class),
608            TypeTransformer.getInstance().to(
609                    matData,
610                    byte[].class,
611                    okio.ByteString.class),
612            width,
613            height,nativeCallback);
614        return nativeCallback.feature;
615    }
616    public void detectAndGetCodeInfo(MatType matType,
617        byte[] matData,
618        int width,
619        int height,
620        FutureCallback<CodeInfo[]>callback){
621        factory.addCallback(detectAndGetCodeInfo(matType,matData,width,height), callback);
622    }
623    /**
624     * see also {@link net.gdface.facedb.FaceDb#detectAndSearchFaces(byte[],double,int,java.lang.String)}
625     */
626    public ListenableFuture<SearchResult[]> detectAndSearchFaces(byte[] imgData,
627        double similarty,
628        int rows,
629        String where){
630        MethodCallback<SearchResult[],java.util.List<net.gdface.facedb.thrift.client.SearchResult>> nativeCallback = 
631            new MethodCallback<SearchResult[],java.util.List<net.gdface.facedb.thrift.client.SearchResult>>(
632                new Function<java.util.List<net.gdface.facedb.thrift.client.SearchResult>,SearchResult[]>() {
633                        @Override
634                        public SearchResult[] apply(java.util.List<net.gdface.facedb.thrift.client.SearchResult> input) {
635                            return TypeTransformer.getInstance().toArray(
636                    input,
637                    net.gdface.facedb.thrift.client.SearchResult.class,
638                    SearchResult.class);
639                }});
640        nativeCallback.service.detectAndSearchFaces(
641                TypeTransformer.getInstance().to(
642                    imgData,
643                    byte[].class,
644                    okio.ByteString.class),
645            similarty,
646            rows,
647            where,nativeCallback);
648        return nativeCallback.feature;
649    }
650    public void detectAndSearchFaces(byte[] imgData,
651        double similarty,
652        int rows,
653        String where,
654        FutureCallback<SearchResult[]>callback){
655        factory.addCallback(detectAndSearchFaces(imgData,similarty,rows,where), callback);
656    }
657    /**
658     * see also {@link net.gdface.facedb.FaceDb#getCodeInfo(int)}
659     */
660    public ListenableFuture<CodeInfo> getCodeInfo(int faceId){
661        MethodCallback<CodeInfo,net.gdface.facedb.thrift.client.CodeInfo> nativeCallback = 
662            new MethodCallback<CodeInfo,net.gdface.facedb.thrift.client.CodeInfo>(
663                new Function<net.gdface.facedb.thrift.client.CodeInfo,CodeInfo>() {
664                        @Override
665                        public CodeInfo apply(net.gdface.facedb.thrift.client.CodeInfo input) {
666                            return TypeTransformer.getInstance().to(
667                    input,
668                    net.gdface.facedb.thrift.client.CodeInfo.class,
669                    CodeInfo.class);
670                }});
671        nativeCallback.service.getCodeInfo(
672                faceId,nativeCallback);
673        return nativeCallback.feature;
674    }
675    public void getCodeInfo(int faceId,
676        FutureCallback<CodeInfo>callback){
677        factory.addCallback(getCodeInfo(faceId), callback);
678    }
679    /**
680     * see also {@link net.gdface.facedb.FaceDb#getCodeInfoByFeatureId(java.lang.String)}
681     */
682    public ListenableFuture<CodeInfo> getCodeInfoByFeatureId(String featureId){
683        MethodCallback<CodeInfo,net.gdface.facedb.thrift.client.CodeInfo> nativeCallback = 
684            new MethodCallback<CodeInfo,net.gdface.facedb.thrift.client.CodeInfo>(
685                new Function<net.gdface.facedb.thrift.client.CodeInfo,CodeInfo>() {
686                        @Override
687                        public CodeInfo apply(net.gdface.facedb.thrift.client.CodeInfo input) {
688                            return TypeTransformer.getInstance().to(
689                    input,
690                    net.gdface.facedb.thrift.client.CodeInfo.class,
691                    CodeInfo.class);
692                }});
693        nativeCallback.service.getCodeInfoByFeatureId(
694                featureId,nativeCallback);
695        return nativeCallback.feature;
696    }
697    public void getCodeInfoByFeatureId(String featureId,
698        FutureCallback<CodeInfo>callback){
699        factory.addCallback(getCodeInfoByFeatureId(featureId), callback);
700    }
701    /**
702     * see also {@link net.gdface.facedb.FaceDb#getCodeInfoByImageMd5(java.lang.String)}
703     */
704    public ListenableFuture<CodeInfo> getCodeInfoByImageMd5(String imageMd5){
705        MethodCallback<CodeInfo,net.gdface.facedb.thrift.client.CodeInfo> nativeCallback = 
706            new MethodCallback<CodeInfo,net.gdface.facedb.thrift.client.CodeInfo>(
707                new Function<net.gdface.facedb.thrift.client.CodeInfo,CodeInfo>() {
708                        @Override
709                        public CodeInfo apply(net.gdface.facedb.thrift.client.CodeInfo input) {
710                            return TypeTransformer.getInstance().to(
711                    input,
712                    net.gdface.facedb.thrift.client.CodeInfo.class,
713                    CodeInfo.class);
714                }});
715        nativeCallback.service.getCodeInfoByImageMd5(
716                imageMd5,nativeCallback);
717        return nativeCallback.feature;
718    }
719    public void getCodeInfoByImageMd5(String imageMd5,
720        FutureCallback<CodeInfo>callback){
721        factory.addCallback(getCodeInfoByImageMd5(imageMd5), callback);
722    }
723    /**
724     * see also {@link net.gdface.facedb.FaceDb#getCodeInfosByFeatureId(java.lang.String)}
725     */
726    public ListenableFuture<List<CodeInfo>> getCodeInfosByFeatureId(String featureId){
727        MethodCallback<List<CodeInfo>,List<net.gdface.facedb.thrift.client.CodeInfo>> nativeCallback = 
728            new MethodCallback<List<CodeInfo>,List<net.gdface.facedb.thrift.client.CodeInfo>>(
729                new Function<List<net.gdface.facedb.thrift.client.CodeInfo>,List<CodeInfo>>() {
730                        @Override
731                        public List<CodeInfo> apply(List<net.gdface.facedb.thrift.client.CodeInfo> input) {
732                            return TypeTransformer.getInstance().to(
733                    input,
734                    net.gdface.facedb.thrift.client.CodeInfo.class,
735                    CodeInfo.class);
736                }});
737        nativeCallback.service.getCodeInfosByFeatureId(
738                featureId,nativeCallback);
739        return nativeCallback.feature;
740    }
741    public void getCodeInfosByFeatureId(String featureId,
742        FutureCallback<List<CodeInfo>>callback){
743        factory.addCallback(getCodeInfosByFeatureId(featureId), callback);
744    }
745    /**
746     * see also {@link net.gdface.facedb.FaceDb#getCodeInfosByImageMd5(java.lang.String)}
747     */
748    public ListenableFuture<List<CodeInfo>> getCodeInfosByImageMd5(String imageMd5){
749        MethodCallback<List<CodeInfo>,List<net.gdface.facedb.thrift.client.CodeInfo>> nativeCallback = 
750            new MethodCallback<List<CodeInfo>,List<net.gdface.facedb.thrift.client.CodeInfo>>(
751                new Function<List<net.gdface.facedb.thrift.client.CodeInfo>,List<CodeInfo>>() {
752                        @Override
753                        public List<CodeInfo> apply(List<net.gdface.facedb.thrift.client.CodeInfo> input) {
754                            return TypeTransformer.getInstance().to(
755                    input,
756                    net.gdface.facedb.thrift.client.CodeInfo.class,
757                    CodeInfo.class);
758                }});
759        nativeCallback.service.getCodeInfosByImageMd5(
760                imageMd5,nativeCallback);
761        return nativeCallback.feature;
762    }
763    public void getCodeInfosByImageMd5(String imageMd5,
764        FutureCallback<List<CodeInfo>>callback){
765        factory.addCallback(getCodeInfosByImageMd5(imageMd5), callback);
766    }
767    /**
768     * see also {@link net.gdface.facedb.FaceDb#getFace(int)}
769     */
770    public ListenableFuture<FaceBean> getFace(int faceId){
771        MethodCallback<FaceBean,net.gdface.facedb.thrift.client.FaceBean> nativeCallback = 
772            new MethodCallback<FaceBean,net.gdface.facedb.thrift.client.FaceBean>(
773                new Function<net.gdface.facedb.thrift.client.FaceBean,FaceBean>() {
774                        @Override
775                        public FaceBean apply(net.gdface.facedb.thrift.client.FaceBean input) {
776                            return TypeTransformer.getInstance().to(
777                    input,
778                    net.gdface.facedb.thrift.client.FaceBean.class,
779                    FaceBean.class);
780                }});
781        nativeCallback.service.getFace(
782                faceId,nativeCallback);
783        return nativeCallback.feature;
784    }
785    public void getFace(int faceId,
786        FutureCallback<FaceBean>callback){
787        factory.addCallback(getFace(faceId), callback);
788    }
789    /**
790     * see also {@link net.gdface.facedb.FaceDb#getFaceByFeatureId(java.lang.String)}
791     */
792    public ListenableFuture<FaceBean> getFaceByFeatureId(String featureId){
793        MethodCallback<FaceBean,net.gdface.facedb.thrift.client.FaceBean> nativeCallback = 
794            new MethodCallback<FaceBean,net.gdface.facedb.thrift.client.FaceBean>(
795                new Function<net.gdface.facedb.thrift.client.FaceBean,FaceBean>() {
796                        @Override
797                        public FaceBean apply(net.gdface.facedb.thrift.client.FaceBean input) {
798                            return TypeTransformer.getInstance().to(
799                    input,
800                    net.gdface.facedb.thrift.client.FaceBean.class,
801                    FaceBean.class);
802                }});
803        nativeCallback.service.getFaceByFeatureId(
804                featureId,nativeCallback);
805        return nativeCallback.feature;
806    }
807    public void getFaceByFeatureId(String featureId,
808        FutureCallback<FaceBean>callback){
809        factory.addCallback(getFaceByFeatureId(featureId), callback);
810    }
811    /**
812     * see also {@link net.gdface.facedb.FaceDb#getFaceByImageMd5(java.lang.String)}
813     */
814    public ListenableFuture<FaceBean> getFaceByImageMd5(String imageMd5){
815        MethodCallback<FaceBean,net.gdface.facedb.thrift.client.FaceBean> nativeCallback = 
816            new MethodCallback<FaceBean,net.gdface.facedb.thrift.client.FaceBean>(
817                new Function<net.gdface.facedb.thrift.client.FaceBean,FaceBean>() {
818                        @Override
819                        public FaceBean apply(net.gdface.facedb.thrift.client.FaceBean input) {
820                            return TypeTransformer.getInstance().to(
821                    input,
822                    net.gdface.facedb.thrift.client.FaceBean.class,
823                    FaceBean.class);
824                }});
825        nativeCallback.service.getFaceByImageMd5(
826                imageMd5,nativeCallback);
827        return nativeCallback.feature;
828    }
829    public void getFaceByImageMd5(String imageMd5,
830        FutureCallback<FaceBean>callback){
831        factory.addCallback(getFaceByImageMd5(imageMd5), callback);
832    }
833    /**
834     * see also {@link net.gdface.facedb.FaceDb#getFaceCount(java.lang.String)}
835     */
836    public ListenableFuture<Integer> getFaceCount(String where){
837        MethodCallback<Integer,Integer> nativeCallback = 
838            new MethodCallback<Integer,Integer>(
839                new Function<Integer,Integer>() {
840                        @Override
841                        public Integer apply(Integer input) {
842                            return input;
843                }});
844        nativeCallback.service.getFaceCount(
845                where,nativeCallback);
846        return nativeCallback.feature;
847    }
848    public void getFaceCount(String where,
849        FutureCallback<Integer>callback){
850        factory.addCallback(getFaceCount(where), callback);
851    }
852    /**
853     * see also {@link net.gdface.facedb.FaceDb#getFacesByFeatureId(java.lang.String)}
854     */
855    public ListenableFuture<List<FaceBean>> getFacesByFeatureId(String featureId){
856        MethodCallback<List<FaceBean>,List<net.gdface.facedb.thrift.client.FaceBean>> nativeCallback = 
857            new MethodCallback<List<FaceBean>,List<net.gdface.facedb.thrift.client.FaceBean>>(
858                new Function<List<net.gdface.facedb.thrift.client.FaceBean>,List<FaceBean>>() {
859                        @Override
860                        public List<FaceBean> apply(List<net.gdface.facedb.thrift.client.FaceBean> input) {
861                            return TypeTransformer.getInstance().to(
862                    input,
863                    net.gdface.facedb.thrift.client.FaceBean.class,
864                    FaceBean.class);
865                }});
866        nativeCallback.service.getFacesByFeatureId(
867                featureId,nativeCallback);
868        return nativeCallback.feature;
869    }
870    public void getFacesByFeatureId(String featureId,
871        FutureCallback<List<FaceBean>>callback){
872        factory.addCallback(getFacesByFeatureId(featureId), callback);
873    }
874    /**
875     * see also {@link net.gdface.facedb.FaceDb#getFacesByImageMd5(java.lang.String)}
876     */
877    public ListenableFuture<List<FaceBean>> getFacesByImageMd5(String imageMd5){
878        MethodCallback<List<FaceBean>,List<net.gdface.facedb.thrift.client.FaceBean>> nativeCallback = 
879            new MethodCallback<List<FaceBean>,List<net.gdface.facedb.thrift.client.FaceBean>>(
880                new Function<List<net.gdface.facedb.thrift.client.FaceBean>,List<FaceBean>>() {
881                        @Override
882                        public List<FaceBean> apply(List<net.gdface.facedb.thrift.client.FaceBean> input) {
883                            return TypeTransformer.getInstance().to(
884                    input,
885                    net.gdface.facedb.thrift.client.FaceBean.class,
886                    FaceBean.class);
887                }});
888        nativeCallback.service.getFacesByImageMd5(
889                imageMd5,nativeCallback);
890        return nativeCallback.feature;
891    }
892    public void getFacesByImageMd5(String imageMd5,
893        FutureCallback<List<FaceBean>>callback){
894        factory.addCallback(getFacesByImageMd5(imageMd5), callback);
895    }
896    /**
897     * see also {@link net.gdface.facedb.FaceDb#getFeature(java.lang.String)}
898     */
899    public ListenableFuture<FeatureBean> getFeature(String featureId){
900        MethodCallback<FeatureBean,net.gdface.facedb.thrift.client.FeatureBean> nativeCallback = 
901            new MethodCallback<FeatureBean,net.gdface.facedb.thrift.client.FeatureBean>(
902                new Function<net.gdface.facedb.thrift.client.FeatureBean,FeatureBean>() {
903                        @Override
904                        public FeatureBean apply(net.gdface.facedb.thrift.client.FeatureBean input) {
905                            return TypeTransformer.getInstance().to(
906                    input,
907                    net.gdface.facedb.thrift.client.FeatureBean.class,
908                    FeatureBean.class);
909                }});
910        nativeCallback.service.getFeature(
911                featureId,nativeCallback);
912        return nativeCallback.feature;
913    }
914    public void getFeature(String featureId,
915        FutureCallback<FeatureBean>callback){
916        factory.addCallback(getFeature(featureId), callback);
917    }
918    /**
919     * see also {@link net.gdface.facedb.FaceDb#getFeatureByFaceId(int)}
920     */
921    public ListenableFuture<FeatureBean> getFeatureByFaceId(int faceId){
922        MethodCallback<FeatureBean,net.gdface.facedb.thrift.client.FeatureBean> nativeCallback = 
923            new MethodCallback<FeatureBean,net.gdface.facedb.thrift.client.FeatureBean>(
924                new Function<net.gdface.facedb.thrift.client.FeatureBean,FeatureBean>() {
925                        @Override
926                        public FeatureBean apply(net.gdface.facedb.thrift.client.FeatureBean input) {
927                            return TypeTransformer.getInstance().to(
928                    input,
929                    net.gdface.facedb.thrift.client.FeatureBean.class,
930                    FeatureBean.class);
931                }});
932        nativeCallback.service.getFeatureByFaceId(
933                faceId,nativeCallback);
934        return nativeCallback.feature;
935    }
936    public void getFeatureByFaceId(int faceId,
937        FutureCallback<FeatureBean>callback){
938        factory.addCallback(getFeatureByFaceId(faceId), callback);
939    }
940    /**
941     * see also {@link net.gdface.facedb.FaceDb#getFeatureByImageMd5(java.lang.String)}
942     */
943    public ListenableFuture<FeatureBean> getFeatureByImageMd5(String imageMd5){
944        MethodCallback<FeatureBean,net.gdface.facedb.thrift.client.FeatureBean> nativeCallback = 
945            new MethodCallback<FeatureBean,net.gdface.facedb.thrift.client.FeatureBean>(
946                new Function<net.gdface.facedb.thrift.client.FeatureBean,FeatureBean>() {
947                        @Override
948                        public FeatureBean apply(net.gdface.facedb.thrift.client.FeatureBean input) {
949                            return TypeTransformer.getInstance().to(
950                    input,
951                    net.gdface.facedb.thrift.client.FeatureBean.class,
952                    FeatureBean.class);
953                }});
954        nativeCallback.service.getFeatureByImageMd5(
955                imageMd5,nativeCallback);
956        return nativeCallback.feature;
957    }
958    public void getFeatureByImageMd5(String imageMd5,
959        FutureCallback<FeatureBean>callback){
960        factory.addCallback(getFeatureByImageMd5(imageMd5), callback);
961    }
962    /**
963     * see also {@link net.gdface.facedb.FaceDb#getFeatureCount()}
964     */
965    public ListenableFuture<Integer> getFeatureCount(){
966        MethodCallback<Integer,Integer> nativeCallback = 
967            new MethodCallback<Integer,Integer>(
968                new Function<Integer,Integer>() {
969                        @Override
970                        public Integer apply(Integer input) {
971                            return input;
972                }});
973        nativeCallback.service.getFeatureCount(
974                nativeCallback);
975        return nativeCallback.feature;
976    }
977    public void getFeatureCount(FutureCallback<Integer>callback){
978        factory.addCallback(getFeatureCount(), callback);
979    }
980    /**
981     * see also {@link net.gdface.facedb.FaceDb#getFeaturesByImageMd5(java.lang.String)}
982     */
983    public ListenableFuture<List<FeatureBean>> getFeaturesByImageMd5(String imageMd5){
984        MethodCallback<List<FeatureBean>,List<net.gdface.facedb.thrift.client.FeatureBean>> nativeCallback = 
985            new MethodCallback<List<FeatureBean>,List<net.gdface.facedb.thrift.client.FeatureBean>>(
986                new Function<List<net.gdface.facedb.thrift.client.FeatureBean>,List<FeatureBean>>() {
987                        @Override
988                        public List<FeatureBean> apply(List<net.gdface.facedb.thrift.client.FeatureBean> input) {
989                            return TypeTransformer.getInstance().to(
990                    input,
991                    net.gdface.facedb.thrift.client.FeatureBean.class,
992                    FeatureBean.class);
993                }});
994        nativeCallback.service.getFeaturesByImageMd5(
995                imageMd5,nativeCallback);
996        return nativeCallback.feature;
997    }
998    public void getFeaturesByImageMd5(String imageMd5,
999        FutureCallback<List<FeatureBean>>callback){
1000        factory.addCallback(getFeaturesByImageMd5(imageMd5), callback);
1001    }
1002    /**
1003     * see also {@link net.gdface.facedb.FaceDb#getImage(java.lang.String)}
1004     */
1005    public ListenableFuture<ImageBean> getImage(String imageMd5){
1006        MethodCallback<ImageBean,net.gdface.facedb.thrift.client.ImageBean> nativeCallback = 
1007            new MethodCallback<ImageBean,net.gdface.facedb.thrift.client.ImageBean>(
1008                new Function<net.gdface.facedb.thrift.client.ImageBean,ImageBean>() {
1009                        @Override
1010                        public ImageBean apply(net.gdface.facedb.thrift.client.ImageBean input) {
1011                            return TypeTransformer.getInstance().to(
1012                    input,
1013                    net.gdface.facedb.thrift.client.ImageBean.class,
1014                    ImageBean.class);
1015                }});
1016        nativeCallback.service.getImage(
1017                imageMd5,nativeCallback);
1018        return nativeCallback.feature;
1019    }
1020    public void getImage(String imageMd5,
1021        FutureCallback<ImageBean>callback){
1022        factory.addCallback(getImage(imageMd5), callback);
1023    }
1024    /**
1025     * see also {@link net.gdface.facedb.FaceDb#getImage(java.lang.String,java.lang.String)}
1026     */
1027    public ListenableFuture<ImageBean> getImage(String primaryKey,
1028        String refType){
1029        MethodCallback<ImageBean,net.gdface.facedb.thrift.client.ImageBean> nativeCallback = 
1030            new MethodCallback<ImageBean,net.gdface.facedb.thrift.client.ImageBean>(
1031                new Function<net.gdface.facedb.thrift.client.ImageBean,ImageBean>() {
1032                        @Override
1033                        public ImageBean apply(net.gdface.facedb.thrift.client.ImageBean input) {
1034                            return TypeTransformer.getInstance().to(
1035                    input,
1036                    net.gdface.facedb.thrift.client.ImageBean.class,
1037                    ImageBean.class);
1038                }});
1039        nativeCallback.service.getImageRef(
1040                primaryKey,
1041            refType,nativeCallback);
1042        return nativeCallback.feature;
1043    }
1044    public void getImage(String primaryKey,
1045        String refType,
1046        FutureCallback<ImageBean>callback){
1047        factory.addCallback(getImage(primaryKey,refType), callback);
1048    }
1049    /**
1050     * see also {@link net.gdface.facedb.FaceDb#getImageByFaceId(int)}
1051     */
1052    public ListenableFuture<ImageBean> getImageByFaceId(int faceId){
1053        MethodCallback<ImageBean,net.gdface.facedb.thrift.client.ImageBean> nativeCallback = 
1054            new MethodCallback<ImageBean,net.gdface.facedb.thrift.client.ImageBean>(
1055                new Function<net.gdface.facedb.thrift.client.ImageBean,ImageBean>() {
1056                        @Override
1057                        public ImageBean apply(net.gdface.facedb.thrift.client.ImageBean input) {
1058                            return TypeTransformer.getInstance().to(
1059                    input,
1060                    net.gdface.facedb.thrift.client.ImageBean.class,
1061                    ImageBean.class);
1062                }});
1063        nativeCallback.service.getImageByFaceId(
1064                faceId,nativeCallback);
1065        return nativeCallback.feature;
1066    }
1067    public void getImageByFaceId(int faceId,
1068        FutureCallback<ImageBean>callback){
1069        factory.addCallback(getImageByFaceId(faceId), callback);
1070    }
1071    /**
1072     * see also {@link net.gdface.facedb.FaceDb#getImageByFeatureId(java.lang.String)}
1073     */
1074    public ListenableFuture<ImageBean> getImageByFeatureId(String featureId){
1075        MethodCallback<ImageBean,net.gdface.facedb.thrift.client.ImageBean> nativeCallback = 
1076            new MethodCallback<ImageBean,net.gdface.facedb.thrift.client.ImageBean>(
1077                new Function<net.gdface.facedb.thrift.client.ImageBean,ImageBean>() {
1078                        @Override
1079                        public ImageBean apply(net.gdface.facedb.thrift.client.ImageBean input) {
1080                            return TypeTransformer.getInstance().to(
1081                    input,
1082                    net.gdface.facedb.thrift.client.ImageBean.class,
1083                    ImageBean.class);
1084                }});
1085        nativeCallback.service.getImageByFeatureId(
1086                featureId,nativeCallback);
1087        return nativeCallback.feature;
1088    }
1089    public void getImageByFeatureId(String featureId,
1090        FutureCallback<ImageBean>callback){
1091        factory.addCallback(getImageByFeatureId(featureId), callback);
1092    }
1093    /**
1094     * see also {@link net.gdface.facedb.FaceDb#getImageBytes(java.lang.String)}
1095     */
1096    public ListenableFuture<byte[]> getImageBytes(String imageMd5){
1097        MethodCallback<byte[],okio.ByteString> nativeCallback = 
1098            new MethodCallback<byte[],okio.ByteString>(
1099                new Function<okio.ByteString,byte[]>() {
1100                        @Override
1101                        public byte[] apply(okio.ByteString input) {
1102                            return TypeTransformer.getInstance().to(
1103                    input,
1104                    okio.ByteString.class,
1105                    byte[].class);
1106                }});
1107        nativeCallback.service.getImageBytes(
1108                imageMd5,nativeCallback);
1109        return nativeCallback.feature;
1110    }
1111    public void getImageBytes(String imageMd5,
1112        FutureCallback<byte[]>callback){
1113        factory.addCallback(getImageBytes(imageMd5), callback);
1114    }
1115    /**
1116     * see also {@link net.gdface.facedb.FaceDb#getImageBytes(java.lang.String,java.lang.String)}
1117     */
1118    public ListenableFuture<byte[]> getImageBytes(String primaryKey,
1119        String refType){
1120        MethodCallback<byte[],okio.ByteString> nativeCallback = 
1121            new MethodCallback<byte[],okio.ByteString>(
1122                new Function<okio.ByteString,byte[]>() {
1123                        @Override
1124                        public byte[] apply(okio.ByteString input) {
1125                            return TypeTransformer.getInstance().to(
1126                    input,
1127                    okio.ByteString.class,
1128                    byte[].class);
1129                }});
1130        nativeCallback.service.getImageBytesRef(
1131                primaryKey,
1132            refType,nativeCallback);
1133        return nativeCallback.feature;
1134    }
1135    public void getImageBytes(String primaryKey,
1136        String refType,
1137        FutureCallback<byte[]>callback){
1138        factory.addCallback(getImageBytes(primaryKey,refType), callback);
1139    }
1140    /**
1141     * see also {@link net.gdface.facedb.FaceDb#getImageCount(java.lang.String)}
1142     */
1143    public ListenableFuture<Integer> getImageCount(String where){
1144        MethodCallback<Integer,Integer> nativeCallback = 
1145            new MethodCallback<Integer,Integer>(
1146                new Function<Integer,Integer>() {
1147                        @Override
1148                        public Integer apply(Integer input) {
1149                            return input;
1150                }});
1151        nativeCallback.service.getImageCount(
1152                where,nativeCallback);
1153        return nativeCallback.feature;
1154    }
1155    public void getImageCount(String where,
1156        FutureCallback<Integer>callback){
1157        factory.addCallback(getImageCount(where), callback);
1158    }
1159    /**
1160     * see also {@link net.gdface.facedb.FaceDb#getImagesByFeatureId(java.lang.String)}
1161     */
1162    public ListenableFuture<List<ImageBean>> getImagesByFeatureId(String featureId){
1163        MethodCallback<List<ImageBean>,List<net.gdface.facedb.thrift.client.ImageBean>> nativeCallback = 
1164            new MethodCallback<List<ImageBean>,List<net.gdface.facedb.thrift.client.ImageBean>>(
1165                new Function<List<net.gdface.facedb.thrift.client.ImageBean>,List<ImageBean>>() {
1166                        @Override
1167                        public List<ImageBean> apply(List<net.gdface.facedb.thrift.client.ImageBean> input) {
1168                            return TypeTransformer.getInstance().to(
1169                    input,
1170                    net.gdface.facedb.thrift.client.ImageBean.class,
1171                    ImageBean.class);
1172                }});
1173        nativeCallback.service.getImagesByFeatureId(
1174                featureId,nativeCallback);
1175        return nativeCallback.feature;
1176    }
1177    public void getImagesByFeatureId(String featureId,
1178        FutureCallback<List<ImageBean>>callback){
1179        factory.addCallback(getImagesByFeatureId(featureId), callback);
1180    }
1181    /**
1182     * see also {@link net.gdface.facedb.FaceDb#hasFeature(byte[])}
1183     */
1184    public ListenableFuture<Boolean> hasFeature(byte[] feature){
1185        MethodCallback<Boolean,Boolean> nativeCallback = 
1186            new MethodCallback<Boolean,Boolean>(
1187                new Function<Boolean,Boolean>() {
1188                        @Override
1189                        public Boolean apply(Boolean input) {
1190                            return input;
1191                }});
1192        nativeCallback.service.hasFeature(
1193                TypeTransformer.getInstance().to(
1194                    feature,
1195                    byte[].class,
1196                    okio.ByteString.class),nativeCallback);
1197        return nativeCallback.feature;
1198    }
1199    public void hasFeature(byte[] feature,
1200        FutureCallback<Boolean>callback){
1201        factory.addCallback(hasFeature(feature), callback);
1202    }
1203    /**
1204     * see also {@link net.gdface.facedb.FaceDb#hasFeatureByMD5(java.lang.String)}
1205     */
1206    public ListenableFuture<Boolean> hasFeatureByMD5(String featureId){
1207        MethodCallback<Boolean,Boolean> nativeCallback = 
1208            new MethodCallback<Boolean,Boolean>(
1209                new Function<Boolean,Boolean>() {
1210                        @Override
1211                        public Boolean apply(Boolean input) {
1212                            return input;
1213                }});
1214        nativeCallback.service.hasFeatureByMD5(
1215                featureId,nativeCallback);
1216        return nativeCallback.feature;
1217    }
1218    public void hasFeatureByMD5(String featureId,
1219        FutureCallback<Boolean>callback){
1220        factory.addCallback(hasFeatureByMD5(featureId), callback);
1221    }
1222    /**
1223     * see also {@link net.gdface.facedb.FaceDb#hasImage(java.lang.String)}
1224     */
1225    public ListenableFuture<Boolean> hasImage(String imageMd5){
1226        MethodCallback<Boolean,Boolean> nativeCallback = 
1227            new MethodCallback<Boolean,Boolean>(
1228                new Function<Boolean,Boolean>() {
1229                        @Override
1230                        public Boolean apply(Boolean input) {
1231                            return input;
1232                }});
1233        nativeCallback.service.hasImage(
1234                imageMd5,nativeCallback);
1235        return nativeCallback.feature;
1236    }
1237    public void hasImage(String imageMd5,
1238        FutureCallback<Boolean>callback){
1239        factory.addCallback(hasImage(imageMd5), callback);
1240    }
1241    /**
1242     * see also {@link net.gdface.facedb.FaceDb#isLocal()}
1243     */
1244    public boolean isLocal(){
1245        return false;
1246    }
1247    /**
1248     * see also {@link net.gdface.facedb.FaceDb#loadFeaturesMd5ByCreateTime(java.lang.String)}
1249     */
1250    public ListenableFuture<List<String>> loadFeaturesMd5ByCreateTime(String timestamp){
1251        MethodCallback<List<String>,List<String>> nativeCallback = 
1252            new MethodCallback<List<String>,List<String>>(
1253                new Function<List<String>,List<String>>() {
1254                        @Override
1255                        public List<String> apply(List<String> input) {
1256                            return input;
1257                }});
1258        nativeCallback.service.loadFeaturesMd5ByCreateTimeTimeStr(
1259                timestamp,nativeCallback);
1260        return nativeCallback.feature;
1261    }
1262    public void loadFeaturesMd5ByCreateTime(String timestamp,
1263        FutureCallback<List<String>>callback){
1264        factory.addCallback(loadFeaturesMd5ByCreateTime(timestamp), callback);
1265    }
1266    /**
1267     * see also {@link net.gdface.facedb.FaceDb#loadFeaturesMd5ByCreateTime(java.util.Date)}
1268     */
1269    public ListenableFuture<List<String>> loadFeaturesMd5ByCreateTime(Date timestamp){
1270        MethodCallback<List<String>,List<String>> nativeCallback = 
1271            new MethodCallback<List<String>,List<String>>(
1272                new Function<List<String>,List<String>>() {
1273                        @Override
1274                        public List<String> apply(List<String> input) {
1275                            return input;
1276                }});
1277        nativeCallback.service.loadFeaturesMd5ByCreateTime(
1278                TypeTransformer.getInstance().to(
1279                    timestamp,
1280                    Date.class,
1281                    Long.class),nativeCallback);
1282        return nativeCallback.feature;
1283    }
1284    public void loadFeaturesMd5ByCreateTime(Date timestamp,
1285        FutureCallback<List<String>>callback){
1286        factory.addCallback(loadFeaturesMd5ByCreateTime(timestamp), callback);
1287    }
1288    /**
1289     * see also {@link net.gdface.facedb.FaceDb#loadFeaturesMd5ByWhere(java.lang.String)}
1290     */
1291    public ListenableFuture<List<String>> loadFeaturesMd5ByWhere(String where){
1292        MethodCallback<List<String>,List<String>> nativeCallback = 
1293            new MethodCallback<List<String>,List<String>>(
1294                new Function<List<String>,List<String>>() {
1295                        @Override
1296                        public List<String> apply(List<String> input) {
1297                            return input;
1298                }});
1299        nativeCallback.service.loadFeaturesMd5ByWhere(
1300                where,nativeCallback);
1301        return nativeCallback.feature;
1302    }
1303    public void loadFeaturesMd5ByWhere(String where,
1304        FutureCallback<List<String>>callback){
1305        factory.addCallback(loadFeaturesMd5ByWhere(where), callback);
1306    }
1307    /**
1308     * see also {@link net.gdface.facedb.FaceDb#loadImagesByWhere(java.lang.String,int,int)}
1309     */
1310    public ListenableFuture<List<ImageBean>> loadImagesByWhere(String where,
1311        int startRow,
1312        int numRows){
1313        MethodCallback<List<ImageBean>,List<net.gdface.facedb.thrift.client.ImageBean>> nativeCallback = 
1314            new MethodCallback<List<ImageBean>,List<net.gdface.facedb.thrift.client.ImageBean>>(
1315                new Function<List<net.gdface.facedb.thrift.client.ImageBean>,List<ImageBean>>() {
1316                        @Override
1317                        public List<ImageBean> apply(List<net.gdface.facedb.thrift.client.ImageBean> input) {
1318                            return TypeTransformer.getInstance().to(
1319                    input,
1320                    net.gdface.facedb.thrift.client.ImageBean.class,
1321                    ImageBean.class);
1322                }});
1323        nativeCallback.service.loadImagesByWhere(
1324                where,
1325            startRow,
1326            numRows,nativeCallback);
1327        return nativeCallback.feature;
1328    }
1329    public void loadImagesByWhere(String where,
1330        int startRow,
1331        int numRows,
1332        FutureCallback<List<ImageBean>>callback){
1333        factory.addCallback(loadImagesByWhere(where,startRow,numRows), callback);
1334    }
1335    /**
1336     * see also {@link net.gdface.facedb.FaceDb#loadImagesMd5ByCreateTime(java.lang.String)}
1337     */
1338    public ListenableFuture<List<String>> loadImagesMd5ByCreateTime(String timestamp){
1339        MethodCallback<List<String>,List<String>> nativeCallback = 
1340            new MethodCallback<List<String>,List<String>>(
1341                new Function<List<String>,List<String>>() {
1342                        @Override
1343                        public List<String> apply(List<String> input) {
1344                            return input;
1345                }});
1346        nativeCallback.service.loadImagesMd5ByCreateTimeTimeStr(
1347                timestamp,nativeCallback);
1348        return nativeCallback.feature;
1349    }
1350    public void loadImagesMd5ByCreateTime(String timestamp,
1351        FutureCallback<List<String>>callback){
1352        factory.addCallback(loadImagesMd5ByCreateTime(timestamp), callback);
1353    }
1354    /**
1355     * see also {@link net.gdface.facedb.FaceDb#loadImagesMd5ByCreateTime(java.util.Date)}
1356     */
1357    public ListenableFuture<List<String>> loadImagesMd5ByCreateTime(Date timestamp){
1358        MethodCallback<List<String>,List<String>> nativeCallback = 
1359            new MethodCallback<List<String>,List<String>>(
1360                new Function<List<String>,List<String>>() {
1361                        @Override
1362                        public List<String> apply(List<String> input) {
1363                            return input;
1364                }});
1365        nativeCallback.service.loadImagesMd5ByCreateTime(
1366                TypeTransformer.getInstance().to(
1367                    timestamp,
1368                    Date.class,
1369                    Long.class),nativeCallback);
1370        return nativeCallback.feature;
1371    }
1372    public void loadImagesMd5ByCreateTime(Date timestamp,
1373        FutureCallback<List<String>>callback){
1374        factory.addCallback(loadImagesMd5ByCreateTime(timestamp), callback);
1375    }
1376    /**
1377     * see also {@link net.gdface.facedb.FaceDb#loadImagesMd5ByWhere(java.lang.String)}
1378     */
1379    public ListenableFuture<List<String>> loadImagesMd5ByWhere(String where){
1380        MethodCallback<List<String>,List<String>> nativeCallback = 
1381            new MethodCallback<List<String>,List<String>>(
1382                new Function<List<String>,List<String>>() {
1383                        @Override
1384                        public List<String> apply(List<String> input) {
1385                            return input;
1386                }});
1387        nativeCallback.service.loadImagesMd5ByWhere(
1388                where,nativeCallback);
1389        return nativeCallback.feature;
1390    }
1391    public void loadImagesMd5ByWhere(String where,
1392        FutureCallback<List<String>>callback){
1393        factory.addCallback(loadImagesMd5ByWhere(where), callback);
1394    }
1395    /**
1396     * see also {@link net.gdface.facedb.FaceDb#searchFaces(byte[],net.gdface.sdk.CodeInfo,double,int,java.lang.String)}
1397     */
1398    public ListenableFuture<SearchResult[]> searchFaces(byte[] imgData,
1399        CodeInfo facePos,
1400        double similarty,
1401        int rows,
1402        String where){
1403        MethodCallback<SearchResult[],java.util.List<net.gdface.facedb.thrift.client.SearchResult>> nativeCallback = 
1404            new MethodCallback<SearchResult[],java.util.List<net.gdface.facedb.thrift.client.SearchResult>>(
1405                new Function<java.util.List<net.gdface.facedb.thrift.client.SearchResult>,SearchResult[]>() {
1406                        @Override
1407                        public SearchResult[] apply(java.util.List<net.gdface.facedb.thrift.client.SearchResult> input) {
1408                            return TypeTransformer.getInstance().toArray(
1409                    input,
1410                    net.gdface.facedb.thrift.client.SearchResult.class,
1411                    SearchResult.class);
1412                }});
1413        nativeCallback.service.searchFaces(
1414                TypeTransformer.getInstance().to(
1415                    imgData,
1416                    byte[].class,
1417                    okio.ByteString.class),
1418            TypeTransformer.getInstance().to(
1419                    facePos,
1420                    CodeInfo.class,
1421                    net.gdface.facedb.thrift.client.CodeInfo.class),
1422            similarty,
1423            rows,
1424            where,nativeCallback);
1425        return nativeCallback.feature;
1426    }
1427    public void searchFaces(byte[] imgData,
1428        CodeInfo facePos,
1429        double similarty,
1430        int rows,
1431        String where,
1432        FutureCallback<SearchResult[]>callback){
1433        factory.addCallback(searchFaces(imgData,facePos,similarty,rows,where), callback);
1434    }
1435    /**
1436     * see also {@link net.gdface.facedb.FaceDb#searchFaces(net.gdface.image.MatType,byte[],int,int,net.gdface.sdk.CodeInfo,double,int,java.lang.String)}
1437     */
1438    public ListenableFuture<SearchResult[]> searchFaces(MatType matType,
1439        byte[] matData,
1440        int width,
1441        int height,
1442        CodeInfo facePos,
1443        double similarty,
1444        int rows,
1445        String where){
1446        MethodCallback<SearchResult[],java.util.List<net.gdface.facedb.thrift.client.SearchResult>> nativeCallback = 
1447            new MethodCallback<SearchResult[],java.util.List<net.gdface.facedb.thrift.client.SearchResult>>(
1448                new Function<java.util.List<net.gdface.facedb.thrift.client.SearchResult>,SearchResult[]>() {
1449                        @Override
1450                        public SearchResult[] apply(java.util.List<net.gdface.facedb.thrift.client.SearchResult> input) {
1451                            return TypeTransformer.getInstance().toArray(
1452                    input,
1453                    net.gdface.facedb.thrift.client.SearchResult.class,
1454                    SearchResult.class);
1455                }});
1456        nativeCallback.service.searchFacesMat(
1457                TypeTransformer.getInstance().to(
1458                    matType,
1459                    MatType.class,
1460                    net.gdface.facedb.thrift.client.MatType.class),
1461            TypeTransformer.getInstance().to(
1462                    matData,
1463                    byte[].class,
1464                    okio.ByteString.class),
1465            width,
1466            height,
1467            TypeTransformer.getInstance().to(
1468                    facePos,
1469                    CodeInfo.class,
1470                    net.gdface.facedb.thrift.client.CodeInfo.class),
1471            similarty,
1472            rows,
1473            where,nativeCallback);
1474        return nativeCallback.feature;
1475    }
1476    public void searchFaces(MatType matType,
1477        byte[] matData,
1478        int width,
1479        int height,
1480        CodeInfo facePos,
1481        double similarty,
1482        int rows,
1483        String where,
1484        FutureCallback<SearchResult[]>callback){
1485        factory.addCallback(searchFaces(matType,matData,width,height,facePos,similarty,rows,where), callback);
1486    }
1487    /**
1488     * see also {@link net.gdface.facedb.FaceDb#searchFeatures(byte[],double,int,java.lang.String)}
1489     */
1490    public ListenableFuture<SearchResult[]> searchFeatures(byte[] feature,
1491        double similarty,
1492        int rows,
1493        String where){
1494        MethodCallback<SearchResult[],java.util.List<net.gdface.facedb.thrift.client.SearchResult>> nativeCallback = 
1495            new MethodCallback<SearchResult[],java.util.List<net.gdface.facedb.thrift.client.SearchResult>>(
1496                new Function<java.util.List<net.gdface.facedb.thrift.client.SearchResult>,SearchResult[]>() {
1497                        @Override
1498                        public SearchResult[] apply(java.util.List<net.gdface.facedb.thrift.client.SearchResult> input) {
1499                            return TypeTransformer.getInstance().toArray(
1500                    input,
1501                    net.gdface.facedb.thrift.client.SearchResult.class,
1502                    SearchResult.class);
1503                }});
1504        nativeCallback.service.searchFeatures(
1505                TypeTransformer.getInstance().to(
1506                    feature,
1507                    byte[].class,
1508                    okio.ByteString.class),
1509            similarty,
1510            rows,
1511            where,nativeCallback);
1512        return nativeCallback.feature;
1513    }
1514    public void searchFeatures(byte[] feature,
1515        double similarty,
1516        int rows,
1517        String where,
1518        FutureCallback<SearchResult[]>callback){
1519        factory.addCallback(searchFeatures(feature,similarty,rows,where), callback);
1520    }
1521}