/** * Copyright (C) 2012 Christian Brandenstein * * Licensed 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 de.adorsys.beanstest; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Collections; import java.util.List; import javax.inject.Inject; import org.jboss.forge.parser.java.JavaClass; import org.jboss.forge.project.services.ResourceFactory; import org.jboss.forge.resources.FileResource; import org.jboss.forge.resources.Resource; import org.jboss.forge.resources.ResourceFlag; import org.jboss.forge.resources.ResourceHandles; import org.jboss.forge.resources.VirtualResource; /** * Handles CDI extensions file: * META-INF/services/javax.enterprise.inject.spi.Extension * Entries are represented as JavaClass * * @author Brandenstein */ @ResourceHandles("javax.enterprise.inject.spi.Extension") public class ExtensionsServicesFileResource extends FileResource<ExtensionsServicesFileResource> { @Inject public ExtensionsServicesFileResource(ResourceFactory factory) { super(factory, null); setFlag(ResourceFlag.Leaf); } public ExtensionsServicesFileResource(ResourceFactory factory, File file) { super(factory, file); setFlag(ResourceFlag.Leaf); } @Override public Resource<File> createFrom(File file) { return new ExtensionsServicesFileResource(getResourceFactory(), file); } @Override protected List<Resource<?>> doListResources() { List<Resource<?>> resourceList = new ArrayList<Resource<?>>(); InputStreamReader inputStreamReader = new InputStreamReader(getResourceInputStream()); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); try { String line = null; while ((line = bufferedReader.readLine()) != null) { resourceList.add(new ExtensionServiceResource(this, line)); } } catch (IOException e) { throw new RuntimeException("Cannot read javax.enterprise.inject.spi.Extension file", e); } finally { try { bufferedReader.close(); } catch (IOException e) {} } return resourceList; } public boolean containsExtension(JavaClass javaClass) { for (Resource<?> line : doListResources()) { if (javaClass != null) { if (javaClass.getCanonicalName().equals(line.getName())) { return true; } } } return false; } public void addExtension(JavaClass javaClass) { List<Resource<?>> list = doListResources(); list.add(new ExtensionServiceResource(this, javaClass.getCanonicalName())); String contents = ""; for (Resource<?> r : list) { contents += r.getName() + "\n"; } setContents(contents); } private class ExtensionServiceResource extends VirtualResource<String> { private final String typestring; protected ExtensionServiceResource(Resource<?> parent, String type) { super(parent); this.typestring = type; } @Override public boolean delete() throws UnsupportedOperationException { // TODO Auto-generated method stub return false; } @Override public boolean delete(boolean paramBoolean) throws UnsupportedOperationException { // TODO Auto-generated method stub return false; } @Override public String getName() { return typestring; } @Override public String getUnderlyingResourceObject() { return null; } @Override protected List<Resource<?>> doListResources() { return Collections.emptyList(); } } }