/** * This file is part of Archiv-Editor. * * The software Archiv-Editor serves as a client user interface for working with * the Person Data Repository. See: pdr.bbaw.de * * The software Archiv-Editor was developed at the Berlin-Brandenburg Academy * of Sciences and Humanities, Jägerstr. 22/23, D-10117 Berlin. * www.bbaw.de * * Copyright (C) 2010-2013 Berlin-Brandenburg Academy * of Sciences and Humanities * * The software Archiv-Editor was developed by @author: Christoph Plutte. * * Archiv-Editor is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Archiv-Editor is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Archiv-Editor. * If not, see <http://www.gnu.org/licenses/lgpl-3.0.html>. */ package org.bbaw.pdr.ae.config.editor.internal; import org.bbaw.pdr.ae.common.NLMessages; import org.bbaw.pdr.ae.config.core.ConfigFactory; import org.bbaw.pdr.ae.config.core.IConfigFacade; import org.bbaw.pdr.ae.config.core.IConfigManager; import org.bbaw.pdr.ae.config.editor.view.ConfigEditor; import org.bbaw.pdr.ae.config.model.DatatypeDesc; import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.dialogs.TitleAreaDialog; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.swt.SWT; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.KeyListener; 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.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; /** * @author cplutte * Class creates login dialog for entering the user name. */ public class CreateConfigDialog extends TitleAreaDialog { /** singleton instace of facade. */ private IConfigFacade _configFacade = ConfigFactory.getConfigFacade(); /** The provider text. */ private Text _providerText; /** The new provider combo. */ private Combo _newProviderCombo; /** The okbutton. */ private Button _okbutton; /** The as config as default. */ private Button _asConfigAsDefault; /** The config as default. */ private boolean _configAsDefault = true; /** The config editor. */ private ConfigEditor _configEditor; // /** Logger */ // private static ILog iLogger = org.bbaw.pdr.ae.view.Activator.getILogger(); /** The cfg manager. */ private IConfigManager _cfgManager = _configFacade.getConfigManager(); /** * Instantiates a new creates the config dialog. * * @param parentShell * the parent shell * @param configEditor * the config editor */ public CreateConfigDialog(final Shell parentShell, final ConfigEditor configEditor) { super(parentShell); this._configEditor = configEditor; } /** * * @see org.eclipse.jface.dialogs.Dialog#create() */ @Override public final void create() { super.create(); // Set the title setTitle(NLMessages.getString("Config_new_classification_title")); //$NON-NLS-1$ // Set the message setMessage(NLMessages.getString("Config_new_classification_message"), IMessageProvider.INFORMATION); //$NON-NLS-1$ } /** * create buttons for button bar. * @param parent * parent composite. * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite) */ @Override protected final void createButtonsForButtonBar(final Composite parent) { GridData gridData = new GridData(); gridData.verticalAlignment = GridData.FILL; gridData.horizontalSpan = 3; gridData.grabExcessHorizontalSpace = true; gridData.grabExcessVerticalSpace = true; gridData.horizontalAlignment = SWT.CENTER; parent.setLayoutData(gridData); // Create Add button // Own method as we need to overview the SelectionAdapter createOkButton(parent, OK, NLMessages.getString("Config_new"), true); // Add a SelectionListener // Create Cancel button Button cancelButton = createButton(parent, CANCEL, NLMessages.getString("Config_cancel"), false); // Add a SelectionListener cancelButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { setReturnCode(CANCEL); close(); } }); } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.TitleAreaDialog#createDialogArea(org.eclipse.swt.widgets.Composite) * TODO the ComboBox has to be dynamized to adapted to an editable list of Identifiers. * the list has to be editable trough the UserPreferenceDialog. */ /** create dialog area. * @param parent parent composite. * @return parent * @see org.eclipse.jface.dialogs.TitleAreaDialog#createDialogArea(org.eclipse.swt.widgets.Composite) */ @Override protected final Control createDialogArea(final Composite parent) { Composite mainComposite = new Composite(parent, SWT.NONE); mainComposite.setLayoutData(new GridData()); ((GridData) mainComposite.getLayoutData()).verticalAlignment = SWT.FILL; ((GridData) mainComposite.getLayoutData()).horizontalAlignment = SWT.FILL; ((GridData) mainComposite.getLayoutData()).minimumHeight = 90; ((GridData) mainComposite.getLayoutData()).grabExcessHorizontalSpace = true; mainComposite.setLayout(new GridLayout()); ((GridLayout) mainComposite.getLayout()).makeColumnsEqualWidth = true; ((GridLayout) mainComposite.getLayout()).numColumns = 2; Label newLabel = new Label(mainComposite, SWT.NONE); newLabel.setLayoutData(new GridData()); newLabel.setText(NLMessages.getString("Config_new_provider")); _providerText = new Text(mainComposite, SWT.BORDER); _providerText.setLayoutData(new GridData()); ((GridData) _providerText.getLayoutData()).grabExcessHorizontalSpace = true; ((GridData) _providerText.getLayoutData()).horizontalAlignment = SWT.FILL; // @SuppressWarnings({ "unchecked", "rawtypes" }) // final Vector<String> genres = new Vector(Arrays.asList(_facade.getReferenceGenres())); _providerText.addKeyListener(new KeyListener() { @Override public void keyPressed(final KeyEvent e) { } @Override public void keyReleased(final KeyEvent e) { // System.out.println("genre text " + providerText.getText()); //$NON-NLS-1$ if (_configFacade.getConfigs().containsKey(_providerText.getText().toUpperCase())) { // System.out.println("checking zwei"); //$NON-NLS-1$ setMessage(NLMessages.getString("Config_message_same_provider_name"), SWT.ERROR); _okbutton.setEnabled(false); } else { setMessage(""); //$NON-NLS-1$ _okbutton.setEnabled(true); } } }); Label prov = new Label(mainComposite, SWT.NONE); prov.setLayoutData(new GridData()); prov.setText(NLMessages.getString("Config_based_on")); _newProviderCombo = new Combo(mainComposite, SWT.BORDER); _newProviderCombo.setLayoutData(new GridData()); ((GridData) _newProviderCombo.getLayoutData()).grabExcessHorizontalSpace = true; ((GridData) _newProviderCombo.getLayoutData()).horizontalAlignment = SWT.FILL; // if (_facade.getConfigs() == null) // { // System.out.println("configs = null"); // try { // _facade.setConfigs(cfgManager.getConfigs()); // } catch (XQException e1) { // e1.printStackTrace(); // } // } if (_configFacade.getConfigs() == null) { } for (String s : _configFacade.getConfigs().keySet()) { _newProviderCombo.add(s); } _newProviderCombo.select(0); _newProviderCombo.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { } }); new Label(mainComposite, SWT.NONE).setText(""); _asConfigAsDefault = new Button(mainComposite, SWT.CHECK); _asConfigAsDefault.setSelection(_configAsDefault); _asConfigAsDefault.setLayoutData(new GridData()); _asConfigAsDefault.setText(NLMessages.getString("Config_classification_as_default")); ((GridData) _asConfigAsDefault.getLayoutData()).horizontalAlignment = GridData.FILL; ((GridData) _asConfigAsDefault.getLayoutData()).grabExcessHorizontalSpace = true; _asConfigAsDefault.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent event) { _configAsDefault = !_configAsDefault; }; }); parent.pack(); return parent; } /** * Creates the new config. * * @param newProvider * the new provider * @param baseProvider * the base provider */ protected final void createNewConfig(final String newProvider, final String baseProvider) { DatatypeDesc newConfig = null; try { newConfig = _cfgManager.getDatatypeDesc(baseProvider); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } if (newConfig != null) { newConfig.setProvider(newProvider); _configFacade.getConfigs().put(newProvider, newConfig); try { _cfgManager.saveConfig(newConfig); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } if (_configAsDefault) { Activator.getDefault().getPreferenceStore().setValue("PRIMARY_SEMANTIC_PROVIDER", newConfig.getProvider()); //$NON-NLS-1$ Activator.getDefault().getPreferenceStore() .setValue("PRIMARY_TAGGING_PROVIDER", newConfig.getProvider()); //$NON-NLS-1$ Activator.getDefault().getPreferenceStore().setValue("PRIMARY_RELATION_PROVIDER", newConfig.getProvider()); //$NON-NLS-1$ } _configEditor.setNewConfiguration(newConfig); } } /** * creates OKButton. * * @param parent * parent composite * @param id * id * @param label * label of button * @param defaultButton * is default * @return button */ protected final Button createOkButton(final Composite parent, final int id, final String label, final boolean defaultButton) { // increment the number of columns in the button bar ((GridLayout) parent.getLayout()).numColumns++; _okbutton = new Button(parent, SWT.PUSH); _okbutton.setText(label); _okbutton.setFont(JFaceResources.getDialogFont()); _okbutton.setData(new Integer(id)); _okbutton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent event) { if (isValidInput()) { okPressed(); saveInput(); close(); } } }); if (defaultButton) { Shell shell = parent.getShell(); if (shell != null) { shell.setDefaultButton(_okbutton); } } setButtonLayoutData(_okbutton); return _okbutton; } // We do not allow the user to resize this dialog /** * @return false * @see org.eclipse.jface.dialogs.Dialog#isResizable() */ @Override protected final boolean isResizable() { return false; } /** * checks if input is valid. * @return boolean valid TODO die Überprüfung des Benutzernamens und * Passwortes soll nicht hier, sondern in der Controller-Schicht * oder sogar in der DAtenhaltung aus geführt werden. TODO * User-datenbank einbauen. */ private boolean isValidInput() { boolean valid = true; // else-clause return valid; } /** * * @see org.eclipse.jface.dialogs.Dialog#okPressed() */ @Override protected final void okPressed() { saveInput(); // super.okPressed(); } /** * if user name and password are correct the identified current user * is saved as currentUser in facade. */ private void saveInput() { createNewConfig(_providerText.getText().trim().toUpperCase(), _newProviderCombo.getItem(_newProviderCombo.getSelectionIndex())); } }