All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.ctp.cdi.query.meta.unit.PersistenceUnitReader Maven / Gradle / Ivy

The newest version!
package com.ctp.cdi.query.meta.unit;

import java.io.IOException;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import com.ctp.cdi.query.meta.unit.EntityDescriptorReader.MappingFile;

public class PersistenceUnitReader extends DescriptorReader {
    
    public List readAll() throws IOException {
        List result = new LinkedList();
        List persistenceXmls = readAllFromClassPath(PersistenceUnit.RESOURCE_PATH);
        for (Descriptor desc : persistenceXmls) {
            result.addAll(lookupUnits(desc));
        }
        return Collections.unmodifiableList(result);
    }

    private List lookupUnits(Descriptor descriptor) {
        List result = new LinkedList();
        NodeList list = descriptor.getDocument().getDocumentElement().getElementsByTagName("persistence-unit");
        for (int i = 0; i < list.getLength(); i++) {
            Node node = list.item(i);
            String unitName = extractUnitName(node);
            String baseUrl = extractBaseUrl(descriptor.getUrl(), PersistenceUnit.RESOURCE_PATH);
            List entities = extractMappings((Element) node, baseUrl);
            result.add(new PersistenceUnit(unitName, entities));
        }
        return result;
    }

    private List extractMappings(Element element, String baseUrl) {
        try {
            EntityDescriptorReader reader = new EntityDescriptorReader();
            List entities = new LinkedList();
            List superClasses = new LinkedList();
            NodeList list = element.getElementsByTagName("mapping-file");
            for (int i = 0; i < list.getLength(); i++) {
                MappingFile mappings = reader.readAll(baseUrl, list.item(i).getTextContent());
                entities.addAll(mappings.getEntities());
                superClasses.addAll(mappings.getSuperClasses());
            }
            MappingFile mappings = reader.readDefaultOrm(baseUrl);
            entities.addAll(mappings.getEntities());
            superClasses.addAll(mappings.getSuperClasses());
            DescriptorHierarchyBuilder.newInstance(entities, superClasses).buildHierarchy();
            return entities;
        } catch (Exception e) {
            throw new RuntimeException("Failed initializing mapping files", e);
        }
    }

    private String extractUnitName(Node node) {
        return node.getAttributes().getNamedItem("name").getTextContent();
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy