private List<DescriptiveStatistics> statistics = new ArrayList<>();
public void addQuantitativeData(QuantitativeData quantitativeData){
- double[] exactValues = quantitativeData.getStatisticalValues().stream()
+ double[] exactValues =
+ quantitativeData.getStatisticalValues().stream()
.filter(value -> value.getType().equals(StatisticalMeasure.EXACT_VALUE()))
- .mapToDouble(value -> value.getValue()).toArray();
+ .mapToDouble(value -> value.getValue().doubleValue()).toArray();
+
+
//if there are exact values we use those
if (exactValues.length > 0) {
statistics.add(new DescriptiveStatistics(exactValues));
List<SpecimenNodeWrapper> result = new ArrayList<>();
Collection<SpecimenNodeWrapper> specimenCache = matrix.getSpecimenCache();
String text = txtTextFilter.getText();
+
+ //filter for treeIndex is missing
if(CdmUtils.isBlank(text)){
result = new ArrayList<>(specimenCache);
}
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.window.Window;
-import eu.etaxonomy.cdm.api.service.dto.SpecimenRowWrapperDTO;
import eu.etaxonomy.cdm.persistence.dto.SpecimenNodeWrapper;
import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
import eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix.CharacterMatrix;
@CanExecute
public boolean canExecute(@Named(IServiceConstants.ACTIVE_PART)MPart activePart,
MHandledMenuItem menuItem){
- CharacterMatrixPart matrixPart = (CharacterMatrixPart) activePart.getObject();
- IStructuredSelection selection = matrixPart.getSelection();
- boolean canExecute = (selection.isEmpty() ||
- !(selection.getFirstElement() instanceof SpecimenRowWrapperDTO) );
-
- return canExecute;
+// CharacterMatrixPart matrixPart = (CharacterMatrixPart) activePart.getObject();
+// IStructuredSelection selection = matrixPart.getSelection();
+// boolean canExecute = (selection.isEmpty() ||
+// !(selection.getFirstElement() instanceof SpecimenRowWrapperDTO) );
+//
+// return canExecute;
+ return true;
}
}
*/
package eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix.quantitative;
+import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
//add existing exact values
editorValue.getStatisticalValues().stream()
.filter(measure->measure.getType().equals(StatisticalMeasure.EXACT_VALUE()))
- .forEach(exact->addText(valuesComposite, exact.getType(), Float.toString(exact.getValue())));
+ .forEach(exact->addText(valuesComposite, exact.getType(), exact.getValue().toString()));
+
+
//add aggregation values
editorValue.getFeature().getRecommendedStatisticalMeasures()
.stream()
.filter(sm->!sm.equals(StatisticalMeasure.EXACT_VALUE()))
.forEach(measure->{
- Float specificStatisticalValue = editorValue.getSpecificStatisticalValue(measure);
- addText(valuesComposite, measure, specificStatisticalValue!=null?Float.toString(specificStatisticalValue):null);
+ BigDecimal specificStatisticalValue = editorValue.getSpecificStatisticalValue(measure);
+ addText(valuesComposite, measure, specificStatisticalValue!=null?specificStatisticalValue.toString():null);
});
scrolledComposite_1.setContent(valuesComposite);
--- /dev/null
+/**
+* Copyright (C) 2020 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.taxeditor.ui.element;
+
+import java.math.BigDecimal;
+
+import org.apache.commons.lang.StringUtils;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * @author k.luther
+ * @since May 27, 2020
+ */
+public class BigDecimalWithLabelElement extends NumberWithLabelElement {
+
+
+ public BigDecimalWithLabelElement(CdmFormFactory toolkit, ICdmFormElement parentElement, String labelString,
+ Number initialNumber, int style) {
+ super(toolkit, parentElement, labelString, initialNumber, style);
+
+ }
+
+ private BigDecimal start;
+ private BigDecimal end;
+
+ @Override
+ public void modifyText(ModifyEvent event) {
+ String value = text.getText();
+ if(StringUtils.isBlank(value)){
+ text.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
+ super.modifyText(event);
+ return;
+ }
+
+ try{
+ BigDecimal number = new BigDecimal(value);
+ if((start != null && number.compareTo(start) < 0 || (end != null && number.compareTo(end) > 0))){
+ exception = new NumberFormatException("You entered a number that is not within the allowed bounds.");
+ throw exception;
+ }
+ }catch(NumberFormatException e){
+ text.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
+ firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
+ exception = e;
+ return;
+ }
+
+ exception = null;
+ text.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
+
+ super.modifyText(event);
+ }
+
+ /**
+ * <p>setLimits</p>
+ *
+ * @param numberOfDigits a int.
+ * @param start a {@link java.lang.Integer} object.
+ * @param end a {@link java.lang.Integer} object.
+ */
+
+ public void setLimits(int numberOfDigits, BigDecimal start, BigDecimal end){
+ text.setTextLimit(numberOfDigits);
+ this.start = start;
+ this.end = end;
+ }
+
+ public BigDecimal getBigDecimal(){
+ String text = super.getText();
+ try {
+ return StringUtils.isBlank(text) ? null : new BigDecimal(text);
+ } catch (NumberFormatException e) {
+ exception = e;
+ }
+ return null;
+ }
+
+}
* {@link eu.etaxonomy.taxeditor.ui.element.NumberWithLabelElement}
* object.
*/
- public NumberWithLabelElement createNumberTextWithLabelElement(
+ public FloatWithLabelElement createFloatTextWithLabelElement(
ICdmFormElement parentElement, String labelString,
Number initialNumber, int style) {
- NumberWithLabelElement element = new NumberWithLabelElement(this,
+ FloatWithLabelElement element = new FloatWithLabelElement(this,
parentElement, labelString, initialNumber, style);
adapt(element);
parentElement.addElement(element);
return element;
}
+ public BigDecimalWithLabelElement createBigDecimalTextWithLabelElement(
+ ICdmFormElement parentElement, String labelString,
+ Number initialNumber, int style) {
+ BigDecimalWithLabelElement element = new BigDecimalWithLabelElement(this,
+ parentElement, labelString, initialNumber, style);
+ adapt(element);
+ parentElement.addElement(element);
+ return element;
+ }
+
public LanguageStringWithLabelElement createLanguageStringWithLabelElement(ICdmFormElement parentElement,
String labelString, LanguageString languageString, int style) {
return createLanguageStringWithLabelElement(parentElement, labelString, languageString, null, false, style);
public <T extends IEnumTerm<T>> EnumComboElement<T> createEnumComboElement(
Class<T> enumComboType, ICdmFormElement parentElement,
- int style) {
- return createEnumComboElement(enumComboType, parentElement, null, style);
+ int style, boolean hasNullValue) {
+ return createEnumComboElement(enumComboType, parentElement, null, style, hasNullValue);
}
+ public <T extends IEnumTerm<T>> EnumComboElement<T> createEnumComboElement(
+ Class<T> enumComboType, ICdmFormElement parentElement,
+ int style) {
+ return createEnumComboElement(enumComboType, parentElement, null, style, false);
+ }
public <T extends IEnumTerm<T>> EnumComboElement<T> createEnumComboElement(
Class<T> enumComboType, ICdmFormElement parentElement, Comparator<T> comparator,
- int style) {
- EnumComboElement<T> element = new EnumComboElement<T>(this, parentElement, enumComboType, comparator, style);
+ int style, boolean hasNullValue) {
+ EnumComboElement<T> element = new EnumComboElement<T>(this, parentElement, enumComboType, comparator, style, hasNullValue);
adapt(element);
parentElement.addElement(element);
return element;
--- /dev/null
+/**
+* Copyright (C) 2020 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.taxeditor.ui.element;
+
+import org.apache.commons.lang.StringUtils;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * @author k.luther
+ * @since May 27, 2020
+ */
+public class FloatWithLabelElement extends NumberWithLabelElement {
+
+ private Float start;
+ private Float end;
+
+
+ public FloatWithLabelElement(CdmFormFactory toolkit, ICdmFormElement parentElement, String labelString,
+ Number initialNumber, int style) {
+ super(toolkit, parentElement, labelString, initialNumber, style);
+
+ }
+
+
+ @Override
+ public void modifyText(ModifyEvent event) {
+ String value = text.getText();
+ if(StringUtils.isBlank(value)){
+ text.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
+ super.modifyText(event);
+ return;
+ }
+
+ try{
+ Float number = Float.parseFloat(value);
+ if((start != null && number < start) || (end != null && number > end)){
+ exception = new NumberFormatException("You entered a number that is not within the allowed bounds.");
+ throw exception;
+ }
+ }catch(NumberFormatException e){
+ text.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
+ firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
+ exception = e;
+ return;
+ }
+
+ exception = null;
+ text.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
+
+ super.modifyText(event);
+ }
+
+ /**
+ * <p>setLimits</p>
+ *
+ * @param numberOfDigits a int.
+ * @param start a {@link java.lang.Float} object.
+ * @param end a {@link java.lang.Float} object.
+ */
+ public void setLimits(int numberOfDigits, Float start, Float end){
+ text.setTextLimit(numberOfDigits);
+ this.start = start;
+ this.end = end;
+ }
+
+
+ public void setLimits(int numberOfDigits, Integer start, Integer end){
+ setLimits(numberOfDigits, start.floatValue(), end.floatValue());
+ }
+}
switch(unitType) {
case ELEVATION:
- text_minVal = formFactory.createNumberTextWithLabelElement(this, "Min [m] : ", getMinimum(), style);
- text_maxVal = formFactory.createNumberTextWithLabelElement(this, "Max [m] : ", getMaximum(), style);
+ text_minVal = formFactory.createFloatTextWithLabelElement(this, "Min [m] : ", getMinimum(), style);
+ text_maxVal = formFactory.createFloatTextWithLabelElement(this, "Max [m] : ", getMaximum(), style);
break;
default:
- text_minVal = formFactory.createNumberTextWithLabelElement(this, "Min [m] : ", getMinimum(), style);
- text_maxVal = formFactory.createNumberTextWithLabelElement(this, "Max [m] : ", getMaximum(), style);
+ text_minVal = formFactory.createFloatTextWithLabelElement(this, "Min [m] : ", getMinimum(), style);
+ text_maxVal = formFactory.createFloatTextWithLabelElement(this, "Max [m] : ", getMaximum(), style);
break;
}
text_freeText = formFactory.createTextWithLabelElement(this,
package eu.etaxonomy.taxeditor.ui.element;
import org.apache.commons.lang.StringUtils;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.widgets.Display;
/**
* @author n.hoffmann
* @created Mar 22, 2010
*/
-public class NumberWithLabelElement extends TextWithLabelElement {
+public abstract class NumberWithLabelElement extends TextWithLabelElement {
- private Float start;
- private Float end;
- private NumberFormatException exception;
+ protected NumberFormatException exception;
/**
* <p>Constructor for NumberWithLabelElement.</p>
return null;
}
- /** {@inheritDoc} */
- @Override
- public void modifyText(ModifyEvent event) {
- String value = text.getText();
- if(StringUtils.isBlank(value)){
- text.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
- super.modifyText(event);
- return;
- }
-
- try{
- Float number = Float.parseFloat(value);
- if((start != null && number < start) || (end != null && number > end)){
- exception = new NumberFormatException("You entered a number that is not within the allowed bounds.");
- throw exception;
- }
- }catch(NumberFormatException e){
- text.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
- firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
- exception = e;
- return;
- }
- exception = null;
- text.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
- super.modifyText(event);
- }
- /**
- * <p>setLimits</p>
- *
- * @param numberOfDigits a int.
- * @param start a {@link java.lang.Integer} object.
- * @param end a {@link java.lang.Integer} object.
- */
- public void setLimits(int numberOfDigits, Integer start, Integer end){
- setLimits(numberOfDigits, start.floatValue(), end.floatValue());
- }
-
- /**
- * <p>setLimits</p>
- *
- * @param numberOfDigits a int.
- * @param start a {@link java.lang.Float} object.
- * @param end a {@link java.lang.Float} object.
- */
- public void setLimits(int numberOfDigits, Float start, Float end){
- text.setTextLimit(numberOfDigits);
- this.start = start;
- this.end = end;
- }
/**
* <p>Getter for the field <code>exception</code>.</p>
public class PartialElement extends AbstractCdmFormElement implements ISelectable {
private Label label;
- private NumberWithLabelElement number_day;
- private NumberWithLabelElement number_month;
- private NumberWithLabelElement number_year;
+ private FloatWithLabelElement number_day;
+ private FloatWithLabelElement number_month;
+ private FloatWithLabelElement number_year;
private Partial partial;
/**
label = formFactory.createLabel(getLayoutComposite(), labelString);
addControl(label);
- number_year = formFactory.createNumberTextWithLabelElement(this, "Year", null, style);
+ number_year = formFactory.createFloatTextWithLabelElement(this, "Year", null, style);
number_year.setLimits(4, 0, 9999);
- number_month = formFactory.createNumberTextWithLabelElement(this, "Month", null, style);
+ number_month = formFactory.createFloatTextWithLabelElement(this, "Month", null, style);
number_month.setLimits(2, 1, 12);
- number_day = formFactory.createNumberTextWithLabelElement(this, "Day", null, style);
+ number_day = formFactory.createFloatTextWithLabelElement(this, "Day", null, style);
number_day.setLimits(2, 1, 31);
text_longitudeParsed = formFactory.createTextWithLabelElement(
formElement, "", null, style);
text_longitudeParsed.setEnabled(false);
- number_errorRadius = formFactory.createNumberTextWithLabelElement(
+ number_errorRadius = formFactory.createFloatTextWithLabelElement(
formElement, "Error Radius (m)", null, style);
combo_referenceSystem = formFactory.createDefinedTermComboElement(TermType.ReferenceSystem,
formElement, "Reference System", null, style);
* @return a {@link java.lang.String} object.
*/
public String getText() {
-
- return CdmUtils.Nb(text.getText());
+ if (!text.isDisposed()){
+ return CdmUtils.Nb(text.getText());
+ }else{
+ return null;
+ }
}
/**
package eu.etaxonomy.taxeditor.ui.section.description;
+import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Set;
import eu.etaxonomy.taxeditor.store.StoreUtil;
import eu.etaxonomy.taxeditor.ui.combo.term.TermComboElement;
import eu.etaxonomy.taxeditor.ui.element.AbstractFormSection;
+import eu.etaxonomy.taxeditor.ui.element.BigDecimalWithLabelElement;
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
-import eu.etaxonomy.taxeditor.ui.element.NumberWithLabelElement;
import eu.etaxonomy.taxeditor.ui.section.AbstractEntityCollectionElement;
/**
public class StatisticalMeasurementValueElement extends
AbstractEntityCollectionElement<StatisticalMeasurementValue> {
- private NumberWithLabelElement number_value;
+ private BigDecimalWithLabelElement number_value;
private TermComboElement<StatisticalMeasure> combo_type;
private ModifierSection section_modifiers;
/** {@inheritDoc} */
@Override
public void createControls(ICdmFormElement element, int style) {
- number_value = formFactory.createNumberTextWithLabelElement(element, "Value", 0, style);
+ number_value = formFactory.createBigDecimalTextWithLabelElement(element, "Value", 0, style);
combo_type = formFactory.createDefinedTermComboElement(TermType.StatisticalMeasure, element, "Statistical Measure", null, style);
section_modifiers = formFactory.createModifierSection(getConversationHolder(), element, StoreUtil.getSectionStyle(ModifierSection.class, StatisticalMeasurementValue.class.getCanonicalName()));
section_modifiers.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
@Override
public void handleEvent(Object eventSource) {
if(eventSource == number_value){
- Float floatNumber = number_value.getFloat();
- if(floatNumber==null){
+ BigDecimal bigDecimalNumber = number_value.getBigDecimal();
+ if(bigDecimalNumber==null){
String zero = "0.0";
- floatNumber = new Float(zero);
+ bigDecimalNumber = new BigDecimal(zero);
number_value.setText(zero);
}
- getEntity().setValue(floatNumber);
+ getEntity().setValue(bigDecimalNumber);
}
else if(eventSource == combo_type){
getEntity().setType(combo_type.getSelection());
PolytomousKey entity, int style) {
textLabel = formFactory.createTextWithLabelElement(formElement, "Title", entity.getTitleCache(), style);
- numberStartNumber = formFactory.createNumberTextWithLabelElement(formElement, "Start Number", entity.getStartNumber(), style);
+ numberStartNumber = formFactory.createFloatTextWithLabelElement(formElement, "Start Number", entity.getStartNumber(), style);
sectionTaxonomicScope = formFactory.createTaxonomicScopeSection(getConversationHolder(), formElement, StoreUtil.getSectionStyle(TaxonomicScopeSection.class, entity.getClass().getCanonicalName()));
sectionTaxonomicScope.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
PolytomousKeyNode entity, int style) {
if (!entity.isLeaf()) {
NumberWithLabelElement number_nodeNumber = formFactory
- .createNumberTextWithLabelElement(formElement,
+ .createFloatTextWithLabelElement(formElement,
"Node Number", entity.getNodeNumber(), style);
number_nodeNumber.setEnabled(false);
}
this.parentFormElement = formElement;
this.style = style;
- text_height = formFactory.createNumberTextWithLabelElement(formElement, "Height", null, style);
+ text_height = formFactory.createFloatTextWithLabelElement(formElement, "Height", null, style);
text_height.setEnabled(false);
- text_width = formFactory.createNumberTextWithLabelElement(formElement, "Width", null, style);
+ text_width = formFactory.createFloatTextWithLabelElement(formElement, "Width", null, style);
text_width.setEnabled(false);
element_keyValue = formFactory.createKeyValueViewerElement(formElement, "Key", "Value", null);
}
@Override
public void createControls(ICdmFormElement element, int style) {
text_uri = formFactory.createUriWithLabelElement(element, "URI", null, style);
- text_size = formFactory.createNumberTextWithLabelElement(element, "Size", null, style);
+ text_size = formFactory.createFloatTextWithLabelElement(element, "Size", null, style);
text_size.setEnabled(false);
}
addElement(selectionExCombinationAuthor);
if (code != null){
if (code.equals(NomenclaturalCode.ICZN)){
- text_publicationYear = formFactory.createNumberTextWithLabelElement(formElement, "Publication Year", ((IZoologicalName)entity).getPublicationYear(), style);
+ text_publicationYear = formFactory.createFloatTextWithLabelElement(formElement, "Publication Year", ((IZoologicalName)entity).getPublicationYear(), style);
}
}
if (code != null){
if (code.equals(NomenclaturalCode.ICZN)){
- text_originalPublicationYear = formFactory.createNumberTextWithLabelElement(formElement, "Orig. Publication Year", ((IZoologicalName)entity).getOriginalPublicationYear(), style);
+ text_originalPublicationYear = formFactory.createFloatTextWithLabelElement(formElement, "Orig. Publication Year", ((IZoologicalName)entity).getOriginalPublicationYear(), style);
}
}
super(formFactory, formElement);
this.textRuleConsidered = formFactory.createTextWithLabelElement(formElement, "Rule Considered", null, style);
if(isShowCodeEdition){
- this.nomenclaturalCodeEdition = formFactory.createEnumComboElement(NomenclaturalCodeEdition.class, formElement, null, style);
+ this.nomenclaturalCodeEdition = formFactory.createEnumComboElement(NomenclaturalCodeEdition.class, formElement, style);
nomenclaturalCodeEdition.addSelectionListener(this);
nomenclaturalCodeEdition.setIndent(10);
OrderedTerm qualityTerm = dnaQuality.getQualityTerm();
textPurificationMethod = formFactory.createTextWithLabelElement(formElement, "DNA Purification Details", dnaQuality.getPurificationMethod(), style);
- numberRatioOfAbsorbance260_280 = formFactory.createNumberTextWithLabelElement(formElement, "Ratio of absorbance 260-280", ratioOfAbsorbance260_280, style);
- numberRatioOfAbsorbance260_230 = formFactory.createNumberTextWithLabelElement(formElement, "Ratio of absorbance 260-230", ratioOfAbsorbance260_230, style);
- numberConcentration = formFactory.createNumberTextWithLabelElement(formElement, "Concentration", concentration, style);
+ numberRatioOfAbsorbance260_280 = formFactory.createFloatTextWithLabelElement(formElement, "Ratio of absorbance 260-280", ratioOfAbsorbance260_280, style);
+ numberRatioOfAbsorbance260_230 = formFactory.createFloatTextWithLabelElement(formElement, "Ratio of absorbance 260-230", ratioOfAbsorbance260_230, style);
+ numberConcentration = formFactory.createFloatTextWithLabelElement(formElement, "Concentration", concentration, style);
comboQualityTerm = formFactory.createDefinedTermComboElement(TermType.DnaQualityType, formElement, "Quality Term", qualityTerm, style);
DateTime qualityCheckedDate = dnaQuality.getQualityCheckDate();
selectionStaff = formFactory.createSelectionElement(AgentBase.class, //getConversationHolder(),
formElement, "Staff", staff, EntitySelectionElement.ALL, style);
datePreparationDate = formFactory.createTimePeriodElement(formElement, "Preparation date", preparationDate, style);
- numberPreservationTemperature = formFactory.createNumberTextWithLabelElement(formElement, "Preservation Temp. [C°]", temperature, style);
+ numberPreservationTemperature = formFactory.createFloatTextWithLabelElement(formElement, "Preservation Temp. [C°]", temperature, style);
txtMaterialOrMethods = formFactory.createTextWithLabelElement(formElement, "Materials && Methods", materialOrMethodText, style);
}