aaconClient = alignFrame.getViewport()
.getCalcManager()
.getRegisteredWorkersOfClass(aaui.getClient());
if (aaconClient != null && aaconClient.size() > 0)
{
removeCurrentAAConWorkerFor(aaui, alignFrame);
}
else
{
buildCurrentAAConWorkerFor(aaui, alignFrame);
}
}
});
wsmenu.add(aaConEnabled);
final JMenuItem modifyParams = new JMenuItem(aaui.getAAeditSettings());
modifyParams
.setToolTipText(""
+ JvSwingUtils.wrapTooltip(false,
aaui.getAAeditSettingsTooltip() + "
")
+ "");
modifyParams.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent arg0)
{
showAAConAnnotationSettingsFor(aaui, alignFrame);
}
});
wsmenu.add(modifyParams);
wsmenu.addMenuListener(new MenuListener()
{
@Override
public void menuSelected(MenuEvent arg0)
{
// TODO: refactor to the implementing class.
if (alignFrame.getViewport().getAlignment().isNucleotide() ? aaui
.isNa() : aaui.isPr())
{
aaConEnabled.setEnabled(true);
modifyParams.setEnabled(true);
}
else
{
aaConEnabled.setEnabled(false);
modifyParams.setEnabled(false);
}
List aaconClient = alignFrame.getViewport()
.getCalcManager()
.getRegisteredWorkersOfClass(aaui.getClient());
if (aaconClient != null && aaconClient.size() > 0)
{
aaConEnabled.setSelected(true);
}
else
{
aaConEnabled.setSelected(false);
}
}
@Override
public void menuDeselected(MenuEvent arg0)
{
// TODO Auto-generated method stub
}
@Override
public void menuCanceled(MenuEvent arg0)
{
// TODO Auto-generated method stub
}
});
}
return true;
}
private static void showAAConAnnotationSettingsFor(
final AlignAnalysisUIText aaui, AlignFrame alignFrame)
{
/*
* preferred settings Whether AACon is automatically recalculated Which
* AACon server to use What parameters to use
*/
// could actually do a class search for this too
AAConSettings fave = (AAConSettings) alignFrame.getViewport()
.getCalcIdSettingsFor(aaui.getCalcId());
if (fave == null)
{
fave = createDefaultAAConSettings(aaui);
}
new SequenceAnnotationWSClient(fave, alignFrame, true);
}
private static void buildCurrentAAConWorkerFor(
final AlignAnalysisUIText aaui, AlignFrame alignFrame)
{
buildCurrentAAConWorkerFor(aaui, alignFrame, null);
}
private static void buildCurrentAAConWorkerFor(
final AlignAnalysisUIText aaui, AlignFrame alignFrame,
Jws2Instance service)
{
/*
* preferred settings Whether AACon is automatically recalculated Which
* AACon server to use What parameters to use
*/
AAConSettings fave = (AAConSettings) alignFrame.getViewport()
.getCalcIdSettingsFor(aaui.getCalcId());
if (fave == null)
{
fave = createDefaultAAConSettings(aaui, service);
}
else
{
if (service != null
&& !fave.getService().hosturl.equals(service.hosturl))
{
Cache.log.debug("Changing AACon service to " + service.hosturl
+ " from " + fave.getService().hosturl);
fave.setService(service);
}
}
new SequenceAnnotationWSClient(fave, alignFrame, false);
}
private static AAConSettings createDefaultAAConSettings(
AlignAnalysisUIText aaui)
{
return createDefaultAAConSettings(aaui, null);
}
private static AAConSettings createDefaultAAConSettings(
AlignAnalysisUIText aaui, Jws2Instance service)
{
if (service != null)
{
if (!service.serviceType.toString().equals(
compbio.ws.client.Services.AAConWS.toString()))
{
Cache.log
.warn("Ignoring invalid preferred service for AACon calculations (service type was "
+ service.serviceType + ")");
service = null;
}
else
{
// check service is actually in the list of currently avaialable
// services
if (!Jws2Discoverer.getDiscoverer().getServices().contains(service))
{
// it isn't ..
service = null;
}
}
}
if (service == null)
{
// get the default service for AACon
service = Jws2Discoverer.getDiscoverer().getPreferredServiceFor(null,
aaui.getServiceType());
}
if (service == null)
{
// TODO raise dialog box explaining error, and/or open the JABA
// preferences menu.
throw new Error(
MessageManager.getString("error.no_aacon_service_found"));
}
return new AAConSettings(true, service, null, null);
}
private static void removeCurrentAAConWorkerFor(AlignAnalysisUIText aaui,
AlignFrame alignFrame)
{
alignFrame.getViewport().getCalcManager()
.removeRegisteredWorkersOfClass(aaui.getClient());
}
}