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: GeneralConversionRulesSelectionPage.java
13   * Created: 2009-04-01
14   * Author: bmilos
15   * $Id$
16   */
17  
18  package pl.edu.agh.cast.importer.wizard.general;
19  
20  import java.util.List;
21  
22  import org.eclipse.osgi.util.NLS;
23  import org.eclipse.swt.SWT;
24  import org.eclipse.swt.widgets.Combo;
25  import org.eclipse.swt.widgets.Composite;
26  
27  import pl.edu.agh.cast.importer.base.converter.rules.IConversionRule;
28  import pl.edu.agh.cast.importer.base.data.TabularData;
29  import pl.edu.agh.cast.importer.base.general.GeneralImportConverter;
30  import pl.edu.agh.cast.importer.base.general.IDateConversionRule;
31  import pl.edu.agh.cast.importer.base.general.ISourceNodeConversionRule;
32  import pl.edu.agh.cast.importer.base.general.ITargetNodeConversionRule;
33  import pl.edu.agh.cast.importer.wizard.page.AbstractConversionRulesSelectionPage;
34  import pl.edu.agh.cast.importer.wizard.util.Messages;
35  import pl.edu.agh.cast.importer.wizard.utils.AbstractWizardPageHelper;
36  import pl.edu.agh.cast.ui.util.MsgBoxHelper;
37  
38  /**
39   * Page of the import wizard, which serves for selection of conversion rules for each domain field. This page is
40   * specific for general domain model.
41   *
42   * @author AGH CAST Team
43   */
44  public class GeneralConversionRulesSelectionPage extends AbstractConversionRulesSelectionPage {
45  
46  	/**
47  	 * Name of the conversion rules selection page for the general domain model.
48  	 */
49  	public static final String PAGE_ID = "pl.edu.agh.cast.importer.wizard.rulespage.general"; //$NON-NLS-1$
50  
51  	private GeneralConversionRulesSelectionPageComposite composite;
52  
53  	private ISourceNodeConversionRule sourceNodeRule;
54  
55  	private ITargetNodeConversionRule targetNodeRule;
56  
57  	private IDateConversionRule dateRule;
58  
59  	private TabularData previewDataCache;
60  
61  	/**
62  	 * The default constructor.
63  	 */
64  	public GeneralConversionRulesSelectionPage() {
65  		super(Messages.ImporterWizard_GeneralRulesSelectionPageTitle,
66  		        Messages.ImporterWizard_GeneralRulesSelectionPageDescription);
67  		converter = new GeneralImportConverter();
68  	}
69  
70  	/**
71  	 * {@inheritDoc}
72  	 *
73  	 * @see pl.edu.agh.cast.importer.wizard.page.AbstractConversionRulesSelectionPage#
74  	 *      createConvRulesComposite(org.eclipse.swt.widgets.Composite)
75  	 */
76  	public Composite createConvRulesComposite(Composite parent) {
77  		composite = new GeneralConversionRulesSelectionPageComposite(parent, SWT.NULL, this);
78  
79  		/*
80  		 * The call to refreshFilePreview() is necessary, because this page is added dynamically to the wizard and thus
81  		 * is initiated later than pages that had been added to the wizard in a static way. Thus the first time the page
82  		 * is displayed, the file preview cannot be refreshed in the refreshSelectedData() method for the composite is
83  		 * null - so it is refreshed after the composite is initialized in the createControl() method.
84  		 */
85  		refreshPage();
86  		return composite;
87  	}
88  
89  	/**
90  	 * {@inheritDoc}
91  	 *
92  	 * @see pl.edu.agh.cast.importer.wizard.page.AbstractConversionRulesSelectionPage#canFinish()
93  	 */
94  	public boolean canFinish() {
95  		if (!isComplete()) {
96  			return false;
97  		}
98  		((GeneralImportConverter)converter).setConversionRules(sourceNodeRule, targetNodeRule, dateRule);
99  		getImportProcess().setConverter(converter);
100 		return true;
101 	}
102 
103 	/*
104 	 * -----------------------------------------------------------------------------------------------------------
105 	 * --------------------------OVERRIDED METHODS-------------------------------------------------------
106 	 * -----------------------------------------------------------------------------------------------------------
107 	 */
108 
109 	/**
110 	 * {@inheritDoc}
111 	 *
112 	 * @see pl.edu.agh.cast.importer.wizard.page.AbstractConversionRulesSelectionPage#isComplete()
113 	 */
114 	@Override
115 	protected boolean isComplete() {
116 		((GeneralImportConverter)converter).setConversionRules(sourceNodeRule, targetNodeRule, dateRule);
117 		return converter.isComplete();
118 	}
119 
120 	/**
121 	 * {@inheritDoc}
122 	 *
123 	 * @see pl.edu.agh.cast.importer.wizard.page.AbstractConversionRulesSelectionPage#refreshSelectedData()
124 	 */
125 	@Override
126 	public void refreshSelectedData() {
127 		TabularData data = getImportProcess().getParsedData().get(0);
128 
129 		boolean needsRefresh = false;
130 		int previewSize = getPreviewSize(data);
131 
132 		if (data == null) {
133 			refreshPreviewDataCache(data, previewSize);
134 			needsRefresh = true;
135 		} else {
136 			TabularData previewData = data.retrieveDataPreview(previewSize);
137 			if (previewData == null || !previewData.equals(previewDataCache)) {
138 				refreshPreviewDataCache(previewData, previewSize);
139 				needsRefresh = true;
140 			}
141 		}
142 
143 		if (composite != null && needsRefresh) {
144 			refreshPage();
145 		}
146 	}
147 
148 	/**
149 	 * {@inheritDoc}
150 	 *
151 	 * @see pl.edu.agh.cast.importer.wizard.page.AbstractConversionRulesSelectionPage#refreshConversionPreview()
152 	 */
153 	@Override
154 	public void refreshConversionPreview() {
155 		canFinish();
156 		composite.refreshConversionPreview();
157 	}
158 
159 	/**
160 	 * {@inheritDoc}
161 	 *
162 	 * @see pl.edu.agh.cast.importer.wizard.page.AbstractConversionRulesSelectionPage#showWarningMsgBox()
163 	 */
164 	@Override
165 	public int showWarningMsgBox() {
166 		int result = -1;
167 		if (dateRule != null && !dateRule.isComplete()) {
168 			result = MsgBoxHelper.showWarningQuestionBox(composite,
169 			        Messages.GeneralConversionRulesSelectionPage_DateNotConfiguredWarningTitle, NLS.bind(
170 			                Messages.GeneralConversionRulesSelectionPage_FieldNotConfiguredWarningMsg,
171 			                Messages.GeneralConversionRulesSelectionPage_Date));
172 		}
173 		return result;
174 	}
175 
176 	/**
177 	 * {@inheritDoc}
178 	 *
179 	 * @see pl.edu.agh.cast.importer.wizard.page.AbstractConversionRulesSelectionPage#
180 	 *      refreshCombosBlocking(java.util.List, java.util.List)
181 	 */
182 	@Override
183 	public void refreshCombosBlocking(List<Combo> combosToBlock, List<Combo> combosToUnblock, IConversionRule newRule) {
184 		if (combosToBlock != null && !combosToBlock.isEmpty()) {
185 			this.composite.disableCombos(combosToBlock, newRule);
186 		}
187 
188 		if (combosToUnblock != null && !combosToUnblock.isEmpty()) {
189 			this.composite.enableCombos(combosToUnblock);
190 		}
191 	}
192 
193 	/*----------------------------------------------------------------------------------------------------------*/
194 
195 	/*
196 	 * -----------------------------------------------------------------------------------------------------------
197 	 * --------------------------HELPER METHODS------------------------------------------------------------
198 	 * -----------------------------------------------------------------------------------------------------------
199 	 */
200 
201 	private void refreshPage() {
202 		if (previewDataCache != null) {
203 			composite.refreshFilePreview(previewDataCache);
204 		}
205 		if (sourceNodeRule != null) {
206 			sourceNodeRule.clear();
207 		}
208 		if (targetNodeRule != null) {
209 			targetNodeRule.clear();
210 		}
211 		if (dateRule != null) {
212 			dateRule.clear();
213 		}
214 		refreshConversionPreview();
215 	}
216 
217 	private void refreshPreviewDataCache(TabularData data, int previewSize) {
218 		if (data == null) {
219 			previewDataCache = null;
220 			return;
221 		}
222 
223 		previewDataCache = data.retrieveDataPreview(previewSize);
224 	}
225 
226 	/*----------------------------------------------------------------------------------------------------------*/
227 
228 	/*
229 	 * -----------------------------------------------------------------------------------------------------------
230 	 * --------------------------GETTERS AND SETTERS------------------------------------------------------
231 	 * -----------------------------------------------------------------------------------------------------------
232 	 */
233 
234 	/**
235 	 * Retrieves the source node rule, given its identifier, and sets the resulting rule.
236 	 *
237 	 * @param ruleId
238 	 *            the rule identifier
239 	 */
240 	public void setSourceNodeRule(String ruleId) {
241 		ISourceNodeConversionRule rule = (ruleId == null) ? null
242 		        : (ISourceNodeConversionRule)getConversionRuleInstance(ruleId);
243 		setSourceNodeRule(rule);
244 	}
245 
246 	/**
247 	 * Sets the source node rule.
248 	 *
249 	 * @param rule
250 	 *            the rule to set
251 	 */
252 	public void setSourceNodeRule(ISourceNodeConversionRule rule) {
253 		this.sourceNodeRule = rule;
254 		((GeneralImportConverter)converter).setSourceNodeRule(rule);
255 	}
256 
257 	/**
258 	 * Retrieves the target node rule, given its identifier, and sets the resulting rule.
259 	 *
260 	 * @param ruleId
261 	 *            the rule identifier
262 	 */
263 	public void setTargetNodeRule(String ruleId) {
264 		ITargetNodeConversionRule rule = (ruleId == null) ? null
265 		        : (ITargetNodeConversionRule)getConversionRuleInstance(ruleId);
266 		setTargetNodeRule(rule);
267 	}
268 
269 	/**
270 	 * Sets the target node rule.
271 	 *
272 	 * @param rule
273 	 *            the rule to set
274 	 */
275 	public void setTargetNodeRule(ITargetNodeConversionRule rule) {
276 		this.targetNodeRule = rule;
277 		((GeneralImportConverter)converter).setTargetNodeRule(rule);
278 	}
279 
280 	/**
281 	 * Retrieves the date rule, given its identifier, and sets the resulting rule.
282 	 *
283 	 * @param ruleId
284 	 *            the rule identifier
285 	 */
286 	public void setDateRule(String ruleId) {
287 		IDateConversionRule rule = (ruleId == null) ? null : (IDateConversionRule)getConversionRuleInstance(ruleId);
288 		setDateRule(rule);
289 	}
290 
291 	/**
292 	 * Sets the date rule.
293 	 *
294 	 * @param rule
295 	 *            the rule to set
296 	 */
297 	public void setDateRule(IDateConversionRule rule) {
298 		this.dateRule = rule;
299 		((GeneralImportConverter)converter).setDateRule(rule);
300 	}
301 
302 	public ISourceNodeConversionRule getSourceNodeRule() {
303 		return sourceNodeRule;
304 	}
305 
306 	public ITargetNodeConversionRule getTargetNodeRule() {
307 		return targetNodeRule;
308 	}
309 
310 	public IDateConversionRule getDateRule() {
311 		return dateRule;
312 	}
313 
314 	private int getPreviewSize(TabularData data) {
315 		return (data.size() > AbstractWizardPageHelper.PREVIEW_ROWS_LIMIT_FOR_ANALYSIS) ? AbstractWizardPageHelper.PREVIEW_ROWS_LIMIT_FOR_ANALYSIS
316 		        : data.size();
317 	}
318 
319 	/*----------------------------------------------------------------------------------------------------------*/
320 
321 }