Project

General

Profile

Download (67.4 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.NewDatabaseInstance(), 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_ID_IN_VOCABULARY, true);
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
		getPreferenceStore().setDefault(FILTER_COMMON_NAME_REFERENCES, false);
607

    
608

    
609
	}
610

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

    
622

    
623

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

    
639
        int index = StringUtils.lastIndexOf(preference.getValue(), ".");
640
        UUID uuid = UUID.fromString(preference.getValue().substring(index +1, preference.getValue().length()));
641
        NomenclaturalCode preferredCode = NomenclaturalCode.getByUuid(uuid);
642

    
643
        getPreferenceStore().setValue(PREFERRED_NOMENCLATURAL_CODE_KEY,
644
                getPreferenceKey(preferredCode));
645

    
646
	}
647

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

    
661
	/**
662
	 * <p>
663
	 * getMapServiceAccessPoint
664
	 * </p>
665
	 *
666
	 * @return a {@link java.lang.String} object.
667
	 */
668
	public static String getMapServiceAccessPoint() {
669
		return getPreferenceStore().getString(EDIT_MAP_SERVICE_ACCES_POINT);
670
	}
671

    
672
	/**
673
	 * <p>
674
	 * shouldConnectAtStartUp
675
	 * </p>
676
	 *
677
	 * @return a boolean.
678
	 */
679
	public static boolean shouldConnectAtStartUp() {
680
		//FIXME :  force SHOULD_CONNECT_AT_STARTUP to false (ticket 3828) until resolution
681
		//return getPreferenceStore().getBoolean(SHOULD_CONNECT_AT_STARTUP);
682
		return false;
683
	}
684

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

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

    
713
	/**
714
	 * <p>
715
	 * setSortRanksHierarchichally
716
	 * </p>
717
	 *
718
	 * @param selection
719
	 *            a boolean.
720
	 */
721
	public static void setSortRanksHierarchichally(boolean selection) {
722
		getPreferenceStore().setValue(SORT_RANKS_HIERARCHICHALLY, selection);
723
	}
724

    
725
	/**
726
	 * <p>
727
	 * getSortRanksHierarchichally
728
	 * </p>
729
	 *
730
	 * @return a boolean.
731
	 */
732
	public static boolean getSortRanksHierarchichally() {
733
		return getPreferenceStore().getBoolean(SORT_RANKS_HIERARCHICHALLY);
734
	}
735

    
736
	public static boolean isMultilanguageTextEditingCapability() {
737
		return getPreferenceStore().getBoolean(
738
				MULTILANGUAGE_TEXT_EDITING_CAPABILITY);
739
	}
740

    
741
	public static Language getGlobalLanguage() {
742

    
743

    
744
		String languageUuidString = getPreferenceStore().getString(
745
				GLOBAL_LANGUAGE_UUID);
746

    
747
		if(!CdmStore.isActive()) {
748
            MessagingUtils.noDataSourceWarningDialog(languageUuidString);
749
            return null;
750
        }
751

    
752
		if (CdmUtils.isBlank(languageUuidString)) {
753
			return Language.getDefaultLanguage();
754
		}
755

    
756
		UUID languageUuid = UUID.fromString(languageUuidString);
757
		return (Language) CdmStore.getService(ITermService.class).load(
758
				languageUuid);
759
	}
760

    
761
	public static void setGlobalLanguage(Language language) {
762
	    if(language != null) {
763
	        getPreferenceStore().setValue(GLOBAL_LANGUAGE_UUID,language.getUuid().toString());
764
	        CdmStore.setDefaultLanguage(language);
765
	    }
766

    
767
	}
768

    
769
	/**
770
	 * @return
771
	 */
772
	public static Map<MarkerType, Boolean> getEditMarkerTypePreferences() {
773
		List<MarkerType> markerTypes = CdmStore.getTermManager()
774
				.getPreferredTerms(MarkerType.class);
775

    
776
		Map<MarkerType, Boolean> result = new HashMap<MarkerType, Boolean>();
777

    
778
		for (MarkerType markerType : markerTypes) {
779
			String name = getMarkerTypeEditingPreferenceKey(markerType);
780
			Boolean value = getPreferenceStore().getBoolean(name);
781

    
782
			result.put(markerType, value);
783
		}
784

    
785
		return result;
786
	}
787

    
788
	/**
789
	 * @param markerTypeEditingMap
790
	 */
791
	public static void setEditMarkerTypePreferences(
792
			Map<MarkerType, Boolean> markerTypeEditingMap) {
793
		for (MarkerType markerType : markerTypeEditingMap.keySet()) {
794
			String name = getMarkerTypeEditingPreferenceKey(markerType);
795
			getPreferenceStore().setValue(name,
796
					markerTypeEditingMap.get(markerType));
797
		}
798

    
799
	}
800

    
801
	private static String getMarkerTypeEditingPreferenceKey(
802
			MarkerType markerType) {
803
		markerType = HibernateProxyHelper.deproxy(markerType);
804
		return markerType.getClass().getName() + EDIT_MARKER_TYPE_PREFIX;
805
	}
806

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

    
825
	/**
826
	 * @return
827
	 */
828
	public static DerivedUnitFacadeConfigurator getDerivedUnitConfigurator() {
829
		DerivedUnitFacadeConfigurator configurator = DerivedUnitFacadeConfigurator
830
				.NewInstance();
831
		configurator.setMoveDerivedUnitMediaToGallery(true);
832
		configurator.setMoveFieldObjectMediaToGallery(true);
833
		return configurator;
834
	}
835

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

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

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

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

    
915

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

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

    
947
        return p2Repos;
948
    }
949

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

    
967
    /**
968
	 * <p>
969
	 * getSortRanksNaturally
970
	 * </p>
971
    	 *
972
    	 * @return a boolean.
973
	 */
974
	public static boolean getSortNodesNaturally() {
975
		return getPreferenceStore().getBoolean(SORT_NODES_NATURALLY);
976
	}
977

    
978
	/**
979
	 * <p>
980
	 * setSortRanksNaturally
981
	 * </p>
982
	 *
983
	 * @param selection
984
	 *            a boolean.
985
	 */
986
	public static void setSortNodesNaturally(boolean selection) {
987
		getPreferenceStore().setValue(SORT_NODES_NATURALLY, selection);
988
	}
989

    
990

    
991
	/**
992
	 * <p>
993
	 * getSortRanksNaturally
994
	 * </p>
995
	 *
996
	 * @return a boolean.
997
	 */
998
	public static boolean getSortNodesStrictlyAlphabetically() {
999
		return getPreferenceStore().getBoolean(SORT_NODES_ALPHABETICALLY);
1000
	}
1001

    
1002
	/**
1003
	 * <p>
1004
	 * setSortRanksNaturally
1005
	 * </p>
1006
	 *
1007
	 * @param selection
1008
	 *            a boolean.
1009
	 */
1010
	public static void setSortNodesStrictlyAlphabetically(boolean selection) {
1011
		getPreferenceStore().setValue(SORT_NODES_ALPHABETICALLY, selection);
1012
	}
1013

    
1014
	/**
1015
	 * <p>
1016
	 * setStoreNavigatorState
1017
	 * </p>
1018
	 *
1019
	 * @param selection
1020
	 *            a boolean.
1021
	 */
1022
	public static boolean isStoreNavigatorState() {
1023
		return getPreferenceStore().getBoolean(RESTORE_NAVIGATOR_STATE);
1024

    
1025
	}
1026

    
1027
	/**
1028
	 * <p>
1029
	 * setStoreNavigatorState
1030
	 * </p>
1031
	 *
1032
	 * @param selection
1033
	 *            a boolean.
1034
	 */
1035
	public static void setStoreNavigatorState(boolean selection) {
1036
		getPreferenceStore().setValue(RESTORE_NAVIGATOR_STATE, selection);
1037

    
1038
	}
1039

    
1040
    /**
1041
     * @return
1042
     */
1043
    public static boolean isShowUpWidgetIsDisposedMessages() {
1044
       return getPreferenceStore().getBoolean(IS_SHOW_UP_WIDGET_IS_DISPOSED);
1045
    }
1046
    public static void setShowUpWidgetIsDisposedMessages(boolean selection) {
1047
        getPreferenceStore().setValue(IS_SHOW_UP_WIDGET_IS_DISPOSED, selection);
1048
    }
1049

    
1050
    /**
1051
     * @return
1052
     */
1053
    public static boolean isShowIdInVocabularyInChecklistEditor() {
1054
       return getPreferenceStore().getBoolean(IPreferenceKeys.CHECKLIST_ID_IN_VOCABULARY);
1055
    }
1056
    public static void setShowIdInVocabularyInChecklistEditor(boolean selection) {
1057
        getPreferenceStore().setValue(CHECKLIST_ID_IN_VOCABULARY, selection);
1058
    }
1059

    
1060
    /**
1061
     * @return
1062
     */
1063
    public static boolean isShowSymbolInChecklistEditor() {
1064
       return getPreferenceStore().getBoolean(IPreferenceKeys.CHECKLIST_SYMBOL);
1065
    }
1066
    public static void setShowSymbolInChecklistEditor(boolean selection) {
1067
        getPreferenceStore().setValue(CHECKLIST_SYMBOL, selection);
1068
    }
1069

    
1070
    /**
1071
     * @return
1072
     */
1073
    public static boolean isShowRankInChecklistEditor() {
1074
        return getPreferenceStore().getBoolean(IPreferenceKeys.CHECKLIST_SHOW_RANK);
1075
    }
1076
    public static void setShowRankInChecklistEditor(boolean selection) {
1077
        getPreferenceStore().setValue(CHECKLIST_SHOW_RANK, selection);
1078
    }
1079

    
1080
    /**
1081
     * @param object
1082
     * @param b
1083
     * @return
1084
     */
1085
    public static NameDetailsConfigurator getPreferredNameDetailsConfiguration( boolean local) {
1086
        NameDetailsConfigurator config = new NameDetailsConfigurator(true);
1087

    
1088
        CdmPreference preference = null;
1089

    
1090
        if (!local) {
1091
            preference = getPreferenceFromDB(PreferencePredicate.NameDetailsView);
1092
            if (preference == null){
1093
                return null;
1094
            }
1095

    
1096
            getPreferenceStore().setValue(ALLOW_OVERRIDE_NAME_DETAILS, preference.isAllowOverride());
1097

    
1098
            //the preference value is build like this:
1099
            //<section1>:true;<section2>:false....
1100

    
1101
            String value = preference.getValue();
1102
            String [] sections = value.split(";");
1103
            Map<String, Boolean> sectionMap = new HashMap<String, Boolean>();
1104
            String[] sectionValues;
1105
            for (String sectionValue: sections){
1106
                sectionValues = sectionValue.split(":");
1107
                sectionMap.put(sectionValues[0], Boolean.valueOf(sectionValues[1]));
1108
            }
1109
            config.setAllowOverride(preference.isAllowOverride());
1110
            config.setSimpleDetailsViewActivated(getValue(sectionMap, "simpleViewActivated"));
1111

    
1112
    //        getPreferenceStore().setValue(SHOW_SIMPLE_NAME_DETAILS_TAXON,
1113
    //                (getValue(sectionMap, "taxon")));
1114
            config.setTaxonSectionActivated(getValue(sectionMap, "taxon"));
1115

    
1116
    //        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_LSID,
1117
    //                (getValue(sectionMap, "lsid")));
1118
            config.setLSIDActivated(getValue(sectionMap, "lsid"));
1119

    
1120
    //        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_CODE,
1121
    //                (getValue(sectionMap, "nc")));
1122
            config.setNomenclaturalCodeActived(getValue(sectionMap, "nc"));
1123

    
1124
    //        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_APPENDED_PHRASE,
1125
    //                (getValue(sectionMap, "ap")));
1126
            config.setAppendedPhraseActivated(getValue(sectionMap, "ap"));
1127

    
1128
    //        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_RANK,
1129
    //                (getValue(sectionMap, "rank")));
1130
            config.setRankActivated(getValue(sectionMap, "rank"));
1131

    
1132

    
1133
    //        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_ATOMISED_EPITHETS,
1134
    //                (getValue(sectionMap, "atomisedEpithets")));
1135
            config.setAtomisedEpithetsActivated(getValue(sectionMap, "atomisedEpithets"));
1136

    
1137
    //        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_AUTHORSHIP,
1138
    //                (getValue(sectionMap,"author")));
1139
            config.setAuthorshipSectionActivated(getValue(sectionMap,"author"));
1140

    
1141
    //        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_REFERENCE,
1142
    //                (getValue(sectionMap, "nomRef")));
1143
            config.setNomenclaturalReferenceSectionActivated(sectionMap.get("nomRef"));
1144

    
1145
    //        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_STATUS,
1146
    //                (getValue(sectionMap, "nomStat")));
1147
            config.setNomenclaturalStatusSectionActivated(getValue(sectionMap, "nomStat"));
1148

    
1149

    
1150
    //        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_PROTOLOGUE,
1151
    //                (getValue(sectionMap,"protologue")));
1152
            config.setProtologueActivated(getValue(sectionMap,"protologue"));
1153

    
1154
    //        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_TYPE_DESIGNATION,
1155
    //                (getValue(sectionMap,"typeDes")));
1156
            config.setTypeDesignationSectionActivated(getValue(sectionMap,"typeDes"));
1157

    
1158
    //        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_NAME_RELATIONSHIP,
1159
    //                (getValue(sectionMap,"nameRelation")));
1160
            config.setNameRelationsSectionActivated(getValue(sectionMap,"nameRelation"));
1161

    
1162
    //        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_HYBRID,
1163
    //                (getValue(sectionMap, "hybrid")));
1164
            config.setHybridActivated(getValue(sectionMap,"hybrid"));
1165
        }else{
1166
            config.setSimpleDetailsViewActivated(getPreferenceStore().getBoolean(SHOW_SIMPLE_NAME_DETAILS_SECTION));
1167
            config.setTaxonSectionActivated(getPreferenceStore().getBoolean(SHOW_SIMPLE_NAME_DETAILS_TAXON));
1168
            config.setLSIDActivated(getPreferenceStore().getBoolean(SHOW_NAME_DETAILS_SECTION_LSID));
1169
            config.setNomenclaturalCodeActived(getPreferenceStore().getBoolean(SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_CODE));
1170
            config.setAppendedPhraseActivated(getPreferenceStore().getBoolean(SHOW_NAME_DETAILS_SECTION_APPENDED_PHRASE));
1171
            config.setRankActivated(getPreferenceStore().getBoolean(SHOW_NAME_DETAILS_SECTION_RANK));
1172
            config.setAtomisedEpithetsActivated(getPreferenceStore().getBoolean(SHOW_NAME_DETAILS_SECTION_ATOMISED_EPITHETS));
1173
            config.setAuthorshipSectionActivated(getPreferenceStore().getBoolean(SHOW_NAME_DETAILS_SECTION_AUTHORSHIP));
1174
            config.setNomenclaturalReferenceSectionActivated(getPreferenceStore().getBoolean(SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_REFERENCE));
1175
            config.setNomenclaturalStatusSectionActivated(getPreferenceStore().getBoolean(SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_STATUS));
1176
            config.setProtologueActivated(getPreferenceStore().getBoolean(SHOW_NAME_DETAILS_SECTION_PROTOLOGUE));
1177
            config.setTypeDesignationSectionActivated(getPreferenceStore().getBoolean(SHOW_NAME_DETAILS_SECTION_TYPE_DESIGNATION));
1178
            config.setNameRelationsSectionActivated(getPreferenceStore().getBoolean(SHOW_NAME_DETAILS_SECTION_NAME_RELATIONSHIP));
1179
            config.setHybridActivated(getPreferenceStore().getBoolean(SHOW_NAME_DETAILS_SECTION_HYBRID));
1180
        }
1181
        return config;
1182
    }
1183

    
1184
    /**
1185
     * @param object
1186
     * @param b
1187
     * @return
1188
     */
1189
    public static void setPreferredNameDetailsConfiguration(NameDetailsConfigurator config, boolean local) {
1190
        CdmPreference preference = null;
1191

    
1192
        if (!local) {
1193
            preference = CdmPreference.NewInstance(PreferenceSubject.NewDatabaseInstance(), PreferencePredicate.NameDetailsView, config.toString());
1194

    
1195
            setPreferenceToDB(preference);
1196
        }
1197
        //also add to local preferences
1198
        getPreferenceStore().setValue(SHOW_SIMPLE_NAME_DETAILS_SECTION, config.isSimpleDetailsViewActivated());
1199
        getPreferenceStore().setValue(SHOW_SIMPLE_NAME_DETAILS_TAXON, config.isTaxonSectionActivated());
1200
        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_LSID, config.isLSIDActivated());
1201
        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_CODE, config.isNomenclaturalCodeActived());
1202
        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_APPENDED_PHRASE, config.isAppendedPhraseActivated());
1203
        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_RANK, config.isRankActivated());
1204
        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_ATOMISED_EPITHETS, config.isAtomisedEpithetsActivated());
1205
        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_AUTHORSHIP, config.isAuthorshipSectionActivated());
1206
        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_REFERENCE, config.isNomenclaturalReferenceSectionActivated());
1207
        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_STATUS, config.isNomenclaturalStatusSectionActivated());
1208
        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_PROTOLOGUE, config.isProtologueActivated());
1209
        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_TYPE_DESIGNATION, config.isTypeDesignationSectionActivated());
1210
        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_NAME_RELATIONSHIP, config.isNameRelationsSectionActivated());
1211
        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_HYBRID, config.isHybridActivated());
1212

    
1213
    }
1214

    
1215
    private static Boolean getValue(Map<String, Boolean> sectionMap, String string) {
1216
		if (sectionMap.containsKey(string)){
1217
			return sectionMap.get(string);
1218
		}else{
1219
			return true;
1220
		}
1221

    
1222
	}
1223

    
1224

    
1225

    
1226
    /**
1227
     * <p>
1228
     * setAbcdConfigurator
1229
     * </p>
1230
     *
1231
     * @param preferredConfiguration
1232
     *            a {@link eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportConfigurator}
1233
     *            object.
1234
     */
1235
    public static Abcd206ImportConfigurator getAbcdImportConfigurationPreference() {
1236

    
1237
        Abcd206ImportConfigurator config = Abcd206ImportConfigurator.NewInstance(null,null);
1238
        ICdmRepository controller;
1239
        controller = CdmStore.getCurrentApplicationConfiguration();
1240
        PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewDatabaseInstance(), PreferencePredicate.AbcdImportConfig);
1241
        CdmPreference preference = null;
1242
        if (controller == null){
1243
            return null;
1244
        }
1245
        preference = controller.getPreferenceService().find(key);
1246
        boolean allowOverride = true;
1247
        if (preference != null && !preference.isAllowOverride()){
1248
            allowOverride = false;
1249
        }
1250
        if (PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_OVERRIDE) && allowOverride){
1251

    
1252
            config.setAddIndividualsAssociationsSuchAsSpecimenAndObservations(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_ADD_INDIVIDUALS_ASSOCIATIONS_SUCH_AS_SPECIMEN_AND_OBSERVATIONS));
1253

    
1254
            config.setAddMediaAsMediaSpecimen(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_ADD_MEDIA_AS_MEDIASPECIMEN));
1255

    
1256
            config.setAllowReuseOtherClassifications(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_ALLOW_REUSE_OTHER_CLASSIFICATIONS));
1257
            config.setDeduplicateClassifications(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_DEDUPLICATE_CLASSIFICATIONS));
1258
            config.setDeduplicateReferences(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_DEDUPLICATE_REFERENCES));
1259

    
1260
            config.setGetSiblings(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_DO_SIBLINGS));
1261
            config.setIgnoreAuthorship(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_IGNORE_AUTHORSHIP));
1262
            config.setIgnoreImportOfExistingSpecimen(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_IGNORE_IMPORT_OF_EXISTING_SPECIMEN));
1263
            config.setMapUnitIdToAccessionNumber(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_MAP_UNIT_ID_TO_ACCESSION_NUMBER));
1264
            config.setMapUnitIdToBarcode(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_MAP_UNIT_ID_TO_BARCODE));
1265
            config.setMapUnitIdToCatalogNumber(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_MAP_UNIT_ID_TOCATALOG_NUMBER));
1266
            config.setMoveNewTaxaToDefaultClassification(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_MOVE_NEW_TAXA_TO_DEFAULT_CLASSIFICATION));
1267
            config.setOverwriteExistingSpecimens(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_OVERWRITE_EXISTING_SPECIMEN));
1268
            config.setReuseExistingDescriptiveGroups(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_REUSE_EXISTING_DESCRIPTIVE_GROUPS));
1269
            config.setReuseExistingMetaData(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_REUSE_EXISTING_META_DATA));
1270
            config.setReuseExistingTaxaWhenPossible(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_REUSE_EXISTING_TAXA_WHEN_POSSIBLE));
1271
            config.setNomenclaturalCode(NomenclaturalCode.getByKey(PreferencesUtil.getPreferenceStore().getString(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_NOMENCLATURAL_CODE)));
1272
            return config;
1273

    
1274
        }
1275

    
1276
            if (preference == null){
1277
                return config;
1278
             } else{
1279
             String configString = preference.getValue();
1280
             String[] configArray = configString.split(";");
1281

    
1282
             for (String configItem: configArray){
1283
                 String[] keyValue = configItem.split(":");
1284
                 String keyString = keyValue[0];
1285
                 String valueString = keyValue[1];
1286
                 if (keyString.equals("ignoreImportOfExistingSpecimen")){
1287
                     config.setIgnoreImportOfExistingSpecimen(Boolean.valueOf(valueString));
1288
                 }else if (keyString.equals("addIndividualsAssociationsSuchAsSpecimenAndObservations")){
1289
                     config.setAddIndividualsAssociationsSuchAsSpecimenAndObservations(Boolean.valueOf(valueString));
1290
                 }else if (keyString.equals("reuseExistingTaxaWhenPossible")){
1291
                     config.setReuseExistingTaxaWhenPossible(Boolean.valueOf(valueString));
1292
                 }else if (keyString.equals("ignoreAuthorship")){
1293
                     config.setIgnoreAuthorship(Boolean.valueOf(valueString));
1294
                 }else if (keyString.equals("addMediaAsMediaSpecimen")){
1295
                     config.setAddMediaAsMediaSpecimen(Boolean.valueOf(valueString));
1296
                 }else if (keyString.equals("reuseExistingMetaData")){
1297
                     config.setReuseExistingMetaData(Boolean.valueOf(valueString));
1298
                 }else if (keyString.equals("reuseExistingDescriptiveGroups")){
1299
                     config.setReuseExistingDescriptiveGroups(Boolean.valueOf(valueString));
1300
                 }else if (keyString.equals("allowReuseOtherClassifications")){
1301
                     config.setAllowReuseOtherClassifications(Boolean.valueOf(valueString));
1302
                 }else if (keyString.equals("deduplicateReferences")){
1303
                     config.setDeduplicateReferences(Boolean.valueOf(valueString));
1304
                 }else if (keyString.equals("deduplicateClassifications")){
1305
                     config.setDeduplicateClassifications(Boolean.valueOf(valueString));
1306
                 }else if (keyString.equals("moveNewTaxaToDefaultClassification")){
1307
                     config.setMoveNewTaxaToDefaultClassification(Boolean.valueOf(valueString));
1308
                 }else if (keyString.equals("mapUnitIdToCatalogNumber")){
1309
                     config.setMapUnitIdToCatalogNumber(Boolean.valueOf(valueString));
1310
                 }else if (keyString.equals("mapUnitIdToAccessionNumber")){
1311
                     config.setMapUnitIdToAccessionNumber(Boolean.valueOf(valueString));
1312
                 }else if (keyString.equals("mapUnitIdToBarcode")){
1313
                     config.setMapUnitIdToBarcode(Boolean.valueOf(valueString));
1314
                 }else if (keyString.equals("overwriteExistingSpecimens")){
1315
                     config.setOverwriteExistingSpecimens(Boolean.valueOf(valueString));
1316
                 }else if (keyString.equals("nomenclaturalCode")){
1317
                         config.setNomenclaturalCode(NomenclaturalCode.fromString(valueString));
1318
                 }else{
1319
                     logger.debug("This key of the abcd configurator needs to be added to the transformer: " + keyString);
1320
                 }
1321

    
1322
            }
1323
        }
1324
        return config;
1325
    }
1326

    
1327

    
1328
    public static void updateAbcdImportConfigurationPreference() {
1329

    
1330
        Abcd206ImportConfigurator config = Abcd206ImportConfigurator.NewInstance(null,null);
1331
        ICdmRepository controller;
1332
        controller = CdmStore.getCurrentApplicationConfiguration();
1333
        PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewDatabaseInstance(), PreferencePredicate.AbcdImportConfig);
1334
        CdmPreference preference = null;
1335
        if (controller == null){
1336
            return ;
1337
        }
1338
        preference = controller.getPreferenceService().find(key);
1339
        boolean allowOverride = true;
1340
        if (preference != null && !preference.isAllowOverride()){
1341
            allowOverride = false;
1342
        }
1343
        if (!PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_OVERRIDE) || !allowOverride){
1344

    
1345
            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_ADD_INDIVIDUALS_ASSOCIATIONS_SUCH_AS_SPECIMEN_AND_OBSERVATIONS, config.isAddIndividualsAssociationsSuchAsSpecimenAndObservations());
1346
            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_ADD_MEDIA_AS_MEDIASPECIMEN, config.isAddMediaAsMediaSpecimen());
1347

    
1348
            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_ALLOW_REUSE_OTHER_CLASSIFICATIONS, config.isAllowReuseOtherClassifications());
1349
            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_DEDUPLICATE_CLASSIFICATIONS, config.isDeduplicateClassifications());
1350
            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_DEDUPLICATE_REFERENCES, config.isDeduplicateReferences());
1351

    
1352
            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_DO_SIBLINGS, config.isGetSiblings());
1353
            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_IGNORE_AUTHORSHIP, config.isIgnoreAuthorship());
1354
            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_IGNORE_IMPORT_OF_EXISTING_SPECIMEN, config.isIgnoreImportOfExistingSpecimen());
1355
            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_MAP_UNIT_ID_TO_ACCESSION_NUMBER, config.isMapUnitIdToAccessionNumber());
1356
            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_MAP_UNIT_ID_TO_BARCODE, config.isMapUnitIdToBarcode());
1357
            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_MAP_UNIT_ID_TOCATALOG_NUMBER, config.isMapUnitIdToCatalogNumber());
1358
            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_MOVE_NEW_TAXA_TO_DEFAULT_CLASSIFICATION, config.isMoveNewTaxaToDefaultClassification());
1359
            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_OVERWRITE_EXISTING_SPECIMEN, config.isOverwriteExistingSpecimens());
1360
            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_REUSE_EXISTING_DESCRIPTIVE_GROUPS, config.isReuseExistingDescriptiveGroups());
1361
            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_REUSE_EXISTING_META_DATA, config.isReuseExistingMetaData());
1362
            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_REUSE_EXISTING_TAXA_WHEN_POSSIBLE, config.isReuseExistingTaxaWhenPossible());
1363
            if (config.getNomenclaturalCode() != null){
1364
                getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_NOMENCLATURAL_CODE, config.getNomenclaturalCode().getKey());
1365
            }
1366
        }
1367
    }
1368

    
1369

    
1370
    /**
1371
    *
1372
    */
1373
   public NameDetailsConfigurator createLocalNameDetailsViewConfig(boolean local) {
1374
       NameDetailsConfigurator config = new NameDetailsConfigurator(true);
1375
       if (local){
1376
          config.setSimpleDetailsViewActivated(getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_SIMPLE_NAME_DETAILS_SECTION));
1377
          config.setAppendedPhraseActivated(getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_APPENDED_PHRASE));
1378
          config.setAtomisedEpithetsActivated(getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_ATOMISED_EPITHETS));
1379
          config.setAuthorshipSectionActivated(getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_AUTHORSHIP));
1380
          config.setLSIDActivated(getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_LSID));
1381
          config.setNameApprobiationActivated(getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_NAME_APPROBATION));
1382
          config.setNameCacheActivated(getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_CACHE));
1383
          config.setNameRelationsSectionActivated(getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_NAME_RELATIONSHIP));
1384
          config.setNomenclaturalCodeActived(getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_CODE));
1385
          config.setNomenclaturalStatusSectionActivated(getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_STATUS));
1386
          config.setNomenclaturalReferenceSectionActivated(getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_REFERENCE));
1387
          config.setProtologueActivated(getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_PROTOLOGUE));
1388
          config.setRankActivated(getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_RANK));
1389
          config.setTaxonSectionActivated(getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_SIMPLE_NAME_DETAILS_TAXON));
1390
          config.setTypeDesignationSectionActivated(getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_TYPE_DESIGNATION));
1391
          config.setHybridActivated(getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_HYBRID));
1392
       }else{
1393

    
1394
       }
1395

    
1396
      return config;
1397
   }
1398

    
1399

    
1400
   public static void saveConfigToPrefernceStore(NameDetailsConfigurator config) {
1401
       PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.SHOW_SIMPLE_NAME_DETAILS_SECTION,
1402
               config.isSimpleDetailsViewActivated());
1403
       PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.SHOW_SIMPLE_NAME_DETAILS_TAXON, config.isTaxonSectionActivated());
1404
       PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_LSID, config.isLSIDActivated());
1405
       PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_CODE,
1406
               config.isNomenclaturalCodeActived());
1407
       PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_NAMECACHE,
1408
               config.isNameCacheActivated());
1409
       PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_APPENDED_PHRASE,
1410
               config.isAppendedPhraseActivated());
1411
       PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_RANK, config.isRankActivated());
1412
       PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_ATOMISED_EPITHETS,
1413
               config.isAtomisedEpithetsActivated());
1414
       PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_AUTHORSHIP_CACHE,
1415
               config.isAuthorCacheActivated());
1416
       PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_AUTHORSHIP,
1417
               config.isAuthorshipSectionActivated());
1418
       PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_REFERENCE,
1419
               config.isNomenclaturalReferenceSectionActivated());
1420
       PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_STATUS,
1421
               config.isNomenclaturalStatusSectionActivated());
1422
       PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_PROTOLOGUE,
1423
               config.isProtologueActivated());
1424
       PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_TYPE_DESIGNATION,
1425
               config.isTypeDesignationSectionActivated());
1426
       PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_NAME_RELATIONSHIP,
1427
               config.isNameRelationsSectionActivated());
1428
       PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.SHOW_NAME_DETAILS_SECTION_HYBRID,
1429
               config.isHybridActivated());
1430

    
1431
   }
1432

    
1433
/**
1434
 * @return
1435
 */
1436
public static boolean isSortTaxaByRankAndName() {
1437

    
1438
    return getPreferenceStore().getBoolean(IPreferenceKeys.SORT_TAXA_BY_RANK_AND_NAME);
1439
}
1440

    
1441
/**
1442
 * @return
1443
 */
1444
public static boolean isSortNamedAreaByOrderInVocabulary() {
1445

    
1446
    return getPreferenceStore().getBoolean(IPreferenceKeys.SORT_NAMED_AREA_BY_VOCABULARY_ORDER);
1447
}
1448

    
1449
public static void setSortNamedAreasByOrderInVocabulary(boolean isSortByVocabularyOrder) {
1450
    getPreferenceStore().setValue(IPreferenceKeys.SORT_NAMED_AREA_BY_VOCABULARY_ORDER, isSortByVocabularyOrder);
1451

    
1452
}
1453

    
1454
/**
1455
 * <p>
1456
 * setPreferredNamedAreasForDistributionEditor
1457
 * </p>
1458
 *
1459
 * @param saveCheckedElements
1460
 * @param saveGrayedElements
1461
 */
1462
public static void setLastSelectedReference(
1463
        List<String> lastSelectedReferences) {
1464

    
1465
        IPreferenceStore preferenceStore = PreferencesUtil.getPreferenceStore();
1466
        preferenceStore.setValue(PreferencesUtil.LAST_SELECTED_REFERENCES, lastSelectedReferences.toString());
1467
    }
1468

    
1469
/**
1470
 * <p>
1471
 * setPreferredNamedAreasForDistributionEditor
1472
 * </p>
1473
 *
1474
 * @param saveCheckedElements
1475
 * @param saveGrayedElements
1476
 */
1477
public static List<String> getLastSelectedReferences() {
1478

    
1479
        IPreferenceStore preferenceStore = PreferencesUtil.getPreferenceStore();
1480
        String lastSelected = preferenceStore.getString(PreferencesUtil.LAST_SELECTED_REFERENCES);
1481
        List<String> result = new ArrayList<>();
1482
        if (!StringUtils.isBlank(lastSelected)){
1483
            Collections.addAll(result, lastSelected.substring(1,lastSelected.length()-1).split(", "));
1484
        }
1485
        return result;
1486
    }
1487

    
1488

    
1489
/**
1490
 * <p>
1491
 * setPreferredNamedAreasForDistributionEditor
1492
 * </p>
1493
 *
1494
 * @param saveCheckedElements
1495
 * @param saveGrayedElements
1496
 */
1497
public static void setPreferredNamedAreasForDistributionEditor(
1498
        String saveCheckedElements, String saveGrayedElements, boolean local) {
1499
    if (local){
1500
        IPreferenceStore preferenceStore = PreferencesUtil.getPreferenceStore();
1501
        preferenceStore.setValue(PreferencesUtil.DISTRIBUTION_AREA_OCCURENCE_STATUS, saveCheckedElements);
1502
        preferenceStore.setValue(PreferencesUtil.DISTRIBUTION_AREA_OCCURENCE_STATUS_GRAYED, saveGrayedElements);
1503

    
1504
    }
1505
    else{
1506
        CdmPreference preference = null;
1507

    
1508
        if (saveCheckedElements == null){
1509
            preference = getPreferenceFromDB(PreferencePredicate.AvailableDistributionAreaTerms);
1510

    
1511
            if (preference == null){
1512
                return ;
1513
            } else{
1514
                getPreferenceStore().setValue(DISTRIBUTION_AREA_OCCURENCE_STATUS,
1515
                        saveCheckedElements);
1516
                preference = CdmPreference.NewInstance(PreferenceSubject.NewDatabaseInstance(), PreferencePredicate.AvailableDistributionAreaTerms, saveCheckedElements);
1517
                setPreferenceToDB(preference);
1518

    
1519
            }
1520
        } else{
1521
           preference = CdmPreference.NewInstance(PreferenceSubject.NewDatabaseInstance(), PreferencePredicate.AvailableDistributionAreaTerms, saveCheckedElements);
1522
           setPreferenceToDB(preference);
1523
           getPreferenceStore().setValue(DISTRIBUTION_AREA_OCCURENCE_STATUS,
1524
                    saveCheckedElements);
1525

    
1526
        }
1527
    }
1528

    
1529
}
1530

    
1531
/**
1532
 * @param saveCheckedElements
1533
 * @param saveCheckedElements2
1534
 * @param b
1535
 */
1536
public static void setPreferredVocabulariesForDistributionEditor(String saveCheckedElements,
1537
        boolean local) {
1538
    if (local){
1539
        IPreferenceStore preferenceStore = PreferencesUtil.getPreferenceStore();
1540
        preferenceStore.setValue(PreferencesUtil.DISTRIBUTION_VOCABULARIES, saveCheckedElements);
1541
    }
1542
    else{
1543
        ICdmRepository controller;
1544
        CdmPreference preference = null;
1545

    
1546
        if (saveCheckedElements == null){
1547
            preference = getPreferenceFromDB(PreferencePredicate.AvailableDistributionAreaVocabularies);
1548

    
1549
            if (preference == null){
1550
                return ;
1551
            } else{
1552
                getPreferenceStore().setValue(DISTRIBUTION_VOCABULARIES,
1553
                        saveCheckedElements);
1554
                preference = CdmPreference.NewInstance(PreferenceSubject.NewDatabaseInstance(), PreferencePredicate.AvailableDistributionAreaVocabularies, saveCheckedElements);
1555
                setPreferenceToDB(preference);
1556
            }
1557
        } else{
1558
            preference = CdmPreference.NewInstance(PreferenceSubject.NewDatabaseInstance(), PreferencePredicate.AvailableDistributionAreaVocabularies, saveCheckedElements);
1559
            setPreferenceToDB(preference);
1560
            getPreferenceStore().setValue(DISTRIBUTION_VOCABULARIES,
1561
                    saveCheckedElements);
1562

    
1563
        }
1564
    }
1565
}
1566

    
1567

    
1568

    
1569

    
1570
/**
1571
 * @param saveCheckedElements
1572
 * @param saveCheckedElements2
1573
 * @param b
1574
 */
1575
public static String getPreferredVocabulariesForDistributionEditor(boolean local) {
1576
    if (local){
1577
        IPreferenceStore preferenceStore = PreferencesUtil.getPreferenceStore();
1578
        String pref = preferenceStore.getString(DISTRIBUTION_VOCABULARIES);
1579
        return pref;
1580
    }
1581
    else{
1582
        CdmPreference preference = null;
1583
        preference = getPreferenceFromDB(PreferencePredicate.AvailableDistributionAreaVocabularies);
1584
        if (preference == null){
1585
            return null;
1586
        } else{
1587
            return preference.getValue();
1588
        }
1589

    
1590
    }
1591

    
1592

    
1593

    
1594
}
1595

    
1596
public static boolean getFilterCommonNameReferences(){
1597
    return getPreferenceStore().getBoolean(PreferencesUtil.FILTER_COMMON_NAME_REFERENCES);
1598
}
1599

    
1600
/**
1601
 *
1602
 */
1603
public static void updateDBPreferences() {
1604
    CdmPreference preference = null;
1605
    IPreferenceStore prefStore = getPreferenceStore();
1606

    
1607
    //ABCD Configurator
1608

    
1609
    updateAbcdImportConfigurationPreference();
1610

    
1611
    preference = getPreferenceFromDB(PreferencePredicate.ShowImportExportMenu);
1612
    if (preference != null){
1613
        if(!prefStore.getBoolean(SHOW_IO_MENU) ||  !preference.isAllowOverride()){
1614
            prefStore.setValue(SHOW_IO_MENU, preference.getValue());
1615
        }
1616
    }
1617
    //Specimen Details
1618
    preference = getPreferenceFromDB(PreferencePredicate.ShowSpecimen);
1619
    if (preference != null){
1620
        if(!prefStore.getBoolean(SHOW_SPECIMEN) ||  !preference.isAllowOverride()){
1621
            prefStore.setValue(SHOW_SPECIMEN, preference.getValue());
1622
        }
1623
    }
1624

    
1625
    preference = getPreferenceFromDB(PreferencePredicate.ShowTaxonAssociations);
1626
    if (preference != null){
1627
        if(!prefStore.getBoolean(SHOW_TAXON_ASSOCIATIONS_OVERRIDE) ||  !preference.isAllowOverride()){
1628
            prefStore.setValue(SHOW_TAXON_ASSOCIATIONS, preference.getValue());
1629
        }
1630
    }
1631
    preference = getPreferenceFromDB(PreferencePredicate.ShowCollectingAreasInGeneralSection);
1632
    if (preference != null){
1633
        if(!prefStore.getBoolean(SHOW_COLLECTING_AREAS_IN_GENERAL_SECTION_OVERRIDE) ||  !preference.isAllowOverride()){
1634
            prefStore.setValue(SHOW_COLLECTING_AREAS_IN_GENERAL_SECTION, preference.getValue());
1635
        }
1636
    }
1637
    preference = getPreferenceFromDB(PreferencePredicate.ShowLifeForm);
1638
    if (preference != null){
1639
        if(!prefStore.getBoolean(SHOW_LIFE_FORM_OVERRIDE) ||  !preference.isAllowOverride()){
1640
            prefStore.setValue(SHOW_LIFE_FORM, preference.getValue());
1641
        }
1642
    }
1643
    preference = getPreferenceFromDB(PreferencePredicate.DeterminationOnlyForFieldUnits);
1644
    if (preference != null){
1645
        if(!prefStore.getBoolean(DETERMINATION_ONLY_FOR_FIELD_UNITS_OVERRIDE) ||  !preference.isAllowOverride()){
1646
            prefStore.setValue(DETERMINATION_ONLY_FOR_FIELD_UNITS, preference.getValue());
1647
        }
1648
    }
1649

    
1650

    
1651
    //Name Details
1652
    NameDetailsConfigurator config = getPreferredNameDetailsConfiguration(false);
1653
    if (config != null ){
1654
        if (!prefStore.getBoolean(OVERRIDE_NAME_DETAILS) ||  !prefStore.getBoolean(ALLOW_OVERRIDE_NAME_DETAILS)){
1655
            setPreferredNameDetailsConfiguration(config, false);
1656
        }
1657
    }
1658

    
1659
    //Distribution Editor
1660
    preference = getPreferenceFromDB(PreferencePredicate.AvailableDistributionAreaVocabularies);
1661
    if (preference != null){
1662
        if (!prefStore.getBoolean(DISTRIBUTION_AREA_PREFRENCES_ACTIVE_OVERRIDE) ||  !preference.isAllowOverride()){
1663
            prefStore.setValue(DISTRIBUTION_VOCABULARIES, preference.getValue());
1664
        }
1665
    }
1666

    
1667
    preference = getPreferenceFromDB(PreferencePredicate.DistributionEditorActivated);
1668
    if (preference != null){
1669
        if (!prefStore.getBoolean(DISTRIBUTION_AREA_PREFRENCES_ACTIVE_OVERRIDE) || !preference.isAllowOverride()){
1670
            prefStore.setValue(DISTRIBUTION_AREA_PREFRENCES_ACTIVE, preference.getValue());
1671
        }
1672
    }
1673

    
1674
    preference = getPreferenceFromDB(PreferencePredicate.AvailableDistributionStatus);
1675
    if (preference != null){
1676
        if (!prefStore.getBoolean(DISTRIBUTION_STATUS_OVERRIDE) || !preference.isAllowOverride()){
1677
            //get terms for the uuids... and add them to the termManager as preferred terms
1678
            ITermService termService = CdmStore.getService(ITermService.class);
1679
            String[] uuidArray = preference.getValue().split(";");
1680
            List<UUID> uuidList = new ArrayList();
1681
            for (String uuidString:uuidArray){
1682
                uuidList.add(UUID.fromString(uuidString));
1683
            }
1684

    
1685
            List<DefinedTermBase> definedTermBases = termService.load(uuidList, null);
1686
            CdmStore.getTermManager().setPreferredTerms(definedTermBases, TermStore.getTerms(TermType.PresenceAbsenceTerm, null));
1687
        }
1688
    }
1689

    
1690
    preference = getPreferenceFromDB(PreferencePredicate.CommonNameAreaVocabularies);
1691
    if (preference != null){
1692
        if (!prefStore.getBoolean(COMMON_NAME_AREA_VOCABULARIES_OVERRIDE) ||  !preference.isAllowOverride()){
1693
            prefStore.setValue(COMMON_NAME_AREA_VOCABULARIES, preference.getValue());
1694
        }
1695
    }
1696

    
1697
}
1698

    
1699

    
1700

    
1701

    
1702

    
1703

    
1704

    
1705
}
(19-19/24)