blob: eb360badd2504ecf9f5d9513872dae964f3c66a8 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.uima.dde.internal.hover;
import java.util.Map;
import java.util.Set;
import org.apache.uima.aae.deployment.AEDeploymentDescription;
import org.apache.uima.aae.deployment.AEDeploymentMetaData;
import org.apache.uima.aae.deployment.AsyncAEErrorConfiguration;
import org.apache.uima.aae.deployment.AsyncAggregateErrorConfiguration;
import org.apache.uima.aae.deployment.CollectionProcessCompleteErrors;
import org.apache.uima.aae.deployment.GetMetadataErrors;
import org.apache.uima.aae.deployment.ProcessCasErrors;
import org.apache.uima.aae.deployment.RemoteAEDeploymentMetaData;
import org.apache.uima.analysis_engine.AnalysisEngineDescription;
import org.apache.uima.tools.debug.util.Trace;
import org.eclipse.jface.dialogs.PopupDialog;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.text.IInformationControl;
import org.eclipse.jface.text.IInformationControlExtension2;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.forms.FormColors;
import org.eclipse.ui.forms.widgets.FormText;
public class DDEInformationControl extends PopupDialog implements IInformationControl,
IInformationControlExtension2 {
private Font boldTextFont;
/** ********************************************************************** */
public DDEInformationControl(Shell parent, int shellStyle, int treeStyle) {
this(parent, shellStyle, treeStyle, null, false);
}
public DDEInformationControl(Shell parent, int shellStyle, int treeStyle,
String invokingCommandId, boolean showStatusField) {
super(parent, shellStyle | SWT.NO_FOCUS | SWT.ON_TOP, false, false, false, false, null,
null);
create();
boldTextFont = createBoldFont(getShell().getDisplay(), JFaceResources.getTextFont());
}
public void setVisible(boolean visible) {
if (visible) {
open();
} else {
saveDialogBounds(getShell());
getShell().setVisible(false);
}
}
/** ********************************************************************** */
public void addDisposeListener(DisposeListener listener) {
// TODO Auto-generated method stub
}
public void addFocusListener(FocusListener listener) {
// TODO Auto-generated method stub
}
public Point computeSizeHint() {
int widthHint = 400; // SWT.DEFAULT;
if (getShell() != null) {
Point pt = getShell().computeSize(widthHint, SWT.DEFAULT, true);
// Trace.err("computeSizeHint: " + pt.toString());
return pt;
} else {
// Trace.err("getShell() == null");
return new Point(200, 100);
}
}
public void dispose() {
if (boldTextFont != null) {
boldTextFont.dispose();
}
}
public boolean isFocusControl() {
return false;
}
public void removeDisposeListener(DisposeListener listener) {
// TODO Auto-generated method stub
}
public void removeFocusListener(FocusListener listener) {
// TODO Auto-generated method stub
}
public void setBackgroundColor(Color background) {
// TODO Auto-generated method stub
}
public void setFocus() {
// TODO Auto-generated method stub
}
public void setForegroundColor(Color foreground) {
// TODO Auto-generated method stub
}
public void setInformation(String information) {
formText.setText(information, true, false);
}
public void setLocation(Point location) {
// Trace.err(location.toString());
getShell().setLocation(location);
}
public void setSize(int width, int height) {
getShell().setSize(width, height);
// Trace.err("width: " + width + " height:" + height);
}
public void setSizeConstraints(int maxWidth, int maxHeight) {
}
public void setInput(Object input) {
StringBuffer buf = new StringBuffer();
if (input != null) {
// Trace.err("input: " + input.getClass().getName());
if (input instanceof String) {
formText.setColor("header", formColors.getColor(FormColors.TITLE));
// formText.setFont("header", JFaceResources.getHeaderFont());
formText
.setFont("header", JFaceResources.getFontRegistry().get(JFaceResources.WINDOW_FONT));
formText.setFont("code", JFaceResources.getTextFont());
formText.setText(buf.toString(), true, false);
} else if (input instanceof TreeItem && ((TreeItem) input).getData() != null) {
// TreeItem item = (TreeItem) input;
Object obj = ((TreeItem) input).getData();
String text = null;
if (obj instanceof AEDeploymentMetaData) {
text = toStringFromAEDeploymentMetaData((AEDeploymentMetaData) obj);
} else if (obj instanceof RemoteAEDeploymentMetaData) {
text = toStringFromRemoteAEDeploymentMetaData((RemoteAEDeploymentMetaData) obj);
} else if (obj instanceof AEDeploymentDescription) {
text = toStringFromAEDeploymentDescription((AEDeploymentDescription) obj);
} else if (obj instanceof KeyValuePair) {
AEDeploymentDescription dd = (AEDeploymentDescription) ((KeyValuePair) obj).getValue();
text = toStringFromAEDeploymentDescription(dd);
}
if (text != null) {
formText.setColor("header", formColors.getColor(FormColors.TITLE));
formText.setFont("header", boldTextFont);
formText.setText(text, true, false);
}
}
}
}
protected String toStringFromAEDeploymentDescription(AEDeploymentDescription obj) {
StringBuffer buf = new StringBuffer();
buf.append("<form><p><span color=\"header\" font=\"header\">");
buf.append(obj.getName() + "</span>");
buf.append("</p>");
// Description
if (obj.getDescription().trim().length() > 0) {
buf.append("<p>" + obj.getDescription());
buf.append("</p>");
}
buf.append("</form>");
return buf.toString();
}
protected String toStringFromAEDeploymentMetaData(AEDeploymentMetaData obj) {
StringBuffer buf = new StringBuffer();
buf.append("<form><p><span color=\"header\" font=\"header\">");
buf.append(obj.getKey() + "</span>");
if (obj.isAsync()) {
buf.append(" - Async Aggregate");
}
buf.append("</p>");
if (obj.isAsync() && obj.getResourceSpecifier() instanceof AnalysisEngineDescription) {
AnalysisEngineDescription aed = (AnalysisEngineDescription) obj.getResourceSpecifier();
if (!aed.isPrimitive()) {
buf.append("<p><b>Delegates</b>\n");
Map map = aed.getDelegateAnalysisEngineSpecifiersWithImports();
Set<String> keys = map.keySet();
for (String key: keys) {
buf.append(" - " + key);
}
buf.append("</p>");
}
}
// Number of Replicated Instances
if (!obj.isTopAnalysisEngine()) {
buf.append("<p>Number of Replicated Instances: " + obj.getNumberOfInstances());
buf.append("</p>");
}
if (obj.isCasMultiplier()) {
buf.append("<p>CasMultiplierPoolSize: " + obj.getCasMultiplierPoolSize());
buf.append("</p>");
}
// Error Config
toStringFromErrorConfig(buf, obj.getAsyncAEErrorConfiguration());
buf.append("</form>");
return buf.toString();
}
protected String toStringFromRemoteAEDeploymentMetaData(RemoteAEDeploymentMetaData obj) {
StringBuffer buf = new StringBuffer();
buf.append("<form><p><span color=\"header\" font=\"header\">");
buf.append(obj.getKey() + "</span> - Remote Service</p>");
buf.append("<li><b>Broker URL:</b> "
+ (obj.getInputQueue() != null ? obj.getInputQueue().getBrokerURL() : "") + "</li>");
buf.append("<li><b>Queue Name:</b> "
+ (obj.getInputQueue() != null ? obj.getInputQueue().getEndPoint() : "") + "</li>");
if (obj.getRemoteReplyQueueScaleout() > 0) {
buf.append("<li><b>Concurrent Consumers for reply queue:</b> " + obj.getRemoteReplyQueueScaleout() + "</li>");
}
// Error Config
toStringFromErrorConfig(buf, obj.getAsyncAEErrorConfiguration());
buf.append("</form>");
return buf.toString();
}
protected void toStringFromErrorConfig(StringBuffer buf, AsyncAEErrorConfiguration obj) {
if (obj == null) {
return;
}
boolean isAsyncAggErrorConfig = (obj instanceof AsyncAggregateErrorConfiguration);
GetMetadataErrors getGetMetadataErrors = obj.getGetMetadataErrors();
if (getGetMetadataErrors != null) {
buf.append("<li><b>GetMetadataErrors</b></li>");
buf.append("<li bindent=\"20\">MaxRetries: " + getGetMetadataErrors.getMaxRetries()
+ " ; Timeout: " + getGetMetadataErrors.getTimeout() + " ; ErrorAction: "
+ getGetMetadataErrors.getErrorAction() + "</li>");
}
ProcessCasErrors processCasErrors = obj.getProcessCasErrors();
if (processCasErrors != null) {
buf.append("<li><b>ProcessCasErrors</b></li>");
if (isAsyncAggErrorConfig) {
buf.append("<li bindent=\"20\">CAS Max Retries: " + processCasErrors.getMaxRetries()
+ " ; CAS Timeout: " + processCasErrors.getTimeout()
+ " ; CAS Continue On Failure: " + processCasErrors.isContinueOnRetryFailure() + "</li>");
buf.append("<li bindent=\"20\">Delegate Threshold Count: " + processCasErrors.getThresholdCount()
+ " ; Delegate Threshold Window: " + processCasErrors.getThresholdWindow()
+ " ; Delegate Threshold Action: " + processCasErrors.getThresholdAction() + "</li>");
} else {
buf.append("<li bindent=\"20\">Threshold Count: " + processCasErrors.getThresholdCount()
+ " ; Threshold Window: " + processCasErrors.getThresholdWindow()
+ " ; Threshold Action: " + processCasErrors.getThresholdAction() + "</li>");
}
}
CollectionProcessCompleteErrors collProcessCompleteErrors = obj
.getCollectionProcessCompleteErrors();
if (collProcessCompleteErrors != null) {
buf.append("<li><b>CollectionProcessCompleteErrors</b></li>");
buf.append("<li bindent=\"20\">Timeout: " + collProcessCompleteErrors.getTimeout()
+ " ; Additional Error Action: "
+ collProcessCompleteErrors.getAdditionalErrorAction() + "</li>");
}
}
public static Font createBoldFont(Display display, Font regularFont) {
FontData[] fontDatas = regularFont.getFontData();
for (int i = 0; i < fontDatas.length; i++) {
fontDatas[i].setStyle(fontDatas[i].getStyle() | SWT.BOLD);
}
return new Font(display, fontDatas);
}
/** ********************************************************************** */
private static final int INNER_BORDER = 1;
private FormText formText;
private FormColors formColors;
protected Control createDialogArea(Composite parent) {
formColors = new FormColors(parent.getDisplay());
parent.setLayout(new GridLayout());
// Text field
formText = new FormText(parent, SWT.MULTI | SWT.READ_ONLY);
GridData gd = new GridData(GridData.BEGINNING | GridData.FILL_BOTH);
gd.horizontalIndent = INNER_BORDER;
gd.verticalIndent = INNER_BORDER;
formText.setLayoutData(gd);
formText.addKeyListener(new KeyListener() {
public void keyPressed(KeyEvent e) {
if (e.character == 0x1B) // ESC
close();
}
public void keyReleased(KeyEvent e) {
}
});
return formText;
}
}