use of de.catma.backgroundservice.ExecutionListener in project catma by forTEXT.
the class GraphWorktreeProject method synchronizeWithRemote.
@Override
public void synchronizeWithRemote(OpenProjectListener openProjectListener) throws Exception {
if (hasUncommittedChanges()) {
throw new IllegalStateException("There are uncommitted changes that need to be committed first!");
}
for (TagsetDefinition tagset : getTagsets()) {
gitProjectHandler.synchronizeTagsetWithRemote(tagset.getUuid());
}
for (SourceDocument document : getSourceDocuments()) {
gitProjectHandler.synchronizeSourceDocumentWithRemote(document.getUuid());
for (AnnotationCollectionReference collectionReference : document.getUserMarkupCollectionRefs()) {
gitProjectHandler.synchronizeCollectionWithRemote(collectionReference.getId());
}
}
gitProjectHandler.synchronizeWithRemote();
if (gitProjectHandler.hasConflicts()) {
gitProjectHandler.initAndUpdateSubmodules();
openProjectListener.conflictResolutionNeeded(new GitConflictedProject(projectReference, gitProjectHandler, documentId -> getSourceDocumentURI(documentId)));
} else {
boolean forceGraphReload = gitProjectHandler.loadRolesPerResource();
gitProjectHandler.initAndUpdateSubmodules();
gitProjectHandler.removeStaleSubmoduleDirectories();
gitProjectHandler.ensureDevBranches();
rootRevisionHash = gitProjectHandler.getRootRevisionHash();
ProgressListener progressListener = new ProgressListener() {
@Override
public void setProgress(String value, Object... args) {
openProjectListener.progress(value, args);
}
};
graphProjectHandler.ensureProjectRevisionIsLoaded(new ExecutionListener<TagManager>() {
@Override
public void error(Throwable t) {
openProjectListener.failure(t);
}
@Override
public void done(TagManager result) {
tagManager.load(result.getTagLibrary());
openProjectListener.ready(GraphWorktreeProject.this);
}
}, progressListener, rootRevisionHash, tagManager, () -> gitProjectHandler.getTagsets(), () -> gitProjectHandler.getDocuments(), (tagLibrary) -> gitProjectHandler.getCollections(tagLibrary, progressListener), forceGraphReload, backgroundService);
}
}
use of de.catma.backgroundservice.ExecutionListener in project catma by forTEXT.
the class InspectContentStep method enter.
@Override
public void enter(boolean back) {
if (back) {
return;
}
@SuppressWarnings("unchecked") Collection<UploadFile> fileList = (Collection<UploadFile>) wizardContext.get(DocumentWizard.WizardContextKey.UPLOAD_FILE_LIST);
contentPanel.setEnabled(false);
progressBar.setVisible(true);
progressBar.setIndeterminate(true);
final ArrayList<UploadFile> files = new ArrayList<UploadFile>(fileList);
BackgroundServiceProvider backgroundServiceProvider = (BackgroundServiceProvider) UI.getCurrent();
backgroundServiceProvider.submit("inspecting-files", new DefaultProgressCallable<List<UploadFile>>() {
@Override
public List<UploadFile> call() throws Exception {
Tika tika = new Tika();
LanguageDetector languageDetector = LanguageDetector.getDefaultLanguageDetector();
try {
languageDetector.loadModels();
} catch (IOException e) {
((ErrorHandler) UI.getCurrent()).showAndLogError("Error loading language detection models!", e);
}
for (UploadFile uploadFile : files) {
if (uploadFile.getMimetype().equals(FileType.XML2.getMimeType())) {
XML2ContentHandler contentHandler = new XML2ContentHandler();
SourceDocumentInfo sourceDocumentInfo = new SourceDocumentInfo();
TechInfoSet techInfoSet = new TechInfoSet(uploadFile.getOriginalFilename(), uploadFile.getMimetype(), uploadFile.getTempFilename());
sourceDocumentInfo.setTechInfoSet(techInfoSet);
contentHandler.setSourceDocumentInfo(sourceDocumentInfo);
contentHandler.load();
String content = contentHandler.getContent();
LanguageResult languageResult = languageDetector.detect(content);
if (languageResult.isReasonablyCertain() && languageResult.getLanguage() != null) {
uploadFile.setLanguage(new LanguageItem(new Locale(languageResult.getLanguage())));
}
} else {
Metadata metadata = new Metadata();
try {
try (FileInputStream fis = new FileInputStream(new File(uploadFile.getTempFilename()))) {
String content = tika.parseToString(fis, metadata);
String contentType = metadata.get(Metadata.CONTENT_TYPE);
MediaType mediaType = MediaType.parse(contentType);
String charset = mediaType.getParameters().get("charset");
if (charset != null) {
uploadFile.setCharset(Charset.forName(charset));
}
LanguageResult languageResult = languageDetector.detect(content);
if (languageResult.isReasonablyCertain() && languageResult.getLanguage() != null) {
uploadFile.setLanguage(new LanguageItem(new Locale(languageResult.getLanguage())));
}
}
} catch (Exception e) {
Logger.getLogger(InspectContentStep.class.getName()).log(Level.SEVERE, String.format("Error inspecting %1$s", uploadFile.getOriginalFilename()), e);
String errorMsg = e.getMessage();
if ((errorMsg == null) || (errorMsg.trim().isEmpty())) {
errorMsg = "";
}
Notification.show("Error", String.format("Error inspecting content of %1$s! " + "Adding this file to your Project might fail!\n The underlying error message was:\n%2$s", uploadFile.getOriginalFilename(), errorMsg), Type.ERROR_MESSAGE);
}
}
}
return files;
}
}, new ExecutionListener<List<UploadFile>>() {
@Override
public void done(List<UploadFile> result) {
contentPanel.setEnabled(true);
progressBar.setVisible(false);
progressBar.setIndeterminate(false);
fileList.clear();
fileList.addAll(result);
fileDataProvider.refreshAll();
if (!fileList.isEmpty()) {
fileList.stream().findFirst().ifPresent(uploadFile -> {
fileGrid.select(uploadFile);
updatePreview(uploadFile);
});
}
if (stepChangeListener != null) {
stepChangeListener.stepChanged(InspectContentStep.this);
}
}
@Override
public void error(Throwable t) {
Logger.getLogger(InspectContentStep.class.getName()).log(Level.SEVERE, "Error inspecting files", t);
String errorMsg = t.getMessage();
if ((errorMsg == null) || (errorMsg.trim().isEmpty())) {
errorMsg = "";
}
Notification.show("Error", String.format("Error inspecting the contents! " + "\n The underlying error message was:\n%1$s", errorMsg), Type.ERROR_MESSAGE);
}
});
}
use of de.catma.backgroundservice.ExecutionListener in project catma by forTEXT.
the class ProjectView method handleSaveDocumentWizardContext.
private void handleSaveDocumentWizardContext(final WizardContext result) {
setEnabled(false);
setProgressBarVisible(true);
final UI ui = UI.getCurrent();
BackgroundServiceProvider backgroundServiceProvider = (BackgroundServiceProvider) UI.getCurrent();
BackgroundService backgroundService = backgroundServiceProvider.accuireBackgroundService();
backgroundService.submit(new DefaultProgressCallable<Void>() {
@SuppressWarnings("unchecked")
@Override
public Void call() throws Exception {
IDGenerator idGenerator = new IDGenerator();
boolean useApostropheAsSeparator = (Boolean) result.get(DocumentWizard.WizardContextKey.APOSTROPHE_AS_SEPARATOR);
String collectionNamePattern = (String) result.get(DocumentWizard.WizardContextKey.COLLECTION_NAME_PATTERN);
Collection<TagsetImport> tagsetImports = (Collection<TagsetImport>) result.get(DocumentWizard.WizardContextKey.TAGSET_IMPORT_LIST);
Collection<UploadFile> uploadFiles = (Collection<UploadFile>) result.get(DocumentWizard.WizardContextKey.UPLOAD_FILE_LIST);
if (tagsetImports == null) {
tagsetImports = Collections.emptyList();
}
// Ignoring Tagsets
tagsetImports.stream().filter(ti -> ti.getImportState().equals(TagsetImportState.WILL_BE_IGNORED)).forEach(tagsetImport -> {
for (TagDefinition tag : tagsetImport.getExtractedTagset()) {
for (UploadFile uploadFile : uploadFiles) {
if (uploadFile.getIntrinsicMarkupCollection() != null) {
AnnotationCollection intrinsicMarkupCollection = uploadFile.getIntrinsicMarkupCollection();
intrinsicMarkupCollection.removeTagReferences(intrinsicMarkupCollection.getTagReferences(tag));
}
}
}
});
getProgressListener().setProgress("Creating imported Tagsets");
// Creating Tagsets
tagsetImports.stream().filter(ti -> ti.getImportState().equals(TagsetImportState.WILL_BE_CREATED)).forEach(tagsetImport -> {
getProgressListener().setProgress("Creating Tagset %1$s", tagsetImport.getTargetTagset().getName());
ui.accessSynchronously(() -> {
if (project.getTagManager().getTagLibrary().getTagsetDefinition(tagsetImport.getTargetTagset().getUuid()) != null) {
// already imported, so it will be a merge
tagsetImport.setImportState(TagsetImportState.WILL_BE_MERGED);
} else {
TagsetDefinition extractedTagset = tagsetImport.getExtractedTagset();
try {
project.importTagsets(Collections.singletonList(new TagsetDefinitionImportStatus(extractedTagset, project.inProjectHistory(extractedTagset.getUuid()), project.getTagManager().getTagLibrary().getTagsetDefinition(extractedTagset.getUuid()) != null)));
} catch (Exception e) {
Logger.getLogger(ProjectView.class.getName()).log(Level.SEVERE, String.format("Error importing tagset %1$s with ID %2$s", extractedTagset.getName(), extractedTagset.getUuid()), e);
String errorMsg = e.getMessage();
if ((errorMsg == null) || (errorMsg.trim().isEmpty())) {
errorMsg = "";
}
Notification.show("Error", String.format("Error importing tagset %1$s! " + "This tagset will be skipped!\n The underlying error message was:\n%2$s", extractedTagset.getName(), errorMsg), Type.ERROR_MESSAGE);
}
}
ui.push();
});
});
// Merging Tagsets
tagsetImports.stream().filter(ti -> ti.getImportState().equals(TagsetImportState.WILL_BE_MERGED)).forEach(tagsetImport -> {
getProgressListener().setProgress("Merging Tagset %1$s", tagsetImport.getTargetTagset().getName());
ui.accessSynchronously(() -> {
TagsetDefinition targetTagset = project.getTagManager().getTagLibrary().getTagsetDefinition(tagsetImport.getTargetTagset().getUuid());
for (TagDefinition tag : tagsetImport.getExtractedTagset()) {
Optional<TagDefinition> optionalTag = targetTagset.getTagDefinitionsByName(tag.getName()).findFirst();
if (optionalTag.isPresent()) {
TagDefinition existingTag = optionalTag.get();
tag.getUserDefinedPropertyDefinitions().forEach(pd -> {
if (existingTag.getPropertyDefinition(pd.getName()) == null) {
project.getTagManager().addUserDefinedPropertyDefinition(existingTag, new PropertyDefinition(pd));
}
});
for (UploadFile uploadFile : uploadFiles) {
if (uploadFile.getIntrinsicMarkupCollection() != null) {
AnnotationCollection intrinsicMarkupCollection = uploadFile.getIntrinsicMarkupCollection();
List<TagReference> tagReferences = intrinsicMarkupCollection.getTagReferences(tag);
intrinsicMarkupCollection.removeTagReferences(tagReferences);
Multimap<TagInstance, TagReference> referencesByInstance = ArrayListMultimap.create();
tagReferences.forEach(tr -> referencesByInstance.put(tr.getTagInstance(), tr));
for (TagInstance incomingTagInstance : referencesByInstance.keySet()) {
TagInstance newTagInstance = new TagInstance(idGenerator.generate(), existingTag.getUuid(), incomingTagInstance.getAuthor(), incomingTagInstance.getTimestamp(), existingTag.getUserDefinedPropertyDefinitions(), targetTagset.getUuid());
for (Property oldProp : incomingTagInstance.getUserDefinedProperties()) {
String oldPropDefId = oldProp.getPropertyDefinitionId();
PropertyDefinition oldPropDef = tag.getPropertyDefinitionByUuid(oldPropDefId);
PropertyDefinition existingPropDef = existingTag.getPropertyDefinition(oldPropDef.getName());
newTagInstance.addUserDefinedProperty(new Property(existingPropDef.getUuid(), oldProp.getPropertyValueList()));
}
ArrayList<TagReference> newReferences = new ArrayList<>();
referencesByInstance.get(incomingTagInstance).forEach(tr -> {
try {
newReferences.add(new TagReference(newTagInstance, tr.getTarget().toString(), tr.getRange(), tr.getUserMarkupCollectionUuid()));
} catch (URISyntaxException e) {
e.printStackTrace();
}
});
intrinsicMarkupCollection.addTagReferences(newReferences);
}
}
}
} else {
tag.setTagsetDefinitionUuid(targetTagset.getUuid());
project.getTagManager().addTagDefinition(targetTagset, tag);
}
}
ui.push();
});
});
// Importing docs and collections
for (UploadFile uploadFile : uploadFiles) {
getProgressListener().setProgress("Importing Document %1$s", uploadFile.getTitle());
ui.accessSynchronously(() -> {
addUploadFile(uploadFile, useApostropheAsSeparator, collectionNamePattern);
ui.push();
});
}
return null;
}
}, new ExecutionListener<Void>() {
@Override
public void done(Void result) {
setProgressBarVisible(false);
setEnabled(true);
}
@Override
public void error(Throwable t) {
setProgressBarVisible(false);
setEnabled(true);
errorHandler.showAndLogError("Error adding Documents", t);
}
}, progressListener);
}
use of de.catma.backgroundservice.ExecutionListener in project catma by forTEXT.
the class AnalyzeView method executeSearch.
private void executeSearch(String searchInput, Consumer<QueryResultPanel> addToLayoutFunction) {
QueryOptions queryOptions = new QueryOptions(new QueryId(searchInput), currentCorpus.getDocumentIds(), currentCorpus.getCollectionIds(), indexInfoSet.getUnseparableCharacterSequences(), indexInfoSet.getUserDefinedSeparatingCharacters(), indexInfoSet.getLocale(), project);
QueryJob job = new QueryJob(searchInput, queryOptions);
showProgress(true);
((BackgroundServiceProvider) UI.getCurrent()).submit("Searching...", job, new ExecutionListener<QueryResult>() {
public void done(QueryResult result) {
try {
QueryResultPanel queryResultPanel = new QueryResultPanel(project, result, new QueryId(searchInput.toString()), kwicProviderCache, closingPanel -> handleRemoveQueryResultPanel(closingPanel));
addToLayoutFunction.accept(queryResultPanel);
addQueryResultPanelSetting(queryResultPanel.getQueryResultPanelSetting());
} finally {
showProgress(false);
}
}
public void error(Throwable t) {
showProgress(false);
if (t instanceof QueryException) {
QueryJob.QueryException qe = (QueryJob.QueryException) t;
String input = qe.getInput();
int idx = ((RecognitionException) qe.getCause()).charPositionInLine;
if ((idx >= 0) && (input.length() > idx)) {
char character = input.charAt(idx);
String message = MessageFormat.format("<html><p>There is something wrong with your query <b>{0}</b> approximately at positon {1} character <b>{2}</b>.</p> <p>If you are unsure about how to construct a query try the Query Builder!</p></html>", input, idx + 1, character);
HTMLNotification.show("Info", message, Type.TRAY_NOTIFICATION);
} else {
String message = MessageFormat.format("<html><p>There is something wrong with your query <b>{0}</b>.</p> <p>If you are unsure about how to construct a query try the Query Builder!</p></html>", input);
HTMLNotification.show("Info", message, Type.TRAY_NOTIFICATION);
}
} else {
((ErrorHandler) UI.getCurrent()).showAndLogError("Error during search!", t);
}
}
});
}
use of de.catma.backgroundservice.ExecutionListener in project catma by forTEXT.
the class GraphWorktreeProject method open.
@Override
public void open(OpenProjectListener openProjectListener) {
try {
logger.info(String.format("Opening Project %1$s with ID %2$s", projectReference.getName(), projectReference.getProjectId()));
this.rootRevisionHash = gitProjectHandler.getRootRevisionHash();
logger.info(String.format("Revision Hash for Project %1$s is %2$s", projectReference.getProjectId(), this.rootRevisionHash));
this.gitProjectHandler.loadRolesPerResource();
logger.info(String.format("Checking for conflicts in Project %1$s", projectReference.getProjectId()));
if (gitProjectHandler.hasConflicts()) {
gitProjectHandler.initAndUpdateSubmodules();
openProjectListener.conflictResolutionNeeded(new GitConflictedProject(projectReference, gitProjectHandler, documentId -> getSourceDocumentURI(documentId)));
} else {
gitProjectHandler.initAndUpdateSubmodules();
gitProjectHandler.removeStaleSubmoduleDirectories();
gitProjectHandler.ensureDevBranches();
gitProjectHandler.verifyCollections();
ProgressListener progressListener = new ProgressListener() {
@Override
public void setProgress(String value, Object... args) {
logger.info(String.format(value, args));
openProjectListener.progress(value, args);
}
};
graphProjectHandler.ensureProjectRevisionIsLoaded(new ExecutionListener<TagManager>() {
@Override
public void error(Throwable t) {
openProjectListener.failure(t);
}
@Override
public void done(TagManager result) {
logger.info(String.format("Loading Tag library for Project %1$s", projectReference.getProjectId()));
tagManager.load(result.getTagLibrary());
initTagManagerListeners();
logger.info(String.format("Project %1$s is loaded.", projectReference.getProjectId()));
openProjectListener.ready(GraphWorktreeProject.this);
}
}, progressListener, rootRevisionHash, tagManager, () -> gitProjectHandler.getTagsets(), () -> gitProjectHandler.getDocuments(), (tagLibrary) -> gitProjectHandler.getCollections(tagLibrary, progressListener), // forceGraphReload
false, backgroundService);
}
} catch (Exception e) {
openProjectListener.failure(e);
}
}
Aggregations