/*
* Copyright (C) 2010 eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.wikbook.codesource;
import org.wikbook.text.Clip;
import org.wikbook.text.TextArea;
import java.util.LinkedHashMap;
/**
* @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
* @version $Revision$
*/
public class TypeSource extends CodeSource
{
/** . */
final TextArea source;
/** . */
private final String name;
/** . */
private final LinkedHashMap<MemberKey, SignedMemberSource> methods;
/** . */
private final LinkedHashMap<String, NamedMemberSource> fields;
TypeSource(TextArea source, String name, Clip clip, String javaDoc)
{
super(clip, javaDoc);
//
this.source = source;
this.name = name;
this.methods = new LinkedHashMap<MemberKey, SignedMemberSource>();
this.fields = new LinkedHashMap<String, NamedMemberSource>();
}
void addMember(MemberSource member)
{
if (member instanceof SignedMemberSource)
{
SignedMemberSource signedMember = (SignedMemberSource)member;
if (signedMember.type != null)
{
throw new IllegalArgumentException();
}
//
methods.put(signedMember.key, signedMember);
signedMember.type = this;
}
else if (member instanceof NamedMemberSource)
{
NamedMemberSource namedMember = (NamedMemberSource)member;
if (namedMember.type != null)
{
throw new IllegalArgumentException();
}
//
fields.put(namedMember.name, namedMember);
namedMember.type = this;
}
else
{
throw new IllegalArgumentException("Not accepted " + member);
}
}
public String getName()
{
return name;
}
@Override
protected TypeSource getType()
{
return this;
}
public MemberSource findMember(String member)
{
if (member == null)
{
throw new NullPointerException();
}
//
MemberKey key = MemberKey.parse(member);
//
if (key.signature == null)
{
NamedMemberSource field = fields.get(key.name);
if (field != null)
{
return field;
}
else
{
key = new MemberKey(key.name, new Signature());
}
}
//
return methods.get(key);
}
@Override
public String toString()
{
return "TypeSource[fqn=" + name + "]";
}
}