/* | |
* Licensed to the Apache Software Foundation (ASF) under one | |
* or more contributor license agreements. See the NOTICE file | |
* distributed with this work for additional information | |
* regarding copyright ownership. The ASF licenses this file | |
* to you 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.apache.felix.sandbox.obr.plugin; | |
import java.io.File; | |
import java.net.MalformedURLException; | |
import java.net.URI; | |
import java.util.ArrayList; | |
import java.util.Collection; | |
import java.util.Iterator; | |
import java.util.List; | |
import java.util.Map; | |
import org.apache.maven.plugin.MojoExecutionException; | |
import org.osgi.impl.bundle.obr.resource.BundleInfo; | |
import org.osgi.impl.bundle.obr.resource.CapabilityImpl; | |
import org.osgi.impl.bundle.obr.resource.RepositoryImpl; | |
import org.osgi.impl.bundle.obr.resource.RequirementImpl; | |
import org.osgi.impl.bundle.obr.resource.ResourceImpl; | |
import org.osgi.impl.bundle.obr.resource.VersionImpl; | |
/** | |
* this class is used to configure bindex and get information built by bindex about targeted bundle. | |
* @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a> | |
*/ | |
public class ExtractBindexInfo { | |
/** | |
* attribute get from bindex which describe targeted resource. | |
*/ | |
private ResourceImpl m_resource; | |
/** | |
* configure bindex and build information. | |
* @param repoFilename URI on OBR descriptor file | |
* @param outFile path on targeted jar-file | |
* @throws MojoExecutionException occurs if bindex configuration failed | |
*/ | |
public ExtractBindexInfo(URI repoFilename, String outFile) throws MojoExecutionException { | |
this.m_resource = null; | |
RepositoryImpl repository = null; | |
try { | |
repository = new RepositoryImpl(new File(repoFilename).getAbsoluteFile().toURL()); | |
} catch (MalformedURLException e) { | |
e.printStackTrace(); | |
throw new MojoExecutionException("MalformedURLException"); | |
} | |
BundleInfo info = null; | |
try { | |
info = new BundleInfo(repository, new File(outFile)); | |
} catch (Exception e) { | |
e.printStackTrace(); | |
throw new MojoExecutionException("Exception"); | |
} | |
try { | |
m_resource = info.build(); | |
} catch (Exception e) { | |
e.printStackTrace(); | |
throw new MojoExecutionException("Exception"); | |
} | |
} | |
/** | |
* transform logical operator in xml syntax. | |
* @param filter string which contains logical operator | |
* @return string in correct xml syntax | |
*/ | |
private String parseFilter(String filter) { | |
filter.replaceAll("&", "&"); | |
filter.replaceAll(">=", ">"); | |
return filter; | |
} | |
/** | |
* extract capabilities from bindex information. | |
* @return bundle capabilities List | |
*/ | |
public List getCapabilities() { | |
List list = new ArrayList(); | |
Collection res = m_resource.getCapabilityList(); | |
Iterator it = res.iterator(); | |
while (it.hasNext()) { | |
Capability capability = new Capability(); | |
CapabilityImpl ci = (CapabilityImpl) it.next(); | |
capability.setName(ci.getName()); | |
// System.out.println(ci.getName()) ; | |
if (!(ci.getName().compareTo("bundle") == 0)) { | |
Map properties = ci.getProperties(); | |
for (Iterator k = properties.keySet().iterator(); k.hasNext();) { | |
PElement p = new PElement(); | |
String key = (String) k.next(); | |
List values = (List) properties.get(key); | |
for (Iterator v = values.iterator(); v.hasNext();) { | |
Object value = v.next(); | |
p.setN(key); | |
if (value != null) { | |
p.setV(value.toString()); | |
} else { | |
System.out.println("Missing value " + key); | |
} | |
String type = null; | |
if (value instanceof Number) { | |
type = "number"; | |
} else { | |
if (value.getClass() == VersionImpl.class) { type = "version"; } | |
} | |
if (type != null) { | |
p.setT(type); | |
} | |
} | |
capability.addP(p); | |
} | |
list.add(capability); | |
} | |
} | |
return list; | |
} | |
/** | |
* extract requirement from bindex information. | |
* @return bundle requirement List | |
*/ | |
public List getRequirement() { | |
List list = new ArrayList(); | |
Collection res = m_resource.getRequirementList(); | |
Iterator it = res.iterator(); | |
while (it.hasNext()) { | |
RequirementImpl ci = (RequirementImpl) it.next(); | |
Require require = new Require(); | |
require.setExtend(String.valueOf(ci.isExtend())); | |
require.setMultiple(String.valueOf(ci.isMultiple())); | |
require.setOptional(String.valueOf(ci.isOptional())); | |
require.setName(ci.getName()); | |
require.setFilter(this.parseFilter(ci.getFilter())); | |
require.setValue(ci.getComment()); | |
list.add(require); | |
} | |
return list; | |
} | |
/** | |
* extract symbolic name from bindex information. | |
* @return bundle symbolic name | |
*/ | |
public String getSymbolicName() { | |
return m_resource.getSymbolicName(); | |
} | |
/** | |
* extract version from bindex information. | |
* @return bundle version | |
*/ | |
public String getVersion() { | |
if (m_resource.getVersion() != null) { | |
return m_resource.getVersion().toString(); | |
} else { | |
return null; | |
} | |
} | |
/** | |
* extract presentation name from bindex information. | |
* @return bundle presentation name | |
*/ | |
public String getPresentationName() { | |
return m_resource.getPresentationName(); | |
} | |
/** | |
* extract copyright from bindex information. | |
* @return bundle copyright | |
*/ | |
public String getCopyright() { | |
return m_resource.getCopyright(); | |
} | |
/** | |
* extract description from bindex information. | |
* @return bundle description | |
*/ | |
public String getDescription() { | |
return m_resource.getDescription(); | |
} | |
/** | |
* extract documentation from bindex information. | |
* @return bundle documentation | |
*/ | |
public String getDocumentation() { | |
if (m_resource.getDocumentation() != null) { | |
return m_resource.getDocumentation().toString(); | |
} else { | |
return null; | |
} | |
} | |
/** | |
* extract license from bindex information. | |
* @return bundle license | |
*/ | |
public String getLicense() { | |
if (m_resource.getLicense() != null) { | |
return m_resource.getLicense().toString(); | |
} else { | |
return null; | |
} | |
} | |
/** | |
* extract source from bindex information. | |
* @return bundle source | |
*/ | |
public String getSource() { | |
if (m_resource.getSource() != null) { | |
return m_resource.getSource().toString(); | |
} else { | |
return null; | |
} | |
} | |
} |