Java tutorial
/****************************************************************************** * Copyright (c) 2009-2013, Linagora * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Linagora - initial API and implementation *******************************************************************************/ package com.ebmwebsourcing.petals.services.utils; import java.util.List; import java.util.Map; import org.eclipse.core.resources.IMarker; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.StyledString; import org.eclipse.jface.viewers.StyledString.Styler; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.TextStyle; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.w3c.dom.Element; import com.ebmwebsourcing.petals.common.generation.Mep; import com.ebmwebsourcing.petals.common.internal.provisional.utils.DomUtils; import com.ebmwebsourcing.petals.common.internal.provisional.utils.ImageRegistry; import com.ebmwebsourcing.petals.common.internal.provisional.utils.MarkerUtils; import com.ebmwebsourcing.petals.common.internal.provisional.utils.NamespaceUtils; import com.ebmwebsourcing.petals.common.internal.provisional.utils.PlatformUtils; import com.ebmwebsourcing.petals.common.internal.provisional.utils.StringUtils; import com.ebmwebsourcing.petals.common.internal.provisional.utils.WsdlUtils.JbiBasicBean; import com.ebmwebsourcing.petals.services.PetalsServicesPlugin; import com.ebmwebsourcing.petals.services.explorer.model.EndpointBean; import com.ebmwebsourcing.petals.services.su.extensions.ExtensionManager; /** * @author Vincent Zurczak - EBM WebSourcing */ public class PCStyledLabelProvider extends LabelProvider implements IStyledLabelProvider { private final Color consumesKeyWordForegroundColor; private final Color providesKeyWordForegroundColor; private final Color forbiddenForegroundColor; private final Font propertiesFont; private final Styler providesKeyWordsStyle, consumesKeyWordsStyle, propertiesStyle, forbiddenStyle; private Map<Element, List<IMarker>> elementToMarkers; private final ImageRegistry imageRegistry; private final ImageDescriptor providesDesc, consumesDesc; private final Mep filteringMep; /** * Constructor equivalent to <code>new PCStyledLabelProvider( control, Mep.UNKNOWN )</code>. * @param control */ public PCStyledLabelProvider(Control control) { this(control, Mep.UNKNOWN); } /** * Constructor. * @param control * @param filteringMep the MEP that a service must support (for at least one operation) * <p> * Use Mep.UNKNOWN to not filter results. * Note that it is only used with {@link EndpointBean} objects as input. * </p> */ public PCStyledLabelProvider(Control control, Mep filteringMep) { // The MEP this.filteringMep = filteringMep; // Stylers FontData[] originalData = control.getFont().getFontData(); this.propertiesFont = new Font(control.getDisplay(), PlatformUtils.getModifiedFontData(originalData, SWT.NORMAL)); this.consumesKeyWordForegroundColor = new Color(Display.getCurrent(), 228, 100, 37); this.providesKeyWordForegroundColor = new Color(Display.getCurrent(), 120, 49, 135); this.forbiddenForegroundColor = new Color(Display.getCurrent(), 120, 120, 120); this.consumesKeyWordsStyle = new Styler() { @Override public void applyStyles(TextStyle textStyle) { textStyle.foreground = PCStyledLabelProvider.this.consumesKeyWordForegroundColor; } }; this.providesKeyWordsStyle = new Styler() { @Override public void applyStyles(TextStyle textStyle) { textStyle.foreground = PCStyledLabelProvider.this.providesKeyWordForegroundColor; } }; this.propertiesStyle = new Styler() { @Override public void applyStyles(TextStyle textStyle) { textStyle.font = PCStyledLabelProvider.this.propertiesFont; } }; this.forbiddenStyle = new Styler() { @Override public void applyStyles(TextStyle textStyle) { textStyle.foreground = PCStyledLabelProvider.this.forbiddenForegroundColor; textStyle.strikeout = true; textStyle.strikeoutColor = PCStyledLabelProvider.this.forbiddenForegroundColor; } }; // Images this.imageRegistry = new ImageRegistry(); this.providesDesc = PetalsServicesPlugin.getImageDescriptor("icons/obj16/provides_3.0.png"); this.consumesDesc = PetalsServicesPlugin.getImageDescriptor("icons/obj16/consumes_3.0.png"); } /* * (non-Javadoc) * @see org.eclipse.jface.viewers.StyledCellLabelProvider * #dispose() */ @Override public void dispose() { if (this.providesKeyWordForegroundColor != null) this.providesKeyWordForegroundColor.dispose(); if (this.consumesKeyWordForegroundColor != null) this.consumesKeyWordForegroundColor.dispose(); if (this.forbiddenForegroundColor != null) this.forbiddenForegroundColor.dispose(); if (this.propertiesFont != null) this.propertiesFont.dispose(); this.imageRegistry.dispose(); super.dispose(); } /** * @param elementToMarkers the elementToMarkers to set */ public void setElementToMarkers(Map<Element, List<IMarker>> elementToMarkers) { this.elementToMarkers = elementToMarkers; } /* * (non-Javadoc) * @see org.eclipse.jface.viewers.LabelProvider * #getText(java.lang.Object) */ @Override public String getText(Object element) { return getStyledText(element).getString(); } /* * (non-Javadoc) * @see org.eclipse.jface.viewers.LabelProvider * #getImage(java.lang.Object) */ @Override public Image getImage(Object element) { Image image = null; if (element instanceof Element) { String name = DomUtils.getNodeName((Element) element); boolean provides = false; if ((provides = "provides".equals(name)) || "consumes".equals(name)) { // Get markers attached to this element int level = IStatus.OK; if (this.elementToMarkers != null) { List<IMarker> markers = this.elementToMarkers.get(element); if (markers != null) level = MarkerUtils.getMaximumSeverity(markers); } if (level == IStatus.ERROR) image = this.imageRegistry.getErrorImage(provides ? this.providesDesc : this.consumesDesc); else if (level == IStatus.WARNING) image = this.imageRegistry.getWarningImage(provides ? this.providesDesc : this.consumesDesc); else image = this.imageRegistry.getBaseImage(provides ? this.providesDesc : this.consumesDesc); } } else if (this.providesDesc != null) { if (element instanceof JbiBasicBean) image = this.imageRegistry.getBaseImage(this.providesDesc); else if (element instanceof EndpointBean) image = this.imageRegistry.getBaseImage(this.providesDesc); } else { image = null; } return image; } /* * (non-Javadoc) * @see org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider * #getStyledText(java.lang.Object) */ @Override public StyledString getStyledText(Object element) { StyledString styledString; if (element instanceof Element) styledString = getStyledText((Element) element); else if (element instanceof JbiBasicBean) styledString = getStyledText((JbiBasicBean) element); else if (element instanceof EndpointBean) styledString = getStyledText((EndpointBean) element); else styledString = new StyledString(""); return styledString; } /** * Gets the styled string from a DOM element. * @param elt * @return */ protected StyledString getStyledText(Element elt) { StyledString styledString = new StyledString(""); String name = DomUtils.getNodeName(elt); String itfName = elt.getAttribute("interface-name"); itfName = NamespaceUtils.removeNamespaceElements(itfName); String srvName = elt.getAttribute("service-name"); srvName = NamespaceUtils.removeNamespaceElements(srvName); String edptName = elt.getAttribute("endpoint-name"); edptName = NamespaceUtils.removeNamespaceElements(edptName); if ("provides".equalsIgnoreCase(name)) { styledString.append(srvName.length() > 0 ? srvName : "?", this.propertiesStyle); styledString.append(" implements ", this.providesKeyWordsStyle); styledString.append(itfName.length() > 0 ? itfName : "?", this.propertiesStyle); styledString.append(" @ ", this.providesKeyWordsStyle); styledString.append(edptName.length() > 0 ? edptName : "?", this.propertiesStyle); } else if ("consumes".equalsIgnoreCase(name)) { styledString.append(srvName.length() > 0 ? srvName : "*", this.propertiesStyle); styledString.append(" implements ", this.consumesKeyWordsStyle); styledString.append(itfName.length() > 0 ? itfName : "?", this.propertiesStyle); styledString.append(" @ ", this.consumesKeyWordsStyle); styledString.append(edptName.length() > 0 ? edptName : "*", this.propertiesStyle); } return styledString; } /** * Gets the styled string from an {@link EndpointBean} instance. * @param bean * @return */ protected StyledString getStyledText(EndpointBean bean) { StyledString styledString = new StyledString(""); String srvName = null; if (bean.getServiceName() != null) srvName = bean.getServiceName().getLocalPart(); if (StringUtils.isEmpty(srvName)) srvName = "?"; String itfName = null; if (bean.getInterfaceName() != null) itfName = bean.getInterfaceName().getLocalPart(); if (StringUtils.isEmpty(itfName)) itfName = "?"; String edptName = bean.getEndpointName(); if (StringUtils.isEmpty(edptName)) edptName = "?"; String suType = ExtensionManager.INSTANCE.findComponentAlias(bean.getComponentName()); if (StringUtils.isEmpty(suType)) suType = "?"; if (bean.getOperationNameToMep().isEmpty() || bean.supportsMep(this.filteringMep)) { styledString.append(srvName, this.propertiesStyle); styledString.append(" implements ", this.providesKeyWordsStyle); styledString.append(itfName, this.propertiesStyle); styledString.append(" @ ", this.providesKeyWordsStyle); styledString.append(edptName, this.propertiesStyle); } else { styledString.append(srvName + " implements " + itfName + " @ " + edptName, this.forbiddenStyle); } styledString.append(" [ " + suType + " ]", this.providesKeyWordsStyle); return styledString; } /** * Gets the styled string from a {@link JbiBasicBean} instance. * @param bean * @return */ protected StyledString getStyledText(JbiBasicBean bean) { StyledString styledString = new StyledString(""); String srvName = bean.getServiceName() == null ? null : bean.getServiceName().getLocalPart(); ; if (srvName == null || srvName.trim().length() == 0) srvName = "?"; String itfName = bean.getInterfaceName() == null ? null : bean.getInterfaceName().getLocalPart(); if (itfName == null || itfName.trim().length() == 0) itfName = "?"; String edptName = bean.getEndpointName(); if (edptName == null || edptName.trim().length() == 0) edptName = "?"; styledString.append(srvName.length() > 0 ? srvName : "?", this.propertiesStyle); styledString.append(" implements ", this.providesKeyWordsStyle); styledString.append(itfName.length() > 0 ? itfName : "?", this.propertiesStyle); styledString.append(" @ ", this.providesKeyWordsStyle); styledString.append(edptName.length() > 0 ? edptName : "?", this.propertiesStyle); return styledString; } }