
org.fabric3.implementation.pojo.generator.GenerationHelperImpl Maven / Gradle / Ivy
The newest version!
/*
* Fabric3
* Copyright (c) 2009-2015 Metaform Systems
*
* 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.
* Portions originally based on Apache Tuscany 2007
* licensed under the Apache 2.0 license.
*/
package org.fabric3.implementation.pojo.generator;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.w3c.dom.Document;
import org.fabric3.implementation.pojo.provision.ImplementationManagerDefinition;
import org.fabric3.implementation.pojo.provision.PojoComponentDefinition;
import org.fabric3.spi.model.instance.LogicalComponent;
import org.fabric3.spi.model.instance.LogicalProperty;
import org.fabric3.spi.model.physical.PhysicalPropertyDefinition;
import org.fabric3.spi.model.type.java.ConstructorInjectionSite;
import org.fabric3.api.model.type.java.Injectable;
import org.fabric3.api.model.type.java.InjectingComponentType;
import org.fabric3.api.model.type.java.InjectionSite;
import org.fabric3.api.model.type.java.Signature;
/**
*
*/
public class GenerationHelperImpl implements GenerationHelper {
public void processInjectionSites(InjectingComponentType componentType, ImplementationManagerDefinition managerDefinition) {
Map mappings = componentType.getInjectionSites();
// add injections for all the active constructor args
Map construction = managerDefinition.getConstruction();
Signature constructor = componentType.getConstructor();
Set byConstruction = new HashSet<>(constructor.getParameterTypes().size());
for (int i = 0; i < constructor.getParameterTypes().size(); i++) {
InjectionSite site = new ConstructorInjectionSite(constructor, i);
Injectable attribute = mappings.get(site);
construction.put(site, attribute);
byConstruction.add(attribute);
}
// add field/method injections
Map postConstruction = managerDefinition.getPostConstruction();
Map reinjection = managerDefinition.getReinjectables();
for (Map.Entry entry : mappings.entrySet()) {
InjectionSite site = entry.getKey();
if (site instanceof ConstructorInjectionSite) {
continue;
}
Injectable attribute = entry.getValue();
if (!byConstruction.contains(attribute)) {
postConstruction.put(site, attribute);
}
reinjection.put(site, attribute);
}
}
public void processPropertyValues(LogicalComponent> component, PojoComponentDefinition physical) {
for (LogicalProperty property : component.getAllProperties().values()) {
String name = property.getName();
boolean many = property.isMany();
if (property.getValue() != null) {
Document document = property.getValue();
PhysicalPropertyDefinition definition = new PhysicalPropertyDefinition(name, document, many);
physical.setPropertyDefinition(definition);
} else if (property.getInstanceValue() != null) {
Object value = property.getInstanceValue();
PhysicalPropertyDefinition definition = new PhysicalPropertyDefinition(name, value, many);
physical.setPropertyDefinition(definition);
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy