Java code
public static void searchForChains(Synset source,Synset target,ArrayList<ChainNode> inherit)
{
if(inherit.size() < max+1)
{
try
{
ArrayList<ChainNode> temp = (ArrayList<ChainNode>

inherit.clone();
PointerUtils util = PointerUtils.getInstance();
PointerTargetNodeList list = util.getDirectHypernyms(source);
if(0 != list.size())
{
searchForChain(list,target,temp,1);
}
list = util.getDirectHyponyms(source);
if(0 != list.size())
{
searchForChain(list,target,temp,2);
}
list = util.getHolonyms(source);
if(0 != list.size())
{
searchForChain(list,target,temp,3);
}
list = util.getMeronyms(source);
if(0 != list.size())
{
searchForChain(list,target,temp,4);
}
inherit = null;
list = null;
}
catch(JWNLException e)
{
e.printStackTrace();
}
}
else
{
inherit = null;
return;
}
}
static ArrayList<ChainNode> temp = new ArrayList<ChainNode>();
public static void searchForChain(PointerTargetNodeList list,Synset target,ArrayList<ChainNode> inherit,int type)
{
for(Iterator it = list.iterator();it.hasNext()

{
PointerTargetNode Node = (PointerTargetNode)it.next();
if(!target.equals(Node.getSynset()))
{
if(!Circle.hasCircle(inherit,Node.getSynset()))
{
temp = (ArrayList<ChainNode>

inherit.clone();
switch(type)
{
case 1:
temp.add(new ChainNode(Node.getSynset(),"hypernym"

);
break;
case 2:
temp.add(new ChainNode(Node.getSynset(),"hyponym"

);
break;
case 3:
temp.add(new ChainNode(Node.getSynset(),"holonym"

);
break;
case 4:
temp.add(new ChainNode(Node.getSynset(),"meronym"

);
break;
default:
break;
}
searchForChains(Node.getSynset(),target,temp);
Node = null;
temp = null;
}
else
{
inherit = null;
return;
}
}
else
{
switch(type)
{
case 1:
inherit.add(new ChainNode(Node.getSynset(),"hypernym"

);
break;
case 2:
inherit.add(new ChainNode(Node.getSynset(),"hyponym"

);
break;
case 3:
inherit.add(new ChainNode(Node.getSynset(),"holonym"

);
break;
case 4:
inherit.add(new ChainNode(Node.getSynset(),"meronym"));
break;
default:
break;
}
Chains.add(inherit);
return;
}
}
}