All Downloads are FREE. Search and download functionalities are using the official Maven repository.

br.com.jarch.faces.migration.MigrationController Maven / Gradle / Ivy

package br.com.jarch.faces.migration;

import br.com.jarch.core.annotation.JArchViewScoped;
import br.com.jarch.faces.util.JavaScriptUtils;
import br.com.jarch.core.migration.Migrated;
import br.com.jarch.core.migration.MigrationService;
import br.com.jarch.core.model.ICrudEntity;
import br.com.jarch.core.model.IIdentity;
import br.com.jarch.core.util.BundleUtils;
import br.com.jarch.util.LogUtils;
import br.com.jarch.core.type.FileType;
import org.apache.commons.io.FileUtils;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.event.SelectEvent;
import org.primefaces.event.TransferEvent;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.DualListModel;
import org.primefaces.model.StreamedContent;
import org.primefaces.model.file.UploadedFile;

import javax.annotation.PostConstruct;
import javax.inject.Inject;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.util.*;
import java.util.stream.Collectors;

@JArchViewScoped
public class MigrationController implements Serializable {
	private DualListModel listTypeMigration;
	private DualListModel listTypeRestore;
	private DualListModel listMigration;

	private List listData;

	private Migrated migrated;

	private File file;
	private UploadedFile uploadedFile;

	private Map mapa;

	@Inject
	private MigrationService migrationService;

	@PostConstruct
	public void init(){
		mapa = new HashMap<>();

		listMigration = new DualListModel(new ArrayList<>(), new ArrayList<>());
		listTypeMigration = new DualListModel(new ArrayList<>(), new ArrayList<>());
		listTypeRestore = new DualListModel(new ArrayList<>(), new ArrayList<>());

		List lista = new ArrayList<>();
		for(Class clazz: migrationService.pesquisaEntidades()){
			if (mapa.get(clazz.getSimpleName()) == null) {
				try {
                    ICrudEntity instance = (ICrudEntity) clazz.getConstructor().newInstance();
					Migrated migrated = new Migrated(instance);
					mapa.put(clazz.getSimpleName(), migrated);

					lista.add(migrated);
				} catch (Exception ex) {
					LogUtils.generate(ex);
				}
			}
		}

		lista = lista
				.stream()
				.sorted(Comparator.comparing(Migrated::getNameClassEntity))
				.collect(Collectors.toList());

		listTypeMigration.getSource().addAll(lista);
		listTypeRestore.getSource().addAll(lista);
	}

	public StreamedContent migraDados() throws IOException {
		if (listTypeMigration.getTarget().isEmpty()){
			JavaScriptUtils.showMessageHeaderError(BundleUtils.messageBundle("message.obrigatorioSelecionarPeloMenosUmaEntidade"));
			return null;
		}

		InputStream inputStream = migrationService.migraDados(listTypeMigration.getTarget());
		return DefaultStreamedContent.builder().stream(() -> inputStream).contentEncoding(FileType.ZIP.getContentType()).name("migracao.zip").build();
	}

	public void restauraDados() throws IOException {
		if (listTypeRestore.getTarget().isEmpty()){
			JavaScriptUtils.showMessageHeaderError(BundleUtils.messageBundle("message.obrigatorioSelecionarPeloMenosUmaEntidade"));
			return;
		}

		migrationService.restauraDados(listTypeRestore.getTarget(), file);
	}

	public void onSelect(SelectEvent event) {
		listMigration = new DualListModel(new ArrayList<>(), new ArrayList<>());
		migrated = preencheLista((Migrated) event.getObject());
	}

	public void onTransferEntity(TransferEvent event) {
		for (Object item : event.getItems()) {
			if (event.isAdd()) {
				listTypeMigration.getSource().remove(item);
				listTypeMigration.getTarget().add(item);

				Migrated migratedItem = (Migrated) item;
				preencheLista(migratedItem);

				if (migratedItem.getListSelected().isEmpty()){
					migratedItem.getListSelected().addAll(migratedItem.getListAvailable());
					migratedItem.getListAvailable().clear();
				}
			} else {
				listTypeMigration.getSource().add(item);
				listTypeMigration.getTarget().remove(item);
			}
		}
	}

	public Migrated preencheLista(Migrated migratedSelected){
		try {
			if (migratedSelected.getListAvailable().isEmpty()) {
				migratedSelected
						.getRepository()
						.searchAll()
						.stream()
						.forEach(entity -> migratedSelected.getListAvailable().add((ICrudEntity) entity));

				List lista = new ArrayList<>(migratedSelected.getListAvailable());
				migratedSelected.getListAvailable().clear();
				for (ICrudEntity item: lista){
					IIdentity entity = migratedSelected
							.getRepository()
							.searchOneAndInitializeCollectionsBy(item.getId());

					migratedSelected.getListAvailable().add((ICrudEntity) entity);
				}
			}

			List listaFiltrada = migratedSelected
					.getListAvailable()
					.stream()
					.filter(item -> !migratedSelected.getListSelected().contains(item))
					.sorted((m1, m2) -> m1.toString().compareTo(m2.toString()))
					.collect(Collectors.toList());

			listMigration = new DualListModel(listaFiltrada, migratedSelected.getListSelected());
		} catch (Exception ex){
			LogUtils.generate(ex);
		}

		return migratedSelected;
	}

	public void onTransferDados(TransferEvent event) {
		for (Object item : event.getItems()) {
			if (event.isAdd()) {
				migrated.getListSelected().add((ICrudEntity) item);

			} else {
				migrated.getListSelected().remove(item);
			}
		}
	}

	public DualListModel getListMigration() {
		return listMigration;
	}

	public void setListMigration(DualListModel listMigration) {
		this.listMigration = listMigration;
	}

	public List getListData() {
		return listData;
	}

	public void setListData(List listData) {
		this.listData = listData;
	}

	public DualListModel getListTypeMigration() {
		return listTypeMigration;
	}

	public void setListTypeMigration(DualListModel listTypeMigration) {
		this.listTypeMigration = listTypeMigration;
	}

	public DualListModel getListTypeRestore() {
		return listTypeRestore;
	}

	public void setListTypeRestore(DualListModel listTypeRestore) {
		this.listTypeRestore = listTypeRestore;
	}

	public boolean isArquivoImportado() {
		return file != null;
	}

	public File getFile() {
		return file;
	}

	public void setFile(File file) {
		this.file = file;
	}

	public UploadedFile getUploadedFile() {
		return uploadedFile;
	}

	public void handleFileUpload(FileUploadEvent event) {
		setUploadedFile(event.getFile());
	}

	public void setUploadedFile(UploadedFile uploadedFile) {
		this.uploadedFile = uploadedFile;

		try {
			file = File.createTempFile("migration", "jarch");
			FileUtils.writeByteArrayToFile(file, uploadedFile.getContent());
		} catch (Exception ex){
			LogUtils.generate(ex);
		}
	}

	public String getNomeArquivo(){
		if(uploadedFile == null){
			return "";
		}

		return uploadedFile.getFileName();
	}

	public String getNomeClass(Migrated migrated){
		if (migrated == null){
			return "";
		}

		return migrated.getNameClassEntity();
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy