(no commit message)
[cdmlib.git] / cdmlib-io / src / main / java / eu / etaxonomy / cdm / io / common / CdmDefaultImport.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
10 package eu.etaxonomy.cdm.io.common;
11
12 import java.util.HashMap;
13 import java.util.Map;
14
15 import org.apache.log4j.Logger;
16
17 import eu.etaxonomy.cdm.api.application.CdmApplicationController;
18 import eu.etaxonomy.cdm.api.service.IService;
19 import eu.etaxonomy.cdm.database.DataSourceNotFoundException;
20 import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
21 import eu.etaxonomy.cdm.model.common.CdmBase;
22 import eu.etaxonomy.cdm.model.common.init.TermNotFoundException;
23 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
24 import eu.etaxonomy.cdm.model.reference.ReferenceBase;
25 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
26
27 /**
28 * @author a.mueller
29 * @created 20.06.2008
30 * @version 1.0
31 */
32
33 public class CdmDefaultImport<T extends IImportConfigurator> implements ICdmImport<T> {
34 private static final Logger logger = Logger.getLogger(CdmDefaultImport.class);
35
36 //Constants
37 final boolean OBLIGATORY = true;
38 final boolean FACULTATIVE = false;
39 final int modCount = 1000;
40
41 IService service = null;
42
43 Map<String, MapWrapper<? extends CdmBase>> stores = new HashMap<String, MapWrapper<? extends CdmBase>>();
44
45 public CdmDefaultImport(){
46 stores.put(ICdmIO.AUTHOR_STORE, new MapWrapper<TeamOrPersonBase>(service));
47 stores.put(ICdmIO.REFERENCE_STORE, new MapWrapper<ReferenceBase>(service));
48 stores.put(ICdmIO.NOMREF_STORE, new MapWrapper<ReferenceBase>(service));
49 stores.put(ICdmIO.NOMREF_DETAIL_STORE, new MapWrapper<ReferenceBase>(service));
50 stores.put(ICdmIO.REF_DETAIL_STORE, new MapWrapper<ReferenceBase>(service));
51 stores.put(ICdmIO.TAXONNAME_STORE, new MapWrapper<TaxonNameBase>(service));
52 stores.put(ICdmIO.TAXON_STORE, new MapWrapper<TaxonBase>(service));
53 }
54
55 public boolean invoke(IImportConfigurator config){
56 if (config.getCheck().equals(IImportConfigurator.CHECK.CHECK_ONLY)){
57 return doCheck(config);
58 }else if (config.getCheck().equals(IImportConfigurator.CHECK.CHECK_AND_IMPORT)){
59 doCheck(config);
60 return doImport(config);
61 }else if (config.getCheck().equals(IImportConfigurator.CHECK.IMPORT_WITHOUT_CHECK)){
62 return doImport(config);
63 }else{
64 logger.error("Unknown CHECK type");
65 return false;
66 }
67 }
68
69
70 protected boolean doCheck(IImportConfigurator config){
71 boolean result = true;
72 System.out.println("Start checking Source ("+ config.getSourceNameString() + ") ...");
73
74 //check
75 if (config == null){
76 logger.warn("CdmImportConfiguration is null");
77 return false;
78 }else if (! config.isValid()){
79 logger.warn("CdmImportConfiguration is not valid");
80 return false;
81 }
82
83 //do check for each class
84 for (Class<ICdmIO> ioClass: config.getIoClassList()){
85 ICdmIO cdmIo = null;
86 try {
87 cdmIo = ioClass.newInstance();
88 result &= cdmIo.check(config);
89 } catch (Exception e) {
90 logger.error(e);
91 e.printStackTrace();
92 }
93 }
94
95 //return
96 System.out.println("End checking Source ("+ config.getSourceNameString() + ") for import to CDM");
97 return result;
98
99 }
100
101
102 /**
103 * Executes the whole
104 */
105 protected boolean doImport(IImportConfigurator config){
106 CdmApplicationController cdmApp;
107 boolean result = true;
108 if (config == null){
109 logger.warn("Configuration is null");
110 return false;
111 }else if (! config.isValid()){
112 logger.warn("Configuration is not valid");
113 return false;
114 }
115 cdmApp = config.getCdmAppController();
116 // try {
117 //cdmApp = CdmApplicationController.NewInstance(config.getDestination(), config.getDbSchemaValidation());
118
119 // } catch (DataSourceNotFoundException e) {
120 // logger.warn("could not connect to destination database");
121 // return false;
122 // }catch (TermNotFoundException e) {
123 // logger.warn("could not find needed term in destination datasource");
124 // return false;
125 // }
126
127
128 ReferenceBase sourceReference = config.getSourceReference();
129 System.out.println("Start import from Source ("+ config.getSourceNameString() + ") to Cdm (" + cdmApp.getDatabaseService().getUrl() + ") ...");
130
131 //do invoke for each class
132 for (Class<ICdmIO> ioClass: config.getIoClassList()){
133 ICdmIO cdmIo = null;
134 try {
135 cdmIo = ioClass.newInstance();
136 result &= cdmIo.invoke(config, stores);
137 } catch (Exception e) {
138 logger.error(e);
139 e.printStackTrace();
140 }
141 }
142
143 //return
144 System.out.println("End import from Source ("+ config.getSourceNameString() + ") to Cdm (" + cdmApp.getDatabaseService().getUrl() + ") ...");
145 return true;
146 }
147
148
149
150 }