Merge branch 'develop' of wp5.e-taxonomy.eu:/var/git/taxeditor into remoting-4.0
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / datasource / CdmDataSourceRepository.java
index f509144b805281cc8c5a80eafafe9452b559bc03..0275cc47100a772f81bd429b74d96f82ddc37257 100644 (file)
@@ -46,18 +46,18 @@ public class CdmDataSourceRepository{
        private static final String CURRENT_DATASOURCE = "currentDataSource";
        private static final String CURRENT_DATASOURCE_POSTFIX = "currentDataSourcePostFix";
        private static final String DEFAULT_DATASOURCE_STATE_FILENAME = "datasource.xml";
-       
+
        private static final String DEFAULT_DATASOURCE_NAME = "cdm";
        private static final String DEFAULT_DATASOURCE_POSTFIX = CdmPersistentDataSource.DATASOURCE_BEAN_POSTFIX;
-       
+
        private static ICdmSource currentCdmSource;
        private static IMemento memento;
-       
+
        private static String lastUsedCdmSourceName;
        private static String lastUsedCdmSourcePostFix;
-       
-       
-       
+
+
+
        /**
         * <p>Getter for the field <code>lastUsedDataSourceName</code>.</p>
         *
@@ -65,12 +65,12 @@ public class CdmDataSourceRepository{
         */
        public static void updateLastUsedDataSource(){
                if(lastUsedCdmSourceName == null){
-                       memento = readMemento();                
+                       memento = readMemento();
                        lastUsedCdmSourceName = memento != null ? memento.getString(CURRENT_DATASOURCE) : DEFAULT_DATASOURCE_NAME;
                        lastUsedCdmSourcePostFix = memento != null ? memento.getString(CURRENT_DATASOURCE_POSTFIX) : DEFAULT_DATASOURCE_POSTFIX;
-                       
+
                }
-               
+
        }
 
        /**
@@ -84,7 +84,7 @@ public class CdmDataSourceRepository{
                return true;
        }
 
-       
+
        /**
         * <p>getAll</p>
         *
@@ -92,7 +92,7 @@ public class CdmDataSourceRepository{
         */
        public static List<ICdmSource> getAll() {
                List<ICdmSource> remoteSources = new ArrayList<ICdmSource>();
-               
+
                for(ICdmDataSource dataSource : CdmPersistentDataSource.getAllDataSources()){
                        try {
                                remoteSources.add(CdmPersistentDataSource.NewInstance(dataSource.getName()));
@@ -100,20 +100,20 @@ public class CdmDataSourceRepository{
                                MessagingUtils.error(CdmDataSourceRepository.class, "Could not find dataSource", e);
                        }
                }
-               
+
                try {
-                       for(ICdmRemoteSource remoteSource : CdmPersistentRemoteSource.getAllRemoteSources()){                   
+                       for(ICdmRemoteSource remoteSource : CdmPersistentRemoteSource.getAllRemoteSources()){
                                remoteSources.add(remoteSource);
                        }
                } catch (CdmRemoteSourceException e) {
                        MessagingUtils.error(CdmDataSourceRepository.class, "Error retrieving remote sources", e);
                }
-               
+
                // TODO sort by database name
-               
+
                return remoteSources;
        }
-       
+
        /**
         * <p>getDataSource</p>
         *
@@ -121,7 +121,7 @@ public class CdmDataSourceRepository{
         * @return a {@link eu.etaxonomy.cdm.database.ICdmDataSource} object.
         */
        public static ICdmDataSource getDataSource(String name){
-               
+
                for(ICdmDataSource dataSource : CdmPersistentDataSource.getAllDataSources()){
                        try {
                                if(dataSource.getName().equals(name)){
@@ -131,22 +131,22 @@ public class CdmDataSourceRepository{
                                MessagingUtils.error(CdmDataSourceRepository.class, "Could not find dataSource", e);
                        }
                }
-               
+
                return null;
        }
-       
-               
+
+
        /**
         * <p>Getter for the field <code>currentDataSource</code>.</p>
         *
         * @return a {@link eu.etaxonomy.cdm.database.ICdmDataSource} object.
-        * @throws CdmRemoteSourceException 
+        * @throws CdmRemoteSourceException
         */
        public static ICdmSource getCurrentCdmSource() throws CdmRemoteSourceException {
-               
+
                if (currentCdmSource == null) {
                        updateLastUsedDataSource();
-                       
+
                        if(lastUsedCdmSourceName == null) {
                                return null;
                        }
@@ -156,12 +156,9 @@ public class CdmDataSourceRepository{
                                        currentCdmSource = CdmPersistentDataSource.NewInstance(lastUsedCdmSourceName);
                                } catch (DataSourceNotFoundException e) {
                                        // fallback creates a new default
-                                       ICdmDataSource h2DataSource = CdmDataSource.NewH2EmbeddedInstance(
-                                                       DEFAULT_DATASOURCE_NAME, "sa", "", PreferencesUtil.getPreferredNomenclaturalCode());
-                                       save(h2DataSource.getName(), h2DataSource);
-                                       setCurrentCdmSource(h2DataSource);
+                                       setCurrentCdmSource(createDefaultH2DataSource());
                                }
-                       } else if (lastUsedCdmSourcePostFix.equals(CdmPersistentRemoteSource.REMOTESOURCE_BEAN_POSTFIX)) {                              
+                       } else if (lastUsedCdmSourcePostFix.equals(CdmPersistentRemoteSource.REMOTESOURCE_BEAN_POSTFIX)) {
                                currentCdmSource = CdmPersistentRemoteSource.NewInstance(lastUsedCdmSourceName);
                        } else {
                                throw new CdmRemoteSourceException("Unkown Cdm Source Type");
@@ -169,7 +166,19 @@ public class CdmDataSourceRepository{
                }
                return currentCdmSource;
        }
-       
+
+       /**
+        * Creates a default H2 CDM Data Source
+        *
+        * @return the newly created data source
+        */
+       public static ICdmDataSource createDefaultH2DataSource() {
+           ICdmDataSource h2DataSource = CdmDataSource.NewH2EmbeddedInstance(
+                DEFAULT_DATASOURCE_NAME, "sa", "", PreferencesUtil.getPreferredNomenclaturalCode());
+        save(h2DataSource.getName(), h2DataSource);
+        return h2DataSource;
+       }
+
        /**
         * <p>Setter for the field <code>currentDataSource</code>.</p>
         *
@@ -180,7 +189,7 @@ public class CdmDataSourceRepository{
                currentCdmSource = cdmSource;
                NomenclaturalCode dataSourceNomenclaturalCode = cdmSource.getNomenclaturalCode();
                NomenclaturalCode applicationNomenclaturalCode = PreferencesUtil.getPreferredNomenclaturalCode();
-               
+
                if( dataSourceNomenclaturalCode != null && ! dataSourceNomenclaturalCode.equals(applicationNomenclaturalCode)){
                        PreferencesUtil.setPreferredNomenclaturalCode(dataSourceNomenclaturalCode);
                        MessagingUtils.informationDialog("Nomenclatural Code Change", "The Datasource that was just " +
@@ -188,8 +197,8 @@ public class CdmDataSourceRepository{
                                        "The nomenclatural code was changed in the application.");
                }
                return true;
-       }       
-               
+       }
+
        /**
         * <p>changeDataSource</p>
         *
@@ -197,9 +206,9 @@ public class CdmDataSourceRepository{
         * @return a boolean.
         */
        public static boolean changeDataSource(final ICdmSource cdmSource) {
-               saveAsCurrentDatabaseToMemento(cdmSource);              
+               saveAsCurrentDatabaseToMemento(cdmSource);
                CdmStore.connect(cdmSource);
-               
+
                return true;
        }
 
@@ -209,24 +218,24 @@ public class CdmDataSourceRepository{
         * @param dataSource a {@link eu.etaxonomy.cdm.database.ICdmDataSource} object.
         * @param strDataSourceName a {@link java.lang.String} object.
         * @return a {@link eu.etaxonomy.cdm.database.CdmPersistentDataSource} object.
-        * @throws CdmRemoteSourceException 
+        * @throws CdmRemoteSourceException
         */
        public static ICdmPersistentSource save(String strCdmSourceName, ICdmRemoteSource cdmSource) throws CdmRemoteSourceException {
-               return CdmPersistentRemoteSource.save(strCdmSourceName, cdmSource);             
+               return CdmPersistentRemoteSource.save(strCdmSourceName, cdmSource);
        }
-       
+
        /**
         * <p>save</p>
         *
         * @param dataSource a {@link eu.etaxonomy.cdm.database.ICdmDataSource} object.
         * @param strDataSourceName a {@link java.lang.String} object.
         * @return a {@link eu.etaxonomy.cdm.database.CdmPersistentDataSource} object.
-        * @throws CdmRemoteSourceException 
+        * @throws CdmRemoteSourceException
         */
-       public static ICdmPersistentSource save(String strCdmSourceName, ICdmDataSource cdmSource)  {           
-               return CdmPersistentDataSource.save(strCdmSourceName, cdmSource);                               
+       public static ICdmPersistentSource save(String strCdmSourceName, ICdmDataSource cdmSource)  {
+               return CdmPersistentDataSource.save(strCdmSourceName, cdmSource);
        }
-       
+
        /**
         * <p>update</p>
         *
@@ -242,7 +251,7 @@ public class CdmDataSourceRepository{
                }
                return null;
        }
-       
+
        public static ICdmPersistentSource replace(String strCdmSourceName, ICdmDataSource cdmSource){
                try {
                        return CdmPersistentDataSource.replace(strCdmSourceName, cdmSource);
@@ -251,7 +260,7 @@ public class CdmDataSourceRepository{
                }
                return null;
        }
-       
+
        /**
         * <p>update</p>
         *
@@ -261,35 +270,35 @@ public class CdmDataSourceRepository{
         */
        public static ICdmPersistentSource update(String strCdmSourceName, ICdmRemoteSource cdmSource){
                try {
-                       return CdmPersistentRemoteSource.update(strCdmSourceName, cdmSource);   
+                       return CdmPersistentRemoteSource.update(strCdmSourceName, cdmSource);
                } catch (Exception e) {
                        MessagingUtils.error(CdmDataSourceRepository.class, "Error updating CDM Source", e);
-                       
+
                }
                return null;
        }
-       
+
        /*********************************************************
         * Memento Handling                                                                              *
         *********************************************************/
-       
+
        private static void saveAsCurrentDatabaseToMemento(ICdmSource cdmSource){
                if(memento == null) {
                        memento = readMemento();
                }
                memento.putString(CURRENT_DATASOURCE, cdmSource.getName());
-               
+
                // Set postfix to distinguish between data and remote sources
                if(cdmSource instanceof CdmPersistentRemoteSource) {
                        memento.putString(CURRENT_DATASOURCE_POSTFIX, CdmPersistentRemoteSource.REMOTESOURCE_BEAN_POSTFIX);
                } else {
                        memento.putString(CURRENT_DATASOURCE_POSTFIX, CdmPersistentDataSource.DATASOURCE_BEAN_POSTFIX);
                }
-               
-               
+
+
                saveMementoToFile(memento);
        }
-       
+
        /*
         * Answer the workbench state file.
         */
@@ -301,7 +310,7 @@ public class CdmDataSourceRepository{
                path = path.append(DEFAULT_DATASOURCE_STATE_FILENAME);
                return path.toFile();
        }
-       
+
        private static IMemento readMemento(){
                try {
                        return MementoHelper.readMementoFromFile(getCdmSourceStateFile());
@@ -309,14 +318,14 @@ public class CdmDataSourceRepository{
                        return initializeMemento();
                }
        }
-       
+
 
        private static IMemento initializeMemento() {
-               
+
                XMLMemento memento = XMLMemento.createWriteRoot(TAG_DATASOURCE);
                memento.putString(CURRENT_DATASOURCE, DEFAULT_DATASOURCE_NAME);
                saveMementoToFile(memento);
-               
+
                return readMemento();
        }
 
@@ -325,5 +334,5 @@ public class CdmDataSourceRepository{
         */
        private static IMemento saveMementoToFile(IMemento memento) {
                return MementoHelper.saveMementoToFile(memento, getCdmSourceStateFile());
-       }       
+       }
 }