/******************************************************************************* * Copyright (c) 2007-2010, G. Weirich and Elexis * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * G. Weirich - initial implementation * *******************************************************************************/ package ch.elexis.core.ui.preferences; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.text.MessageFormat; import java.util.List; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import ch.elexis.core.data.activator.CoreHub; import ch.elexis.core.data.interfaces.ShutdownJob; import ch.elexis.core.ui.Hub; import ch.elexis.core.ui.util.SWTHelper; import ch.elexis.data.NamedBlob; import ch.rgw.io.FileTool; import ch.rgw.io.InMemorySettings; import ch.rgw.io.Settings; import ch.rgw.tools.ExHandler; import ch.rgw.tools.StringTool; public class UserPreferences extends PreferencePage implements IWorkbenchPreferencePage { Button bLoad, bSave, bWorkspaceLoad, bWorkspaceSave; // Text tLoad, tSave, tWorkspaceLoad, tWorkspaceSave; Combo cbUserSave, cbWSSave, cbUserLoad, cbWSLoad; String[] userPrefs; String[] WSPrefs; public UserPreferences(){ noDefaultAndApplyButton(); } @Override protected Control createContents(Composite parent){ final String layoutfile = Platform.getInstanceLocation().getURL().getPath() + File.separator + ".metadata" //$NON-NLS-1$ + File.separator + ".plugins" //$NON-NLS-1$ + File.separator + "org.eclipse.ui.workbench" //$NON-NLS-1$ + File.separator + "workbench.xml"; //$NON-NLS-1$ Composite ret = new Composite(parent, SWT.NONE); GridLayout gl = new GridLayout(2, false); gl.verticalSpacing = 10; ret.setLayout(gl); ret.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true)); Label desc = new Label(ret, SWT.WRAP); desc.setText(Messages.UserPreferences_Explanation1 + Messages.UserPreferences_Explanation2 + Messages.UserPreferences_Explanation3); desc.setLayoutData(SWTHelper.getFillGridData(2, true, 1, false)); List<NamedBlob> userBlobs = NamedBlob.findFromPrefix("UserCfg:"); //$NON-NLS-1$ userPrefs = new String[userBlobs.size()]; for (int i = 0; i < userPrefs.length; i++) { userPrefs[i] = userBlobs.get(i).getId().split(":")[1]; //$NON-NLS-1$ } List<NamedBlob> wsBlobs = NamedBlob.findFromPrefix("Workspace:"); //$NON-NLS-1$ WSPrefs = new String[wsBlobs.size()]; for (int i = 0; i < WSPrefs.length; i++) { WSPrefs[i] = wsBlobs.get(i).getId().split(":")[1]; //$NON-NLS-1$ } bLoad = new Button(ret, SWT.PUSH); bLoad.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false)); bLoad.setText(Messages.UserPreferences_LoadSettingsfrom); bLoad.setLayoutData(new GridData(GridData.FILL)); bLoad.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent arg0){ String name = cbUserLoad.getText(); if (StringTool.isNothing(name)) { SWTHelper.showInfo(Messages.UserPreferences_NoNameGiven, Messages.UserPreferences_PleaseEnterName); } else if (NamedBlob.exists(Messages.UserPreferences_14 + name)) { NamedBlob blob = NamedBlob.load("UserCfg:" + name); //$NON-NLS-1$ InMemorySettings ims = new InMemorySettings(blob.getHashtable()); CoreHub.userCfg.overlay(ims, Settings.OVL_REPLACE); } else { SWTHelper.showError(Messages.UserPreferences_KonfigNotFound, MessageFormat.format(Messages.UserPreferences_ConfigWasNotFound, name)); } } }); cbUserLoad = new Combo(ret, SWT.READ_ONLY | SWT.SINGLE); cbUserLoad.setItems(userPrefs); cbUserLoad.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false)); bSave = new Button(ret, SWT.PUSH); bSave.setText(Messages.UserPreferences_SaveSettingsTo); bSave.setLayoutData(new GridData(GridData.FILL)); bSave.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent arg0){ String name = cbUserSave.getText(); if (StringTool.isNothing(name)) { SWTHelper.showInfo(Messages.UserPreferences_NoNameGiven, Messages.UserPreferences_PleaseEnterName2); } else { NamedBlob blob = NamedBlob.load("UserCfg:" + name); //$NON-NLS-1$ InMemorySettings ims = new InMemorySettings(); ims.overlay(CoreHub.userCfg, Settings.OVL_REPLACE); blob.put(ims.getNode()); SWTHelper.showInfo(Messages.UserPreferences_ConfigSaved, MessageFormat.format(Messages.UserPreferences_ConfigWasSaved, name)); cbUserSave.setText(""); //$NON-NLS-1$ } } }); cbUserSave = new Combo(ret, SWT.SINGLE); cbUserSave.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); cbUserSave.setItems(userPrefs); bWorkspaceLoad = new Button(ret, SWT.PUSH); bWorkspaceLoad.setText(Messages.UserPreferences_LoadDeskSettingsFrom); bWorkspaceLoad.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent arg0){ String name = cbWSLoad.getText(); if (StringTool.isNothing(name)) { SWTHelper.showInfo(Messages.UserPreferences_NoNameGiven, Messages.UserPreferences_PleaseEnterName3); } else if (NamedBlob.exists("Workspace:" + name)) { //$NON-NLS-1$ NamedBlob blob = NamedBlob.load("Workspace:" + name); //$NON-NLS-1$ InMemorySettings ims = new InMemorySettings(blob.getHashtable()); final String newloc = ims.get("perspectivelayout", null); //$NON-NLS-1$ if (newloc != null) { ShutdownJob job = new ShutdownJob() { public void doit(){ try { File file = new File(layoutfile); FileTool.copyFile(file, new File(layoutfile + ".bak"), //$NON-NLS-1$ FileTool.REPLACE_IF_EXISTS); file.delete(); FileWriter fout = new FileWriter(file); fout.write(newloc); fout.close(); } catch (Exception ex) { ExHandler.handle(ex); } } }; Hub.addShutdownJob(job); SWTHelper.showInfo(Messages.UserPreferences_ConfigLoaded, Messages.UserPreferences_ConfigActiveNextTime); } } else { SWTHelper.showError(Messages.UserPreferences_ConfigNotFound, Messages.UserPreferences_3 + name + Messages.UserPreferences_4); } } }); bWorkspaceLoad.setLayoutData(new GridData(GridData.FILL)); cbWSLoad = new Combo(ret, SWT.SINGLE | SWT.READ_ONLY); cbWSLoad.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false)); cbWSLoad.setItems(WSPrefs); bWorkspaceSave = new Button(ret, SWT.PUSH); bWorkspaceSave.setText(Messages.UserPreferences_WorkspaceSettingsSaveTo); bWorkspaceSave.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent arg0){ String name = cbWSSave.getText(); if (StringTool.isNothing(name)) { SWTHelper.showInfo(Messages.UserPreferences_NoNameGiven, Messages.UserPreferences_PleaseEnterName4); } else { try { File file = new File(layoutfile); FileReader reader = new FileReader(file); StringBuilder sb = new StringBuilder(1000); char[] load = new char[4096]; while (true) { int x = reader.read(load); if (x == -1) { break; } sb.append(load, 0, x); } reader.close(); NamedBlob blob = NamedBlob.load("Workspace:" + name); //$NON-NLS-1$ InMemorySettings ims = new InMemorySettings(); ims.set("perspectivelayout", sb.toString()); //$NON-NLS-1$ blob.put(ims.getNode()); } catch (Exception ex) { ExHandler.handle(ex); } } } }); bWorkspaceSave.setLayoutData(new GridData(GridData.FILL)); cbWSSave = new Combo(ret, SWT.SINGLE); cbWSSave.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false)); cbWSSave.setItems(WSPrefs); return ret; } public void init(IWorkbench workbench){ // TODO Auto-generated method stub } }