Merge branch 'release/5.19.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.local / src / main / java / eu / etaxonomy / taxeditor / local / view / datasource / CdmMetaDataAwareDataSourceContainer.java
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 package eu.etaxonomy.taxeditor.local.view.datasource;
10
11 import java.util.HashMap;
12 import java.util.Map;
13
14 import eu.etaxonomy.cdm.config.CdmSourceException;
15 import eu.etaxonomy.cdm.config.ICdmSource;
16 import eu.etaxonomy.cdm.model.metadata.CdmMetaData;
17 import eu.etaxonomy.cdm.model.metadata.CdmMetaDataPropertyName;
18 import eu.etaxonomy.taxeditor.model.MessagingUtils;
19
20 /**
21 * <p>CdmMetaDataAwareDataSourceContainer class.</p>
22 *
23 * @author n.hoffmann
24 * @created Sep 22, 2010
25 */
26 public class CdmMetaDataAwareDataSourceContainer {
27
28 /** Constant <code>DEFAULT_ENTRY="-"</code> */
29 public static final String DEFAULT_ENTRY = "-";
30
31 private ICdmSource cdmSource;
32
33 private boolean running;
34
35 private Map<CdmMetaDataPropertyName, String> metaDataMap;
36
37 /**
38 * <p>Constructor for CdmMetaDataAwareDataSourceContainer.</p>
39 *
40 * @param dataSource a {@link eu.etaxonomy.cdm.database.ICdmDataSource} object.
41 * @param view a {@link eu.etaxonomy.taxeditor.webapp.view.datasource.CdmDataSourceViewPart} object.
42 */
43 public CdmMetaDataAwareDataSourceContainer(ICdmSource cdmSource){
44 this.cdmSource = cdmSource;
45
46 metaDataMap = getDefaultMetaDataMap();
47 }
48
49 public ICdmSource getCdmSource() {
50 return cdmSource;
51 }
52
53 public void getMetaDataFromDataSource(){
54 try {
55 running = cdmSource.checkConnection();
56 } catch (Exception e) {
57 running = false;
58 for(CdmMetaDataPropertyName metaDataPropertyName : CdmMetaDataPropertyName.values()){
59 metaDataMap.put(metaDataPropertyName, DEFAULT_ENTRY);
60 }
61 }
62
63 try {
64 if(isRunning()){
65
66 // try {
67 metaDataMap = cdmSource.getMetaDataMap();
68 cdmSource.closeOpenConnections();
69 // } catch (CdmSourceException e) {
70 // StoreUtil.warn(this.getClass(), "SQLException when trying to access: " + cdmSource.getName() + ". " + e.getMessage());
71 // }
72 }
73 } catch (Exception e) {
74 if(e instanceof CdmSourceException && e.getMessage().toLowerCase().contains("\"cdmmetadata\"")){
75 MessagingUtils.error(this.getClass(), "Data source "+((CdmSourceException) e).getSourceName()+" does not have a CDMMETADATA table", null);
76 }
77 else{
78 MessagingUtils.error(this.getClass(), e);
79 }
80 }
81 }
82
83 private Map<CdmMetaDataPropertyName, String> getDefaultMetaDataMap(){
84 Map<CdmMetaDataPropertyName, String> resultMap = new HashMap<>(CdmMetaDataPropertyName.values().length);
85
86 for(CdmMetaDataPropertyName metaDataPropertyName : CdmMetaDataPropertyName.values()){
87 resultMap.put(metaDataPropertyName, null);
88 }
89
90 return resultMap;
91 }
92
93 public Map<CdmMetaDataPropertyName, String> getMetaDataMap() {
94 return metaDataMap;
95 }
96
97 public boolean isDataSourceCompatible(){
98 String version = metaDataMap.get(CdmMetaDataPropertyName.DB_SCHEMA_VERSION);
99 return version == null || version.equals(DEFAULT_ENTRY) ? false : CdmMetaData.isDbSchemaVersionCompatible(version);
100 }
101
102 public String getMetaData(CdmMetaDataPropertyName metaDataPropertyName){
103 String property = metaDataMap.get(metaDataPropertyName);
104 return property != null ? property : DEFAULT_ENTRY;
105 }
106
107 public boolean isRunning() {
108 return running;
109 }
110
111 @Override
112 public String toString() {
113 return cdmSource.getName();
114 }
115 }