blob: 94a1e22029a1c87cb56c6f2e83b074cb62a272b5 [file] [log] [blame]
/*
* $Id: RequirementImpl.java 44 2007-07-13 20:49:41Z hargrave@us.ibm.com $
*
* 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.impl.bundle.obr.resource;
import org.osgi.service.obr.*;
import org.xmlpull.v1.XmlPullParser;
import aQute.bnd.annotation.ProviderType;
/**
* Implements the Requirement interface.
*
*
* @version $Revision: 44 $
*/
@ProviderType
public class RequirementImpl implements Requirement {
int id;
String name;
String filter="()";
FilterImpl _filter;
String comment;
boolean optional;
boolean multiple;
boolean extend;
/**
* Create a requirement with the given name.
*
* @param name
*/
public RequirementImpl(String name) {
this.name = name;
}
/**
* Parse the requirement from the pull parser.
*
* @param parser
* @throws Exception
*/
public RequirementImpl(XmlPullParser parser) throws Exception {
parser.require(XmlPullParser.START_TAG, null, null );
name = parser.getAttributeValue(null, "name");
filter = parser.getAttributeValue(null, "filter");
String opt = parser.getAttributeValue(null,"optional");
String mul = parser.getAttributeValue(null,"multiple");
String ext = parser.getAttributeValue(null,"extend");
optional = "true".equalsIgnoreCase(opt);
multiple = "true".equalsIgnoreCase(mul);
extend = "true".equalsIgnoreCase(ext);
StringBuffer sb = new StringBuffer();
while ( parser.next() == XmlPullParser.TEXT ) {
sb.append( parser.getText() );
}
if ( sb.length() > 0 )
setComment(sb.toString().trim());
parser.require(XmlPullParser.END_TAG, null, null );
}
public void setFilter(String filter) {
this.filter = filter;
_filter= null;
}
public String getFilter() {
return filter;
}
public Tag toXML(String name) {
Tag tag = toXML(this);
tag.rename(name);
return tag;
}
public String getName() {
return name;
}
public boolean isSatisfied(Capability capability) {
if (_filter == null)
_filter = new FilterImpl(filter);
boolean result = _filter.match(capability.getProperties());
return result;
}
@Override
public String toString() {
return name + " " + filter;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment=comment;
}
public static Tag toXML(Requirement requirement) {
Tag req = new Tag("require");
req.addAttribute("name", requirement.getName());
req.addAttribute("filter", requirement.getFilter());
req.addAttribute("optional", requirement.isOptional()+"");
req.addAttribute("multiple", requirement.isMultiple()+"");
req.addAttribute("extend", requirement.isExtend()+"");
if ( requirement.getComment() != null )
req.addContent(requirement.getComment());
return req;
}
public boolean isMultiple() {
return multiple;
}
public boolean isOptional() {
return optional;
}
public void setOptional(boolean b) {
optional = b;
}
public void setMultiple(boolean b) {
multiple = b;
}
@Override
public boolean equals(Object o) {
if ( ! (o instanceof Requirement) )
return false;
Requirement r2 = (Requirement)o;
return filter.equals(r2.getFilter()) && name.equals(r2.getName());
}
@Override
public int hashCode() {
return filter.hashCode() ^ name.hashCode();
}
public boolean isExtend() {
return extend;
}
public void setExtend(boolean extend) {
this.extend = extend;
}
}