/********************************************************************** * Copyright (c) 2005-2009 ant4eclipse project team. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Nils Hartmann, Daniel Kasmeroglu, Gerd Wuetherich **********************************************************************/ package org.ant4eclipse.lib.pde.model.featureproject; import org.ant4eclipse.lib.core.Assure; import org.ant4eclipse.lib.core.xquery.XQuery; import org.ant4eclipse.lib.core.xquery.XQueryHandler; import org.ant4eclipse.lib.pde.internal.model.featureproject.FeatureManifestImpl; import org.osgi.framework.Version; import java.io.InputStream; /** * <p> * Implements a parser for feature manifest files. * </p> * * @author Gerd Wütherich (gerd@gerd-wuetherich.de) */ public class FeatureManifestParser { /** * <p> * Creates a FeatureManifest instance from the supplied content. * </p> * * @param inputStream * The stream which provides the content. * * @return a Feature instance providing the content. */ public static FeatureManifest parseFeature(InputStream inputStream) { Assure.notNull("inputStream", inputStream); FeatureManifestImpl feature = new FeatureManifestImpl(); XQueryHandler queryhandler = new XQueryHandler(); XQuery idQuery = queryhandler.createQuery("/feature/@id"); XQuery versionQuery = queryhandler.createQuery("/feature/@version"); XQuery labelQuery = queryhandler.createQuery("/feature/@label"); XQuery providerNameQuery = queryhandler.createQuery("/feature/@provider-name"); XQuery imageQuery = queryhandler.createQuery("/feature/@image"); XQuery osQuery = queryhandler.createQuery("/feature/@os"); XQuery archQuery = queryhandler.createQuery("/feature/@arch"); XQuery wsQuery = queryhandler.createQuery("/feature/@ws"); XQuery nlQuery = queryhandler.createQuery("/feature/@nl"); XQuery colocationAffinityQuery = queryhandler.createQuery("/feature/@colocation-affinity"); XQuery primaryQuery = queryhandler.createQuery("/feature/@primary"); XQuery exclusiveQuery = queryhandler.createQuery("/feature/@exclusive"); XQuery pluginQuery = queryhandler.createQuery("/feature/@plugin"); XQuery applicationQuery = queryhandler.createQuery("/feature/@application"); XQuery pluginIdQuery = queryhandler.createQuery("/feature/{plugin}/@id"); XQuery pluginversionQuery = queryhandler.createQuery("/feature/{plugin}/@version"); XQuery pluginFragmentQuery = queryhandler.createQuery("/feature/{plugin}/@fragment"); XQuery pluginOsQuery = queryhandler.createQuery("/feature/{plugin}/@os"); XQuery pluginArchQuery = queryhandler.createQuery("/feature/{plugin}/@arch"); XQuery pluginWsQuery = queryhandler.createQuery("/feature/{plugin}/@ws"); XQuery pluginNlQuery = queryhandler.createQuery("/feature/{plugin}/@nl"); XQuery pluginDownloadSizeQuery = queryhandler.createQuery("/feature/{plugin}/@download-size"); XQuery pluginInstallSizeQuery = queryhandler.createQuery("/feature/{plugin}/@install-size"); XQuery pluginUnpackQuery = queryhandler.createQuery("/feature/{plugin}/@unpack"); XQuery includesIdQuery = queryhandler.createQuery("/feature/{includes}/@id"); XQuery includesVersionQuery = queryhandler.createQuery("/feature/{includes}/@version"); XQuery includesNameQuery = queryhandler.createQuery("/feature/{includes}/@name"); XQuery includesOptionalQuery = queryhandler.createQuery("/feature/{includes}/@optional"); XQuery includesSearchLocationQuery = queryhandler.createQuery("/feature/{includes}/@search-location"); XQuery includesOsQuery = queryhandler.createQuery("/feature/{includes}/@os"); XQuery includesArchQuery = queryhandler.createQuery("/feature/{includes}/@arch"); XQuery includesWsQuery = queryhandler.createQuery("/feature/{includes}/@ws"); XQuery includesNlQuery = queryhandler.createQuery("/feature/{includes}/@nl"); // parse the file XQueryHandler.queryInputStream(inputStream, queryhandler); feature.setId(idQuery.getSingleResult()); feature.setVersion(new Version(versionQuery.getSingleResult())); feature.setLabel(labelQuery.getSingleResult()); feature.setProviderName(providerNameQuery.getSingleResult()); feature.setImage(imageQuery.getSingleResult()); feature.setOperatingSystem(osQuery.getSingleResult()); feature.setMachineArchitecture(archQuery.getSingleResult()); feature.setWindowingSystem(wsQuery.getSingleResult()); feature.setLocale(nlQuery.getSingleResult()); feature.setColocationAffinity(colocationAffinityQuery.getSingleResult()); feature.setPrimary(Boolean.valueOf(primaryQuery.getSingleResult()).booleanValue()); feature.setExclusive(Boolean.valueOf(exclusiveQuery.getSingleResult()).booleanValue()); feature.setPlugin(pluginQuery.getSingleResult()); feature.setApplication(applicationQuery.getSingleResult()); String[] pluginIds = pluginIdQuery.getResult(); String[] pluginVersions = pluginversionQuery.getResult(); String[] pluginFragments = pluginFragmentQuery.getResult(); String[] pluginOSs = pluginOsQuery.getResult(); String[] pluginArchs = pluginArchQuery.getResult(); String[] pluginWSs = pluginWsQuery.getResult(); String[] pluginNls = pluginNlQuery.getResult(); String[] pluginDownloadSizes = pluginDownloadSizeQuery.getResult(); String[] pluginInstallSizes = pluginInstallSizeQuery.getResult(); String[] pluginUnpacks = pluginUnpackQuery.getResult(); for (int i = 0; i < pluginIds.length; i++) { FeatureManifestImpl.PluginImpl plugin = new FeatureManifestImpl.PluginImpl(); plugin.setId(pluginIds[i]); plugin.setVersion(new Version(pluginVersions[i])); plugin.setFragment(Boolean.valueOf(pluginFragments[i]).booleanValue()); plugin.setOperatingSystem(pluginOSs[i]); plugin.setMachineArchitecture(pluginArchs[i]); plugin.setWindowingSystem(pluginWSs[i]); plugin.setLocale(pluginNls[i]); plugin.setDownloadSize(pluginDownloadSizes[i]); plugin.setInstallSize(pluginInstallSizes[i]); plugin.setUnpack(Boolean.valueOf(pluginUnpacks[i]).booleanValue()); feature.addPlugin(plugin); } String[] includesId = includesIdQuery.getResult(); String[] includesVersion = includesVersionQuery.getResult(); String[] includesName = includesNameQuery.getResult(); String[] includesOptional = includesOptionalQuery.getResult(); String[] includesSearchLocation = includesSearchLocationQuery.getResult(); String[] includesOs = includesOsQuery.getResult(); String[] includesArch = includesArchQuery.getResult(); String[] includesWs = includesWsQuery.getResult(); String[] includesNl = includesNlQuery.getResult(); for (int i = 0; i < includesId.length; i++) { FeatureManifestImpl.IncludesImpl includes = new FeatureManifestImpl.IncludesImpl(); includes.setId(includesId[i]); includes.setVersion(new Version(includesVersion[i])); includes.setName(includesName[i]); includes.setOptional(Boolean.valueOf(includesOptional[i]).booleanValue()); includes.setSearchLocation(includesSearchLocation[i]); includes.setOperatingSystem(includesOs[i]); includes.setMachineArchitecture(includesArch[i]); includes.setWindowingSystem(includesWs[i]); includes.setLocale(includesNl[i]); feature.addIncludes(includes); } return feature; } }