
it.tidalwave.bluebill.mobile.role.util.PredicateCapabilityProvider Maven / Gradle / Ivy
/***********************************************************************************************************************
*
* blueBill Mobile - Android - open source birding
* Copyright (C) 2009-2011 by Tidalwave s.a.s. (http://www.tidalwave.it)
*
***********************************************************************************************************************
*
* 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.
*
***********************************************************************************************************************
*
* WWW: http://bluebill.tidalwave.it/mobile
* SCM: https://java.net/hg/bluebill-mobile~android-src
*
**********************************************************************************************************************/
package it.tidalwave.bluebill.mobile.role.util;
import javax.annotation.Nonnull;
import java.util.Collection;
import java.util.Collections;
import org.openide.util.Lookup;
import org.openide.util.Lookup.Template;
import it.tidalwave.netbeans.util.LazyLookup;
import it.tidalwave.netbeans.capabilitiesprovider.CapabilitiesProvider;
import it.tidalwave.bluebill.mobile.role.util.RoleRegister.Predicate;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
/***********************************************************************************************************************
*
* @author Fabrizio Giudici
* @version $Id$
*
**********************************************************************************************************************/
@RequiredArgsConstructor
public class PredicateCapabilityProvider implements CapabilitiesProvider
{
@Nonnull @Getter
private final Class managedClass;
@Nonnull
private final Object role;
@Nonnull
private final Predicate predicate;
@Nonnull
public Collection extends Object> createCapabilities (final @Nonnull Object owner)
{
return Collections.emptyList();
}
// We can't just directly create the capability as we want to inspect the object's Lookup, and this operation
// can't be done in a CapabilityProvider, since the Lookup has not been instantiated yet. So we're using a lazy
// Lookup that will postpone the operation.
@Nonnull
public Collection extends Lookup> createLookups (final @Nonnull Object owner)
{
return Collections.singletonList(new LazyLookup()
{
@Override @Nonnull
protected Collection> computeInstances (final @Nonnull Template> template)
{
// First test type, to avoid useless calls to the predicate
return (template.getType().isAssignableFrom(role.getClass()) && predicate.apply(owner))
? Collections.singletonList(role)
: Collections.emptyList();
}
});
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy