Search in sources :

Example 1 with Finder

use of com.linkedin.restli.server.annotations.Finder in project rest.li by linkedin.

the class PhotoResource method find.

// find photos by title and/or format
// if both title and format are empty, any photo meets the search criteria
@Finder("titleAndOrFormat")
public List<Photo> find(@PagingContextParam PagingContext pagingContext, @QueryParam("title") @Optional String title, @QueryParam("format") @Optional PhotoFormats format) {
    final List<Photo> photos = new ArrayList<>();
    int index = 0;
    final int begin = pagingContext.getStart();
    final int end = begin + pagingContext.getCount();
    final Collection<Photo> dbPhotos = _db.getData().values();
    for (Photo p : dbPhotos) {
        if (index == end) {
            break;
        } else if (index >= begin) {
            if (title == null || p.getTitle().equalsIgnoreCase(title)) {
                if (format == null || format == p.getFormat()) {
                    photos.add(p);
                }
            }
        }
        index++;
    }
    return photos;
}
Also used : ArrayList(java.util.ArrayList) Photo(com.linkedin.restli.example.Photo) Finder(com.linkedin.restli.server.annotations.Finder) BatchFinder(com.linkedin.restli.server.annotations.BatchFinder)

Example 2 with Finder

use of com.linkedin.restli.server.annotations.Finder in project rest.li by linkedin.

the class GreetingsResourceImpl method searchWithFacets.

@Finder("searchWithFacets")
public CollectionResult<Greeting, SearchMetadata> searchWithFacets(@PagingContextParam PagingContext ctx, @QueryParam("tone") @Optional Tone tone) {
    List<Greeting> greetings = search(ctx, tone);
    Map<Tone, Integer> toneCounts = new HashMap<>();
    for (Greeting g : greetings) {
        if (!toneCounts.containsKey(g.getTone())) {
            toneCounts.put(g.getTone(), 0);
        }
        toneCounts.put(g.getTone(), toneCounts.get(g.getTone()) + 1);
    }
    SearchMetadata metadata = new SearchMetadata();
    metadata.setFacets(new ToneFacetArray());
    for (Map.Entry<Tone, Integer> entry : toneCounts.entrySet()) {
        ToneFacet f = new ToneFacet();
        f.setTone(entry.getKey());
        f.setCount(entry.getValue());
        metadata.getFacets().add(f);
    }
    return new CollectionResult<>(greetings, null, metadata);
}
Also used : ToneFacet(com.linkedin.restli.examples.greetings.api.ToneFacet) Greeting(com.linkedin.restli.examples.greetings.api.Greeting) CollectionResult(com.linkedin.restli.server.CollectionResult) Tone(com.linkedin.restli.examples.greetings.api.Tone) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) ToneFacetArray(com.linkedin.restli.examples.greetings.api.ToneFacetArray) SearchMetadata(com.linkedin.restli.examples.greetings.api.SearchMetadata) EmptyMap(com.linkedin.restli.examples.greetings.api.EmptyMap) Map(java.util.Map) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) StringMap(com.linkedin.data.template.StringMap) Finder(com.linkedin.restli.server.annotations.Finder)

Example 3 with Finder

use of com.linkedin.restli.server.annotations.Finder in project rest.li by linkedin.

the class GreetingsResourceImpl method searchWithTones.

@Finder("searchWithTones")
public List<Greeting> searchWithTones(@PagingContextParam PagingContext ctx, @QueryParam("tones") @Optional Tone[] tones) {
    Set<Tone> toneSet = new HashSet<>(Arrays.asList(tones));
    List<Greeting> greetings = new ArrayList<>();
    int idx = 0;
    int start = ctx.getStart();
    int stop = start + ctx.getCount();
    for (Greeting g : _db.values()) {
        if (idx++ >= ctx.getStart()) {
            if (tones == null || toneSet.contains(g.getTone())) {
                greetings.add(g);
            }
            if (idx == stop) {
                break;
            }
        }
    }
    return greetings;
}
Also used : Greeting(com.linkedin.restli.examples.greetings.api.Greeting) Tone(com.linkedin.restli.examples.greetings.api.Tone) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) Finder(com.linkedin.restli.server.annotations.Finder)

Example 4 with Finder

use of com.linkedin.restli.server.annotations.Finder in project rest.li by linkedin.

the class ValidationDemoResource method search.

@Finder("search")
public List<ValidationDemo> search(@QueryParam("intA") Integer intA, @ValidatorParam RestLiDataValidator validator) {
    List<ValidationDemo> validationDemos = new ArrayList<>();
    // Generate entities that are missing stringB fields
    for (int i = 0; i < 3; i++) {
        ValidationDemo.UnionFieldWithInlineRecord union = new ValidationDemo.UnionFieldWithInlineRecord();
        union.setMyEnum(myEnum.FOOFOO);
        validationDemos.add(new ValidationDemo().setStringA("valueA").setIntA(intA).setUnionFieldWithInlineRecord(union));
    }
    // Validate outgoing data
    for (ValidationDemo entity : validationDemos) {
        ValidationResult result = validator.validateOutput(entity);
        check(!result.isValid());
        check(result.getMessages().toString().contains("/stringB :: field is required but not found"));
    }
    // Fix entities
    for (ValidationDemo validationDemo : validationDemos) {
        validationDemo.setStringB("valueB");
    }
    // Validate again
    for (ValidationDemo entity : validationDemos) {
        ValidationResult result = validator.validateOutput(entity);
        check(result.isValid());
    }
    return validationDemos;
}
Also used : ArrayList(java.util.ArrayList) ValidationResult(com.linkedin.data.schema.validation.ValidationResult) ValidationDemo(com.linkedin.restli.examples.greetings.api.ValidationDemo) Finder(com.linkedin.restli.server.annotations.Finder) BatchFinder(com.linkedin.restli.server.annotations.BatchFinder)

Example 5 with Finder

use of com.linkedin.restli.server.annotations.Finder in project rest.li by linkedin.

the class RestLiAnnotationReader method addFinderResourceMethod.

private static void addFinderResourceMethod(final ResourceModel model, final Method method) {
    Finder finderAnno = method.getAnnotation(Finder.class);
    if (finderAnno == null) {
        return;
    }
    String queryType = finderAnno.value();
    if (queryType != null) {
        if (!Modifier.isPublic(method.getModifiers())) {
            throw new ResourceConfigException(String.format("Resource '%s' contains non-public finder method '%s'.", model.getName(), method.getName()));
        }
        List<Parameter<?>> queryParameters = getParameters(model, method, ResourceMethod.FINDER);
        Class<? extends RecordTemplate> metadataType = getCustomCollectionMetadata(method, DEFAULT_METADATA_PARAMETER_INDEX);
        DataMap annotationsMap = ResourceModelAnnotation.getAnnotationsMap(method.getAnnotations());
        addDeprecatedAnnotation(annotationsMap, method);
        ResourceMethodDescriptor finderMethodDescriptor = ResourceMethodDescriptor.createForFinder(method, queryParameters, queryType, metadataType, getInterfaceType(method), annotationsMap);
        validateFinderMethod(finderMethodDescriptor, model);
        addServiceErrors(finderMethodDescriptor, method);
        addSuccessStatuses(finderMethodDescriptor, method);
        model.addResourceMethodDescriptor(finderMethodDescriptor);
    }
}
Also used : Finder(com.linkedin.restli.server.annotations.Finder) BatchFinder(com.linkedin.restli.server.annotations.BatchFinder) ResourceConfigException(com.linkedin.restli.server.ResourceConfigException) DataMap(com.linkedin.data.DataMap)

Aggregations

Finder (com.linkedin.restli.server.annotations.Finder)14 ArrayList (java.util.ArrayList)11 Greeting (com.linkedin.restli.examples.greetings.api.Greeting)7 BatchFinder (com.linkedin.restli.server.annotations.BatchFinder)4 CollectionResult (com.linkedin.restli.server.CollectionResult)3 Message (com.linkedin.restli.examples.greetings.api.Message)2 Tone (com.linkedin.restli.examples.greetings.api.Tone)2 HashMap (java.util.HashMap)2 Map (java.util.Map)2 DataMap (com.linkedin.data.DataMap)1 ValidationResult (com.linkedin.data.schema.validation.ValidationResult)1 StringMap (com.linkedin.data.template.StringMap)1 CompoundKey (com.linkedin.restli.common.CompoundKey)1 AlbumEntry (com.linkedin.restli.example.AlbumEntry)1 Photo (com.linkedin.restli.example.Photo)1 HighLevelRecordWithDefault (com.linkedin.restli.examples.defaults.api.HighLevelRecordWithDefault)1 LowLevelRecordWithDefault (com.linkedin.restli.examples.defaults.api.LowLevelRecordWithDefault)1 EmptyMap (com.linkedin.restli.examples.greetings.api.EmptyMap)1 SearchMetadata (com.linkedin.restli.examples.greetings.api.SearchMetadata)1 ToneFacet (com.linkedin.restli.examples.greetings.api.ToneFacet)1