import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; import org.vaadin.webcamforvaadin.WebCamForVaadin; import org.vaadin.webcamforvaadin.WebCamListener; import com.github.wolfie.refresher.Refresher; import com.github.wolfie.refresher.Refresher.RefreshListener; import com.productys.eworkshop.composite.controller.IFoController; import com.productys.eworkshop.composite.generic.document.ResourceFactory.DocumentDtoResource; import com.productys.mes.dto.document.DocumentDto; import com.productys.mes.dto.document.TypeCategorieDocumentDto; import com.productys.mes.persistence.entity.type.TypeCategorieDocumentData; import com.productys.mes.persistence.entity.type.TypeDocumentData; import com.vaadin.event.LayoutEvents.LayoutClickEvent; import com.vaadin.event.LayoutEvents.LayoutClickListener; import com.vaadin.terminal.Resource; import com.vaadin.terminal.StreamResource; import com.vaadin.terminal.ThemeResource; import com.vaadin.ui.Alignment; import com.vaadin.ui.Component; import com.vaadin.ui.Embedded; import com.vaadin.ui.VerticalLayout; public class WebCamOperationComposite extends VerticalLayout implements WebCamListener, RefreshListener { private static final long serialVersionUID = 1L; private WebCamForVaadin webcam; private Embedded image; private Refresher refresher; private final IFoController controller; private final VerticalLayout verticalLayout; private final SimpleDateFormat df = new SimpleDateFormat("yyyy_MM_ddHHmmssSSS"); private String path; private final WebCamViewerComposite webCamViewerComposite; public WebCamOperationComposite(IFoController controller, WebCamViewerComposite webCamViewerComposite) { verticalLayout = new VerticalLayout(); verticalLayout.setSizeFull(); setSpacing(false); this.controller = controller; buildRefresher(); verticalLayout.addComponent(refresher); createVerticalClickableLayout(); init(); verticalLayout.addStyleName("layoutWebCam"); addComponent(verticalLayout); setComponentAlignment(verticalLayout, Alignment.TOP_CENTER); setExpandRatio(verticalLayout, 1.0f); setSizeFull(); this.webCamViewerComposite = webCamViewerComposite; setMargin(false, false, false, false); } public void init() { webcam = new WebCamForVaadin(this); webcam.setImmediate(true); String filename = df.format(new Date()) + ".png"; Resource res = new ThemeResource(controller.getPathImageWebCam() + filename); image = new Embedded("", res); verticalLayout.addComponent(webcam); verticalLayout.setExpandRatio(webcam, 1.0f); verticalLayout.setComponentAlignment(webcam, Alignment.TOP_LEFT); } public void loadData() { FileInputStream stream; try { stream = new FileInputStream(new File(controller.getCurrentSuiviOperation().getPathDocument())); DocumentDto dto = new DocumentDto(); dto.setIdTypeDocument(TypeDocumentData.IMAGE.getId()); dto.setMimeType("image/jpeg"); Resource resource = new DocumentDtoResource(stream, dto, controller.getApplication()); image.setSource(resource); verticalLayout.removeComponent(webcam); verticalLayout.addComponent(image); } catch (FileNotFoundException e) { e.printStackTrace(); } } @Override public void onImageReady() { path = getPath(); StreamResource picture = webcam.getPicture(); picture.setCacheTime(0); picture.setMIMEType("image/jpeg"); image.setImmediate(true); image.setMimeType("image/jpeg"); image.setSource(picture); verticalLayout.removeComponent(webcam); verticalLayout.addComponent(image); webCamViewerComposite.getButtonOk().setEnabled(true); File file = new File(controller.getPathImageWebCam()); if (file.exists()) { } else { file.mkdir(); } try { FileUtils.copyInputStreamToFile(picture.getStreamSource().getStream(), new File(path)); controller.getSupervisionActionComposite().getButtonOk().setEnabled(true); } catch (IOException e) { } } private String getPath() { return controller.getPathImageWebCam() + df.format(new Date()) + "_" + controller.getCurrentGammeOperation().getOperation().getNom() + ".png"; } public void buildRefresher() { refresher = new Refresher(); refresher.setImmediate(true); refresher.setRefreshInterval(100); refresher.addListener(this); } @Override public void onError(String errorMessage) { } @Override public void refresh(Refresher source) { } public DocumentDto createDocument() { DocumentDto documentDto = new DocumentDto(); if (StringUtils.isBlank(path)) { documentDto.setPath(controller.getPathImageWebCam()); } else { documentDto.setPath(path); } documentDto.setOperationId(controller.getCurrentIdRessourceHumaine()); documentDto.setDateOperateur(new Date()); documentDto.setIdTypeDocument(TypeDocumentData.IMAGE.getId()); documentDto.setIdSourceGED(2); TypeCategorieDocumentDto dto = new TypeCategorieDocumentDto(); dto.setId(TypeCategorieDocumentData.IMAGE.getId()); documentDto.setCategory(dto); return documentDto; } private void createVerticalClickableLayout() { // Listen for layout click events verticalLayout.addListener(new LayoutClickListener() { @Override public void layoutClick(LayoutClickEvent event) { Component component = verticalLayout.getComponent(1); if (component instanceof WebCamForVaadin) { return; } refreshZone(); } }); } public void refreshZone() { verticalLayout.removeComponent(image); verticalLayout.addComponent(webcam); verticalLayout.setComponentAlignment(webcam, Alignment.TOP_LEFT); verticalLayout.setExpandRatio(webcam, 1.0f); }