Search in sources :

Example 1 with FacesClassLoader

use of com.ibm.xsp.library.FacesClassLoader in project org.openntf.nsfodp by OpenNTF.

the class ODPCompiler method compileCustomControls.

// *******************************************************************************
// * XSP compilation methods
// *******************************************************************************
private Map<CustomControl, XSPCompilationResult> compileCustomControls(JavaSourceClassLoader classLoader) throws Exception {
    subTask(Messages.ODPCompiler_compilingCustomControls);
    ConfigParser configParser = ConfigParserFactory.getParserInstance();
    FacesClassLoader facesClassLoader = new DynamicFacesClassLoader(dynamicXPageBean, classLoader);
    Map<CustomControl, XSPCompilationResult> result = new LinkedHashMap<>();
    List<CustomControl> ccs = odp.getCustomControls();
    for (CustomControl cc : ccs) {
        Document xspConfig = cc.getXspConfig().get();
        // $NON-NLS-1$
        String namespace = StringUtil.trim(NSFODPDomUtil.node(xspConfig, "/faces-config/faces-config-extension/namespace-uri/text()").get().getTextContent());
        Path fileName = odp.getBaseDirectory().relativize(cc.getXspConfigFile());
        LibraryFragmentImpl fragment = (LibraryFragmentImpl) configParser.createFacesLibraryFragment(facesProject, facesClassLoader, fileName.toString(), xspConfig.getDocumentElement(), resourceBundleSource, iconUrlSource, namespace);
        UpdatableLibrary library = getLibrary(namespace);
        library.addLibraryFragment(fragment);
        // Load the definition to refresh its parent ref
        CompositeComponentDefinitionImpl def = (CompositeComponentDefinitionImpl) library.getDefinition(cc.getControlName());
        def.refreshReferences();
    }
    // Now that they're all defined, try to compile them in a queue
    for (CustomControl cc : ccs) {
        XSPCompilationResult compilationResult = compileXSP(cc, classLoader);
        result.put(cc, compilationResult);
    }
    return result;
}
Also used : Path(java.nio.file.Path) CompositeComponentDefinitionImpl(com.ibm.xsp.registry.CompositeComponentDefinitionImpl) DynamicFacesClassLoader(com.ibm.xsp.extlib.interpreter.DynamicFacesClassLoader) ConfigParser(com.ibm.xsp.registry.parse.ConfigParser) DynamicFacesClassLoader(com.ibm.xsp.extlib.interpreter.DynamicFacesClassLoader) FacesClassLoader(com.ibm.xsp.library.FacesClassLoader) UpdatableLibrary(com.ibm.xsp.registry.UpdatableLibrary) Document(org.w3c.dom.Document) LinkedHashMap(java.util.LinkedHashMap) CustomControl(org.openntf.nsfodp.commons.odp.CustomControl) LibraryFragmentImpl(com.ibm.xsp.registry.LibraryFragmentImpl) XSPCompilationResult(org.openntf.nsfodp.commons.odp.XSPCompilationResult)

Example 2 with FacesClassLoader

use of com.ibm.xsp.library.FacesClassLoader in project org.openntf.nsfodp by OpenNTF.

the class XspTranspiler method defineCustomControls.

private void defineCustomControls(Path ccSourceRoot) throws IOException {
    if (ccSourceRoot != null) {
        subTask("Initializing Custom Control definitions");
        // Generate a classpath, which the CC library needs to find classes for property types
        Set<Path> cleanup = new HashSet<>();
        try {
            Collection<String> dependencies = buildDependenciesCollection(cleanup);
            String[] classPath = dependencies.toArray(new String[dependencies.size()]);
            ConfigParser configParser = ConfigParserFactory.getParserInstance();
            try (JavaSourceClassLoader classLoader = new JavaSourceClassLoader(Thread.currentThread().getContextClassLoader(), Collections.emptyList(), classPath)) {
                FacesClassLoader facesClassLoader = new DynamicFacesClassLoader(dynamicXPageBean, classLoader);
                try (Stream<Path> ccConfigs = Files.find(ccSourceRoot, Integer.MAX_VALUE, (path, attr) -> attr.isRegularFile() && path.toString().toLowerCase().endsWith(".xsp-config"), FileVisitOption.FOLLOW_LINKS)) {
                    // $NON-NLS-1$
                    ccConfigs.forEach(ccConfig -> {
                        Document xspConfig = ODPUtil.readXml(ccConfig);
                        // $NON-NLS-1$
                        String namespace = StringUtil.trim(NSFODPDomUtil.node(xspConfig, "/faces-config/faces-config-extension/namespace-uri/text()").get().getTextContent());
                        Path fileName = ccSourceRoot.relativize(ccConfig);
                        FacesLibraryFragment fragment = configParser.createFacesLibraryFragment(facesProject, facesClassLoader, fileName.toString(), xspConfig.getDocumentElement(), resourceBundleSource, iconUrlSource, namespace);
                        facesProject.register(fragment);
                        facesProject.getRegistry().refreshReferences();
                    });
                }
            }
        } finally {
            NSFODPUtil.deltree(cleanup);
        }
    }
}
Also used : Path(java.nio.file.Path) FacesLibraryFragment(com.ibm.xsp.registry.FacesLibraryFragment) JavaSourceClassLoader(com.ibm.xsp.extlib.javacompiler.JavaSourceClassLoader) DynamicFacesClassLoader(com.ibm.xsp.extlib.interpreter.DynamicFacesClassLoader) ConfigParser(com.ibm.xsp.registry.parse.ConfigParser) DynamicFacesClassLoader(com.ibm.xsp.extlib.interpreter.DynamicFacesClassLoader) FacesClassLoader(com.ibm.xsp.library.FacesClassLoader) Document(org.w3c.dom.Document) HashSet(java.util.HashSet)

Aggregations

DynamicFacesClassLoader (com.ibm.xsp.extlib.interpreter.DynamicFacesClassLoader)2 FacesClassLoader (com.ibm.xsp.library.FacesClassLoader)2 ConfigParser (com.ibm.xsp.registry.parse.ConfigParser)2 Path (java.nio.file.Path)2 Document (org.w3c.dom.Document)2 JavaSourceClassLoader (com.ibm.xsp.extlib.javacompiler.JavaSourceClassLoader)1 CompositeComponentDefinitionImpl (com.ibm.xsp.registry.CompositeComponentDefinitionImpl)1 FacesLibraryFragment (com.ibm.xsp.registry.FacesLibraryFragment)1 LibraryFragmentImpl (com.ibm.xsp.registry.LibraryFragmentImpl)1 UpdatableLibrary (com.ibm.xsp.registry.UpdatableLibrary)1 HashSet (java.util.HashSet)1 LinkedHashMap (java.util.LinkedHashMap)1 CustomControl (org.openntf.nsfodp.commons.odp.CustomControl)1 XSPCompilationResult (org.openntf.nsfodp.commons.odp.XSPCompilationResult)1