*/
package eu.etaxonomy.taxeditor.editor.workingSet.matrix;
-import java.util.Date;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.inject.Inject;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.e4.ui.di.Focus;
+import org.eclipse.e4.ui.di.Persist;
+import org.eclipse.e4.ui.model.application.ui.MDirtyable;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.nebula.widgets.nattable.NatTable;
import org.eclipse.nebula.widgets.nattable.data.IDataProvider;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
+import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
+import eu.etaxonomy.cdm.api.service.IOccurrenceService;
+import eu.etaxonomy.cdm.api.service.IWorkingSetService;
+import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
import eu.etaxonomy.cdm.model.description.SpecimenDescription;
import eu.etaxonomy.cdm.model.description.WorkingSet;
+import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
+import eu.etaxonomy.cdm.model.taxon.Taxon;
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.workbench.part.IE4SavablePart;
/**
* @author pplitzner
* @since Nov 26, 2017
*
*/
-public class CharacterMatrix {
+public class CharacterMatrix implements IE4SavablePart{
private WorkingSet workingSet;
+ private Composite parent;
+
+ private ConversationHolder conversation;
+
+ @Inject
+ private MDirtyable dirty;
+
@PostConstruct
public void create(Composite parent) {
+ if(CdmStore.isActive() && conversation==null){
+ conversation = CdmStore.createConversation();
+ }
+ else{
+ return;
+ }
parent.setLayout(new GridLayout());
+ this.parent = parent;
+ }
+
+
+ public void init(WorkingSet workingSet) {
+ this.workingSet = workingSet;
// create the data provider
- SpecimenColumnPropertyAccessor columnPropertyAccessor = new SpecimenColumnPropertyAccessor(DataSource.getWorkingSet());
- IDataProvider bodyDataProvider = new ListDataProvider<SpecimenDescription>(DataSource.getDescriptions(), columnPropertyAccessor);
+ SpecimenColumnPropertyAccessor columnPropertyAccessor = new SpecimenColumnPropertyAccessor(workingSet);
+ IDataProvider bodyDataProvider = new ListDataProvider<SpecimenDescription>(getDescriptions(workingSet), columnPropertyAccessor);
DataLayer bodyDataLayer = new DataLayer(bodyDataProvider);
SelectionLayer selectionLayer = new SelectionLayer(bodyDataLayer);
GridDataFactory.fillDefaults().grab(true, true).applyTo(natTable);
+ parent.layout();
}
- public void init(WorkingSet workingSet) {
- this.workingSet = workingSet;
- }
-
- public class Person {
- private int id;
- private String name;
- private Date birthDate;
-
- public Person(int id, String name, Date birthDate) {
- this.id = id;
- this.name = name;
- this.birthDate = birthDate;
- }
-
- public int getId() {
- return id;
+ private List<SpecimenDescription> getDescriptions(WorkingSet workingSet) {
+ List<SpecimenDescription> descriptions = new ArrayList<>();
+ Set<TaxonNode> taxonSubtreeFilter = workingSet.getTaxonSubtreeFilter();
+ for (TaxonNode taxonNode : taxonSubtreeFilter) {
+ Taxon taxon = taxonNode.getTaxon();
+ if(taxon!=null){
+ taxon = HibernateProxyHelper.deproxy(taxon, Taxon.class);
+ Collection<SpecimenOrObservationBase> specimens = CdmStore.getService(IOccurrenceService.class).listByAssociatedTaxon(SpecimenOrObservationBase.class, null, taxon, null, null, null, null, null);
+ for (SpecimenOrObservationBase specimen : specimens) {
+ descriptions.addAll(specimen.getSpecimenDescriptions());
+ }
+ }
}
+ return descriptions;
+ }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
+ @Persist
+ @Override
+ public void save(IProgressMonitor monitor) {
+ conversation.commit();
+ CdmStore.getService(IWorkingSetService.class).merge(workingSet, true);
- public void setName(String name) {
- this.name = name;
- }
+ dirty.setDirty(false);
+ }
- public Date getBirthDate() {
- return birthDate;
+ @Focus
+ public void setFocus(){
+ if(conversation!=null){
+ conversation.bind();
}
+ }
- public void setBirthDate(Date birthDate) {
- this.birthDate = birthDate;
+ @PreDestroy
+ public void dispose(){
+ if(conversation!=null){
+ conversation.close();
+ conversation = null;
}
-
}
+
}