package org.codehaus.plexus.component.repository;
import org.codehaus.plexus.PlexusConstants;
/*
* Copyright 2001-2006 Codehaus Foundation.
*
* 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.
*/
/**
* This represents a component this is required by another component.
*
* @author <a href="mmaczka@interia.pl">Michal Maczka</a>
* @version $Id$
*/
public class ComponentRequirement
{
private String fieldName;
private String role;
private String roleHint = PlexusConstants.PLEXUS_DEFAULT_HINT;
private String fieldMappingType;
public ComponentRequirement()
{
}
public ComponentRequirement( String fieldName, String role )
{
this( fieldName, role, null );
}
public ComponentRequirement( String fieldName, String role, String roleHint )
{
this.fieldName = fieldName;
this.role = role;
if ( roleHint != null )
{
this.roleHint = roleHint;
}
}
public ComponentRequirement( String fieldName, Class<?> type )
{
this( fieldName, type.getName(), null );
}
public ComponentRequirement( String fieldName, Class<?> type, String roleHint )
{
this( fieldName, type.getName(), roleHint );
}
/**
* Returns the field name that this component requirement will inject.
* @return the field name that this component requirement will inject
*/
public String getFieldName()
{
return fieldName;
}
/**
* Sets the name of the field that will be populated by the required
* component.
* @param fieldName the name of the field to be populated
*/
public void setFieldName( String fieldName )
{
this.fieldName = fieldName;
}
/**
* Returns the role of the required component.
* @return the role of the required component
*/
public String getRole()
{
return role;
}
/**
* Sets the role of the require component.
* @param role the required component's role
*/
public void setRole( String role )
{
this.role = role;
}
/**
* Returns the role-hint of the required component.
* @return the role-hint of the required component
*/
public String getRoleHint()
{
return roleHint;
}
/**
* Sets the role-hint of the require component.
* Pasing null will set the hint to the default value.
* @param roleHint the required component's role-hint
*/
public void setRoleHint( String roleHint )
{
if ( roleHint == null || roleHint.trim().equals( "" ) )
{
this.roleHint = PlexusConstants.PLEXUS_DEFAULT_HINT;
}
else
{
this.roleHint = roleHint;
}
}
/**
* Returns the type of the field this component requirement will inject.
* @return the type of the field this component requirement will inject
*/
public String getFieldMappingType()
{
return fieldMappingType;
}
/**
* Sets the type of the field that will be populated by the required
* component.
* @param fieldType the type of the field to be populated
*/
public void setFieldMappingType( String fieldType )
{
this.fieldMappingType = fieldType;
}
public String toString()
{
return "ComponentRequirement{" +
"role='" + getRole() + "'" + ", " +
"roleHint='" + getRoleHint() + "', " +
"fieldName='" + getFieldName() + "'" +
"}";
}
/**
* Returns a human-friendly key, suitable for display.
* @return a human-friendly key
*/
public String getHumanReadableKey()
{
StringBuffer key = new StringBuffer();
key.append( "role: '").append( getRole() ).append( "'" );
if ( getRoleHint() != null )
{
key.append( ", role-hint: '" ).append( getRoleHint() ).append( "'. " );
}
if ( getFieldName() != null )
{
key.append( ", field name: '" ).append( getFieldName() ).append( "' " );
}
return key.toString();
}
public boolean equals( Object other )
{
if ( other instanceof ComponentRequirement )
{
String myId = role + ":" + roleHint;
ComponentRequirement req = (ComponentRequirement) other;
String otherId = req.role + ":" + req.roleHint;
return myId.equals( otherId );
}
return false;
}
public int hashCode()
{
return ( role + ":" + roleHint ).hashCode();
}
}