Package aQute.bnd.metatype

Source Code of aQute.bnd.metatype.MetatypeAnnotations

package aQute.bnd.metatype;

import java.util.*;

import aQute.bnd.component.TagResource;
import aQute.bnd.header.*;
import aQute.bnd.osgi.*;
import aQute.bnd.service.*;

/**
* Analyze the class space for any classes that have an OSGi annotation for DS.
*/
public class MetatypeAnnotations implements AnalyzerPlugin {
 
  private final Map<String, OCDDef> classToOCDMap = new HashMap<String, OCDDef>();

  public boolean analyzeJar(Analyzer analyzer) throws Exception {
    Parameters header = OSGiHeader.parseHeader(analyzer.getProperty(Constants.METATYPE_ANNOTATIONS));
    if (header.size() == 0)
      return false;

    Instructions instructions = new Instructions(header);
    Collection<Clazz> list = analyzer.getClassspace().values();

    for (Clazz c: list) {
      for (Instruction instruction : instructions.keySet()) {

        if (instruction.matches(c.getFQN())) {
          if (instruction.isNegated())
            break;
          OCDDef definition = OCDReader.getOCDDef(c, analyzer);
          if (definition != null) {
            definition.prepare(analyzer);
            classToOCDMap.put(c.getClassName().getBinary(), definition);
            String name = "OSGI-INF/metatype/" + analyzer.validResourcePath(definition.id, "Invalid resource name") + ".xml";
            analyzer.getJar().putResource(name, new TagResource(definition.getTag()));
          }
        }
      }
    }
   
    header = OSGiHeader.parseHeader(analyzer.getProperty(Constants.DSANNOTATIONS));
    if (header.size() == 0)
      return false;

      instructions = new Instructions(header);
      list = analyzer.getClassspace().values();

    for (Clazz c: list) {
      for (Instruction instruction : instructions.keySet()) {

        if (instruction.matches(c.getFQN())) {
          if (instruction.isNegated())
            break;
          DesignateDef designate = DesignateReader.getDesignate(c, analyzer, classToOCDMap);
          if (designate != null) {
            designate.prepare(analyzer);
            String name = "OSGI-INF/metatype/" + analyzer.validResourcePath(c.getFQN(), "Invalid resource name") + ".xml";
            analyzer.getJar().putResource(name, new TagResource(designate.getTag()));
          }
        }
      }
    }
    return false;
  }

  @Override
  public String toString() {
    return "MetatypeAnnotations";
  }
}
TOP

Related Classes of aQute.bnd.metatype.MetatypeAnnotations

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.