001/* 002 * JDrupes Builder 003 * Copyright (C) 2025 Michael N. Lipp 004 * 005 * This program is free software: you can redistribute it and/or modify 006 * it under the terms of the GNU Affero General Public License as 007 * published by the Free Software Foundation, either version 3 of the 008 * License, or (at your option) any later version. 009 * 010 * This program is distributed in the hope that it will be useful, 011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 013 * GNU Affero General Public License for more details. 014 * 015 * You should have received a copy of the GNU Affero General Public License 016 * along with this program. If not, see <https://www.gnu.org/licenses/>. 017 */ 018 019package org.jdrupes.builder.java; 020 021import java.nio.file.Path; 022import java.util.Optional; 023import org.jdrupes.builder.api.Project; 024import org.jdrupes.builder.api.Resource; 025import org.jdrupes.builder.api.ResourceFactory; 026import org.jdrupes.builder.api.ResourceType; 027import static org.jdrupes.builder.core.CoreResourceFactory.*; 028import static org.jdrupes.builder.java.JavaTypes.*; 029 030/// A factory for creating Java related resource objects. 031/// 032public class JavaResourceFactory implements ResourceFactory { 033 034 /// Instantiates a new java resource factory. 035 /// 036 @SuppressWarnings("PMD.UnnecessaryConstructor") 037 public JavaResourceFactory() { 038 // Make javadoc happy 039 } 040 041 @SuppressWarnings("unchecked") 042 @Override 043 public <T extends Resource> Optional<T> newResource(ResourceType<T> type, 044 Project project, Object... args) { 045 if (ClassTreeType.isAssignableFrom(type) 046 && type.rawType().getSuperclass() == null 047 && !addsMethod(ClassTree.class, 048 (Class<? extends ClassTree>) type.rawType())) { 049 return Optional 050 .of((T) DefaultClassTree.createClassTree( 051 (ResourceType<? extends ClassTree>) type, project, 052 (Path) args[0])); 053 } 054 if (LibraryJarFileType.isAssignableFrom(type) 055 && type.rawType().getSuperclass() == null 056 && !addsMethod(LibraryJarFile.class, 057 (Class<? extends LibraryJarFile>) type.rawType())) { 058 return Optional.of((T) DefaultLibraryJarFile.createLibraryJarFile( 059 (ResourceType<? extends JarFile>) type, (Path) args[0])); 060 } 061 if (JarFileType.isAssignableFrom(type) 062 && type.rawType().getSuperclass() == null 063 && !addsMethod(JarFile.class, 064 (Class<? extends JarFile>) type.rawType())) { 065 return Optional.of((T) DefaultJarFile.createJarFile( 066 (ResourceType<? extends JarFile>) type, (Path) args[0])); 067 } 068 if (JavaResourceTree.class.equals(type.rawType())) { 069 return Optional.of((T) new JavaResourceTree(project, 070 (Path) args[0], (String) args[1])); 071 } 072 return Optional.empty(); 073 } 074 075}