/* * Copyright (c) OSGi Alliance (2002, 2006, 2007). All Rights Reserved. * * 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 org.osgi.service.indexer; import java.io.File; import java.io.OutputStream; import java.io.Writer; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; import org.osgi.annotation.versioning.ProviderType; /** * ResourceIndexer is an OSGi service that creates a Repository XML * representation by indexing resource capabilities and requirements. */ @ProviderType public interface ResourceIndexer { /** * Name of the configuration variable to enable pretty-printing: indented * XML */ public static final String PRETTY = "pretty"; /** * Name of the configuration variable to enable compression: gzipped XML */ public static final String COMPRESSED = "compressed"; /** the default repository name */ public static final String REPOSITORYNAME_DEFAULT = "Untitled"; /** Name of the configuration variable for the repository name */ public static final String REPOSITORY_NAME = "repository.name"; /** the default stylesheet for the XML representation */ public static final String STYLESHEET_DEFAULT = "http://bnd.bndtools.org/static/obr2html.xsl"; /** * Name of the configuration variable for the stylesheet of the XML * representation */ public static final String STYLESHEET = "stylesheet"; /** * Name of the configuration variable for the template for the URLs in the * XML representation. A template can contain the following symbols: * <ul> * <li>%s is the symbolic name</li> * <li>%v is the version number</li> * <li>%f is the filename</li> * <li>%p is the directory path</li> * </ul> */ public static final String URL_TEMPLATE = "url.template"; /** * Name of the configuration variable for the root (directory) URL of the * repository */ public static final String ROOT_URL = "root.url"; /** * Name of the configuration variable for the license URL of the repository */ public static final String LICENSE_URL = "license.url"; /** Name of the configuration variable for the verbose mode */ public static final String VERBOSE = "verbose"; /** * Index a set of input files and write the Repository XML representation to * the stream * * @param files a set of input files * @param out the stream to write the XML representation to * @param config a set of optional parameters (use the interface constants * as keys) * @throws Exception in case of an error */ void index(Set<File> files, OutputStream out, Map<String,String> config) throws Exception; /** * <p> * Index a set of input files and write a Repository XML fragment to the * given writer. * </p> * <p> * Note that the result will be one or more XML <code>resource</code> * elements <em>without</em> a top-level surrounding <code>repository</code> * element. The resulting XML is therefore not well-formed. * </p> * <p> * This method may be useful for repository managers that wish to (re-)index * individual resources and assemble the XML fragments into a complete * repository document later. * </p> * * @param files a set of input files * @param out the writer to write the Repository XML representation to * @param config a set of optional parameter (use the interface constants as * keys) * @throws Exception in case of an error */ void indexFragment(Set<File> files, Writer out, Map<String,String> config) throws Exception; class IndexResult { public Resource resource; public List<Capability> capabilities = new ArrayList<Capability>(); public List<Requirement> requirements = new ArrayList<Requirement>(); /** * A unique signature for this indexer. It should be some kind of hash * that changes when the set of analyzers changes, or the results of * this parse are no longer compatible with other parse results. The * intention of this method is to allow caching of results and * invalidate the cache when the version has changed. */ public long signature; } /** * Return a Resource from a file * * @param file a bundle to index * @return The resource, caps, and reqs for that file */ IndexResult indexFile(File file) throws Exception; }