/*******************************************************************************
* Copyright (c) 2014 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.cdi.deltaspike.core;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.eclipse.core.runtime.IPath;
import org.jboss.tools.cdi.core.extension.AbstractDefinitionContextExtension;
import org.jboss.tools.cdi.internal.core.impl.definition.AnnotationDefinition;
/**
*
* @author Viacheslav Kabanovich
*
*/
@SuppressWarnings("restriction")
public class DeltaspikePartialbeanDefinitionContext extends AbstractDefinitionContextExtension implements DeltaspikeConstants {
Map<String, DeltaspikePartialbeanBindingConfiguration> partialbeanBindingConfigurations = new HashMap<String, DeltaspikePartialbeanBindingConfiguration>();
protected DeltaspikePartialbeanDefinitionContext copy(boolean clean) {
DeltaspikePartialbeanDefinitionContext copy = new DeltaspikePartialbeanDefinitionContext();
copy.root = root;
if(!clean) {
copy.partialbeanBindingConfigurations.putAll(partialbeanBindingConfigurations);
}
return copy;
}
@Override
protected void doApplyWorkingCopy() {
DeltaspikePartialbeanDefinitionContext copy = (DeltaspikePartialbeanDefinitionContext)workingCopy;
partialbeanBindingConfigurations = copy.partialbeanBindingConfigurations;
}
@Override
public void clean() {
partialbeanBindingConfigurations.clear();
}
@Override
public void clean(IPath path) {
}
@Override
public void clean(String typeName) {
partialbeanBindingConfigurations.remove(typeName);
for (DeltaspikePartialbeanBindingConfiguration c: partialbeanBindingConfigurations.values()) {
c.clear(typeName);
}
}
@Override
public void computeAnnotationKind(AnnotationDefinition annotation) {
if(annotation.isAnnotationPresent(PARTIALBEAN_BINDING_ANNOTATION_TYPE_NAME)) {
annotation.setExtendedKind(PARTIALBEAN_BINDING_ANNOTATION_KIND);
String qn = annotation.getType().getFullyQualifiedName();
DeltaspikePartialbeanBindingConfiguration c = getConfiguration(qn);
c.setPartialbeanBindingTypeDefinition(annotation, this);
if(!annotation.getType().isBinary()) {
IPath newPath = annotation.getType().getResource().getFullPath();
Set<IPath> ps = c.getInvolvedTypes();
for (IPath p: ps) {
getRootContext().addDependency(p, newPath);
getRootContext().addDependency(newPath, p);
}
ps.add(newPath);
}
}
}
public DeltaspikePartialbeanBindingConfiguration getConfiguration(String typeName) {
DeltaspikePartialbeanBindingConfiguration result = partialbeanBindingConfigurations.get(typeName);
if(result == null) {
result = new DeltaspikePartialbeanBindingConfiguration(typeName);
partialbeanBindingConfigurations.put(typeName, result);
}
return result;
}
}