use of org.apache.aries.application.modelling.ImportedService in project aries by apache.
the class ApplicationServiceModeller method computeRequirementsAndCapabilities.
@Override
public ServiceModel computeRequirementsAndCapabilities(Resource resource, IDirectory directory) throws SubsystemException {
try {
ServiceModelImpl model = new ServiceModelImpl();
ParsedServiceElements elements = manager.getServiceElements(directory);
for (ExportedService service : elements.getServices()) {
model.capabilities.add(new BasicCapability.Builder().namespace(ServiceNamespace.SERVICE_NAMESPACE).attribute(ServiceNamespace.CAPABILITY_OBJECTCLASS_ATTRIBUTE, new ArrayList<String>(service.getInterfaces())).attributes(service.getServiceProperties()).resource(resource).build());
}
for (ImportedService service : elements.getReferences()) {
StringBuilder builder = new StringBuilder();
String serviceInterface = service.getInterface();
String filter = service.getFilter();
if (serviceInterface != null && filter != null) {
builder.append("(&");
}
if (serviceInterface != null) {
builder.append('(').append(ServiceNamespace.CAPABILITY_OBJECTCLASS_ATTRIBUTE).append('=').append(serviceInterface).append(')');
}
if (filter != null)
builder.append(filter);
if (serviceInterface != null && filter != null) {
builder.append(')');
}
if (builder.length() > 0) {
model.requirements.add(new BasicRequirement.Builder().namespace(ServiceNamespace.SERVICE_NAMESPACE).directive(Namespace.REQUIREMENT_FILTER_DIRECTIVE, builder.toString()).directive(Namespace.REQUIREMENT_RESOLUTION_DIRECTIVE, service.isOptional() ? Namespace.RESOLUTION_OPTIONAL : Namespace.RESOLUTION_MANDATORY).directive(Namespace.REQUIREMENT_CARDINALITY_DIRECTIVE, service.isMultiple() ? Namespace.CARDINALITY_MULTIPLE : Namespace.CARDINALITY_SINGLE).resource(resource).build());
}
}
return model;
} catch (ModellerException e) {
throw new SubsystemException(e);
}
}
use of org.apache.aries.application.modelling.ImportedService in project aries by apache.
the class ModelledResourceManagerImpl method getServiceElements.
private ParsedServiceElements getServiceElements(BundleManifest bundleMf, IDirectory archive) throws ModellerException {
Set<ExportedService> services = new HashSet<ExportedService>();
Set<ImportedService> references = new HashSet<ImportedService>();
try {
ParsedServiceElements pse = getBlueprintServiceElements(bundleMf, findBlueprints(bundleMf, archive));
services.addAll(pse.getServices());
references.addAll(pse.getReferences());
for (ServiceModeller sm : modellingPlugins) {
pse = sm.modelServices(bundleMf, archive);
services.addAll(pse.getServices());
references.addAll(pse.getReferences());
}
return new ParsedServiceElementsImpl(services, references);
} catch (Exception e) {
throw new ModellerException(e);
}
}
use of org.apache.aries.application.modelling.ImportedService in project aries by apache.
the class DeployedBundlesImpl method getDeployedImportService.
/**
* Get the Deployed-ImportService header.
* this.deployedImportService contains all the service import filters for every
* blueprint component within the application. We will only write an entry
* to Deployed-ImportService if
* a) the reference isMultiple(), or
* b) the service was not available internally when the app was first deployed
*
*/
public String getDeployedImportService() {
logger.debug(LOG_ENTRY, "getDeployedImportService");
String result = cachedDeployedImportService;
if (result == null) {
Collection<ImportedService> deployedBundleServiceImports = new ArrayList<ImportedService>();
Collection<ExportedService> servicesExportedWithinIsolatedContent = new ArrayList<ExportedService>();
for (ModelledResource mRes : getDeployedContent()) {
servicesExportedWithinIsolatedContent.addAll(mRes.getExportedServices());
}
for (ModelledResource mRes : fakeDeployedBundles) {
servicesExportedWithinIsolatedContent.addAll(mRes.getExportedServices());
}
for (ImportedService impService : deployedImportService) {
if (impService.isMultiple()) {
deployedBundleServiceImports.add(impService);
} else {
boolean serviceProvidedWithinIsolatedContent = false;
Iterator<ExportedService> it = servicesExportedWithinIsolatedContent.iterator();
while (!serviceProvidedWithinIsolatedContent && it.hasNext()) {
ExportedService svc = it.next();
serviceProvidedWithinIsolatedContent |= impService.isSatisfied(svc);
}
if (!serviceProvidedWithinIsolatedContent) {
deployedBundleServiceImports.add(impService);
}
}
}
result = createManifestString(deployedBundleServiceImports);
cachedDeployedImportService = result;
}
logger.debug(LOG_EXIT, "getDeployedImportService", result);
return result;
}
use of org.apache.aries.application.modelling.ImportedService in project aries by apache.
the class AbstractParserProxy method parseAllServiceElements.
public ParsedServiceElements parseAllServiceElements(InputStream blueprintToParse) throws Exception {
_logger.debug(LOG_ENTRY, "parseAllServiceElements", new Object[] { blueprintToParse });
ComponentDefinitionRegistry cdr = parseCDR(blueprintToParse);
Collection<ExportedService> services = parseCDRForServices(cdr, false);
Collection<ImportedService> references = parseCDRForReferences(cdr);
ParsedServiceElements result = _modellingManager.getParsedServiceElements(services, references);
_logger.debug(LOG_EXIT, "parseAllServiceElements", new Object[] { result });
return result;
}
use of org.apache.aries.application.modelling.ImportedService in project aries by apache.
the class SharedFrameworkPreResolveHook method collectFakeResources.
@Override
public void collectFakeResources(Collection<ModelledResource> resources) {
Bundle b = fwMgr.getSharedBundleFramework().getIsolatedBundleContext().getBundle(1);
BundleInfo info = new BundleInfoImpl(b);
Collection<ImportedService> serviceImports = Collections.emptySet();
Collection<ExportedService> serviceExports = Collections.emptySet();
try {
resources.add(mgr.getModelledResource(info.getLocation(), info, serviceImports, serviceExports));
} catch (InvalidAttributeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Aggregations