[ 
https://issues.apache.org/jira/browse/LUCENE-2374?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12982429#action_12982429
 ] 

Uwe Schindler commented on LUCENE-2374:
---------------------------------------

I will work tomorrow on a patch with sophisticated backwards for 3.x and merge 
to trunk without sophisticated things *g*.

I changed my mind a little bit: I would simplify the whole thing: 
AttributeSource and AttributeImpl should have a simple method:
{code}
void addToMap(Map<String,?>)
{code}

The default code would simply look like AttributeImpl.toString() now and add 
all non-static fields to the impl - special attributes like CharTermAttribute 
would have special handling. The default toString() [if not overridden] would 
simply call this method, too and pass a Fake-Map to the addToMap() method to 
populate a StringBuilder in Map.put() [to not automatically create a real Map 
always).

Code in analysis.jsp would simply pass a map (e.g. a LinkedHashMap to preserve 
order) and then print it out. The values in the map are native types / or 
CharSequence for (Char)TermAttribute.

The only problem with this aproach would be that the attribute keys must be 
unique - an idea would be to prefix them with the attribute name.

I will also remove the abstract equals() and hashCode() in AttributeImpl - the 
attribute API does not rely on them to be implemented - this simplyfies 
implementation of attributes, because equals/hashCode are never used. In 4.0 I 
would remove this from all custom attributes.

What do you think?

> Add introspection API to AttributeSource/AttributeImpl
> ------------------------------------------------------
>
>                 Key: LUCENE-2374
>                 URL: https://issues.apache.org/jira/browse/LUCENE-2374
>             Project: Lucene - Java
>          Issue Type: Improvement
>          Components: contrib/analyzers
>            Reporter: Uwe Schindler
>            Assignee: Uwe Schindler
>             Fix For: 3.1, 4.0
>
>
> AttributeSource/TokenStream inspection in Solr needs to have some insight 
> into the contents of AttributeImpls. As LUCENE-2302 has some problems with 
> toString() [which is not structured and conflicts with CharSequence's 
> definition for CharTermAttribute], I propose an simple API that get a default 
> implementation in AttributeImpl (just like toString() current):
> - Iterator<Map.Entry<String,?>> AttributeImpl.contentsIterator() returns an 
> iterator (for most attributes its a singleton) of a key-value pair, e.g. 
> "term"->"foobar","startOffset"->Integer.valueOf(0),...
> - AttributeSource gets the same method, it just concat the iterators of each 
> getAttributeImplsIterator() AttributeImpl
> No backwards problems occur, as the default toString() method will work like 
> before (it just gets iterator and lists), but we simply remove the 
> documentation for the format. (Char)TermAttribute gets a special impl fo 
> toString() according to CharSequence and a corresponding iterator.
> I also want to remove the abstract hashCode() and equals() methods from 
> AttributeImpl, as they are not needed and just create work for the 
> implementor.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to