/*******************************************************************************
* Copyright (c) 2004, 2010 BREDEX GmbH.
* 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:
* BREDEX GmbH - initial API and implementation and/or initial documentation
*******************************************************************************/
package org.eclipse.jubula.client.ui.rcp.controllers.propertysources;
import java.util.Map;
import java.util.Set;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jubula.client.core.model.IEventExecTestCasePO;
import org.eclipse.jubula.client.core.model.ISpecTestCasePO;
import org.eclipse.jubula.client.core.model.ReentryProperty;
import org.eclipse.jubula.client.core.utils.StringHelper;
import org.eclipse.jubula.client.ui.rcp.controllers.propertydescriptors.IntegerTextPropertyDescriptor;
import org.eclipse.jubula.client.ui.rcp.controllers.propertydescriptors.JBPropertyDescriptor;
import org.eclipse.jubula.client.ui.rcp.i18n.Messages;
import org.eclipse.jubula.client.ui.rcp.provider.labelprovider.DisabledLabelProvider;
import org.eclipse.jubula.client.ui.utils.ErrorHandlingUtil;
import org.eclipse.jubula.toolkit.common.xml.businessprocess.ComponentBuilder;
import org.eclipse.jubula.tools.internal.constants.StringConstants;
import org.eclipse.jubula.tools.internal.exception.Assert;
import org.eclipse.jubula.tools.internal.exception.InvalidDataException;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.views.properties.ComboBoxPropertyDescriptor;
import org.eclipse.ui.views.properties.IPropertyDescriptor;
import org.eclipse.ui.views.properties.PropertyDescriptor;
import org.eclipse.ui.views.properties.TextPropertyDescriptor;
/**
* This class is the PropertySource of an EventExecTestCase.
* Its used to display and edit the properties in the Properties View.
*
* @author BREDEX GmbH
* @created 07.04.2005
*/
public class EventExecTestCaseGUIPropertySource extends
ExecTestCaseGUIPropertySource {
/** Constant for the String "EventHandler Name" */
private static final String P_EVHANDLER_DISPLAY_NAME =
Messages.EventExecTestCaseGUIPropertySourceEventHandlerName;
/** Constant for the String "Event Type" */
private static final String P_ELEMENT_DISPLAY_EVENTTYPE =
Messages.EventExecTestCaseGUIPropertySourceEventType;
/** Constant for the String "Reentry Type" */
private static final String P_ELEMENT_DISPLAY_REENTRYTYPE =
Messages.EventExecTestCaseGUIPropertySourceReentryType;
/** Constant for the String "Maximum Number of Retries" */
private static final String P_ELEMENT_DISPLAY_MAXRETRIES =
Messages.EventExecTestCaseGUIPropertySourceMaxRetries;
/** List of event types (short names)*/
private static final String[] EVENT_TYPES = initEventTypes();
/** List of Reentry Types */
private static String[] reentryTypes = initReentryTypes();
/** cached property descriptor for name */
private IPropertyDescriptor m_namePropDesc = null;
/** cached property descriptor for name of referenced Test Case */
private IPropertyDescriptor m_specNamePropDesc = null;
/** cached property descriptor for event type */
private IPropertyDescriptor m_eventTypePropDesc = null;
/** cached property descriptor for reentry type */
private IPropertyDescriptor m_reentryTypePropDesc = null;
/** cached property descriptor for max number of retries */
private IPropertyDescriptor m_maxRetriesPropDesc = null;
/** cached property descriptor for comment */
private IPropertyDescriptor m_commentPropDesc = null;
/**
* @param eventExTestCase
* the dependend EventExecTestCase.
*/
public EventExecTestCaseGUIPropertySource(
IEventExecTestCasePO eventExTestCase) {
super(eventExTestCase);
}
/**
* Initializes the EventTypes.
* @return a String-Array of Event Types.
*/
private static String[] initEventTypes() {
Set mapKeySet = ComponentBuilder.getInstance().getCompSystem()
.getEventTypes().keySet();
String[] eventTypes = new String[mapKeySet.size()];
int i = 0;
final Map<String, String> stringHelperMap = StringHelper.getInstance()
.getMap();
for (Object object : mapKeySet) {
eventTypes[i] = stringHelperMap.get(object.toString());
i++;
}
return eventTypes;
}
/**
* Initializes the Reentry types Array.
* @return a String Array of String representations of the ReentryProperties.
*/
static String[] initReentryTypes() {
ReentryProperty[] reentryProperties =
ReentryProperty.REENTRY_PROP_ARRAY;
final int reentryPropertiesLength = reentryProperties.length;
reentryTypes = new String[reentryPropertiesLength];
for (int i = 0; i < reentryPropertiesLength; i++) {
reentryTypes[i] = reentryProperties[i].toString();
}
return reentryTypes;
}
/**
* {@inheritDoc}
*/
@SuppressWarnings("synthetic-access")
protected void initPropDescriptor() {
clearPropertyDescriptors();
createNamePropertyDescriptor();
createSpecNamePropertyDescriptor();
createCommentPropertyDescriptor();
createTaskIdPropertyDescriptor();
// Event Types
if (m_eventTypePropDesc == null) {
PropertyDescriptor cbpd = new JBPropertyDescriptor(
new EventTypeController(), P_ELEMENT_DISPLAY_EVENTTYPE);
cbpd.setLabelProvider(new LabelProvider() {
public String getText(Object element) {
if (element instanceof Integer) {
return EVENT_TYPES[((Integer)element).intValue()];
}
Assert.notReached(Messages.WrongTypeOfElement
+ StringConstants.EXCLAMATION_MARK);
return String.valueOf(element);
}
});
m_eventTypePropDesc = cbpd;
}
addPropertyDescriptor(m_eventTypePropDesc);
// Reentry Types
if (m_reentryTypePropDesc == null) {
PropertyDescriptor cbpd = new ComboBoxPropertyDescriptor(
new ReentryTypeController(), P_ELEMENT_DISPLAY_REENTRYTYPE,
reentryTypes);
cbpd.setLabelProvider(new LabelProvider() {
public String getText(Object element) {
if (element instanceof Integer) {
return reentryTypes[((Integer)element).intValue()];
}
Assert.notReached("Wrong element type!"); //$NON-NLS-1$
return String.valueOf(element);
}
});
m_reentryTypePropDesc = cbpd;
}
addPropertyDescriptor(m_reentryTypePropDesc);
// Max Retries
if (m_maxRetriesPropDesc == null) {
m_maxRetriesPropDesc = new IntegerTextPropertyDescriptor(
new MaxRetriesController(), P_ELEMENT_DISPLAY_MAXRETRIES,
false, IEventExecTestCasePO.MIN_VALUE_MAX_NUM_RETRIES,
IEventExecTestCasePO.MAX_VALUE_MAX_NUM_RETRIES);
}
if (((IEventExecTestCasePO)getPoNode()).getReentryProp()
.equals(ReentryProperty.RETRY)) {
addPropertyDescriptor(m_maxRetriesPropDesc);
}
// Get the ExecTcDescriptors and add them to this descriptors
addPropertyDescriptor(super.createParamDescriptors());
}
/** create property descriptor */
private void createTaskIdPropertyDescriptor() {
if (getTaskIdPropDesc() == null) {
JBPropertyDescriptor taskIdPropDesc = new JBPropertyDescriptor(
new ReadOnlyTaskIdController(),
org.eclipse.jubula.client.ui.i18n.Messages
.AbstractGuiNodePropertySourceTaskId);
taskIdPropDesc.setLabelProvider(new DisabledLabelProvider());
setTaskIdPropDesc(taskIdPropDesc);
}
addPropertyDescriptor(getTaskIdPropDesc());
}
/** create property descriptor */
private void createCommentPropertyDescriptor() {
if (m_commentPropDesc == null) {
m_commentPropDesc = new TextPropertyDescriptor(
new CommentController(), P_ELEMENT_DISPLAY_COMMENT);
}
addPropertyDescriptor(m_commentPropDesc);
}
/** create property descriptor */
private void createSpecNamePropertyDescriptor() {
if (m_specNamePropDesc == null) {
PropertyDescriptor propDes = new JBPropertyDescriptor(
new SpecNameController(),
P_SPECNAME_DISPLAY_NAME);
propDes.setLabelProvider(new DisabledLabelProvider());
m_specNamePropDesc = propDes;
}
addPropertyDescriptor(m_specNamePropDesc);
}
/** create property descriptor */
private void createNamePropertyDescriptor() {
if (m_namePropDesc == null) {
m_namePropDesc = new TextPropertyDescriptor(
new ExecNameController(),
P_EVHANDLER_DISPLAY_NAME);
}
addPropertyDescriptor(m_namePropDesc);
}
/**
* @author BREDEX GmbH
* @created 08.04.2005
*/
public class EventTypeController extends AbstractPropertyController {
/**
* {@inheritDoc}
*/
@SuppressWarnings("synthetic-access")
public boolean setProperty(Object value) {
boolean propSet = false;
IEventExecTestCasePO eventTc = (IEventExecTestCasePO) getPoNode();
final String oldType = eventTc.getEventType();
ISpecTestCasePO specTc = (ISpecTestCasePO)eventTc.getSpecAncestor();
specTc.removeNode(eventTc);
String evType = EVENT_TYPES[((Integer)value).intValue()];
evType = StringHelper.getInstance().getMap().get(evType);
eventTc.setEventType(evType);
try {
specTc.addEventTestCase(eventTc);
propSet = true;
} catch (InvalidDataException e) {
// try to set the old event type
ErrorHandlingUtil.createMessageDialog(e, null, null);
eventTc.setEventType(oldType);
try {
specTc.addEventTestCase(eventTc);
} catch (InvalidDataException e1) {
// should not happen!
ErrorHandlingUtil.createMessageDialog(e1, null, null);
}
}
return propSet;
}
/**
* {@inheritDoc}
*/
public Object getProperty() {
return getIndexOfType();
}
/**
* {@inheritDoc}
*/
public Image getImage() {
return DEFAULT_IMAGE;
}
/**
* Returns the index of the type from the String-Array for the
* ComboBoxPropertyDescriptor.
* @return an <code>Integer</code> value. The index.
*/
@SuppressWarnings("synthetic-access")
private Integer getIndexOfType() {
IEventExecTestCasePO eventTc = (IEventExecTestCasePO) getPoNode();
final int eventTypesLength = EVENT_TYPES.length;
String ehEventType = StringHelper.getInstance().getMap()
.get(eventTc.getEventType());
for (int i = 0; i < eventTypesLength; i++) {
if (EVENT_TYPES[i].equals(ehEventType)) {
return Integer.valueOf(i);
}
}
return Integer.valueOf(0);
}
}
/**
* @author BREDEX GmbH
* @created 08.04.2005
*/
public class ReentryTypeController extends AbstractPropertyController {
/**
* {@inheritDoc}
*/
public boolean setProperty(Object value) {
IEventExecTestCasePO eventTc = (IEventExecTestCasePO) getPoNode();
ReentryProperty prop = ReentryProperty
.REENTRY_PROP_ARRAY[((Integer)value).intValue()];
ReentryProperty oldProp = eventTc.getReentryProp();
eventTc.setReentryProp(prop);
// Set default value of max retries as needed
if (oldProp.equals(ReentryProperty.RETRY)
&& !prop.equals(ReentryProperty.RETRY)) {
eventTc.setMaxRetries(null);
} else if (!oldProp.equals(ReentryProperty.RETRY)
&& prop.equals(ReentryProperty.RETRY)) {
eventTc.setMaxRetries(
IEventExecTestCasePO.DEFAULT_MAX_NUM_RETRIES);
}
return true;
}
/**
* {@inheritDoc}
*/
public Object getProperty() {
return getIndexOfType();
}
/**
* {@inheritDoc}
*/
public Image getImage() {
return DEFAULT_IMAGE;
}
/**
* Returns the index of the type from the String-Array for the
* ComboBoxPropertyDescriptor.
* @return an <code>Integer</code> value. The index.
*/
private Integer getIndexOfType() {
IEventExecTestCasePO eventTc = (IEventExecTestCasePO) getPoNode();
final int reentryTypesLength = reentryTypes.length;
for (int i = 0; i < reentryTypesLength; i++) {
if (ReentryProperty.REENTRY_PROP_ARRAY[i].equals(
eventTc.getReentryProp())) {
return Integer.valueOf(i);
}
}
return Integer.valueOf(0);
}
}
/**
* @author BREDEX GmbH
* @created 03.04.2008
*/
private class MaxRetriesController extends AbstractPropertyController {
/**
* {@inheritDoc}
*/
public boolean setProperty(Object value) {
IEventExecTestCasePO eventTc = (IEventExecTestCasePO)getPoNode();
Integer intValue = null;
if (value instanceof Integer) {
intValue = (Integer)value;
} else if (value instanceof String) {
try {
intValue = Integer.parseInt((String)value);
} catch (NumberFormatException nfe) {
return false;
}
} else {
return false;
}
if (intValue >= IEventExecTestCasePO.MIN_VALUE_MAX_NUM_RETRIES
&& intValue <= IEventExecTestCasePO.MAX_VALUE_MAX_NUM_RETRIES) {
if (intValue.equals(eventTc.getMaxRetries())) {
return false;
}
eventTc.setMaxRetries(intValue);
return true;
}
return false;
}
/**
* {@inheritDoc}
*/
public Object getProperty() {
IEventExecTestCasePO eventTc = (IEventExecTestCasePO)getPoNode();
return String.valueOf(eventTc.getMaxRetries());
}
/**
* {@inheritDoc}
*/
public Image getImage() {
return DEFAULT_IMAGE;
}
}
}