Project

General

Profile

Download (71 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 * Copyright (C) 2007 EDIT
3
 * European Distributed Institute of Taxonomy
4
 * http://www.e-taxonomy.eu
5
 *
6
 * The contents of this file are subject to the Mozilla Public License Version 1.1
7
 * See LICENSE.TXT at the top of this package for the full license terms.
8
 */
9

    
10
package eu.etaxonomy.taxeditor.preference;
11

    
12
import java.io.File;
13
import java.io.FileInputStream;
14
import java.io.FileOutputStream;
15
import java.io.IOException;
16
import java.net.URI;
17
import java.net.URISyntaxException;
18
import java.util.ArrayList;
19
import java.util.Arrays;
20
import java.util.Collections;
21
import java.util.HashMap;
22
import java.util.List;
23
import java.util.Map;
24
import java.util.Properties;
25
import java.util.Set;
26
import java.util.StringTokenizer;
27
import java.util.UUID;
28

    
29
import org.apache.commons.lang.StringUtils;
30
import org.apache.log4j.Logger;
31
import org.eclipse.equinox.internal.p2.ui.model.MetadataRepositoryElement;
32
import org.eclipse.jface.preference.IPreferenceStore;
33
import org.eclipse.jface.window.Window;
34
import org.eclipse.swt.widgets.Composite;
35
import org.eclipse.swt.widgets.Control;
36
import org.eclipse.swt.widgets.Shell;
37
import org.eclipse.ui.PlatformUI;
38

    
39
import eu.etaxonomy.cdm.api.application.ICdmRepository;
40
import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeConfigurator;
41
import eu.etaxonomy.cdm.api.service.IFeatureTreeService;
42
import eu.etaxonomy.cdm.api.service.ITermService;
43
import eu.etaxonomy.cdm.api.service.config.FindTaxaAndNamesConfiguratorImpl;
44
import eu.etaxonomy.cdm.api.service.config.IFindTaxaAndNamesConfigurator;
45
import eu.etaxonomy.cdm.common.CdmUtils;
46
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
47
import eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportConfigurator;
48
import eu.etaxonomy.cdm.model.common.DefinedTermBase;
49
import eu.etaxonomy.cdm.model.common.ICdmBase;
50
import eu.etaxonomy.cdm.model.common.IDefinedTerm;
51
import eu.etaxonomy.cdm.model.common.ISimpleTerm;
52
import eu.etaxonomy.cdm.model.common.Language;
53
import eu.etaxonomy.cdm.model.common.MarkerType;
54
import eu.etaxonomy.cdm.model.common.TermBase;
55
import eu.etaxonomy.cdm.model.common.TermType;
56
import eu.etaxonomy.cdm.model.description.FeatureTree;
57
import eu.etaxonomy.cdm.model.metadata.CdmPreference;
58
import eu.etaxonomy.cdm.model.metadata.CdmPreference.PrefKey;
59
import eu.etaxonomy.cdm.model.metadata.PreferencePredicate;
60
import eu.etaxonomy.cdm.model.metadata.PreferenceSubject;
61
import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
62
import eu.etaxonomy.cdm.strategy.match.DefaultMatchStrategy;
63
import eu.etaxonomy.cdm.strategy.match.IMatchStrategy;
64
import eu.etaxonomy.cdm.strategy.match.MatchException;
65
import eu.etaxonomy.cdm.strategy.match.MatchMode;
66
import eu.etaxonomy.taxeditor.model.AbstractUtility;
67
import eu.etaxonomy.taxeditor.model.MessagingUtils;
68
import eu.etaxonomy.taxeditor.model.NomenclaturalCodeHelper;
69
import eu.etaxonomy.taxeditor.store.CdmStore;
70
import eu.etaxonomy.taxeditor.store.TermStore;
71
import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
72
import eu.etaxonomy.taxeditor.ui.dialog.DefaultLanguageDialog;
73

    
74
/**
75
 * <p>
76
 * PreferencesUtil class.
77
 * </p>
78
 *
79
 * @author p.ciardelli
80
 * @author n.hoffmann
81
 * @created 05.12.2008
82
 * @version 1.0
83
 */
84
public class PreferencesUtil implements IPreferenceKeys {
85

    
86
	/**
87
	 *
88
	 */
89
	public static final String PREFERRED_TERMS_CHANGE = "preferred_terms";
90

    
91
	public static final String P2_REPOSITORIES_DELIM = ",";
92
	public static final String P2_REPOSITORY_FIELDS_DELIM = ";";
93

    
94
	private final static Logger logger = Logger.getLogger(PreferencesUtil.class);
95

    
96

    
97

    
98
	/**
99
	 * <p>
100
	 * getPreferenceStore
101
	 * </p>
102
	 *
103
	 * @return a {@link org.eclipse.jface.preference.IPreferenceStore} object.
104
	 */
105
	public static IPreferenceStore getPreferenceStore() {
106
		return TaxeditorStorePlugin.getDefault().getPreferenceStore();
107
	}
108

    
109
	/**
110
	 * <p>
111
	 * setPreferredNomenclaturalCode
112
	 * </p>
113
	 *
114
	 * @param preferredCode
115
	 *            a {@link eu.etaxonomy.cdm.model.name.NomenclaturalCode}
116
	 *            object.
117
	 */
118
	public static CdmPreference setPreferredNomenclaturalCode(
119
			String preferenceKey, boolean local) {
120
	    if (local){
121
	        getPreferenceStore().setValue(PREFERRED_NOMENCLATURAL_CODE_KEY,
122
	                preferenceKey);
123
	    }
124
	    else{
125
    		ICdmRepository controller;
126
    		controller = CdmStore.getCurrentApplicationConfiguration();
127
    		if (controller == null){
128
                return null;
129
            }
130
    		PrefKey key = null;
131
    		try{
132
    		    key = CdmPreference.NewKey(PreferenceSubject.NewDatabaseInstance(), PreferencePredicate.NomenclaturalCode);
133
    		}catch (Exception e){
134
    		    System.out.println(e.getStackTrace());
135
    		}
136
    		CdmPreference preference = null;
137

    
138
    		if (preferenceKey == null){
139
    			preference = controller.getPreferenceService().find(key);
140
    			if (preference == null){
141
    				return null;
142
    			} else{
143
//    				int index = StringUtils.lastIndexOf(preference.getValue(), ".");
144
//    				UUID uuid = UUID.fromString(preference.getValue().substring(index +1, preference.getValue().length()));
145
//    				preferredCode = NomenclaturalCode.getByUuid(uuid);
146

    
147
    				getPreferenceStore().setValue(PREFERRED_NOMENCLATURAL_CODE_KEY,
148
    				        preferenceKey);
149
    				getPreferenceStore().setValue(ALLOW_OVERRIDE_NOMENCLATURAL_CODE_KEY,preference.isAllowOverride());
150
    				return preference;
151
    			}
152
    		} else{
153
    			preference = CdmPreference.NewInstance(PreferenceSubject.NewDatabaseInstance(), PreferencePredicate.NomenclaturalCode, preferenceKey);
154
    			controller.getPreferenceService().set(preference);
155

    
156
    		}
157
	    }
158
        return null;
159

    
160

    
161

    
162
	}
163

    
164
	public static NomenclaturalCode getPreferredNomenclaturalCode(){
165
	    if (getPreferenceStore().getBoolean(OVERRIDE_NOMENCLATURAL_CODE_KEY)) {
166
            return getPreferredNomenclaturalCode(true);
167
        } else{
168
            return getPreferredNomenclaturalCode(false);
169
        }
170
	}
171

    
172
	/**
173
	 * <p>
174
	 * getPreferredNomenclaturalCode
175
	 * </p>
176
	 *
177
	 * @return a {@link eu.etaxonomy.cdm.model.name.NomenclaturalCode} object.
178
	 */
179
	public static NomenclaturalCode getPreferredNomenclaturalCode(boolean useLocal) {
180

    
181
		CdmPreference pref = null;
182
		if (!useLocal){
183
		    pref = getPreferenceFromDB(PreferencePredicate.NomenclaturalCode);
184
		}
185

    
186
	    String preferredCode;
187
	    if(pref == null){
188
	    	preferredCode = getPreferenceStore().getString(
189
					PREFERRED_NOMENCLATURAL_CODE_KEY);
190

    
191
	    }else{
192
	    	preferredCode = pref.getValue();
193
	    }
194

    
195
	    return getPreferredNomenclaturalCode(preferredCode);
196

    
197
	}
198

    
199
	/**
200
     * <p>
201
     * getPreferredNomenclaturalCode
202
     * </p>
203
     *
204
     * @return a {@link eu.etaxonomy.cdm.model.name.NomenclaturalCode} object.
205
     */
206
    public static NomenclaturalCode getPreferredNomenclaturalCode(String preferenceKeyNomenclaturalCode) {
207

    
208
        for (NomenclaturalCode code : NomenclaturalCodeHelper.getAllCodes()) {
209
            if (getPreferenceKey(code).equals(preferenceKeyNomenclaturalCode)) {
210
                return code;
211
            }
212
        }
213
        return null;
214
    }
215

    
216
	public static boolean isShowTaxonAssociations(){
217
        if (getPreferenceStore().getBoolean(SHOW_TAXON_ASSOCIATIONS_OVERRIDE) && getPreferenceStore().getBoolean(SHOW_TAXON_ASSOCIATIONS_ALLOW_OVERRIDE)) {
218
            return getPreferenceStore().getBoolean(SHOW_TAXON_ASSOCIATIONS);
219
        } else{
220
            CdmPreference pref = getPreferenceFromDB(PreferencePredicate.ShowTaxonAssociations);
221

    
222
            return pref!=null?Boolean.valueOf(pref.getValue()):false;
223
        }
224
    }
225

    
226
	public static boolean isShowLifeForm(){
227
        if (getPreferenceStore().getBoolean(SHOW_LIFE_FORM_OVERRIDE) && getPreferenceStore().getBoolean(SHOW_LIFE_FORM_ALLOW_OVERRIDE)) {
228
            return getPreferenceStore().getBoolean(SHOW_LIFE_FORM);
229
        } else{
230
            CdmPreference pref = getPreferenceFromDB(PreferencePredicate.ShowLifeForm);
231

    
232
            return pref!=null?Boolean.valueOf(pref.getValue()):false;
233
        }
234
    }
235

    
236
	public static boolean isDeterminationOnlyForFieldUnits(){
237
        if (getPreferenceStore().getBoolean(DETERMINATION_ONLY_FOR_FIELD_UNITS_OVERRIDE) && getPreferenceStore().getBoolean(DETERMINATIONS_ONLY_FOR_FIELDUNITS_ALLOW_OVERRIDE)) {
238
            return getPreferenceStore().getBoolean(DETERMINATION_ONLY_FOR_FIELD_UNITS);
239
        } else{
240
            CdmPreference pref = getPreferenceFromDB(PreferencePredicate.DeterminationOnlyForFieldUnits);
241

    
242
            return pref!=null?Boolean.valueOf(pref.getValue()):false;
243
        }
244
    }
245

    
246
	public static boolean isCollectingAreaInGeneralSection(){
247
        if (getPreferenceStore().getBoolean(SHOW_COLLECTING_AREAS_IN_GENERAL_SECTION_OVERRIDE) && getPreferenceStore().getBoolean(SHOW_COLLECTING_AREAS_IN_GENERAL_SECTION_ALLOW_OVERRIDE)) {
248
            return getPreferenceStore().getBoolean(SHOW_COLLECTING_AREAS_IN_GENERAL_SECTION);
249
        } else{
250
            CdmPreference pref = getPreferenceFromDB(PreferencePredicate.ShowCollectingAreasInGeneralSection);
251

    
252
            return pref!=null?Boolean.valueOf(pref.getValue()):false;
253
        }
254
    }
255

    
256
	public static boolean isShowSimpleDetailsView(){
257
        if (getPreferenceStore().getBoolean(OVERRIDE_NAME_DETAILS) && getPreferenceStore().getBoolean(ALLOW_OVERRIDE_NAME_DETAILS)) {
258
            return getPreferenceStore().getBoolean(SHOW_SIMPLE_NAME_DETAILS_SECTION);
259
        } else{
260
            CdmPreference pref = getPreferenceFromDB(PreferencePredicate.NameDetailsView);
261

    
262
            return pref!=null?Boolean.valueOf(pref.getValue()):false;
263
        }
264
    }
265

    
266

    
267

    
268
    public static CdmPreference getPreferenceFromDB(PreferencePredicate predicate){
269
        ICdmRepository controller;
270
        CdmPreference pref = null;
271

    
272
        try{
273
            if(CdmStore.isActive()){
274
                controller = CdmStore.getCurrentApplicationConfiguration();
275
                PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), predicate);
276
                pref = controller.getPreferenceService().find(key);
277
            }
278
        }catch(Exception e){
279
            e.printStackTrace();
280
        }
281

    
282
        return pref;
283

    
284
    }
285

    
286
    public static void setPreferenceToDB(CdmPreference preference){
287
        ICdmRepository controller;
288
        try{
289
            if(CdmStore.isActive()){
290
                controller = CdmStore.getCurrentApplicationConfiguration();
291
                controller.getPreferenceService().set(preference);
292
            }
293
        }catch(Exception e){
294
            e.printStackTrace();
295
        }
296

    
297
    }
298

    
299

    
300

    
301
	public static String getPreferredDefaultLangugae(){
302
	    String preferredLanguage = getPreferenceStore().getString(DEFAULT_LANGUAGE_EDITOR);
303
	    if(StringUtils.isNotEmpty(preferredLanguage) && StringUtils.isNotBlank(preferredLanguage)){
304
	        return preferredLanguage;
305
	    }
306
	    return null;
307
	}
308

    
309
	public static boolean isShowMediaPreview(){
310
        boolean isShowMediaPreview = getPreferenceStore().getBoolean(SHOW_MEDIA_PREVIEW);
311
        return isShowMediaPreview;
312
    }
313

    
314
	/**
315
	 * Get the match strategy for the given class that was stored in preferences
316
	 * or the default strategy if it was not stored in preferences
317
	 *
318
	 * @param clazz
319
	 *            a {@link java.lang.Class} object.
320
	 * @return a {@link eu.etaxonomy.cdm.strategy.match.IMatchStrategy} object.
321
	 */
322
	public static IMatchStrategy getMatchStrategy(Class clazz) {
323
		String className = clazz.getName();
324
		if (getPreferenceStore().getBoolean(MATCH_STRATEGY_PREFIX + className)) {
325
			IMatchStrategy matchStrategy = getDefaultMatchStrategy(clazz);
326

    
327
			for (String fieldName : matchStrategy.getMatchFieldPropertyNames()) {
328
				String matchModeName = getPreferenceStore().getString(
329
						getMatchStrategyFieldName(className, fieldName));
330
				MatchMode matchMode = MatchMode.valueOf(matchModeName);
331
				try {
332
					matchStrategy.setMatchMode(fieldName, matchMode);
333
				} catch (MatchException e) {
334
					MessagingUtils.error(PreferencesUtil.class, e);
335
					throw new RuntimeException(e);
336
				}
337
			}
338

    
339
			return matchStrategy;
340
		}
341
		return getDefaultMatchStrategy(clazz);
342
	}
343

    
344
	/**
345
	 * Stores a matchStrategy into the preference store.
346
	 *
347
	 * @param matchStrategy
348
	 *            a {@link eu.etaxonomy.cdm.strategy.match.IMatchStrategy}
349
	 *            object.
350
	 */
351
	public static void setMatchStrategy(IMatchStrategy matchStrategy) {
352
		String className = matchStrategy.getMatchClass().getName();
353
		getPreferenceStore().setValue(MATCH_STRATEGY_PREFIX + className, true);
354

    
355
		Set<String> matchFields = matchStrategy.getMatchFieldPropertyNames();
356

    
357
		for (String fieldName : matchFields) {
358
			getPreferenceStore().setValue(
359
					getMatchStrategyFieldName(className, fieldName),
360
					matchStrategy.getMatchMode(fieldName).name());
361
		}
362
	}
363

    
364
	/**
365
	 * Helper method to create the preference property for a match field.
366
	 *
367
	 * @param className
368
	 * @param fieldName
369
	 * @return
370
	 */
371
	private static String getMatchStrategyFieldName(String className,
372
			String fieldName) {
373
		return MATCH_STRATEGY_PREFIX + className + "." + fieldName;
374
	}
375

    
376
	/**
377
	 * Returns the default match strategy for a given class.
378
	 *
379
	 * @param clazz
380
	 *            a {@link java.lang.Class} object.
381
	 * @return a {@link eu.etaxonomy.cdm.strategy.match.IMatchStrategy} object.
382
	 */
383
	public static IMatchStrategy getDefaultMatchStrategy(Class clazz) {
384
		return DefaultMatchStrategy.NewInstance(clazz);
385
	}
386

    
387
	/**
388
	 * <p>
389
	 * getDateFormatPattern
390
	 * </p>
391
	 *
392
	 * @return a {@link java.lang.String} object.
393
	 */
394
	public static String getDateFormatPattern() {
395
		// TODO make this configurable in properties
396
		String pattern = "Y-M-d H:m";
397
		return pattern;
398
	}
399

    
400
	/**
401
	 * <p>
402
	 * addTermToPreferredTerms
403
	 * </p>
404
	 *
405
	 * @param term
406
	 *            a T object.
407
	 * @param <T>
408
	 *            a T object.
409
	 */
410
	public static <T extends TermBase> void addTermToPreferredTerms(T term) {
411

    
412
		// VocabularyEnum vocabulary =
413
		// VocabularyEnum.getVocabularyEnum(term.getClass());
414
		//
415
		// getPreferenceStore().setValue(getPreferenceKey(term),
416
		// VocabularyStore.getTermVocabulary(vocabulary).getTerms().contains(term));
417
		//
418
		// firePreferencesChanged(term.getClass());
419
	}
420

    
421
	/**
422
	 * Construct a unique key using the CdmBase object's uuid
423
	 *
424
	 * @param cdmBase
425
	 * @return
426
	 */
427
	private static String getPreferenceKey(ICdmBase cdmBase) {
428
		cdmBase = HibernateProxyHelper.deproxy(cdmBase);
429

    
430
		String key = cdmBase.getClass().getName().concat(".")
431
				.concat(cdmBase.getUuid().toString());
432
		if (key.contains("javassist")) {
433
			MessagingUtils.info("proxy");
434
		}
435
		return key;
436
	}
437

    
438
	/**
439
	 * Construct a unique key using the CdmBase object's uuid
440
	 *
441
	 * @param cdmBase
442
	 * @return
443
	 */
444
	public static String getPreferenceKey(ISimpleTerm simpleTerm) {
445
		simpleTerm = HibernateProxyHelper.deproxy(simpleTerm);
446
		String key = simpleTerm.getClass().getName().concat(".")
447
				.concat(simpleTerm.getUuid().toString());
448
		if (key.contains("javassist")) {
449
			MessagingUtils.warn(PreferencesUtil.class,
450
					"Trying to persist a preference based on a proxy class.");
451
		}
452
		return key;
453
	}
454

    
455

    
456

    
457
	/**
458
	 * Construct a unique key using the CdmBase object's uuid
459
	 *
460
	 * @param cdmBase
461
	 * @return
462
	 */
463
	public static String getPreferenceKey(IDefinedTerm definedTerm) {
464
		definedTerm = HibernateProxyHelper.deproxy(definedTerm);
465
		String key = definedTerm.getClass().getName().concat(".")
466
				.concat(definedTerm.getUuid().toString());
467
		if (key.contains("javassist")) {
468
			MessagingUtils.warn(PreferencesUtil.class,
469
					"Trying to persist a preference based on a proxy class.");
470
		}
471
		return key;
472
	}
473

    
474
	/**
475
	 * Retrieves search preferences from the preference store
476
	 *
477
	 * @return an {@link ITaxonServiceConfigurator} to pass to search methods
478
	 */
479
	public static IFindTaxaAndNamesConfigurator getSearchConfigurator() {
480
		IFindTaxaAndNamesConfigurator configurator = initializeSearchConfigurator();
481

    
482
		configurator.setDoTaxa(getPreferenceStore().getBoolean(
483
				TAXON_SERVICE_CONFIGURATOR_TAXA));
484
		configurator.setDoSynonyms(getPreferenceStore().getBoolean(
485
				TAXON_SERVICE_CONFIGURATOR_SYNONYMS));
486
		configurator.setDoNamesWithoutTaxa(getPreferenceStore().getBoolean(
487
				TAXON_SERVICE_CONFIGURATOR_NAMES));
488
		configurator.setDoTaxaByCommonNames(getPreferenceStore().getBoolean(
489
				TAXON_SERVICE_CONFIGURATOR_COMMON_NAMES));
490
		//configurator.setMatchMode(eu.etaxonomy.cdm.persistence.query.MatchMode.valueOf(getPreferenceStore().getString(TAXON_SERVICE_CONFIGURATOR_MATCH_MODE)));
491

    
492
		return configurator;
493
	}
494

    
495
	/**
496
	 * create new preferences, setting all search options to true
497
	 *
498
	 * @return a
499
	 *         {@link eu.etaxonomy.cdm.api.service.config.ITaxonServiceConfigurator}
500
	 *         object.
501
	 */
502
	public static IFindTaxaAndNamesConfigurator initializeSearchConfigurator() {
503
		IFindTaxaAndNamesConfigurator configurator = FindTaxaAndNamesConfiguratorImpl.NewInstance();
504

    
505
		configurator.setDoTaxa(true);
506
		configurator.setDoSynonyms(true);
507
		configurator.setDoNamesWithoutTaxa(true);
508
		configurator.setDoTaxaByCommonNames(true);
509

    
510
		configurator.setTaxonPropertyPath(Arrays.asList("$", "titleCache",
511
				"name", "name.$", "relationsFromThisTaxon.$"));
512

    
513
		configurator.setSynonymPropertyPath(Arrays.asList("$", "titleCache",
514
				"name", "name.$", "synonyms.relatedTo.*"));
515

    
516
		// DEFAULT VALUES
517
		// match mode is a simple like, actually all other match modes are kind
518
		// of bogus
519
		configurator
520
				.setMatchMode(eu.etaxonomy.cdm.persistence.query.MatchMode.ANYWHERE);
521
		// we set page number and size here as this should always be unlimited
522
		configurator.setPageNumber(0);
523
		// TODO currently limit results to 10000
524
		configurator.setPageSize(10000);
525

    
526
		return configurator;
527
	}
528

    
529
	/**
530
	 * Store search preferences
531
	 *
532
	 * @param configurator
533
	 *            a
534
	 *            {@link eu.etaxonomy.cdm.api.service.config.ITaxonServiceConfigurator}
535
	 *            object.
536
	 */
537
	public static void setSearchConfigurator(
538
			IFindTaxaAndNamesConfigurator configurator) {
539
		getPreferenceStore().setValue(TAXON_SERVICE_CONFIGURATOR_TAXA,
540
				configurator.isDoTaxa());
541
		getPreferenceStore().setValue(TAXON_SERVICE_CONFIGURATOR_SYNONYMS,
542
				configurator.isDoSynonyms());
543
		getPreferenceStore().setValue(TAXON_SERVICE_CONFIGURATOR_NAMES,
544
				configurator.isDoNamesWithoutTaxa());
545
		getPreferenceStore().setValue(TAXON_SERVICE_CONFIGURATOR_COMMON_NAMES,
546
				configurator.isDoTaxaByCommonNames());
547
	}
548

    
549
	/**
550
	 * <p>
551
	 * firePreferencesChanged
552
	 * </p>
553
	 *
554
	 * @param clazz
555
	 *            a {@link java.lang.Class} object.
556
	 */
557
	public static void firePreferencesChanged(Class clazz) {
558
		getPreferenceStore().firePropertyChangeEvent(PREFERRED_TERMS_CHANGE,
559
				null, clazz);
560
	}
561

    
562
	/**
563
	 * Set default values for preferences
564
	 */
565
	public static void setDefaults() {
566
		getPreferenceStore().setDefault(TAXON_SERVICE_CONFIGURATOR_TAXA, true);
567
		getPreferenceStore().setDefault(TAXON_SERVICE_CONFIGURATOR_SYNONYMS,
568
				true);
569
		getPreferenceStore().setDefault(EDIT_MAP_SERVICE_ACCES_POINT,
570
				"http://edit.africamuseum.be/edit_wp5/v1.2/rest_gen.php");
571
		//FIXME : changed default for SHOULD_CONNECT_AT_STARTUP to false (ticket 3828) until resolution
572
		getPreferenceStore().setDefault(SHOULD_CONNECT_AT_STARTUP, false);
573
		getPreferenceStore().setDefault(OPENURL_ACCESS_POINT,
574
				"http://www.biodiversitylibrary.org/openurl");
575
		getPreferenceStore().setDefault(OPENURL_IMAGE_MAX_WIDTH, "1000");
576
		getPreferenceStore().setDefault(OPENURL_IMAGE_MAX_HEIGHT, "1000");
577
		//Distribution Editor:
578
		getPreferenceStore().setDefault(DISTRIBUTION_AREA_PREFRENCES_ACTIVE, false);
579
		getPreferenceStore().setDefault(CHECKLIST_AREA_DISPLAY, CHECKLIST_AREA_DISPLAY_TITLE);
580
		getPreferenceStore().setDefault(CHECKLIST_SYMBOL, false);
581

    
582

    
583
		//Name Details
584
		getPreferenceStore().setDefault(SHOW_NAME_DETAILS_SECTION_ATOMISED_EPITHETS, true);
585
		getPreferenceStore().setDefault(SHOW_NAME_DETAILS_SECTION_AUTHORSHIP_CACHE, true);
586
		getPreferenceStore().setDefault(SHOW_NAME_DETAILS_SECTION_AUTHORSHIP, true);
587
		getPreferenceStore().setDefault(SHOW_NAME_DETAILS_SECTION_HYBRID, true);
588
		getPreferenceStore().setDefault(SHOW_NAME_DETAILS_SECTION_LSID, true);
589
		getPreferenceStore().setDefault(SHOW_NAME_DETAILS_SECTION_NAME_RELATIONSHIP, true);
590
		getPreferenceStore().setDefault(SHOW_NAME_DETAILS_SECTION_NAMECACHE, true);
591
		getPreferenceStore().setDefault(SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_CODE, true);
592
		getPreferenceStore().setDefault(SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_REFERENCE, true);
593
		getPreferenceStore().setDefault(SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_STATUS, true);
594
		getPreferenceStore().setDefault(SHOW_NAME_DETAILS_SECTION_PROTOLOGUE, true);
595
		getPreferenceStore().setDefault(SHOW_NAME_DETAILS_SECTION_RANK, true);
596
		getPreferenceStore().setDefault(SHOW_NAME_DETAILS_SECTION_TYPE_DESIGNATION, true);
597
		//Navigator preferences
598
		getPreferenceStore().setDefault(SORT_NODES_NATURALLY, false);
599
		getPreferenceStore().setDefault(SORT_NODES_ALPHABETICALLY, false);
600
		getPreferenceStore().setDefault(SORT_TAXA_BY_RANK_AND_NAME, true);
601
		//override db preferences
602
		getPreferenceStore().setDefault(ABCD_IMPORT_OVERRIDE, false);
603
		getPreferenceStore().setDefault(SHOW_SPECIMEN_OVERRIDE, false);
604
		getPreferenceStore().setDefault(OVERRIDE_NAME_DETAILS, false);
605
		getPreferenceStore().setDefault(DISTRIBUTION_AREA_PREFRENCES_ACTIVE_OVERRIDE, false);
606

    
607
		getPreferenceStore().setDefault(FILTER_COMMON_NAME_REFERENCES, false);
608
		getPreferenceStore().setDefault(SHOW_SPECIMEN, true);
609
		getPreferenceStore().setDefault(SHOW_TAXONNODE_WIZARD, true);
610
		getPreferenceStore().setDefault(SHOW_NAME_IN_SOURCE, true);
611
		getPreferenceStore().setDefault(SHOW_ID_IN_SOURCE, true);
612
		getPreferenceStore().setDefault(DISABLE_MULTI_CLASSIFICATION, false);
613

    
614
	}
615

    
616
	/**
617
	 * <p>
618
	 * checkNomenclaturalCode
619
	 * </p>
620
	 */
621
	public static void checkNomenclaturalCode() {
622
		// First time Editor is opened, no nomenclatural code has been set
623
		if (PreferencesUtil.getPreferredNomenclaturalCode(true) == null) {
624
			PreferencesUtil.setPreferredNomenclaturalCode(getPreferenceKey(NomenclaturalCode.ICNAFP), true);
625
		}
626

    
627

    
628

    
629
	}
630
	public static void setNomenclaturalCodePreferences(){
631
	    ICdmRepository controller;
632
        controller = CdmStore.getCurrentApplicationConfiguration();
633
        PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewDatabaseInstance(), PreferencePredicate.NomenclaturalCode);
634
        CdmPreference preference = null;
635
        if (controller == null){
636
            return ;
637
        }
638
        preference = controller.getPreferenceService().find(key);
639
        if (preference == null){
640
            return;
641
        }
642
        getPreferenceStore().setValue(ALLOW_OVERRIDE_NOMENCLATURAL_CODE_KEY, preference.isAllowOverride());
643

    
644
        int index = StringUtils.lastIndexOf(preference.getValue(), ".");
645
        UUID uuid = UUID.fromString(preference.getValue().substring(index +1, preference.getValue().length()));
646
        NomenclaturalCode preferredCode = NomenclaturalCode.getByUuid(uuid);
647

    
648
        getPreferenceStore().setValue(PREFERRED_NOMENCLATURAL_CODE_KEY,
649
                getPreferenceKey(preferredCode));
650

    
651
	}
652

    
653
	public static void checkDefaultLanguage(){
654
	    if(PreferencesUtil.getPreferredDefaultLangugae() == null){
655
	       Shell shell = AbstractUtility.getShell();
656
	       int open = new DefaultLanguageDialog(shell).open();
657
	       if(open == Window.OK){
658
	           PlatformUI.getWorkbench().restart();
659
	       }
660
	    }else{
661
	        //TODO:In case of a reinstall, the config.ini will be overwritten
662
	        //     here you create config.ini with the stored key from preferences
663
	    }
664
	}
665

    
666
	/**
667
	 * <p>
668
	 * getMapServiceAccessPoint
669
	 * </p>
670
	 *
671
	 * @return a {@link java.lang.String} object.
672
	 */
673
	public static String getMapServiceAccessPoint() {
674
		return getPreferenceStore().getString(EDIT_MAP_SERVICE_ACCES_POINT);
675
	}
676

    
677
	/**
678
	 * <p>
679
	 * shouldConnectAtStartUp
680
	 * </p>
681
	 *
682
	 * @return a boolean.
683
	 */
684
	public static boolean shouldConnectAtStartUp() {
685
		//FIXME :  force SHOULD_CONNECT_AT_STARTUP to false (ticket 3828) until resolution
686
		//return getPreferenceStore().getBoolean(SHOULD_CONNECT_AT_STARTUP);
687
		return false;
688
	}
689

    
690
	/**
691
	 * <p>
692
	 * getDefaultFeatureTreeForTextualDescription
693
	 * </p>
694
	 *
695
	 * @return a {@link eu.etaxonomy.cdm.model.description.FeatureTree} object.
696
	 */
697
	public static FeatureTree getDefaultFeatureTreeForTextualDescription() {
698
		String uuidString = getPreferenceStore().getString(
699
				FEATURE_TREE_DEFAULT_TEXT);
700
		return CdmUtils.isEmpty(uuidString) ? null : CdmStore.getService(
701
				IFeatureTreeService.class).load(UUID.fromString(uuidString));
702
	}
703

    
704
	/**
705
	 * <p>
706
	 * getDefaultFeatureTreeForStructuredDescription
707
	 * </p>
708
	 *
709
	 * @return a {@link eu.etaxonomy.cdm.model.description.FeatureTree} object.
710
	 */
711
	public static FeatureTree getDefaultFeatureTreeForStructuredDescription() {
712
		String uuidString = getPreferenceStore().getString(
713
				FEATURE_TREE_DEFAULT_STRUCTURE);
714
		return CdmUtils.isEmpty(uuidString) ? null : CdmStore.getService(
715
				IFeatureTreeService.class).load(UUID.fromString(uuidString));
716
	}
717

    
718
	/**
719
	 * <p>
720
	 * setSortRanksHierarchichally
721
	 * </p>
722
	 *
723
	 * @param selection
724
	 *            a boolean.
725
	 */
726
	public static void setSortRanksHierarchichally(boolean selection) {
727
		getPreferenceStore().setValue(SORT_RANKS_HIERARCHICHALLY, selection);
728
	}
729

    
730
	/**
731
	 * <p>
732
	 * getSortRanksHierarchichally
733
	 * </p>
734
	 *
735
	 * @return a boolean.
736
	 */
737
	public static boolean getSortRanksHierarchichally() {
738
		return getPreferenceStore().getBoolean(SORT_RANKS_HIERARCHICHALLY);
739
	}
740

    
741
	public static boolean isMultilanguageTextEditingCapability() {
742
		return getPreferenceStore().getBoolean(
743
				MULTILANGUAGE_TEXT_EDITING_CAPABILITY);
744
	}
745

    
746
	public static Language getGlobalLanguage() {
747

    
748

    
749
		String languageUuidString = getPreferenceStore().getString(
750
				GLOBAL_LANGUAGE_UUID);
751

    
752
		if(!CdmStore.isActive()) {
753
            MessagingUtils.noDataSourceWarningDialog(languageUuidString);
754
            return null;
755
        }
756

    
757
		if (CdmUtils.isBlank(languageUuidString)) {
758
			return Language.getDefaultLanguage();
759
		}
760

    
761
		UUID languageUuid = UUID.fromString(languageUuidString);
762
		return (Language) CdmStore.getService(ITermService.class).load(
763
				languageUuid);
764
	}
765

    
766
	public static void setGlobalLanguage(Language language) {
767
	    if(language != null) {
768
	        getPreferenceStore().setValue(GLOBAL_LANGUAGE_UUID,language.getUuid().toString());
769
	        CdmStore.setDefaultLanguage(language);
770
	    }
771

    
772
	}
773

    
774
	/**
775
	 * @return
776
	 */
777
	public static Map<MarkerType, Boolean> getEditMarkerTypePreferences() {
778
		List<MarkerType> markerTypes = CdmStore.getTermManager()
779
				.getPreferredTerms(MarkerType.class);
780

    
781
		Map<MarkerType, Boolean> result = new HashMap<MarkerType, Boolean>();
782

    
783
		for (MarkerType markerType : markerTypes) {
784
			String name = getMarkerTypeEditingPreferenceKey(markerType);
785
			Boolean value = getPreferenceStore().getBoolean(name);
786

    
787
			result.put(markerType, value);
788
		}
789

    
790
		return result;
791
	}
792

    
793
	/**
794
	 * @param markerTypeEditingMap
795
	 */
796
	public static void setEditMarkerTypePreferences(
797
			Map<MarkerType, Boolean> markerTypeEditingMap) {
798
		for (MarkerType markerType : markerTypeEditingMap.keySet()) {
799
			String name = getMarkerTypeEditingPreferenceKey(markerType);
800
			getPreferenceStore().setValue(name,
801
					markerTypeEditingMap.get(markerType));
802
		}
803

    
804
	}
805

    
806
	private static String getMarkerTypeEditingPreferenceKey(
807
			MarkerType markerType) {
808
		markerType = HibernateProxyHelper.deproxy(markerType);
809
		return markerType.getClass().getName() + EDIT_MARKER_TYPE_PREFIX;
810
	}
811

    
812
	/**
813
	 * <p>
814
	 * setEditMarkerTypePreference
815
	 * </p>
816
	 *
817
	 * @param input
818
	 *            a {@link org.eclipse.ui.IEditorInput} object.
819
	 * @param markerType
820
	 *            a {@link eu.etaxonomy.cdm.model.common.MarkerType} object.
821
	 * @param edit
822
	 *            a boolean.
823
	 */
824
	public static void setEditMarkerTypePreference(MarkerType markerType,
825
			boolean edit) {
826
		getPreferenceStore().setValue(
827
				getMarkerTypeEditingPreferenceKey(markerType), edit);
828
	}
829

    
830
	/**
831
	 * @return
832
	 */
833
	public static DerivedUnitFacadeConfigurator getDerivedUnitConfigurator() {
834
		DerivedUnitFacadeConfigurator configurator = DerivedUnitFacadeConfigurator
835
				.NewInstance();
836
		configurator.setMoveDerivedUnitMediaToGallery(true);
837
		configurator.setMoveFieldObjectMediaToGallery(true);
838
		return configurator;
839
	}
840

    
841
	/**
842
	 * This method will write language properties to the config.ini located in the configuration folder
843
	 * of the Taxonomic Ediitor. <b>This method is only used to set the default language for Taxonomic Editor.</b>
844
	 *
845
	 * @param setLanguage 0 is for german and 1 for english.
846
	 * @throws IOException
847
	 */
848
    public void writePropertyToConfigFile(int setLanguage) throws IOException {
849
        File file = org.eclipse.core.runtime.preferences.ConfigurationScope.INSTANCE.getLocation().toFile();
850
        //give warning to user if the directory has no write access
851
        if(file == null){
852
            throw new IOException();
853
        }
854
        Properties properties = load(file.getAbsolutePath()+"/config.ini");
855
        switch(setLanguage){
856
        case 0:
857
            properties.setProperty("osgi.nl", "de");
858
            PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.DEFAULT_LANGUAGE_EDITOR, "de");
859
            break;
860
        case 1:
861
            properties.setProperty("osgi.nl", "en");
862
            PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.DEFAULT_LANGUAGE_EDITOR, "en");
863
            break;
864
        default:
865
            break;
866
        }
867
        save(file+"/config.ini", properties);
868
    }
869

    
870
    /**
871
     * This method loads a property from a given file and returns it.
872
     *
873
     * @param filename
874
     * @return
875
     * @throws IOException
876
     */
877
    private Properties load(String filename) throws IOException {
878
        FileInputStream in = new FileInputStream(filename);
879
        Properties prop = new Properties();
880
        prop.load(in);
881
        in.close();
882
        return prop;
883
    }
884

    
885
    /**
886
     * This method saves a property to the specified file.
887
     *
888
     * @param filename
889
     * @param properties
890
     * @throws IOException
891
     */
892
    private void save(String filename, Properties properties) throws IOException{
893
        FileOutputStream fos =  new FileOutputStream(filename);
894
        properties.store(fos, "");
895
        fos.close();
896
    }
897

    
898
    /**
899
     * Saves a list of P2 Metadata Repositories as string with specified delimiters
900
     *
901
     * @param p2Repos
902
     */
903
    public static void setP2Repositories(List<MetadataRepositoryElement> p2Repos) {
904
        StringBuilder sb = new StringBuilder();
905
        for(MetadataRepositoryElement p2Repo : p2Repos) {
906
            sb.append(P2_REPOSITORIES_DELIM);
907
            if(p2Repo.getName() == null || p2Repo.getName().isEmpty()) {
908
                sb.append("-");
909
            } else {
910
                sb.append(p2Repo.getName());
911
            }
912
            sb.append(P2_REPOSITORY_FIELDS_DELIM);
913
            sb.append(p2Repo.getLocation().toString());
914
            sb.append(P2_REPOSITORY_FIELDS_DELIM);
915
            sb.append(String.valueOf(p2Repo.isEnabled()));
916
        }
917
        getPreferenceStore().setValue(P2_REPOSITORY_LIST, sb.toString());
918
    }
919

    
920

    
921
    /**
922
     * Retrieves a list of previously saved P2 repositories
923
     *
924
     * @return
925
     */
926
    public static List<MetadataRepositoryElement> getP2Repositories() {
927
        List<MetadataRepositoryElement> p2Repos = new ArrayList<MetadataRepositoryElement>();
928
        String p2ReposPref =  getPreferenceStore().getString(P2_REPOSITORY_LIST);
929
        if(p2ReposPref != null && !p2ReposPref.isEmpty()) {
930
            StringTokenizer p2ReposPrefST = new StringTokenizer(p2ReposPref,P2_REPOSITORIES_DELIM);
931

    
932
            while(p2ReposPrefST.hasMoreTokens()) {
933
                String p2RepoStr = p2ReposPrefST.nextToken();
934
                StringTokenizer p2ReposStrST = new StringTokenizer(p2RepoStr,P2_REPOSITORY_FIELDS_DELIM);
935
                if(p2ReposStrST.countTokens()==3) {
936
                    String nickname = p2ReposStrST.nextToken();
937
                    URI uri = null;
938
                    try {
939
                        uri = new URI(p2ReposStrST.nextToken());
940
                    } catch (URISyntaxException e) {
941
                        continue;
942
                    }
943
                    boolean enabled = Boolean.parseBoolean(p2ReposStrST.nextToken());
944
                    MetadataRepositoryElement mre = new MetadataRepositoryElement(null, uri, true);
945
                    mre.setNickname(nickname);
946
                    mre.setEnabled(enabled);
947
                    p2Repos.add(mre);
948
                }
949
            }
950
        }
951

    
952
        return p2Repos;
953
    }
954

    
955
    /**
956
     * enables/disables nested composite. <br>
957
     *
958
     * @param ctrl - Composite to be en-/disabeld
959
     * @param enabled - boolean
960
     */
961
    public static void recursiveSetEnabled(Control ctrl, boolean enabled) {
962
        if (ctrl instanceof Composite) {
963
            Composite comp = (Composite) ctrl;
964
            for (Control c : comp.getChildren()) {
965
                recursiveSetEnabled(c, enabled);
966
            }
967
        } else {
968
            ctrl.setEnabled(enabled);
969
        }
970
    }
971

    
972
    /**
973
	 * <p>
974
	 * getSortRanksNaturally
975
	 * </p>
976
    	 *
977
    	 * @return a boolean.
978
	 */
979
	public static boolean getSortNodesNaturally() {
980
		return getPreferenceStore().getBoolean(SORT_NODES_NATURALLY);
981
	}
982

    
983
	/**
984
	 * <p>
985
	 * setSortRanksNaturally
986
	 * </p>
987
	 *
988
	 * @param selection
989
	 *            a boolean.
990
	 */
991
	public static void setSortNodesNaturally(boolean selection) {
992
		getPreferenceStore().setValue(SORT_NODES_NATURALLY, selection);
993
	}
994

    
995

    
996
	/**
997
	 * <p>
998
	 * getSortRanksNaturally
999
	 * </p>
1000
	 *
1001
	 * @return a boolean.
1002
	 */
1003
	public static boolean getSortNodesStrictlyAlphabetically() {
1004
		return getPreferenceStore().getBoolean(SORT_NODES_ALPHABETICALLY);
1005
	}
1006

    
1007
	/**
1008
	 * <p>
1009
	 * setSortRanksNaturally
1010
	 * </p>
1011
	 *
1012
	 * @param selection
1013
	 *            a boolean.
1014
	 */
1015
	public static void setSortNodesStrictlyAlphabetically(boolean selection) {
1016
		getPreferenceStore().setValue(SORT_NODES_ALPHABETICALLY, selection);
1017
	}
1018

    
1019
	/**
1020
	 * <p>
1021
	 * setStoreNavigatorState
1022
	 * </p>
1023
	 *
1024
	 * @param selection
1025
	 *            a boolean.
1026
	 */
1027
	public static boolean isStoreNavigatorState() {
1028
		return getPreferenceStore().getBoolean(RESTORE_NAVIGATOR_STATE);
1029

    
1030
	}
1031

    
1032
	/**
1033
	 * <p>
1034
	 * setStoreNavigatorState
1035
	 * </p>
1036
	 *
1037
	 * @param selection
1038
	 *            a boolean.
1039
	 */
1040
	public static void setStoreNavigatorState(boolean selection) {
1041
		getPreferenceStore().setValue(RESTORE_NAVIGATOR_STATE, selection);
1042

    
1043
	}
1044

    
1045
    /**
1046
     * @return
1047
     */
1048
    public static boolean isShowUpWidgetIsDisposedMessages() {
1049
       return getPreferenceStore().getBoolean(IS_SHOW_UP_WIDGET_IS_DISPOSED);
1050
    }
1051
    public static void setShowUpWidgetIsDisposedMessages(boolean selection) {
1052
        getPreferenceStore().setValue(IS_SHOW_UP_WIDGET_IS_DISPOSED, selection);
1053
    }
1054

    
1055
    /**
1056
     * @return
1057
     */
1058
    public static boolean isShowIdInVocabularyInChecklistEditor() {
1059
        String area_display = getPreferenceStore().getString(IPreferenceKeys.CHECKLIST_AREA_DISPLAY);
1060
        if (area_display.equals(CHECKLIST_AREA_DISPLAY_ID_IN_VOCABULARY)) {
1061
            return true;
1062
        }else{
1063
            return false;
1064
        }
1065
    }
1066
    public static boolean isShowSymbol1InChecklistEditor() {
1067
        String area_display = getPreferenceStore().getString(IPreferenceKeys.CHECKLIST_AREA_DISPLAY);
1068
        if (area_display.equals(CHECKLIST_AREA_DISPLAY_SYMBOL1)) {
1069
            return true;
1070
        }else{
1071
            return false;
1072
        }
1073
     }
1074
    public static boolean isShowSymbol2InChecklistEditor() {
1075
        String area_display = getPreferenceStore().getString(IPreferenceKeys.CHECKLIST_AREA_DISPLAY);
1076
        if (area_display.equals(CHECKLIST_AREA_DISPLAY_SYMBOL2)) {
1077
            return true;
1078
        }else{
1079
            return false;
1080
        }
1081
     }
1082
    public static void setShowIdInVocabularyInChecklistEditor(String selection) {
1083
        getPreferenceStore().setValue(CHECKLIST_AREA_DISPLAY, selection);
1084
    }
1085

    
1086
    /**
1087
     * @return
1088
     */
1089
    public static boolean isShowSymbolInChecklistEditor() {
1090
       return getPreferenceStore().getBoolean(IPreferenceKeys.CHECKLIST_SYMBOL);
1091
    }
1092
    public static void setShowSymbolInChecklistEditor(boolean selection) {
1093
        getPreferenceStore().setValue(CHECKLIST_SYMBOL, selection);
1094
    }
1095

    
1096
    /**
1097
     * @return
1098
     */
1099
    public static boolean isShowRankInChecklistEditor() {
1100
        return getPreferenceStore().getBoolean(IPreferenceKeys.CHECKLIST_SHOW_RANK);
1101
    }
1102
    public static void setShowRankInChecklistEditor(boolean selection) {
1103
        getPreferenceStore().setValue(CHECKLIST_SHOW_RANK, selection);
1104
    }
1105

    
1106
    /**
1107
     * @param object
1108
     * @param b
1109
     * @return
1110
     */
1111
    public static NameDetailsConfigurator getPreferredNameDetailsConfiguration( boolean local) {
1112
        NameDetailsConfigurator config = new NameDetailsConfigurator(true);
1113

    
1114
        CdmPreference preference = null;
1115

    
1116
        if (!local) {
1117
            preference = getPreferenceFromDB(PreferencePredicate.NameDetailsView);
1118
            if (preference == null){
1119
                return null;
1120
            }
1121

    
1122
            getPreferenceStore().setValue(ALLOW_OVERRIDE_NAME_DETAILS, preference.isAllowOverride());
1123

    
1124
            //the preference value is build like this:
1125
            //<section1>:true;<section2>:false....
1126

    
1127
            String value = preference.getValue();
1128
            String [] sections = value.split(";");
1129
            Map<String, Boolean> sectionMap = new HashMap<String, Boolean>();
1130
            String[] sectionValues;
1131
            for (String sectionValue: sections){
1132
                sectionValues = sectionValue.split(":");
1133
                sectionMap.put(sectionValues[0], Boolean.valueOf(sectionValues[1]));
1134
            }
1135
            config.setAllowOverride(preference.isAllowOverride());
1136
            config.setSimpleDetailsViewActivated(getValue(sectionMap, "simpleViewActivated"));
1137

    
1138
    //        getPreferenceStore().setValue(SHOW_SIMPLE_NAME_DETAILS_TAXON,
1139
    //                (getValue(sectionMap, "taxon")));
1140
            config.setTaxonSectionActivated(getValue(sectionMap, "taxon"));
1141

    
1142
    //        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_LSID,
1143
    //                (getValue(sectionMap, "lsid")));
1144
            config.setLSIDActivated(getValue(sectionMap, "lsid"));
1145

    
1146
    //        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_CODE,
1147
    //                (getValue(sectionMap, "nc")));
1148
            config.setNomenclaturalCodeActived(getValue(sectionMap, "nc"));
1149

    
1150
    //        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_APPENDED_PHRASE,
1151
    //                (getValue(sectionMap, "ap")));
1152
            config.setAppendedPhraseActivated(getValue(sectionMap, "ap"));
1153

    
1154
    //        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_RANK,
1155
    //                (getValue(sectionMap, "rank")));
1156
            config.setRankActivated(getValue(sectionMap, "rank"));
1157

    
1158

    
1159
    //        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_ATOMISED_EPITHETS,
1160
    //                (getValue(sectionMap, "atomisedEpithets")));
1161
            config.setAtomisedEpithetsActivated(getValue(sectionMap, "atomisedEpithets"));
1162

    
1163
    //        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_AUTHORSHIP,
1164
    //                (getValue(sectionMap,"author")));
1165
            config.setAuthorshipSectionActivated(getValue(sectionMap,"author"));
1166

    
1167
    //        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_REFERENCE,
1168
    //                (getValue(sectionMap, "nomRef")));
1169
            config.setNomenclaturalReferenceSectionActivated(sectionMap.get("nomRef"));
1170

    
1171
    //        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_STATUS,
1172
    //                (getValue(sectionMap, "nomStat")));
1173
            config.setNomenclaturalStatusSectionActivated(getValue(sectionMap, "nomStat"));
1174

    
1175

    
1176
    //        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_PROTOLOGUE,
1177
    //                (getValue(sectionMap,"protologue")));
1178
            config.setProtologueActivated(getValue(sectionMap,"protologue"));
1179

    
1180
    //        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_TYPE_DESIGNATION,
1181
    //                (getValue(sectionMap,"typeDes")));
1182
            config.setTypeDesignationSectionActivated(getValue(sectionMap,"typeDes"));
1183

    
1184
    //        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_NAME_RELATIONSHIP,
1185
    //                (getValue(sectionMap,"nameRelation")));
1186
            config.setNameRelationsSectionActivated(getValue(sectionMap,"nameRelation"));
1187

    
1188
    //        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_HYBRID,
1189
    //                (getValue(sectionMap, "hybrid")));
1190
            config.setHybridActivated(getValue(sectionMap,"hybrid"));
1191
        }else{
1192
            config.setSimpleDetailsViewActivated(getPreferenceStore().getBoolean(SHOW_SIMPLE_NAME_DETAILS_SECTION));
1193
            config.setTaxonSectionActivated(getPreferenceStore().getBoolean(SHOW_SIMPLE_NAME_DETAILS_TAXON));
1194
            config.setLSIDActivated(getPreferenceStore().getBoolean(SHOW_NAME_DETAILS_SECTION_LSID));
1195
            config.setNomenclaturalCodeActived(getPreferenceStore().getBoolean(SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_CODE));
1196
            config.setAppendedPhraseActivated(getPreferenceStore().getBoolean(SHOW_NAME_DETAILS_SECTION_APPENDED_PHRASE));
1197
            config.setRankActivated(getPreferenceStore().getBoolean(SHOW_NAME_DETAILS_SECTION_RANK));
1198
            config.setAtomisedEpithetsActivated(getPreferenceStore().getBoolean(SHOW_NAME_DETAILS_SECTION_ATOMISED_EPITHETS));
1199
            config.setAuthorshipSectionActivated(getPreferenceStore().getBoolean(SHOW_NAME_DETAILS_SECTION_AUTHORSHIP));
1200
            config.setNomenclaturalReferenceSectionActivated(getPreferenceStore().getBoolean(SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_REFERENCE));
1201
            config.setNomenclaturalStatusSectionActivated(getPreferenceStore().getBoolean(SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_STATUS));
1202
            config.setProtologueActivated(getPreferenceStore().getBoolean(SHOW_NAME_DETAILS_SECTION_PROTOLOGUE));
1203
            config.setTypeDesignationSectionActivated(getPreferenceStore().getBoolean(SHOW_NAME_DETAILS_SECTION_TYPE_DESIGNATION));
1204
            config.setNameRelationsSectionActivated(getPreferenceStore().getBoolean(SHOW_NAME_DETAILS_SECTION_NAME_RELATIONSHIP));
1205
            config.setHybridActivated(getPreferenceStore().getBoolean(SHOW_NAME_DETAILS_SECTION_HYBRID));
1206
        }
1207
        return config;
1208
    }
1209

    
1210
    /**
1211
     * @param object
1212
     * @param b
1213
     * @return
1214
     */
1215
    public static void setPreferredNameDetailsConfiguration(NameDetailsConfigurator config, boolean local) {
1216
        CdmPreference preference = null;
1217

    
1218
        if (!local) {
1219
            preference = CdmPreference.NewInstance(PreferenceSubject.NewDatabaseInstance(), PreferencePredicate.NameDetailsView, config.toString());
1220

    
1221
            setPreferenceToDB(preference);
1222
        }
1223
        //also add to local preferences
1224
        getPreferenceStore().setValue(SHOW_SIMPLE_NAME_DETAILS_SECTION, config.isSimpleDetailsViewActivated());
1225
        getPreferenceStore().setValue(SHOW_SIMPLE_NAME_DETAILS_TAXON, config.isTaxonSectionActivated());
1226
        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_LSID, config.isLSIDActivated());
1227
        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_CODE, config.isNomenclaturalCodeActived());
1228
        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_APPENDED_PHRASE, config.isAppendedPhraseActivated());
1229
        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_RANK, config.isRankActivated());
1230
        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_ATOMISED_EPITHETS, config.isAtomisedEpithetsActivated());
1231
        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_AUTHORSHIP, config.isAuthorshipSectionActivated());
1232
        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_REFERENCE, config.isNomenclaturalReferenceSectionActivated());
1233
        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_STATUS, config.isNomenclaturalStatusSectionActivated());
1234
        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_PROTOLOGUE, config.isProtologueActivated());
1235
        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_TYPE_DESIGNATION, config.isTypeDesignationSectionActivated());
1236
        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_NAME_RELATIONSHIP, config.isNameRelationsSectionActivated());
1237
        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_HYBRID, config.isHybridActivated());
1238

    
1239
    }
1240

    
1241
    private static Boolean getValue(Map<String, Boolean> sectionMap, String string) {
1242
		if (sectionMap.containsKey(string)){
1243
			return sectionMap.get(string);
1244
		}else{
1245
			return true;
1246
		}
1247

    
1248
	}
1249

    
1250

    
1251

    
1252
    /**
1253
     * <p>
1254
     * setAbcdConfigurator
1255
     * </p>
1256
     *
1257
     * @param preferredConfiguration
1258
     *            a {@link eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportConfigurator}
1259
     *            object.
1260
     */
1261
    public static Abcd206ImportConfigurator getAbcdImportConfigurationPreference() {
1262

    
1263
        Abcd206ImportConfigurator config = Abcd206ImportConfigurator.NewInstance(null,null);
1264
        ICdmRepository controller;
1265
        controller = CdmStore.getCurrentApplicationConfiguration();
1266
        PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.AbcdImportConfig);
1267
        CdmPreference preference = null;
1268
        if (controller == null){
1269
            return null;
1270
        }
1271
        preference = controller.getPreferenceService().find(key);
1272
        boolean allowOverride = true;
1273
        if (preference != null && !preference.isAllowOverride()){
1274
            allowOverride = false;
1275
        }
1276
        if (PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_OVERRIDE) && allowOverride){
1277

    
1278
            config.setAddIndividualsAssociationsSuchAsSpecimenAndObservations(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_ADD_INDIVIDUALS_ASSOCIATIONS_SUCH_AS_SPECIMEN_AND_OBSERVATIONS));
1279

    
1280
            config.setAddMediaAsMediaSpecimen(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_ADD_MEDIA_AS_MEDIASPECIMEN));
1281

    
1282
            config.setAllowReuseOtherClassifications(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_ALLOW_REUSE_OTHER_CLASSIFICATIONS));
1283
            config.setDeduplicateClassifications(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_DEDUPLICATE_CLASSIFICATIONS));
1284
            config.setDeduplicateReferences(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_DEDUPLICATE_REFERENCES));
1285

    
1286
            config.setGetSiblings(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_DO_SIBLINGS));
1287
            config.setIgnoreAuthorship(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_IGNORE_AUTHORSHIP));
1288
            config.setIgnoreImportOfExistingSpecimen(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_IGNORE_IMPORT_OF_EXISTING_SPECIMEN));
1289
            config.setMapUnitIdToAccessionNumber(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_MAP_UNIT_ID_TO_ACCESSION_NUMBER));
1290
            config.setMapUnitIdToBarcode(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_MAP_UNIT_ID_TO_BARCODE));
1291
            config.setMapUnitIdToCatalogNumber(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_MAP_UNIT_ID_TOCATALOG_NUMBER));
1292
            config.setMoveNewTaxaToDefaultClassification(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_MOVE_NEW_TAXA_TO_DEFAULT_CLASSIFICATION));
1293
            config.setOverwriteExistingSpecimens(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_OVERWRITE_EXISTING_SPECIMEN));
1294
            config.setReuseExistingDescriptiveGroups(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_REUSE_EXISTING_DESCRIPTIVE_GROUPS));
1295
            config.setReuseExistingMetaData(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_REUSE_EXISTING_META_DATA));
1296
            config.setReuseExistingTaxaWhenPossible(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_REUSE_EXISTING_TAXA_WHEN_POSSIBLE));
1297
            config.setNomenclaturalCode(NomenclaturalCode.getByKey(PreferencesUtil.getPreferenceStore().getString(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_NOMENCLATURAL_CODE)));
1298
            return config;
1299

    
1300
        }
1301

    
1302
            if (preference == null){
1303
                return config;
1304
             } else{
1305
             String configString = preference.getValue();
1306
             String[] configArray = configString.split(";");
1307

    
1308
             for (String configItem: configArray){
1309
                 String[] keyValue = configItem.split(":");
1310
                 String keyString = keyValue[0];
1311
                 String valueString = keyValue[1];
1312
                 if (keyString.equals("ignoreImportOfExistingSpecimen")){
1313
                     config.setIgnoreImportOfExistingSpecimen(Boolean.valueOf(valueString));
1314
                 }else if (keyString.equals("addIndividualsAssociationsSuchAsSpecimenAndObservations")){
1315
                     config.setAddIndividualsAssociationsSuchAsSpecimenAndObservations(Boolean.valueOf(valueString));
1316
                 }else if (keyString.equals("reuseExistingTaxaWhenPossible")){
1317
                     config.setReuseExistingTaxaWhenPossible(Boolean.valueOf(valueString));
1318
                 }else if (keyString.equals("ignoreAuthorship")){
1319
                     config.setIgnoreAuthorship(Boolean.valueOf(valueString));
1320
                 }else if (keyString.equals("addMediaAsMediaSpecimen")){
1321
                     config.setAddMediaAsMediaSpecimen(Boolean.valueOf(valueString));
1322
                 }else if (keyString.equals("reuseExistingMetaData")){
1323
                     config.setReuseExistingMetaData(Boolean.valueOf(valueString));
1324
                 }else if (keyString.equals("reuseExistingDescriptiveGroups")){
1325
                     config.setReuseExistingDescriptiveGroups(Boolean.valueOf(valueString));
1326
                 }else if (keyString.equals("allowReuseOtherClassifications")){
1327
                     config.setAllowReuseOtherClassifications(Boolean.valueOf(valueString));
1328
                 }else if (keyString.equals("deduplicateReferences")){
1329
                     config.setDeduplicateReferences(Boolean.valueOf(valueString));
1330
                 }else if (keyString.equals("deduplicateClassifications")){
1331
                     config.setDeduplicateClassifications(Boolean.valueOf(valueString));
1332
                 }else if (keyString.equals("moveNewTaxaToDefaultClassification")){
1333
                     config.setMoveNewTaxaToDefaultClassification(Boolean.valueOf(valueString));
1334
                 }else if (keyString.equals("mapUnitIdToCatalogNumber")){
1335
                     config.setMapUnitIdToCatalogNumber(Boolean.valueOf(valueString));
1336
                 }else if (keyString.equals("mapUnitIdToAccessionNumber")){
1337
                     config.setMapUnitIdToAccessionNumber(Boolean.valueOf(valueString));
1338
                 }else if (keyString.equals("mapUnitIdToBarcode")){
1339
                     config.setMapUnitIdToBarcode(Boolean.valueOf(valueString));
1340
                 }else if (keyString.equals("overwriteExistingSpecimens")){
1341
                     config.setOverwriteExistingSpecimens(Boolean.valueOf(valueString));
1342
                 }else if (keyString.equals("nomenclaturalCode")){
1343
                         config.setNomenclaturalCode(NomenclaturalCode.fromString(valueString));
1344
                 }else{
1345
                     logger.debug("This key of the abcd configurator needs to be added to the transformer: " + keyString);
1346
                 }
1347

    
1348
            }
1349
        }
1350
        return config;
1351
    }
1352

    
1353

    
1354
    public static void updateAbcdImportConfigurationPreference() {
1355

    
1356
        Abcd206ImportConfigurator config = Abcd206ImportConfigurator.NewInstance(null,null);
1357
        ICdmRepository controller;
1358
        controller = CdmStore.getCurrentApplicationConfiguration();
1359
        PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.AbcdImportConfig);
1360
        CdmPreference preference = null;
1361
        if (controller == null){
1362
            return ;
1363
        }
1364
        preference = controller.getPreferenceService().find(key);
1365
        boolean allowOverride = true;
1366
        if (preference != null && !preference.isAllowOverride()){
1367
            allowOverride = false;
1368
        }
1369
        if (!PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_OVERRIDE) || !allowOverride){
1370

    
1371
            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_ADD_INDIVIDUALS_ASSOCIATIONS_SUCH_AS_SPECIMEN_AND_OBSERVATIONS, config.isAddIndividualsAssociationsSuchAsSpecimenAndObservations());
1372
            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_ADD_MEDIA_AS_MEDIASPECIMEN, config.isAddMediaAsMediaSpecimen());
1373

    
1374
            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_ALLOW_REUSE_OTHER_CLASSIFICATIONS, config.isAllowReuseOtherClassifications());
1375
            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_DEDUPLICATE_CLASSIFICATIONS, config.isDeduplicateClassifications());
1376
            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_DEDUPLICATE_REFERENCES, config.isDeduplicateReferences());
1377

    
1378
            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_DO_SIBLINGS, config.isGetSiblings());
1379
            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_IGNORE_AUTHORSHIP, config.isIgnoreAuthorship());
1380
            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_IGNORE_IMPORT_OF_EXISTING_SPECIMEN, config.isIgnoreImportOfExistingSpecimen());
1381
            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_MAP_UNIT_ID_TO_ACCESSION_NUMBER, config.isMapUnitIdToAccessionNumber());
1382
            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_MAP_UNIT_ID_TO_BARCODE, config.isMapUnitIdToBarcode());
1383
            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_MAP_UNIT_ID_TOCATALOG_NUMBER, config.isMapUnitIdToCatalogNumber());
1384
            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_MOVE_NEW_TAXA_TO_DEFAULT_CLASSIFICATION, config.isMoveNewTaxaToDefaultClassification());
1385
            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_OVERWRITE_EXISTING_SPECIMEN, config.isOverwriteExistingSpecimens());
1386
            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_REUSE_EXISTING_DESCRIPTIVE_GROUPS, config.isReuseExistingDescriptiveGroups());
1387
            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_REUSE_EXISTING_META_DATA, config.isReuseExistingMetaData());
1388
            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_REUSE_EXISTING_TAXA_WHEN_POSSIBLE, config.isReuseExistingTaxaWhenPossible());
1389
            if (config.getNomenclaturalCode() != null){
1390
                getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_NOMENCLATURAL_CODE, config.getNomenclaturalCode().getKey());
1391
            }
1392
        }
1393
    }
1394

    
1395

    
1396
    /**
1397
    *
1398
    */
1399
   public NameDetailsConfigurator createLocalNameDetailsViewConfig(boolean local) {
1400
       NameDetailsConfigurator config = new NameDetailsConfigurator(true);
1401
       if (local){
1402
          config.setSimpleDetailsViewActivated(getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_SIMPLE_NAME_DETAILS_SECTION));
1403
          config.setAppendedPhraseActivated(getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_APPENDED_PHRASE));
1404
          config.setAtomisedEpithetsActivated(getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_ATOMISED_EPITHETS));
1405
          config.setAuthorshipSectionActivated(getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_AUTHORSHIP));
1406
          config.setLSIDActivated(getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_LSID));
1407
          config.setNameApprobiationActivated(getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_NAME_APPROBATION));
1408
          config.setNameCacheActivated(getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_CACHE));
1409
          config.setNameRelationsSectionActivated(getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_NAME_RELATIONSHIP));
1410
          config.setNomenclaturalCodeActived(getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_CODE));
1411
          config.setNomenclaturalStatusSectionActivated(getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_STATUS));
1412
          config.setNomenclaturalReferenceSectionActivated(getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_REFERENCE));
1413
          config.setProtologueActivated(getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_PROTOLOGUE));
1414
          config.setRankActivated(getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_RANK));
1415
          config.setTaxonSectionActivated(getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_SIMPLE_NAME_DETAILS_TAXON));
1416
          config.setTypeDesignationSectionActivated(getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_TYPE_DESIGNATION));
1417
          config.setHybridActivated(getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_HYBRID));
1418
       }else{
1419

    
1420
       }
1421

    
1422
      return config;
1423
   }
1424

    
1425

    
1426
   public static void saveConfigToPrefernceStore(NameDetailsConfigurator config) {
1427
       PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.SHOW_SIMPLE_NAME_DETAILS_SECTION,
1428
               config.isSimpleDetailsViewActivated());
1429
       PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.SHOW_SIMPLE_NAME_DETAILS_TAXON, config.isTaxonSectionActivated());
1430
       PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_LSID, config.isLSIDActivated());
1431
       PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_CODE,
1432
               config.isNomenclaturalCodeActived());
1433
       PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_NAMECACHE,
1434
               config.isNameCacheActivated());
1435
       PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_APPENDED_PHRASE,
1436
               config.isAppendedPhraseActivated());
1437
       PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_RANK, config.isRankActivated());
1438
       PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_ATOMISED_EPITHETS,
1439
               config.isAtomisedEpithetsActivated());
1440
       PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_AUTHORSHIP_CACHE,
1441
               config.isAuthorCacheActivated());
1442
       PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_AUTHORSHIP,
1443
               config.isAuthorshipSectionActivated());
1444
       PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_REFERENCE,
1445
               config.isNomenclaturalReferenceSectionActivated());
1446
       PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_STATUS,
1447
               config.isNomenclaturalStatusSectionActivated());
1448
       PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_PROTOLOGUE,
1449
               config.isProtologueActivated());
1450
       PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_TYPE_DESIGNATION,
1451
               config.isTypeDesignationSectionActivated());
1452
       PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_NAME_RELATIONSHIP,
1453
               config.isNameRelationsSectionActivated());
1454
       PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_HYBRID,
1455
               config.isHybridActivated());
1456

    
1457
   }
1458

    
1459
/**
1460
 * @return
1461
 */
1462
public static boolean isSortTaxaByRankAndName() {
1463

    
1464
    return getPreferenceStore().getBoolean(IPreferenceKeys.SORT_TAXA_BY_RANK_AND_NAME);
1465
}
1466

    
1467
/**
1468
 * @return
1469
 */
1470
public static boolean isSortNamedAreaByOrderInVocabulary() {
1471

    
1472
    return getPreferenceStore().getBoolean(IPreferenceKeys.SORT_NAMED_AREA_BY_VOCABULARY_ORDER);
1473
}
1474

    
1475
public static void setSortNamedAreasByOrderInVocabulary(boolean isSortByVocabularyOrder) {
1476
    getPreferenceStore().setValue(IPreferenceKeys.SORT_NAMED_AREA_BY_VOCABULARY_ORDER, isSortByVocabularyOrder);
1477

    
1478
}
1479

    
1480
/**
1481
 * <p>
1482
 * setPreferredNamedAreasForDistributionEditor
1483
 * </p>
1484
 *
1485
 * @param saveCheckedElements
1486
 * @param saveGrayedElements
1487
 */
1488
public static void setLastSelectedReference(
1489
        List<String> lastSelectedReferences) {
1490

    
1491
        IPreferenceStore preferenceStore = PreferencesUtil.getPreferenceStore();
1492
        preferenceStore.setValue(PreferencesUtil.LAST_SELECTED_REFERENCES, lastSelectedReferences.toString());
1493
    }
1494

    
1495
/**
1496
 * <p>
1497
 * setPreferredNamedAreasForDistributionEditor
1498
 * </p>
1499
 *
1500
 * @param saveCheckedElements
1501
 * @param saveGrayedElements
1502
 */
1503
public static List<String> getLastSelectedReferences() {
1504

    
1505
        IPreferenceStore preferenceStore = PreferencesUtil.getPreferenceStore();
1506
        String lastSelected = preferenceStore.getString(PreferencesUtil.LAST_SELECTED_REFERENCES);
1507
        List<String> result = new ArrayList<>();
1508
        if (!StringUtils.isBlank(lastSelected)){
1509
            Collections.addAll(result, lastSelected.substring(1,lastSelected.length()-1).split(", "));
1510
        }
1511
        return result;
1512
    }
1513

    
1514

    
1515
/**
1516
 * <p>
1517
 * setPreferredNamedAreasForDistributionEditor
1518
 * </p>
1519
 *
1520
 * @param saveCheckedElements
1521
 * @param saveGrayedElements
1522
 */
1523
public static void setPreferredNamedAreasForDistributionEditor(
1524
        String saveCheckedElements, String saveGrayedElements, boolean local) {
1525
    if (local){
1526
        IPreferenceStore preferenceStore = PreferencesUtil.getPreferenceStore();
1527
        preferenceStore.setValue(PreferencesUtil.DISTRIBUTION_AREA_OCCURENCE_STATUS, saveCheckedElements);
1528
        preferenceStore.setValue(PreferencesUtil.DISTRIBUTION_AREA_OCCURENCE_STATUS_GRAYED, saveGrayedElements);
1529

    
1530
    }
1531
    else{
1532
        CdmPreference preference = null;
1533

    
1534
        if (saveCheckedElements == null){
1535
            preference = getPreferenceFromDB(PreferencePredicate.AvailableDistributionAreaTerms);
1536

    
1537
            if (preference == null){
1538
                return ;
1539
            } else{
1540
                getPreferenceStore().setValue(DISTRIBUTION_AREA_OCCURENCE_STATUS,
1541
                        saveCheckedElements);
1542
                preference = CdmPreference.NewInstance(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.AvailableDistributionAreaTerms, saveCheckedElements);
1543
                setPreferenceToDB(preference);
1544

    
1545
            }
1546
        } else{
1547
           preference = CdmPreference.NewInstance(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.AvailableDistributionAreaTerms, saveCheckedElements);
1548
           setPreferenceToDB(preference);
1549
           getPreferenceStore().setValue(DISTRIBUTION_AREA_OCCURENCE_STATUS,
1550
                    saveCheckedElements);
1551

    
1552
        }
1553
    }
1554

    
1555
}
1556

    
1557
/**
1558
 * @param saveCheckedElements
1559
 * @param saveCheckedElements2
1560
 * @param b
1561
 */
1562
public static void setPreferredVocabulariesForDistributionEditor(String saveCheckedElements,
1563
        boolean local) {
1564
    if (local){
1565
        IPreferenceStore preferenceStore = PreferencesUtil.getPreferenceStore();
1566
        preferenceStore.setValue(PreferencesUtil.DISTRIBUTION_VOCABULARIES, saveCheckedElements);
1567
    }
1568
    else{
1569
        ICdmRepository controller;
1570
        CdmPreference preference = null;
1571

    
1572
        if (saveCheckedElements == null){
1573
            preference = getPreferenceFromDB(PreferencePredicate.AvailableDistributionAreaVocabularies);
1574

    
1575
            if (preference == null){
1576
                return ;
1577
            } else{
1578
                getPreferenceStore().setValue(DISTRIBUTION_VOCABULARIES,
1579
                        saveCheckedElements);
1580
                preference = CdmPreference.NewInstance(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.AvailableDistributionAreaVocabularies, saveCheckedElements);
1581
                setPreferenceToDB(preference);
1582
            }
1583
        } else{
1584
            preference = CdmPreference.NewInstance(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.AvailableDistributionAreaVocabularies, saveCheckedElements);
1585
            setPreferenceToDB(preference);
1586
            getPreferenceStore().setValue(DISTRIBUTION_VOCABULARIES,
1587
                    saveCheckedElements);
1588

    
1589
        }
1590
    }
1591
}
1592

    
1593

    
1594

    
1595

    
1596
/**
1597
 * @param saveCheckedElements
1598
 * @param saveCheckedElements2
1599
 * @param b
1600
 */
1601
public static String getPreferredVocabulariesForDistributionEditor(boolean local) {
1602
    if (local){
1603
        IPreferenceStore preferenceStore = PreferencesUtil.getPreferenceStore();
1604
        String pref = preferenceStore.getString(DISTRIBUTION_VOCABULARIES);
1605
        return pref;
1606
    }
1607
    else{
1608
        CdmPreference preference = null;
1609
        preference = getPreferenceFromDB(PreferencePredicate.AvailableDistributionAreaVocabularies);
1610
        if (preference == null){
1611
            return null;
1612
        } else{
1613
            return preference.getValue();
1614
        }
1615

    
1616
    }
1617

    
1618

    
1619

    
1620
}
1621

    
1622
public static boolean getFilterCommonNameReferences(){
1623
    return getPreferenceStore().getBoolean(PreferencesUtil.FILTER_COMMON_NAME_REFERENCES);
1624
}
1625

    
1626
/**
1627
 *
1628
 */
1629
public static void updateDBPreferences() {
1630
    CdmPreference preference = null;
1631
    IPreferenceStore prefStore = getPreferenceStore();
1632

    
1633
    //ABCD Configurator
1634

    
1635
    updateAbcdImportConfigurationPreference();
1636

    
1637
    preference = getPreferenceFromDB(PreferencePredicate.ShowImportExportMenu);
1638
    if (preference != null){
1639
        if(!prefStore.getBoolean(SHOW_IO_MENU) ||  !preference.isAllowOverride()){
1640
            prefStore.setValue(SHOW_IO_MENU, preference.getValue());
1641
        }
1642
    }
1643

    
1644
    preference = getPreferenceFromDB(PreferencePredicate.ShowMediaView);
1645
    if (preference != null){
1646
        if(!prefStore.getBoolean(SHOW_MEDIA) ||  !preference.isAllowOverride()){
1647
            prefStore.setValue(SHOW_MEDIA, preference.getValue());
1648
        }
1649
    }
1650

    
1651
    preference = getPreferenceFromDB(PreferencePredicate.ShowChecklistPerspective);
1652
    if (preference != null){
1653
        if(!prefStore.getBoolean(SHOW_CHECKLIST_PERSPECTIVE) ||  !preference.isAllowOverride()){
1654
            prefStore.setValue(SHOW_CHECKLIST_PERSPECTIVE, preference.getValue());
1655
        }
1656
    }else{
1657
        prefStore.setValue(SHOW_CHECKLIST_PERSPECTIVE, false);
1658
    }
1659

    
1660
    //Specimen Details
1661
    preference = getPreferenceFromDB(PreferencePredicate.ShowSpecimen);
1662
    if (preference != null){
1663
        if(!prefStore.getBoolean(SHOW_SPECIMEN) ||  !preference.isAllowOverride()){
1664
            prefStore.setValue(SHOW_SPECIMEN, preference.getValue());
1665
        }
1666
    }else{
1667
        prefStore.setValue(SHOW_SPECIMEN, true);
1668
    }
1669

    
1670
    preference = getPreferenceFromDB(PreferencePredicate.ShowTaxonAssociations);
1671
    if (preference != null){
1672
        if(!prefStore.getBoolean(SHOW_TAXON_ASSOCIATIONS_OVERRIDE) ||  !preference.isAllowOverride()){
1673
            prefStore.setValue(SHOW_TAXON_ASSOCIATIONS, preference.getValue());
1674
        }
1675
    }
1676
    preference = getPreferenceFromDB(PreferencePredicate.ShowCollectingAreasInGeneralSection);
1677
    if (preference != null){
1678
        if(!prefStore.getBoolean(SHOW_COLLECTING_AREAS_IN_GENERAL_SECTION_OVERRIDE) ||  !preference.isAllowOverride()){
1679
            prefStore.setValue(SHOW_COLLECTING_AREAS_IN_GENERAL_SECTION, preference.getValue());
1680
        }
1681
    }
1682
    preference = getPreferenceFromDB(PreferencePredicate.ShowLifeForm);
1683
    if (preference != null){
1684
        if(!prefStore.getBoolean(SHOW_LIFE_FORM_OVERRIDE) ||  !preference.isAllowOverride()){
1685
            prefStore.setValue(SHOW_LIFE_FORM, preference.getValue());
1686
        }
1687
    }
1688
    preference = getPreferenceFromDB(PreferencePredicate.DeterminationOnlyForFieldUnits);
1689
    if (preference != null){
1690
        if(!prefStore.getBoolean(DETERMINATION_ONLY_FOR_FIELD_UNITS_OVERRIDE) ||  !preference.isAllowOverride()){
1691
            prefStore.setValue(DETERMINATION_ONLY_FOR_FIELD_UNITS, preference.getValue());
1692
        }
1693
    }
1694

    
1695

    
1696
    //Name Details
1697
    NameDetailsConfigurator config = getPreferredNameDetailsConfiguration(false);
1698
    if (config != null ){
1699
        if (!prefStore.getBoolean(OVERRIDE_NAME_DETAILS) ||  !prefStore.getBoolean(ALLOW_OVERRIDE_NAME_DETAILS)){
1700
            setPreferredNameDetailsConfiguration(config, false);
1701
        }
1702
    }
1703

    
1704
    //Distribution Editor
1705
    preference = getPreferenceFromDB(PreferencePredicate.AvailableDistributionAreaVocabularies);
1706
    if (preference != null){
1707
        if (!prefStore.getBoolean(DISTRIBUTION_AREA_PREFRENCES_ACTIVE_OVERRIDE) ||  !preference.isAllowOverride()){
1708
            prefStore.setValue(DISTRIBUTION_VOCABULARIES, preference.getValue());
1709
        }
1710
    }
1711

    
1712
    preference = getPreferenceFromDB(PreferencePredicate.DistributionEditorActivated);
1713
    if (preference != null){
1714
        if (!prefStore.getBoolean(DISTRIBUTION_AREA_PREFRENCES_ACTIVE_OVERRIDE) || !preference.isAllowOverride()){
1715
            prefStore.setValue(DISTRIBUTION_AREA_PREFRENCES_ACTIVE, preference.getValue());
1716
        }
1717
    }
1718

    
1719
    preference = getPreferenceFromDB(PreferencePredicate.AvailableDistributionStatus);
1720
    if (preference != null){
1721
        if (!prefStore.getBoolean(DISTRIBUTION_STATUS_OVERRIDE) || !preference.isAllowOverride()){
1722
            //get terms for the uuids... and add them to the termManager as preferred terms
1723
            ITermService termService = CdmStore.getService(ITermService.class);
1724
            String[] uuidArray = preference.getValue().split(";");
1725
            List<UUID> uuidList = new ArrayList();
1726
            for (String uuidString:uuidArray){
1727
                uuidList.add(UUID.fromString(uuidString));
1728
            }
1729

    
1730
            List<DefinedTermBase> definedTermBases = termService.load(uuidList, null);
1731
            CdmStore.getTermManager().setPreferredTerms(definedTermBases, TermStore.getTerms(TermType.PresenceAbsenceTerm, null));
1732
        }
1733
    }
1734

    
1735
    preference = getPreferenceFromDB(PreferencePredicate.CommonNameAreaVocabularies);
1736
    if (preference != null){
1737
        if (!prefStore.getBoolean(COMMON_NAME_AREA_VOCABULARIES_OVERRIDE) ||  !preference.isAllowOverride()){
1738
            prefStore.setValue(COMMON_NAME_AREA_VOCABULARIES, preference.getValue());
1739
        }
1740
    }
1741

    
1742
    preference = getPreferenceFromDB(PreferencePredicate.CommonNameReferencesWithMarker);
1743
    if (preference != null){
1744
        if (!prefStore.getBoolean(FILTER_COMMON_NAME_REFERENCES) ||  !preference.isAllowOverride()){
1745
            prefStore.setValue(FILTER_COMMON_NAME_REFERENCES, preference.getValue());
1746
        }
1747
    }else{
1748
        prefStore.setValue(FILTER_COMMON_NAME_REFERENCES, false);
1749
    }
1750

    
1751

    
1752
    preference = getPreferenceFromDB(PreferencePredicate.ShowTaxonNodeWizard);
1753
    if (preference != null){
1754
        if (!prefStore.getBoolean(SHOW_TAXONNODE_WIZARD) ||  !preference.isAllowOverride()){
1755
            prefStore.setValue(SHOW_TAXONNODE_WIZARD, preference.getValue());
1756
        }
1757
    }else{
1758
        prefStore.setValue(SHOW_TAXONNODE_WIZARD, true);
1759
    }
1760

    
1761
    preference = getPreferenceFromDB(PreferencePredicate.ShowIdInSource);
1762
    if (preference != null){
1763
        if (!prefStore.getBoolean(SHOW_ID_IN_SOURCE) ||  !preference.isAllowOverride()){
1764
            prefStore.setValue(SHOW_ID_IN_SOURCE, preference.getValue());
1765
        }
1766
    }else{
1767
        prefStore.setValue(SHOW_ID_IN_SOURCE, true);
1768
    }
1769

    
1770
    preference = getPreferenceFromDB(PreferencePredicate.ShowNameInSource);
1771
    if (preference != null){
1772
        if (!prefStore.getBoolean(SHOW_NAME_IN_SOURCE) ||  !preference.isAllowOverride()){
1773
            prefStore.setValue(SHOW_NAME_IN_SOURCE, preference.getValue());
1774
        }
1775
    }else{
1776
        prefStore.setValue(SHOW_NAME_IN_SOURCE, true);
1777
    }
1778

    
1779
    preference = getPreferenceFromDB(PreferencePredicate.DisableMultiClassification);
1780
    if (preference != null){
1781
        if (!prefStore.getBoolean(DISABLE_MULTI_CLASSIFICATION) ||  !preference.isAllowOverride()){
1782
            prefStore.setValue(DISABLE_MULTI_CLASSIFICATION, preference.getValue());
1783
        }
1784
    }else{
1785
        prefStore.setValue(DISABLE_MULTI_CLASSIFICATION, false);
1786
    }
1787

    
1788
}
1789

    
1790

    
1791

    
1792

    
1793

    
1794

    
1795

    
1796
}
(19-19/25)