package com.constellio.app.ui.framework.components;
import com.constellio.app.ui.application.ConstellioUI;
import com.constellio.app.ui.entities.MetadataVO;
import com.constellio.app.ui.entities.MetadataValueVO;
import com.constellio.app.ui.entities.RecordVO;
import com.constellio.app.ui.framework.components.fields.comment.RecordCommentsEditorImpl;
import com.vaadin.ui.Component;
import com.vaadin.ui.Label;
import com.vaadin.ui.VerticalLayout;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
@SuppressWarnings("serial")
public class RecordDisplay extends BaseDisplay {
public static final String STYLE_NAME = "record-display";
private RecordVO recordVO;
private MetadataDisplayFactory metadataDisplayFactory;
public RecordDisplay(RecordVO recordVO) {
this(recordVO, new MetadataDisplayFactory(), STYLE_NAME);
}
public RecordDisplay(RecordVO recordVO, MetadataDisplayFactory metadataDisplayFactory) {
this(recordVO, metadataDisplayFactory, STYLE_NAME);
}
public RecordDisplay(RecordVO recordVO, MetadataDisplayFactory metadataDisplayFactory, String styleName) {
super(toCaptionsAndComponents(recordVO, metadataDisplayFactory));
this.recordVO = recordVO;
this.metadataDisplayFactory = metadataDisplayFactory;
addStyleName(styleName);
}
private static List<CaptionAndComponent> toCaptionsAndComponents(RecordVO recordVO,
MetadataDisplayFactory metadataDisplayFactory) {
List<CaptionAndComponent> captionsAndComponents = new ArrayList<CaptionAndComponent>();
Locale locale = ConstellioUI.getCurrentSessionContext().getCurrentLocale();
for (MetadataValueVO metadataValue : recordVO.getDisplayMetadataValues()) {
Component displayComponent = metadataDisplayFactory.build(recordVO, metadataValue);
if (displayComponent != null) {
MetadataVO metadata = metadataValue.getMetadata();
String caption = metadata.getLabel(locale);
Label captionLabel = new Label(caption);
String captionId = STYLE_CAPTION + "-" + metadata.getCode();
captionLabel.setId(captionId);
captionLabel.addStyleName(captionId);
captionLabel.setVisible(displayComponent.isVisible());
String valueId = STYLE_VALUE + "-" + metadata.getCode();
displayComponent.setId(valueId);
displayComponent.addStyleName(valueId);
captionsAndComponents.add(new CaptionAndComponent(captionLabel, displayComponent));
}
}
return captionsAndComponents;
}
public final RecordVO getRecordVO() {
return recordVO;
}
public final void setRecordVO(RecordVO recordVO) {
this.recordVO = recordVO;
}
@Override
protected void addCaptionAndDisplayComponent(Label captionLabel, Component displayComponent) {
if (displayComponent instanceof RecordCommentsEditorImpl) {
VerticalLayout verticalLayout = new VerticalLayout(displayComponent);
verticalLayout.addStyleName("record-comments-layout");
verticalLayout.setWidth("100%");
verticalLayout.setSpacing(true);
verticalLayout.addStyleName("record-comments-editor");
mainLayout.addComponent(verticalLayout);
} else {
super.addCaptionAndDisplayComponent(captionLabel, displayComponent);
}
}
public void refresh() {
setCaptionsAndComponents(toCaptionsAndComponents(this.recordVO, metadataDisplayFactory));
}
}