ref #7095 Fix potential NPE
authorPatrick Plitzner <p.plitzner@bgbm.org>
Mon, 15 Jan 2018 14:15:43 +0000 (15:15 +0100)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Mon, 15 Jan 2018 14:15:43 +0000 (15:15 +0100)
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/workingSet/matrix/CharacterMatrix.java

index 58dc28662fa1d89a0e87e514360f93ce7c8a5479..a46e48d3fe22e73f1ca9c3635aa697f7422df343 100644 (file)
@@ -30,6 +30,7 @@ import javax.inject.Inject;
 
 import org.apache.commons.collections4.map.LinkedMap;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.e4.ui.di.Focus;
 import org.eclipse.e4.ui.di.Persist;
 import org.eclipse.e4.ui.model.application.ui.MDirtyable;
@@ -52,7 +53,6 @@ import org.eclipse.nebula.widgets.nattable.data.IDataProvider;
 import org.eclipse.nebula.widgets.nattable.data.ListDataProvider;
 import org.eclipse.nebula.widgets.nattable.edit.EditConfigAttributes;
 import org.eclipse.nebula.widgets.nattable.edit.editor.IComboBoxDataProvider;
-import org.eclipse.nebula.widgets.nattable.export.command.ExportCommand;
 import org.eclipse.nebula.widgets.nattable.export.command.ExportCommandHandler;
 import org.eclipse.nebula.widgets.nattable.extension.glazedlists.GlazedListsEventLayer;
 import org.eclipse.nebula.widgets.nattable.extension.glazedlists.GlazedListsSortModel;
@@ -106,17 +106,27 @@ import ca.odell.glazedlists.GlazedLists;
 import ca.odell.glazedlists.SortedList;
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
+import eu.etaxonomy.cdm.api.service.ITaxonService;
 import eu.etaxonomy.cdm.api.service.IWorkingSetService;
+import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
 import eu.etaxonomy.cdm.model.common.TermVocabulary;
+import eu.etaxonomy.cdm.model.description.CategoricalData;
 import eu.etaxonomy.cdm.model.description.DescriptionBase;
 import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
 import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.description.FeatureTree;
+import eu.etaxonomy.cdm.model.description.IndividualsAssociation;
 import eu.etaxonomy.cdm.model.description.MeasurementUnit;
+import eu.etaxonomy.cdm.model.description.QuantitativeData;
 import eu.etaxonomy.cdm.model.description.SpecimenDescription;
 import eu.etaxonomy.cdm.model.description.State;
+import eu.etaxonomy.cdm.model.description.TaxonDescription;
 import eu.etaxonomy.cdm.model.description.WorkingSet;
+import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
+import eu.etaxonomy.cdm.model.name.Rank;
+import eu.etaxonomy.cdm.model.name.TaxonName;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
+import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
 import eu.etaxonomy.taxeditor.editor.workingSet.matrix.categorical.CategoricalDataCellEditor;
 import eu.etaxonomy.taxeditor.editor.workingSet.matrix.categorical.CategoricalDataDisplayConverter;
@@ -210,6 +220,10 @@ public class CharacterMatrix implements IE4SavablePart, IPartContentHasDetails,
 
         //get features/columns stored in working set
         FeatureTree tree = workingSet.getDescriptiveSystem();
+        if(tree==null){
+            MessagingUtils.informationDialog("Initialization failed", "Working set has no feature tree set.");
+            return;
+        }
         List<Feature> features = new ArrayList<>(tree.getDistinctFeatures());
         Collections.sort(features);
 
@@ -544,10 +558,20 @@ public class CharacterMatrix implements IE4SavablePart, IPartContentHasDetails,
         btnExcelExport.addSelectionListener(new SelectionAdapter() {
             @Override
             public void widgetSelected(SelectionEvent e) {
-                natTable.doCommand(
-                        new ExportCommand(
-                                natTable.getConfigRegistry(),
-                                natTable.getShell()));
+                Taxon taxon = Taxon.NewInstance(TaxonName.NewInstance(NomenclaturalCode.ICNAFP, Rank.GENUS(), "Generatus", null, null, null, null, null, null, null), null);
+                TaxonDescription description = TaxonDescription.NewInstance(taxon);
+                new SpecimenGenerator().generate().forEach(specimen ->
+                {
+                    IndividualsAssociation association = IndividualsAssociation.NewInstance(specimen);
+                    association.setFeature(Feature.SPECIMEN());
+                    description.addElement(association);
+                });
+                CdmStore.getService(ITaxonService.class).save(taxon);
+                save(new NullProgressMonitor());
+//                natTable.doCommand(
+//                        new ExportCommand(
+//                                natTable.getConfigRegistry(),
+//                                natTable.getShell()));
             }
         });
 
@@ -597,7 +621,12 @@ public class CharacterMatrix implements IE4SavablePart, IPartContentHasDetails,
             for (SpecimenDescription specimenDescription : descriptions) {
                 Set<Feature> specimenDescriptionFeatures = new HashSet<>();
                 for (DescriptionElementBase descriptionElementBase : specimenDescription.getElements()) {
-                    specimenDescriptionFeatures.add(descriptionElementBase.getFeature());
+                    specimenDescriptionFeatures.add(HibernateProxyHelper.deproxy(descriptionElementBase.getFeature(), Feature.class));
+                }
+                for(Feature feature:features){
+                    eu.etaxonomy.cdm.model.description.Character character = HibernateProxyHelper.deproxy(feature, eu.etaxonomy.cdm.model.description.Character.class);
+                    System.out.println();
+
                 }
                 if(specimenDescriptionFeatures.containsAll(features)){
                     return specimenDescription;
@@ -607,6 +636,15 @@ public class CharacterMatrix implements IE4SavablePart, IPartContentHasDetails,
         //Create new specimen description if no match was found
         setDirty();
         SpecimenDescription newDesription = SpecimenDescription.NewInstance(specimen);
+        this.indexToFeatureMap.values().forEach(feature ->
+        {
+            if(feature.isSupportsCategoricalData()){
+                newDesription.addElement(CategoricalData.NewInstance(feature));
+            }
+            else if(feature.isSupportsQuantitativeData()){
+                newDesription.addElement(QuantitativeData.NewInstance(feature));
+            }
+        });
         newDesription.setTitleCache("WorkingSet "+workingSet.getLabel()+" "+newDesription.generateTitle(), true);
         return newDesription;