/*
* Copyright (C) 2015 Red Hat, Inc. and/or its affiliates.
*
* 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.jboss.errai.ioc.client.container;
import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import org.jboss.errai.ioc.client.QualifierUtil;
/**
* @see FactoryHandle
* @author Max Barkley <mbarkley@redhat.com>
*/
public class FactoryHandleImpl implements FactoryHandle {
private static final List<Annotation> defaultQualifiers = Arrays.asList(QualifierUtil.DEFAULT_QUALIFIERS);
private List<Annotation> qualifiers;
private List<Class<?>> assignableTypes;
private final Class<?> actualType;
private final String factoryName;
private final Class<? extends Annotation> scope;
private final boolean eager;
private final String beanName;
private final Class<? extends BeanActivator> activatorType;
private final boolean availableByLookup;
public FactoryHandleImpl(final Class<?> actualType, final String factoryName, final Class<? extends Annotation> scope,
final boolean eager, final String beanName, final boolean availableByLookup, final Class<? extends BeanActivator> activatorType) {
this.actualType = actualType;
this.factoryName = factoryName;
this.scope = scope;
this.eager = eager;
this.beanName = beanName;
this.activatorType = activatorType;
this.availableByLookup = availableByLookup;
}
public FactoryHandleImpl(final Class<?> actualType, final String factoryName, final Class<? extends Annotation> scope, final boolean eager, final String beanName, final boolean availableByLookup ) {
this(actualType, factoryName, scope, eager, beanName, availableByLookup, null);
}
@Override
public String getBeanName() {
return beanName;
}
@Override
public Collection<Annotation> getQualifiers() {
if (qualifiers == null) {
return Collections.unmodifiableCollection(defaultQualifiers);
}
else {
return Collections.unmodifiableCollection(qualifiers);
}
}
public void setQualifiers(final Annotation[] qualifiers) {
this.qualifiers = Arrays.asList(qualifiers);
}
public void setAssignableTypes(final Class<?>[] assignableTypes) {
this.assignableTypes = Arrays.asList(assignableTypes);
}
@Override
public Collection<Class<?>> getAssignableTypes() {
return Collections.unmodifiableCollection(assignableTypes);
}
@Override
public Class<?> getActualType() {
return actualType;
}
@Override
public String getFactoryName() {
return factoryName;
}
@Override
public Class<? extends Annotation> getScope() {
return scope;
}
@Override
public String toString() {
return "[type=" + actualType + ", name=" + factoryName + ", scope=" + scope.getSimpleName() + ", qualifiers=" + qualifiers + "]";
}
@Override
public boolean isEager() {
return eager;
}
@Override
public Class<? extends BeanActivator> getBeanActivatorType() {
return activatorType;
}
@Override
public boolean isAvailableByLookup() {
return availableByLookup;
}
}