blob: 77939c780bc9a090e00cc3a305569ed9256d8933 [file] [log] [blame]
package net.sf.taverna.biocatalogue.ui.search_results;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.util.ArrayList;
import java.util.List;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import net.sf.taverna.biocatalogue.model.LoadingExpandedResource;
import net.sf.taverna.biocatalogue.model.LoadingResource;
import net.sf.taverna.biocatalogue.model.Resource;
import net.sf.taverna.biocatalogue.model.ResourceManager;
import net.sf.taverna.biocatalogue.model.Util;
import net.sf.taverna.t2.lang.ui.ReadOnlyTextArea;
import net.sf.taverna.t2.ui.perspectives.biocatalogue.integration.health_check.ServiceMonitoringStatusInterpreter;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang.StringUtils;
import org.biocatalogue.x2009.xml.rest.Service;
import org.biocatalogue.x2009.xml.rest.ServiceTechnologyType;
import org.biocatalogue.x2009.xml.rest.SoapInput;
import org.biocatalogue.x2009.xml.rest.SoapOperation;
import org.biocatalogue.x2009.xml.rest.SoapOutput;
import org.biocatalogue.x2009.xml.rest.SoapService;
import org.biocatalogue.x2009.xml.rest.Service.ServiceTechnologyTypes;
import org.biocatalogue.x2009.xml.rest.ServiceTechnologyType.Enum;
import org.biocatalogue.x2009.xml.rest.SoapOperation.Ancestors;
/**
*
*
* @author Sergejs Aleksejevs
*/
@SuppressWarnings("serial")
public class SOAPOperationListCellRenderer extends ExpandableOnDemandLoadedListCellRenderer
{
private JLabel jlTypeIcon = new JLabel();
private JLabel jlItemStatus = new JLabel();
private JLabel jlItemTitle = new JLabel("X");
private JLabel jlPartOf = new JLabel("X");
private JLabel jlWsdlLocation = new JLabel("X");
private ReadOnlyTextArea jtDescription = new ReadOnlyTextArea(5,80);
private JLabel jlSoapInputs = new JLabel("X");
private JLabel jlSoapOutputs = new JLabel("X");
private GridBagConstraints c;
private static Resource.TYPE resourceType = Resource.TYPE.SOAPOperation;
public SOAPOperationListCellRenderer() {
jlItemTitle.setFont(jlItemTitle.getFont().deriveFont(Font.PLAIN, jlItemTitle.getFont().getSize() + 2));
jtDescription.setOpaque(false);
jtDescription.setLineWrap(true);
jtDescription.setWrapStyleWord(true);
}
/**
* This entry can be in one of two states:
* -- containing only the name of the resource and NOT loading further details;
* -- containing only the name of the resource and LOADING further details.
*
* @param itemToRender
* @return
*/
protected GridBagConstraints prepareInitiallyLoadingEntry(Object itemToRender)
{
LoadingResource resource = (LoadingResource)itemToRender;
jlTypeIcon.setIcon(resourceType.getIcon());
jlItemStatus.setIcon(ResourceManager.getImageIcon(ResourceManager.SERVICE_STATUS_UNCHECKED_ICON_LARGE));
jlItemTitle.setText("<html>" + StringEscapeUtils.escapeHtml(Resource.getDisplayNameForResource(resource)) + "<font color=\"gray\"><i>- fetching more information</i></font></html>");
jlPartOf.setText(" ");
jlWsdlLocation.setText(" ");
jtDescription.setText("");
jlSoapInputs.setText(" ");
jlSoapOutputs.setText(" ");
return (arrangeLayout());
}
/**
*
* @param itemToRender
* @param selected
* @param expandedView <code>true</code> to indicate that this method generates the top
* fragment of the expanded list entry for this SOAP operation / REST method.
* @return
*/
protected GridBagConstraints prepareLoadedEntry(Object itemToRender, boolean selected)
{
SoapOperation soapOp = (SoapOperation)itemToRender;
Ancestors ancestors = soapOp.getAncestors();
SoapService soapService = ancestors.getSoapService();
Service service = ancestors.getService();
String title = StringEscapeUtils.escapeHtml(Resource.getDisplayNameForResource(soapOp));
if (soapOp.isSetArchived() || service.isSetArchived()) {
jlTypeIcon.setIcon(ResourceManager.getImageIcon(ResourceManager.WARNING_ICON));
title = "<html>" + title + "<i> - this operation is archived and probably cannot be used</i></html>";
} else if (isSoapLab(service)) {
jlTypeIcon.setIcon(ResourceManager.getImageIcon(ResourceManager.WARNING_ICON));
title = "<html>" + title + "<i> - this operation can only be used as part of a SoapLab service</i></html>";
}
else {
jlTypeIcon.setIcon(resourceType.getIcon());
title = "<html>" + title + "</html>";
}
// service status
jlItemStatus.setIcon(ServiceMonitoringStatusInterpreter.getStatusIcon(service, false));
jlItemTitle.setText(title);
jlPartOf.setText("<html><b>Part of: </b>" + StringEscapeUtils.escapeHtml(soapOp.getAncestors().getSoapService().getResourceName()) + "</html>");
jlWsdlLocation.setText("<html><b>WSDL location: </b>" + soapService.getWsdlLocation() + "</html>");
String strDescription = (soapOp.getDescription() == null || soapOp.getDescription().length() == 0 ?
"No description" :
Util.stripAllHTML(soapOp.getDescription()));
jtDescription.setText(strDescription);
// add SOAP inputs
List<String> names = new ArrayList<String>();
for (SoapInput soapInput : soapOp.getInputs().getSoapInputList()) {
names.add(soapInput.getName());
}
String soapInputs = "<b>" + names.size() + " " + Util.pluraliseNoun("Input", names.size()) + "</b>";
if(names.size() > 0) {
soapInputs += ": " + StringEscapeUtils.escapeHtml(Util.ensureLineLengthWithinString(Util.join(names, ", "), LINE_LENGTH, false));
}
soapInputs = "<html>" + soapInputs + "</html>";
jlSoapInputs.setText(soapInputs);
c.gridy++;
this.add(jlSoapInputs, c);
// add SOAP outputs
names.clear();
for (SoapOutput soapOutput : soapOp.getOutputs().getSoapOutputList()) {
names.add(soapOutput.getName());
}
String soapOutputs = "<b>" + names.size() + " " + Util.pluraliseNoun("Output", names.size()) + "</b>";
if(names.size() > 0) {
soapOutputs += ": " + StringEscapeUtils.escapeHtml(Util.ensureLineLengthWithinString(Util.join(names, ", "), LINE_LENGTH, false));
}
soapOutputs = "<html>" + soapOutputs + "</html>";
jlSoapOutputs.setText(soapOutputs);
return (arrangeLayout());
}
private boolean isSoapLab(Service service) {
boolean result = false;
ServiceTechnologyTypes serviceTechnologyTypes = service.getServiceTechnologyTypes();
if (serviceTechnologyTypes == null) {
return result;
}
List<Enum> typeList = serviceTechnologyTypes.getTypeList();
if (typeList == null) {
return result;
}
result = typeList.contains(ServiceTechnologyType.SOAPLAB);
return result;
}
/**
* @return Final state of the {@link GridBagConstraints} instance
* that was used to lay out components in the panel.
*/
private GridBagConstraints arrangeLayout()
{
// POPULATE PANEL WITH PREPARED COMPONENTS
this.setLayout(new GridBagLayout());
c = new GridBagConstraints();
c.anchor = GridBagConstraints.NORTHWEST;
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.gridy = 0;
c.weightx = 0;
c.insets = new Insets(8, 6, 6, 3);
this.add(jlTypeIcon, c);
c.gridx++;
c.weightx = 1.0;
c.insets = new Insets(8, 3, 6, 3);
this.add(jlItemTitle, c);
c.gridx++;
c.gridheight = 7;
c.weightx = 0;
c.weighty = 1.0;
this.add(jlItemStatus, c);
c.gridx = 1;
c.gridy++;
c.gridheight = 1;
c.weightx = 0;
c.weighty = 0;
this.add(jlPartOf, c);
c.gridy++;
this.add(jlWsdlLocation, c);
c.fill = GridBagConstraints.NONE;
c.gridy++;
this.add(jtDescription, c);
c.fill = GridBagConstraints.HORIZONTAL;
c.gridy++;
this.add(jlSoapInputs, c);
c.fill = GridBagConstraints.HORIZONTAL;
c.gridy++;
this.add(jlSoapOutputs, c);
return (c);
}
@Override
boolean shouldBeHidden(Object itemToRender) {
if (!(itemToRender instanceof SoapOperation)) {
return false;
}
SoapOperation soapOp = (SoapOperation) itemToRender;
Ancestors ancestors = soapOp.getAncestors();
Service service = ancestors.getService();
if (soapOp.isSetArchived() || service.isSetArchived()) {
return true;
} else if (isSoapLab(service)) {
return true;
}
else {
return false;
}
}
}