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.*; 028 029/// A factory for creating Java related resource objects. 030/// 031public class JavaResourceFactory implements ResourceFactory { 032 033 /// Instantiates a new java resource factory. 034 /// 035 public JavaResourceFactory() { 036 // Make javadoc happy 037 } 038 039 @SuppressWarnings({ "unchecked" }) 040 @Override 041 public <T extends Resource> Optional<T> newResource(ResourceType<T> type, 042 Project project, Object... args) { 043 // ? extends ClassTree 044 var candidate = createNarrowed(type, ClassTree.class, 045 () -> new DefaultClassTree((ResourceType<? extends ClassTree>) type, 046 project, (Path) args[0])); 047 if (candidate.isPresent()) { 048 return candidate; 049 } 050 051 // ? extends LibraryJarFile 052 candidate = createNarrowed(type, LibraryJarFile.class, 053 () -> new DefaultLibraryJarFile( 054 (ResourceType<? extends LibraryJarFile>) type, (Path) args[0])); 055 if (candidate.isPresent()) { 056 return candidate; 057 } 058 059 // ? extends JarFile 060 candidate = createNarrowed(type, JarFile.class, 061 () -> new DefaultJarFile((ResourceType<? extends JarFile>) type, 062 (Path) args[0])); 063 if (candidate.isPresent()) { 064 return candidate; 065 } 066 067 // ? extends JavaResourceTree 068 candidate = createNarrowed(type, JavaResourceTree.class, 069 () -> new DefaultJavaResourceTree( 070 (ResourceType<? extends JavaResourceTree>) type, 071 project, (Path) args[0], (String) args[1])); 072 if (candidate.isPresent()) { 073 return candidate; 074 } 075 076 // ManifestAttributes 077 if (ManifestAttributes.class.equals(type.rawType())) { 078 return Optional.of((T) new ManifestAttributes()); 079 } 080 return Optional.empty(); 081 } 082 083}