Java tutorial
/* * Copyright (C) 2013 Code-House, Lukasz Dywicki. * * 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 org.reflecio.guava; import java.util.Set; import org.reflecio.core.Reflecio; import org.reflecio.core.SelectionStrategy; import com.google.common.base.Predicate; import com.google.common.collect.Iterables; import com.google.common.collect.Sets; public class ReflectBuilder<T> { private Set<Predicate<?>> predicates = Sets.newHashSet(); private Set<SelectionStrategy<?>> strategies = Sets.newHashSet(); private Class<T> type; private ReflectBuilder<T> parent; public ReflectBuilder(Class<T> type) { this.type = type; } public ReflectBuilder(ReflectBuilder<T> parent, Class<T> type) { this(type); this.parent = parent; } public FieldBuilder<T> withFields() { strategies.add((SelectionStrategy<?>) org.reflecio.core.reflect.field.SelectionStrategy.DECLARED); return new FieldBuilder<T>(this, type); } protected void addPredicate(Predicate<?> predicate) { if (parent == null) { predicates.add(predicate); } else { parent.addPredicate(predicate); } } public Iterable<?> build() { SelectionStrategy<?>[] strategiesArr = Iterables.toArray(strategies, SelectionStrategy.class); return Reflecio.fields(type); } public static <X> ReflectBuilder<X> withClass(Class<X> type) { return new ReflectBuilder<X>(type); } }