<dependencies>
	<dependency>
		<groupId>com.sun.xml.bind</groupId>
		<artifactId>jaxb-impl</artifactId>
		<version>2.3.4</version>
	</dependency>
</dependencies>

PaperManager

private static final String FILENAME = "src/main/resources/paperarchive.xml";

private final List<Paper> papers = new ArrayList<>();
private final Set<Author> authors = new TreeSet<>();
private final Set<Author> allAuthors = new TreeSet<>();

private final DefaultListModel<Paper> papersModel = new DefaultListModel<>();
private final DefaultListModel<Author> authorsModel = new DefaultListModel<>();
private final DefaultListModel<Author> allAuthorsModel = new DefaultListModel<>();

private List<JTextField> validationFields;
private List<JLabel> errorLabels;


private void init() {
	initValidation();
	hideErrors();
	loadPaperTypesModel();
	initDragNDrop();
}

private void initValidation() {
	validationFields = Arrays.asList();
	errorLabels = Arrays.asList();
}

private void hideErrors() {
	errorLabels.forEach(e -> e.setVisible(false));
}

private void loadPaperTypesModel() {
        cbPaperTypes.setModel(new DefaultComboBoxModel<>(PaperType.values()));
}

private void loadAuthorsModel() {
	authorsModel.clear();
	authors.forEach(authorsModel::addElement);
	lsAuthors.setModel(authorsModel);
}	
	
private void loadAllAuthorsModel() {
	allAuthorsModel.clear();
	allAuthors.forEach(allAuthorsModel::addElement);
	lsAllAuthors.setModel(allAuthorsModel);
}

private void loadPapersModel() {
	papersModel.clear();
	papers.forEach(papersModel::addElement);
	lsPapers.setModel(papersModel);
}


private boolean formValid() {
	hideErrors();
	boolean ok = true;

	for (int i = 0; i < validationFields.size(); i++) {
		ok &= !validationFields.get(i).getText().trim().isEmpty();
		errorLabels.get(i).setVisible(validationFields.get(i).getText().trim().isEmpty());

		if ("Date".equals(validationFields.get(i).getName())) {
			try {
				LocalDate.parse(validationFields.get(i).getText().trim(), Paper.DATE_FORMATTER);
			} catch (Exception e) {
				ok = false;
				errorLabels.get(i).setVisible(true);
			}
		}
	}

	return ok;
}

private void clearForm() {
	hideErrors();
	validationFields.forEach(e -> e.setText(""));
	authorsModel.clear();
	authors.clear();
	cbPaperTypes.setSelectedIndex(0);
	lsAllAuthors.clearSelection();
}


AddAuthorDialog

private List<JTextField> validationFields;
private List<JLabel> errorLabels;

private void initValidation() {
	validationFields = Arrays.asList();
	errorLabels = Arrays.asList();
}

private void hideErrors() {
	errorLabels.forEach(e -> e.setVisible(false));
}

private boolean formValid() {
	hideErrors();
	boolean ok = true;
	for (int i = 0; i < validationFields.size(); i++) {
		ok &= !validationFields.get(i).getText().trim().isEmpty();
		errorLabels.get(i).setVisible(validationFields.get(i).getText().trim().isEmpty());
	}
	return ok;
}

