Skip to content

Commit

Permalink
[26148] add uri field editor composite, general os specific preference
Browse files Browse the repository at this point in the history
  • Loading branch information
huthomas committed Jun 20, 2024
1 parent d6251ad commit b93bb48
Show file tree
Hide file tree
Showing 9 changed files with 180 additions and 66 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,12 @@
import ch.elexis.core.model.IDocument;
import ch.elexis.core.model.IDocumentLetter;
import ch.elexis.core.model.IDocumentTemplate;
import ch.elexis.core.preferences.PreferencesUtil;
import ch.elexis.core.services.IVirtualFilesystemService;
import ch.elexis.core.services.IVirtualFilesystemService.IVirtualFilesystemHandle;
import ch.elexis.core.services.holder.ConfigServiceHolder;
import ch.elexis.core.services.holder.CoreModelServiceHolder;
import ch.elexis.core.services.holder.VirtualFilesystemServiceHolder;
import ch.elexis.core.utils.CoreUtil;
import ch.elexis.core.utils.CoreUtil.OS;
import ch.rgw.tools.MimeTool;

public class DocumentLetterUtil {
Expand All @@ -43,7 +42,8 @@ public class DocumentLetterUtil {
return null;
}

String path = getOperatingSystemSpecificExternalStoragePath();
String path = PreferencesUtil.getOsSpecificPreference(Preferences.P_TEXT_EXTERN_FILE_PATH,
ConfigServiceHolder.get());
if (path == null) {
logger.error("External storage path is [null]");
return null;
Expand Down Expand Up @@ -143,31 +143,31 @@ private static IVirtualFilesystemHandle getDocumentTemplateFilePath(IVirtualFile
return targetFile;
}

public static String getOperatingSystemSpecificExternalStoragePath() {
OS operatingSystem = CoreUtil.getOperatingSystemType();
String setting;
switch (operatingSystem) {
case WINDOWS:
setting = Preferences.P_TEXT_EXTERN_FILE_PATH_WINDOWS;
break;
case MAC:
setting = Preferences.P_TEXT_EXTERN_FILE_PATH_MAC;
break;
case LINUX:
setting = Preferences.P_TEXT_EXTERN_FILE_PATH_LINUX;
break;
default:
setting = Preferences.P_TEXT_EXTERN_FILE_PATH;
break;
}
String path = ConfigServiceHolder.getGlobal(setting, null);
if (path == null) {
LoggerFactory.getLogger(DocumentLetterUtil.class)
.warn("No OS specific path set, reverting to generic setting");
path = ConfigServiceHolder.getGlobal(Preferences.P_TEXT_EXTERN_FILE_PATH, null);
}
return path;
}
// public static String getOperatingSystemSpecificExternalStoragePath() {
// OS operatingSystem = CoreUtil.getOperatingSystemType();
// String setting;
// switch (operatingSystem) {
// case WINDOWS:
// setting = Preferences.P_TEXT_EXTERN_FILE_PATH_WINDOWS;
// break;
// case MAC:
// setting = Preferences.P_TEXT_EXTERN_FILE_PATH_MAC;
// break;
// case LINUX:
// setting = Preferences.P_TEXT_EXTERN_FILE_PATH_LINUX;
// break;
// default:
// setting = Preferences.P_TEXT_EXTERN_FILE_PATH;
// break;
// }
// String path = ConfigServiceHolder.getGlobal(setting, null);
// if (path == null) {
// LoggerFactory.getLogger(DocumentLetterUtil.class)
// .warn("No OS specific path set, reverting to generic setting");
// path = ConfigServiceHolder.getGlobal(Preferences.P_TEXT_EXTERN_FILE_PATH, null);
// }
// return path;
// }

/**
* Get the file extension part of the input String.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import ch.elexis.core.constants.Preferences;
import ch.elexis.core.jpa.entities.EntityWithId;
import ch.elexis.core.jpa.entities.Kontakt;
import ch.elexis.core.jpa.entities.Userconfig;
Expand All @@ -33,7 +32,6 @@
import ch.elexis.core.services.IQuery;
import ch.elexis.core.services.IQuery.COMPARATOR;
import ch.elexis.core.services.IStoreToStringContribution;
import ch.elexis.core.utils.CoreUtil;

/**
* Utility class with core model specific methods
Expand All @@ -48,20 +46,6 @@ public class ModelUtil {
private static final DateTimeFormatter yyyyMMdd = DateTimeFormatter.ofPattern("yyyyMMdd");
private static DateTimeFormatter defaultDateFormatter = DateTimeFormatter.ofPattern("dd.MM.yyyy");

public static String getExternFilePath() {
return getAsExternFilePath(getConfig(Preferences.P_TEXT_EXTERN_FILE_PATH, null));
}

private static String getAsExternFilePath(String path) {
if (path != null && path.contains("[home]")) {
path = path.replace("[home]", CoreUtil.getWritableUserDir().getAbsolutePath());
LoggerFactory.getLogger(ModelUtil.class)
.warn("Replaced [home] -> [" + CoreUtil.getWritableUserDir().getAbsolutePath()
+ "] in extern file path result is [" + path + "]");
}
return path;
}

/**
* Test if there is a matching {@link Config} entry with a value that can be
* interpreted as true. If no {@link Config} is present defaultValue is
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,12 @@ protected void doLoad() {
}
}

@Override
protected void doStore() {
// TODO Auto-generated method stub
super.doStore();
}

@Override
protected String changePressed() {
IVirtualFilesystemService virtualFilesystemService = VirtualFilesystemServiceHolder.get();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
package ch.elexis.core.ui.e4.jface.preference;

import org.apache.commons.lang3.StringUtils;
import org.eclipse.jface.preference.FieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;

import ch.elexis.core.preferences.PreferencesUtil;
import ch.elexis.core.utils.CoreUtil;
import ch.elexis.core.utils.CoreUtil.OS;

/**
* A {@link Composite} containing an operating system selector and a
* {@link URIFieldEditor} for file system URIs. The method
* {@link URIFieldEditorComposite#getPreferenceName(OS)} should be overwritten
* to select the correct preference.
*
*/
public class URIFieldEditorComposite extends Composite {

private URIFieldEditor storePath;

private String defaultPreference;

private ComboViewer osCombo;

public URIFieldEditorComposite(String defaultPreference, Composite parent, int style) {
super(parent, style);
setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 3, 1));

this.defaultPreference = defaultPreference;

createContent();
}

/**
* Use this method to set the {@link IPreferenceStore} used by the
* {@link URIFieldEditor}. If a {@link FieldEditorPreferencePage} is available
* do not use this method, but set directly with
* {@link URIFieldEditorComposite#getFieldEditor()}. <br />
* The field editor will store after each value change if this method is used.
*
* @param preferenceStore
*/
public void setPreferenceStore(IPreferenceStore preferenceStore) {
storePath.setPreferenceStore(preferenceStore);
storePath.load();

// add
storePath.setPropertyChangeListener(new IPropertyChangeListener() {

@Override
public void propertyChange(PropertyChangeEvent event) {
storePath.store();
}
});
}

private void createContent() {
Combo comboOs = new Combo(this, SWT.None);
osCombo = new ComboViewer(comboOs);
comboOs.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));
osCombo.setContentProvider(ArrayContentProvider.getInstance());
osCombo.setLabelProvider(new LabelProvider() {
@Override
public String getText(Object element) {
return ((CoreUtil.OS) element).name();
}
});
osCombo.setInput(CoreUtil.OS.values());

storePath = new URIFieldEditor(
PreferencesUtil.getOsSpecificPreferenceName(CoreUtil.getOperatingSystemType(), defaultPreference),
StringUtils.EMPTY, this);
storePath.setEmptyStringAllowed(true);

osCombo.addSelectionChangedListener(event -> {
CoreUtil.OS selection = (OS) event.getStructuredSelection().getFirstElement();
String preferenceName = PreferencesUtil.getOsSpecificPreferenceName(selection, defaultPreference);
storePath.store();
storePath.setPreferenceName(preferenceName);
storePath.load();
});

osCombo.setSelection(new StructuredSelection(CoreUtil.getOperatingSystemType()));
}

public FieldEditor getFieldEditor() {
return storePath;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import ch.elexis.core.model.IDocumentLetter;
import ch.elexis.core.model.Identifiable;
import ch.elexis.core.model.util.DocumentLetterUtil;
import ch.elexis.core.preferences.PreferencesUtil;
import ch.elexis.core.services.IConflictHandler;
import ch.elexis.core.services.IElexisServerService.ConnectionStatus;
import ch.elexis.core.services.ILocalDocumentService;
Expand Down Expand Up @@ -132,7 +133,8 @@ public void lockAcquired() {
public static void convertDocx2Pdf(Optional<File> file) {
for (String format : List.of("pdf", "txt")) { //$NON-NLS-1$ //$NON-NLS-2$
String filePath = file.get().getAbsolutePath();
String storage = DocumentLetterUtil.getOperatingSystemSpecificExternalStoragePath();
String storage = PreferencesUtil.getOsSpecificPreference(Preferences.P_TEXT_EXTERN_FILE_PATH,
ConfigServiceHolder.get());
String fullCmd = String.format("libreoffice --headless --convert-to %s --outdir %s %s", format, storage, //$NON-NLS-1$
filePath);
logger.info("Convert external file using"); //$NON-NLS-1$
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
import ch.elexis.core.data.activator.CoreHub;
import ch.elexis.core.data.util.Extensions;
import ch.elexis.core.l10n.Messages;
import ch.elexis.core.preferences.PreferencesUtil;
import ch.elexis.core.services.ILocalDocumentService;
import ch.elexis.core.services.holder.ConfigServiceHolder;
import ch.elexis.core.ui.constants.ExtensionPointConstantsUi;
Expand Down Expand Up @@ -164,23 +165,8 @@ public String getText(Object element) {

cvOs.addSelectionChangedListener(event -> {
CoreUtil.OS selection = (OS) event.getStructuredSelection().getFirstElement();
String preferenceName;
switch (selection) {
case MAC:
preferenceName = Preferences.P_TEXT_EXTERN_FILE_PATH_MAC;
break;
case WINDOWS:
preferenceName = Preferences.P_TEXT_EXTERN_FILE_PATH_WINDOWS;
break;
case LINUX:
preferenceName = Preferences.P_TEXT_EXTERN_FILE_PATH_LINUX;
break;
default:
preferenceName = Preferences.P_TEXT_EXTERN_FILE_PATH;
break;
}
storePath.store();
storePath.setPreferenceName(preferenceName);
storePath.setPreferenceName(PreferencesUtil.getOsSpecificPreferenceName(selection, Preferences.P_TEXT_EXTERN_FILE_PATH));
storePath.load();
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import ch.elexis.core.data.util.BriefExternUtil;
import ch.elexis.core.model.IEncounter;
import ch.elexis.core.model.InvoiceState;
import ch.elexis.core.model.util.DocumentLetterUtil;
import ch.elexis.core.preferences.PreferencesUtil;
import ch.elexis.core.services.holder.ConfigServiceHolder;
import ch.elexis.core.services.holder.ContextServiceHolder;

Expand All @@ -22,7 +22,8 @@ public boolean test(Object receiver, String property, Object[] args, Object expe
if ("documenteditlocal".equals(property)) { //$NON-NLS-1$
// no local copy / local edit if brief extern
if (ConfigServiceHolder.getGlobal(Preferences.P_TEXT_EXTERN_FILE, false) && BriefExternUtil
.isValidExternPath(DocumentLetterUtil.getOperatingSystemSpecificExternalStoragePath(), false)) {
.isValidExternPath(PreferencesUtil.getOsSpecificPreference(Preferences.P_TEXT_EXTERN_FILE_PATH,
ConfigServiceHolder.get()), false)) {
return false;
}
return CoreHub.localCfg.get(Preferences.P_TEXT_EDIT_LOCAL, false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,9 +101,6 @@ public class Preferences {
public static final String P_TEXT_EDIT_LOCAL = "briefe/Textmodul_Edit_Local"; //$NON-NLS-1$
public static final String P_TEXT_EXTERN_FILE = "briefe/Textmodul_Extern_File"; //$NON-NLS-1$
public static final String P_TEXT_EXTERN_FILE_PATH = "briefe/Textmodul_Extern_File_Path"; //$NON-NLS-1$
public static final String P_TEXT_EXTERN_FILE_PATH_WINDOWS = "briefe/Textmodul_Extern_File_Path_WINDOWS"; //$NON-NLS-1$
public static final String P_TEXT_EXTERN_FILE_PATH_MAC = "briefe/Textmodul_Extern_File_Path_MAC"; //$NON-NLS-1$
public static final String P_TEXT_EXTERN_FILE_PATH_LINUX = "briefe/Textmodul_Extern_File_Path_LINUX"; //$NON-NLS-1$

// Gruppen und Rechte
public static final String ACC_GROUPS = "groupNames"; //$NON-NLS-1$
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package ch.elexis.core.preferences;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.LoggerFactory;

import ch.elexis.core.services.IConfigService;
import ch.elexis.core.utils.CoreUtil;
import ch.elexis.core.utils.CoreUtil.OS;

public class PreferencesUtil {

public static String getOsSpecificPreferenceName(CoreUtil.OS system, String defaultPreference) {
switch (system) {
case WINDOWS:
return defaultPreference + "_WINDOWS";
case MAC:
return defaultPreference + "_MAC";
case LINUX:
return defaultPreference + "_LINUX";
default:
return defaultPreference;
}
}

public static String getOsSpecificPreference(String defaultPreference,
IConfigService configService) {
OS operatingSystem = CoreUtil.getOperatingSystemType();
String osSpecificPreference = getOsSpecificPreferenceName(operatingSystem, defaultPreference);
String value = configService.get(osSpecificPreference, null);
if (StringUtils.isBlank(value)) {
LoggerFactory.getLogger(PreferencesUtil.class)
.warn("No OS specific path set, reverting to generic setting");
value = configService.get(defaultPreference, null);
}
return value;
}
}

0 comments on commit b93bb48

Please sign in to comment.