*/
package eu.etaxonomy.cdm.vaadin.view.reference;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import eu.etaxonomy.cdm.model.agent.AgentBase;
import eu.etaxonomy.cdm.model.agent.Person;
import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
+import eu.etaxonomy.cdm.model.common.Annotation;
+import eu.etaxonomy.cdm.model.common.AnnotationType;
import eu.etaxonomy.cdm.model.reference.Reference;
import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
import eu.etaxonomy.cdm.service.CdmFilterablePagingProvider;
import eu.etaxonomy.cdm.service.UserHelperAccess;
+import eu.etaxonomy.cdm.vaadin.component.CdmBeanItemContainerFactory;
import eu.etaxonomy.cdm.vaadin.event.EntityChangeEvent;
import eu.etaxonomy.cdm.vaadin.event.ReferenceEditorAction;
import eu.etaxonomy.cdm.vaadin.event.ToOneRelatedEntityButtonUpdater;
});
+ CdmBeanItemContainerFactory selectFieldFactory = new CdmBeanItemContainerFactory(getRepo());
CdmFilterablePagingProvider<Reference, Reference> collectionPagingProvider = pagingProviderFactory.referencePagingProvider();
getView().getInReferenceCombobox().loadFrom(collectionPagingProvider, collectionPagingProvider, collectionPagingProvider.getPageSize());
getView().getInReferenceCombobox().setNestedButtonStateUpdater(new ToOneRelatedEntityButtonUpdater<Reference>(getView().getInReferenceCombobox()));
CdmFilterablePagingProvider<AgentBase, Person> personPagingProvider = new CdmFilterablePagingProvider<AgentBase, Person>(getRepo().getAgentService(), Person.class);
getView().getAuthorshipField().setFilterableTeamPagingProvider(teamOrPersonPagingProvider, this);
getView().getAuthorshipField().setFilterablePersonPagingProvider(personPagingProvider, this);
+
+ getView().getAnnotationsField().setAnnotationTypeItemContainer(selectFieldFactory.buildTermItemContainer(
+ AnnotationType.EDITORIAL().getUuid(), AnnotationType.TECHNICAL().getUuid()));
}
/**
List<String> initStrategy = Arrays.asList(new String []{
- "$"
+ "$",
+ "annotations.*", // needed as log as we are using a table in FilterableAnnotationsField
}
);
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected Reference preSaveBean(Reference bean) {
+
+ // handle annotation changes
+ List<Annotation> annotations = getView().getAnnotationsField().getValue();
+ List<Annotation> currentAnnotations = new ArrayList<>(bean.getAnnotations());
+ List<Annotation> annotationsSeen = new ArrayList<>();
+ for(Annotation a : annotations){
+ if(a == null){
+ continue;
+ }
+ if(!currentAnnotations.contains(a)){
+ bean.addAnnotation(a);
+ }
+ annotationsSeen.add(a);
+ }
+ for(Annotation a : currentAnnotations){
+ if(!annotationsSeen.contains(a)){
+ bean.removeAnnotation(a);
+ }
+ }
+
+
+ return bean;
+ }
+
+
+
}
import com.vaadin.ui.ListSelect;
import com.vaadin.ui.TextField;
+import eu.etaxonomy.cdm.model.common.AnnotationType;
import eu.etaxonomy.cdm.model.reference.Reference;
import eu.etaxonomy.cdm.model.reference.ReferencePropertyDefinitions;
import eu.etaxonomy.cdm.model.reference.ReferencePropertyDefinitions.UnimplemetedCaseException;
import eu.etaxonomy.cdm.model.reference.ReferenceType;
import eu.etaxonomy.cdm.vaadin.component.TextFieldNFix;
+import eu.etaxonomy.cdm.vaadin.component.common.FilterableAnnotationsField;
import eu.etaxonomy.cdm.vaadin.component.common.TeamOrPersonField;
import eu.etaxonomy.cdm.vaadin.component.common.VerbatimTimePeriodField;
import eu.etaxonomy.cdm.vaadin.event.ReferenceEditorAction;
import eu.etaxonomy.cdm.vaadin.permission.AccessRestrictedView;
+import eu.etaxonomy.cdm.vaadin.ui.RegistrationUIDefaults;
import eu.etaxonomy.cdm.vaadin.util.TeamOrPersonBaseCaptionGenerator;
import eu.etaxonomy.cdm.vaadin.util.converter.DoiConverter;
import eu.etaxonomy.cdm.vaadin.util.converter.UriConverter;
private final static int GRID_COLS = 4; // 12 would fits for 2,3, and 4 Components per row
- private final static int GRID_ROWS = 10;
+ private final static int GRID_ROWS = 11;
private ListSelect typeSelect;
private TeamOrPersonField authorshipField;
+ private FilterableAnnotationsField annotationsListField;
+
+ private AnnotationType[] editableAnotationTypes = RegistrationUIDefaults.EDITABLE_ANOTATION_TYPES;
+
private EnumSet<ReferenceType> referenceTypes = EnumSet.allOf(ReferenceType.class);
private static Map<String,String> propertyNameLabelMap = new HashMap<>();
variableGridLastRow = row;
+ row++;
+ annotationsListField = new FilterableAnnotationsField("Editorial notes");
+ annotationsListField.setWidth(100, Unit.PERCENTAGE);
+ annotationsListField.setAnnotationTypesVisible(editableAnotationTypes);
+ addField(annotationsListField, "annotations", 0, row, GRID_COLS-1, row);
+
+
// titleField.setRequired(true);
// publisherField.setRequired(true);
}
/**
- * {@inheritDoc}
+ * {@inheritDoc} // TODO Auto-generated method stub
*/
@Override
public void focusFirst() {
return authorshipField;
}
+ @Override
+ public FilterableAnnotationsField getAnnotationsField() {
+ return annotationsListField;
+ }
+
public void withReferenceTypes(EnumSet<ReferenceType> types){
this.referenceTypes = types;
if(typeSelect != null){
import com.vaadin.ui.ListSelect;
import eu.etaxonomy.cdm.model.reference.Reference;
+import eu.etaxonomy.cdm.vaadin.component.common.FilterableAnnotationsField;
import eu.etaxonomy.cdm.vaadin.component.common.TeamOrPersonField;
import eu.etaxonomy.vaadin.component.ToOneRelatedEntityCombobox;
import eu.etaxonomy.vaadin.mvp.ApplicationView;
public TeamOrPersonField getAuthorshipField();
+ /**
+ * @return
+ */
+ FilterableAnnotationsField getAnnotationsField();
+
}
import eu.etaxonomy.cdm.api.application.CdmRepository;
import eu.etaxonomy.cdm.model.reference.Reference;
+import eu.etaxonomy.cdm.vaadin.component.common.FilterableAnnotationsField;
import eu.etaxonomy.cdm.vaadin.component.common.TeamOrPersonField;
import eu.etaxonomy.cdm.vaadin.view.reference.ReferenceEditorPresenter;
import eu.etaxonomy.cdm.vaadin.view.reference.ReferencePopupEditorView;
return null;
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public FilterableAnnotationsField getAnnotationsField() {
+ return null;
+ }
+
}