Package org.apache.aries.application.resolver.obr.ext

Source Code of org.apache.aries.application.resolver.obr.ext.BundleResource

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you 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.apache.aries.application.resolver.obr.ext;

import static org.apache.aries.application.utils.AppConstants.LOG_ENTRY;
import static org.apache.aries.application.utils.AppConstants.LOG_EXIT;

import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;

import org.apache.aries.application.modelling.ExportedPackage;
import org.apache.aries.application.modelling.ExportedService;
import org.apache.aries.application.modelling.ImportedBundle;
import org.apache.aries.application.modelling.ImportedPackage;
import org.apache.aries.application.modelling.ImportedService;
import org.apache.aries.application.modelling.ModelledResource;
import org.apache.aries.application.modelling.ModellingConstants;
import org.apache.aries.application.resolver.obr.impl.OBRCapability;
import org.apache.aries.application.resolver.obr.impl.RequirementImpl;
import org.apache.felix.bundlerepository.Capability;
import org.apache.felix.bundlerepository.RepositoryAdmin;
import org.apache.felix.bundlerepository.Requirement;
import org.apache.felix.bundlerepository.Resource;
import org.osgi.framework.Version;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class BundleResource implements Resource
{
 
  private final ModelledResource _modelledBundle;
  private final Collection<Capability> _capabilities;
  private final Collection<Requirement> _requirements;
  private final String _displayName;
  private Logger logger = LoggerFactory.getLogger(BundleResource.class);
 
  /**
   * Build a BundleResource from another BundleResource and some optional extra capabilities and requirements
   * @param br
   * @param extraCapabilities can be null
   * @param extraRequirements can be null
   */
  public BundleResource (BundleResource br, Collection<Capability> extraCapabilities, Collection<Requirement> extraRequirements) {
    _modelledBundle = br._modelledBundle;
    _capabilities = new ArrayList<Capability> (br._capabilities);
    _requirements = new ArrayList<Requirement> (br._requirements);
    _displayName = new String (br._displayName);
    if (extraCapabilities != null) _capabilities.addAll(extraCapabilities);
    if (extraRequirements != null) _requirements.addAll(extraRequirements);
  }
 
  public BundleResource (ModelledResource mb, RepositoryAdmin repositoryAdmin) {
    logger.debug(LOG_ENTRY,"BundleResource", mb);
    _modelledBundle = mb;
   
    _capabilities = new ArrayList<Capability>();
    _capabilities.add(new OBRCapability(_modelledBundle.getExportedBundle(), repositoryAdmin));

    for (ExportedPackage pkg : _modelledBundle.getExportedPackages()) {
      _capabilities.add(new OBRCapability(pkg, repositoryAdmin));
    }

    for (ExportedService svc : _modelledBundle.getExportedServices()) {
      _capabilities.add(new OBRCapability(svc, repositoryAdmin));
    }

    _requirements = new ArrayList<Requirement>();
    for (ImportedPackage pkg : _modelledBundle.getImportedPackages()) {
      _requirements.add(new RequirementImpl(pkg));
    }
   
    for (ImportedService svc : _modelledBundle.getImportedServices()) {
      _requirements.add(new RequirementImpl(svc));
    }
   
    for (ImportedBundle requiredBundle : _modelledBundle.getRequiredBundles()) {
      _requirements.add(new RequirementImpl(requiredBundle));
    }
   
    if(mb.isFragment())
      _requirements.add(new RequirementImpl(mb.getFragmentHost()));

    String possibleDisplayName = (String) mb.getExportedBundle().getAttributes().get(
        ModellingConstants.OBR_PRESENTATION_NAME);
    if (possibleDisplayName == null) {
      _displayName = mb.getSymbolicName();
    } else {
      _displayName = possibleDisplayName;
    }
   
   
   
    logger.debug(LOG_EXIT,"BundleResource");
   
  }

  public ModelledResource getModelledResource() {
    return _modelledBundle;
  }
 
  public Capability[] getCapabilities() {
  
    logger.debug(LOG_ENTRY,"getCapabilities");
    Capability [] result = _capabilities.toArray(new Capability[_capabilities.size()]);
    logger.debug(LOG_EXIT,"getCapabilities", result);
    return result;
  }


  public String[] getCategories() {
    logger.debug(LOG_ENTRY,"getCategories");
    logger.debug(LOG_EXIT,"getCategories", null);
    return null;
  }


  public String getId() {  
    logger.debug(LOG_ENTRY,"getId");
    String id = _modelledBundle.getSymbolicName() + '/' + _modelledBundle.getVersion();
    logger.debug(LOG_EXIT,"getId", id);
    return id;
  }


  public String getPresentationName() {
   
    logger.debug(LOG_ENTRY,"getPresentationName");
    logger.debug(LOG_EXIT,"getPresentationName", _displayName);
    return _displayName;
  }


  @SuppressWarnings("unchecked")
  public Map getProperties() {
    logger.debug(LOG_ENTRY,"getProperties");
    logger.debug(LOG_EXIT,"getProperties", null);
   
    return null;
  }




  public Requirement[] getRequirements() {
    logger.debug(LOG_ENTRY,"getRequirements");
    Requirement [] result = _requirements.toArray(new Requirement[_requirements.size()]);
    logger.debug(LOG_EXIT,"getRequirements", result);
    return result;
  }


  public String getSymbolicName() {
    logger.debug(LOG_ENTRY,"getSymbolicName");
    String result = _modelledBundle.getSymbolicName();
    logger.debug(LOG_EXIT,"getSymbolicName", result);
    return result;
  }


  public URL getURL() {
   
    logger.debug(LOG_ENTRY,"getURL");
    URL url = null;
    try {
      URI uri = new URI(_modelledBundle.getLocation());
      url = uri.toURL();
    } catch (URISyntaxException e) {
      logger.error(e.getMessage());
    } catch (MalformedURLException e) {
      logger.error(e.getMessage());
    }
    logger.debug(LOG_EXIT,"getURL", url);
    return url;
  }


  public Version getVersion() {
    logger.debug(LOG_ENTRY,"getVersion");
    Version v = new Version(_modelledBundle.getVersion());
    logger.debug(LOG_EXIT,"getVersion", v);
    return v;
  }

  public Long getSize()
  {
    logger.debug(LOG_ENTRY,"getSize");
    logger.debug(LOG_EXIT,"getSize", 5l);
    return 5l;
  }

  public String getURI()
  {
    logger.debug(LOG_ENTRY,"getURI");
    String uri = _modelledBundle.getLocation();
    logger.debug(LOG_EXIT,"getURI", uri);
    return uri;
  }

  public boolean isLocal()
  {
    logger.debug(LOG_ENTRY,"isLocal");
    logger.debug(LOG_EXIT,"isLocal", false);
    return false;
  }

}
TOP

Related Classes of org.apache.aries.application.resolver.obr.ext.BundleResource

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.