3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
11 package eu
.etaxonomy
.taxeditor
.datasource
.view
;
13 import java
.sql
.SQLException
;
14 import java
.util
.HashMap
;
17 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
18 import org
.eclipse
.core
.runtime
.IStatus
;
19 import org
.eclipse
.core
.runtime
.Status
;
20 import org
.eclipse
.core
.runtime
.jobs
.Job
;
21 import org
.eclipse
.jface
.viewers
.StructuredViewer
;
22 import org
.eclipse
.swt
.widgets
.Display
;
24 import eu
.etaxonomy
.cdm
.database
.ICdmDataSource
;
25 import eu
.etaxonomy
.cdm
.model
.common
.CdmMetaData
;
26 import eu
.etaxonomy
.cdm
.model
.common
.CdmMetaData
.MetaDataPropertyName
;
27 import eu
.etaxonomy
.taxeditor
.store
.StoreUtil
;
30 * <p>CdmMetaDataAwareDataSourceContainer class.</p>
33 * @created Sep 22, 2010
36 public class CdmMetaDataAwareDataSourceContainer
{
38 private class MetaDataJob
extends Job
{
43 public MetaDataJob(String dataSourceName
) {
44 super("Retrieving meta data for datasource: " + dataSourceName
);
48 * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
51 protected IStatus
run(IProgressMonitor monitor
) {
52 if(!monitor
.isCanceled()){
54 running
= dataSource
.testConnection();
55 } catch (Exception e
) {
60 if(!monitor
.isCanceled()){
61 getMetaDataFromDataSource(dataSource
);
64 if(!monitor
.isCanceled()){
65 Display
.getDefault().asyncExec(new Runnable(){
69 viewer
.update(CdmMetaDataAwareDataSourceContainer
.this, null);
75 return monitor
.isCanceled() ? Status
.CANCEL_STATUS
: Status
.OK_STATUS
;
80 /** Constant <code>DEFAULT_ENTRY="-"</code> */
81 public static final String DEFAULT_ENTRY
= "-";
83 private ICdmDataSource dataSource
;
85 private boolean running
;
87 private Map
<MetaDataPropertyName
, String
> metaDataMap
;
89 private StructuredViewer viewer
;
91 private MetaDataJob job
;
94 * <p>Constructor for CdmMetaDataAwareDataSourceContainer.</p>
96 * @param dataSource a {@link eu.etaxonomy.cdm.database.ICdmDataSource} object.
97 * @param view a {@link eu.etaxonomy.taxeditor.datasource.view.CdmDataSourceViewPart} object.
99 public CdmMetaDataAwareDataSourceContainer(ICdmDataSource dataSource
, CdmDataSourceViewPart view
){
100 this.dataSource
= dataSource
;
101 this.viewer
= view
.getViewer();
103 metaDataMap
= getDefaultMetaDataMap();
105 job
= new MetaDataJob(dataSource
.getName());
106 view
.getService().schedule(job
);
110 * <p>Getter for the field <code>dataSource</code>.</p>
112 * @return the dataSource
114 public ICdmDataSource
getDataSource() {
118 private void getMetaDataFromDataSource(ICdmDataSource dataSource
){
123 for(MetaDataPropertyName metaDataPropertyName
: MetaDataPropertyName
.values()){
124 Object result
= dataSource
.getSingleValue(metaDataPropertyName
.getSqlQuery());
126 metaDataMap
.put(metaDataPropertyName
, (String
) result
);
129 dataSource
.closeOpenConnections();
130 } catch (SQLException e
) {
131 StoreUtil
.warn(this.getClass(), "SQLException when trying to access: " + dataSource
.getName() + ". " + e
.getMessage());
134 } catch (Exception e
) {
135 StoreUtil
.error(this.getClass(), e
);
139 private Map
<MetaDataPropertyName
, String
> getDefaultMetaDataMap(){
140 Map
<MetaDataPropertyName
, String
> resultMap
= new HashMap
<MetaDataPropertyName
, String
>(MetaDataPropertyName
.values().length
);
142 for(MetaDataPropertyName metaDataPropertyName
: MetaDataPropertyName
.values()){
143 resultMap
.put(metaDataPropertyName
, null);
150 * <p>Getter for the field <code>metaDataMap</code>.</p>
152 * @return the metaDataMap
154 public Map
<MetaDataPropertyName
, String
> getMetaDataMap() {
159 * <p>isDataSourceCompatible</p>
163 public boolean isDataSourceCompatible(){
164 String version
= metaDataMap
.get(MetaDataPropertyName
.DB_SCHEMA_VERSION
);
165 return version
== null ?
false : CdmMetaData
.isDbSchemaVersionCompatible(version
);
171 * @param metaDataPropertyName a {@link eu.etaxonomy.cdm.model.common.CdmMetaData.MetaDataPropertyName} object.
172 * @return a {@link java.lang.String} object.
174 public String
getMetaData(MetaDataPropertyName metaDataPropertyName
){
175 String property
= metaDataMap
.get(metaDataPropertyName
);
176 return property
!= null ? property
: DEFAULT_ENTRY
;
182 * @return the running
184 public boolean isRunning() {
189 * @see java.lang.Object#toString()
193 public String
toString() {
194 return dataSource
.getName();
200 public void dispose(){