View Javadoc

1   /*
2    * This file is a part of CAST project.
3    * (c) Copyright 2007, AGH University of Science & Technology
4    * https://caribou.iisg.agh.edu.pl/trac/cast
5    *
6    * Licensed under the Eclipse Public License, Version 1.0 (the "License").
7    * You may not use this file except in compliance with the License.
8    * You may obtain a copy of the License at
9    * http://www.eclipse.org/legal/epl-v10.html
10   */
11  /*
12   * File: AbstractStepByStepImportStrategy.java
13   * Created: 2009-09-27
14   * Author: entrop
15   * $Id$
16   */
17  
18  package pl.edu.agh.cast.importer.wizard.strategy;
19  
20  import org.apache.log4j.Logger;
21  import org.eclipse.jface.wizard.Wizard;
22  
23  import pl.edu.agh.cast.importer.base.template.ImportTemplateManager;
24  import pl.edu.agh.cast.importer.base.template.exception.TemplateException;
25  import pl.edu.agh.cast.importer.base.tokenizer.csv.CsvTokenizer;
26  import pl.edu.agh.cast.importer.base.tokenizer.fixedwidth.FixedWidthTokenizer;
27  import pl.edu.agh.cast.importer.wizard.Activator;
28  import pl.edu.agh.cast.importer.wizard.ImporterWizard;
29  import pl.edu.agh.cast.importer.wizard.page.AbstractConversionRulesSelectionPage;
30  import pl.edu.agh.cast.importer.wizard.page.AbstractImportWizardPage;
31  import pl.edu.agh.cast.importer.wizard.page.AnalyzersSelectionPage;
32  import pl.edu.agh.cast.importer.wizard.page.DelimiterSelectionPage;
33  import pl.edu.agh.cast.importer.wizard.page.FileParamsSelectionPage;
34  import pl.edu.agh.cast.importer.wizard.page.FixedWidthColumnSelectionPage;
35  import pl.edu.agh.cast.importer.wizard.page.InitImportPage;
36  import pl.edu.agh.cast.importer.wizard.page.TemplatePropertiesPage;
37  import pl.edu.agh.cast.importer.wizard.page.ValidationPage;
38  
39  /**
40   * Abstract class for <code>ApplyTemplateWizardStrategy</code> and <code>WithoutTemplateWizardStrategy</code>. Defines
41   * step by step import pages flow.
42   * 
43   * @author AGH CAST Team
44   */
45  public abstract class AbstractStepByStepImportStrategy implements IImportWizardStrategy {
46  	/**
47  	 * The logger.
48  	 */
49  	protected static final Logger LOG = Activator.getLogger();
50  
51  	private FileParamsSelectionPage fileParamsSelectionPage;
52  
53  	private DelimiterSelectionPage delimiterSelectionPage;
54  
55  	private FixedWidthColumnSelectionPage fixedWidthColumnSelectionPage;
56  
57  	private AnalyzersSelectionPage analyzersSelectionPage;
58  
59  	private ValidationPage validationPage;
60  
61  	private TemplatePropertiesPage templatePage;
62  
63  	/**
64  	 * Conversion rules selection page.
65  	 */
66  	protected AbstractConversionRulesSelectionPage conversionRulesSelectionPage;
67  
68  	/**
69  	 * Importer wizard for this strategy.
70  	 */
71  	protected ImporterWizard importerWizard;
72  
73  	/**
74  	 * {@inheritDoc}
75  	 * 
76  	 * @see pl.edu.agh.cast.importer.wizard.strategy.IImportWizardStrategy
77  	 *      #getNextPage(pl.edu.agh.cast.importer.wizard.page.AbstractImportWizardPage)
78  	 */
79  	@Override
80  	public AbstractImportWizardPage getNextPage(AbstractImportWizardPage current) {
81  		current.refreshImportData();
82  
83  		AbstractImportWizardPage resultPage;
84  
85  		if (current instanceof InitImportPage) {
86  			resultPage = fileParamsSelectionPage;
87  		} else if (current == fileParamsSelectionPage) {
88  			if (fileParamsSelectionPage.getTokenizer() instanceof CsvTokenizer) {
89  				resultPage = delimiterSelectionPage;
90  			} else if (fileParamsSelectionPage.getTokenizer() instanceof FixedWidthTokenizer) {
91  				resultPage = fixedWidthColumnSelectionPage;
92  			} else {
93  				resultPage = analyzersSelectionPage;
94  			}
95  		} else if (current == delimiterSelectionPage) {
96  			resultPage = analyzersSelectionPage;
97  		} else if (current == fixedWidthColumnSelectionPage) {
98  			resultPage = analyzersSelectionPage;
99  		} else if (current == analyzersSelectionPage) {
100 			resultPage = validationPage;
101 		} else if (current == validationPage) {
102 			conversionRulesSelectionPage = current.getImportWizard().getCurrConversionRulesPage();
103 			current.getImportWizard().addPage(conversionRulesSelectionPage);
104 			resultPage = conversionRulesSelectionPage;
105 		} else if (current == conversionRulesSelectionPage) {
106 			resultPage = templatePage;
107 		} else {
108 			throw new IllegalArgumentException("Not expected wizard (next) page:" + current.getName()); //$NON-NLS-1$
109 		}
110 
111 		resultPage.initPage();
112 
113 		return resultPage;
114 	}
115 
116 	/**
117 	 * {@inheritDoc}
118 	 * 
119 	 * @see pl.edu.agh.cast.importer.wizard.strategy.IImportWizardStrategy#addPages(org.eclipse.jface.wizard.Wizard)
120 	 */
121 	@Override
122 	public void addPages(Wizard wizard) {
123 		if (!(wizard instanceof ImporterWizard)) {
124 			throw new IllegalArgumentException("Cannot apply strategy to wizard " + //$NON-NLS-1$
125 			        "different than ImporterWizard instance"); //$NON-NLS-1$
126 		}
127 		importerWizard = (ImporterWizard)wizard;
128 		fileParamsSelectionPage = new FileParamsSelectionPage();
129 		delimiterSelectionPage = new DelimiterSelectionPage();
130 		fixedWidthColumnSelectionPage = new FixedWidthColumnSelectionPage();
131 		analyzersSelectionPage = new AnalyzersSelectionPage();
132 		validationPage = new ValidationPage();
133 		templatePage = new TemplatePropertiesPage();
134 
135 		wizard.addPage(fileParamsSelectionPage);
136 		wizard.addPage(delimiterSelectionPage);
137 		wizard.addPage(fixedWidthColumnSelectionPage);
138 		wizard.addPage(analyzersSelectionPage);
139 		wizard.addPage(validationPage);
140 		wizard.addPage(templatePage);
141 	}
142 
143 	/**
144 	 * {@inheritDoc}
145 	 * 
146 	 * @see pl.edu.agh.cast.importer.wizard.strategy.IImportWizardStrategy#canFinishWizard()
147 	 */
148 	@Override
149 	public boolean canFinishWizard() {
150 		if (conversionRulesSelectionPage != null && conversionRulesSelectionPage.isCurrentWizardPage()
151 		        && !conversionRulesSelectionPage.isSaveTemplateSelected() && conversionRulesSelectionPage.canFinish()) {
152 			return true;
153 		}
154 		if (templatePage != null && templatePage.isCurrentWizardPage() && templatePage.isPageComplete()) {
155 			return true;
156 		}
157 
158 		return false;
159 	}
160 
161 	protected boolean saveTemplate() {
162 		try {
163 			final ImportTemplateManager manager = pl.edu.agh.cast.importer.base.Activator.getDefault()
164 			        .getTemplateManager();
165 			manager.saveTemplate(manager.createTemplateBasedOnImportProcess(conversionRulesSelectionPage
166 			        .getImportProcess(), templatePage.getTemplateName(), templatePage.getTemplateDescription()), null);
167 		} catch (TemplateException e) {
168 			LOG.error(e.getMessage(), e);
169 			return false;
170 		}
171 		return true;
172 	}
173 }