Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * 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.felix.scrplugin.xml;
 
 import java.io.File;
 import java.util.List;
 import java.util.Map;
 
MetaType is a helper class to read and write meta type service files.
 
 public class MetaTypeIO {
 
     private static final String NAMESPACE_URI = "http://www.osgi.org/xmlns/metatype/v1.0.0";
 
     private static final String INNER_NAMESPACE_URI = "";
 
     private static final String PREFIX = "metatype";
 
     private static final String METADATA_ELEMENT = "MetaData";
     private static final String METADATA_ELEMENT_QNAME =  + ':' + ;
 
     private static final String OCD_ELEMENT = "OCD";
     private static final String OCD_ELEMENT_QNAME = ;
 
     private static final String DESIGNATE_ELEMENT = "Designate";
     private static final String DESIGNATE_ELEMENT_QNAME = ;
 
     private static final String OBJECT_ELEMENT = "Object";
     private static final String OBJECT_ELEMENT_QNAME = ;
 
     private static final String AD_ELEMENT = "AD";
     private static final String AD_ELEMENT_QNAME = ;
 
     private static final String OPTION_ELEMENT = "Option";
     private static final String OPTION_ELEMENT_QNAME = ;
 
     public static List<StringgenerateDescriptors(final DescriptionContainer module,
             final Options options,
             final Log logger)
                     throws SCRDescriptorException {
         int metatypeCount = 0;
         for(final ComponentContainer component : module.getComponents()) {
             if ( component.getMetatypeContainer() != null ) {
                 metatypeCount++;
             }
         }
         // write meta type info if there is a file name
         if (!StringUtils.isEmpty(options.getMetaTypeName())) {
             final File mtDir = options.getMetaTypeDirectory();
             final File parentDir = mtDir.getParentFile();
 
             final File mtFile = new File(mtDiroptions.getMetaTypeName());
 
             if (metatypeCount > 0) {
                 mtDir.mkdirs();
 
                 final List<StringfileNames = new ArrayList<String>();
                 if ( options.isGenerateSeparateDescriptors() ) {
                     for(final ComponentContainer component : module.getComponents() ) {
                         if ( component.getMetatypeContainer() != null ) {
                             final File file = new File(mtDircomponent.getClassDescription().getDescribedClass().getName() + ".xml");
                             logger.info("Generating 1 MetaType Descriptor in " + file);
                            MetaTypeIO.write(module, Collections.singletonList(component), file);
                            fileNames.add(parentDir.getName() + '/' + mtDir.getName() + '/' + file.getName());
                        }
                    }
                } else {
                    logger.info("Generating " + metatypeCount + " MetaType Descriptors in " + mtFile);
                    MetaTypeIO.write(modulemodule.getComponents(), mtFile);
                    fileNames.add(parentDir.getName() + '/' + mtDir.getName() + '/' + mtFile.getName());
                }
                return fileNames;
            }
            if (mtFile.exists()) {
                mtFile.delete();
            }
        } else {
            if ( metatypeCount > 0 ) {
                logger.info("Meta type file name is not set: meta type info is not written.");
            }
        }
        return null;
    }

    
Generate the xml top level element and start streaming the meta data.

Parameters:
metaData
contentHandler
Throws:
org.xml.sax.SAXException
    private static void write(final DescriptionContainer metaDatafinal List<ComponentContainercomponentsfinal File file)
            throws SCRDescriptorException {
        try {
            final ContentHandler contentHandler = IOUtils.getSerializer(file);
            contentHandler.startDocument();
            contentHandler.startPrefixMapping();
            final AttributesImpl ai = new AttributesImpl();
            IOUtils.addAttribute(ai"localization". + "/metatype");
            contentHandler.startElement(ai);
            IOUtils.newline(contentHandler);
            for(final ComponentContainer comp : metaData.getComponents()) {
                if ( comp.getMetatypeContainer() != null ) {
                    generateOCDXML(comp.getMetatypeContainer(), contentHandler);
                    generateDesignateXML(comp.getMetatypeContainer(), contentHandler);
                }
            }
            // end wrapper element
            contentHandler.endElement();
            IOUtils.newline(contentHandler);
            contentHandler.endPrefixMapping();
            contentHandler.endDocument();
        } catch (final SAXException e) {
            throw new SCRDescriptorException("Unable to generate xml"file.toString(), e);
        }
    }
    private static void generateOCDXML(final MetatypeContainer ocdfinal ContentHandler contentHandler)
            throws SAXException {
        final AttributesImpl ai = new AttributesImpl();
        IOUtils.addAttribute(ai"id"ocd.getId());
        IOUtils.addAttribute(ai"name"ocd.getName());
        IOUtils.addAttribute(ai"description"ocd.getDescription());
        IOUtils.indent(contentHandler, 1);
        contentHandler.startElement(ai);
        if ( ocd.getProperties().size() > 0 ) {
            IOUtils.newline(contentHandler);
            final Iterator<MetatypeAttributeDefinitioni = ocd.getProperties().iterator();
            while ( i.hasNext() ) {
                final MetatypeAttributeDefinition ad = i.next();
                generateAttributeXML(adcontentHandler);
            }
            IOUtils.indent(contentHandler, 1);
        }
        contentHandler.endElement();
        IOUtils.newline(contentHandler);
    }
    private static void generateAttributeXML(final MetatypeAttributeDefinition adfinal ContentHandler contentHandler)
            throws SAXException {
        final AttributesImpl ai = new AttributesImpl();
        IOUtils.addAttribute(ai"id"ad.getId());
        IOUtils.addAttribute(ai"type"ad.getType());
        if ( ad.getDefaultMultiValue() != null ) {
            final StringBuffer buf = new StringBuffer();
            for(int i=0; i<ad.getDefaultMultiValue().lengthi++) {
                if ( i > 0 ) {
                    buf.append(',');
                }
                buf.append(ad.getDefaultMultiValue()[i]);
            }
            IOUtils.addAttribute(ai"default"buf);
        } else {
            IOUtils.addAttribute(ai"default"ad.getDefaultValue());
        }
        IOUtils.addAttribute(ai"name"ad.getName());
        IOUtils.addAttribute(ai"description"ad.getDescription());
        IOUtils.addAttribute(ai"cardinality"ad.getCardinality());
        IOUtils.indent(contentHandler, 2);
        contentHandler.startElement(ai);
        if (ad.getOptions() != null && ad.getOptions().size() > 0) {
            IOUtils.newline(contentHandler);
            for (Iterator<Map.Entry<StringString>> oi=ad.getOptions().entrySet().iterator(); oi.hasNext(); ) {
                final Map.Entry<StringStringentry = oi.next();
                ai.clear();
                IOUtils.addAttribute(ai"value"entry.getKey());
                IOUtils.addAttribute(ai"label"entry.getValue());
                IOUtils.indent(contentHandler, 3);
                contentHandler.startElement(ai);
                contentHandler.endElement();
                IOUtils.newline(contentHandler);
            }
            IOUtils.indent(contentHandler, 2);
        }
        contentHandler.endElement();
        IOUtils.newline(contentHandler);
    }
    private static void generateDesignateXML(final MetatypeContainer designatefinal ContentHandler contentHandler)
            throws SAXException {
        final AttributesImpl ai = new AttributesImpl();
        IOUtils.addAttribute(ai"pid"designate.getId());
        IOUtils.addAttribute(ai"factoryPid"designate.getFactoryPid());
        IOUtils.indent(contentHandler, 1);
        IOUtils.newline(contentHandler);
        generateObjectXML(designatecontentHandler);
        IOUtils.indent(contentHandler, 1);
        IOUtils.newline(contentHandler);
    }
    private static void generateObjectXML(final MetatypeContainer objfinal ContentHandler contentHandler)
            throws SAXException {
        final AttributesImpl ai = new AttributesImpl();
        IOUtils.addAttribute(ai"ocdref"obj.getId());
        IOUtils.indent(contentHandler, 2);
        IOUtils.newline(contentHandler);
    }
New to GrepCode? Check out our FAQ X