core/com.nokia.carbide.discovery.ui/src/com/nokia/carbide/internal/discovery/ui/wizard/ImportPage.java
--- a/core/com.nokia.carbide.discovery.ui/src/com/nokia/carbide/internal/discovery/ui/wizard/ImportPage.java Thu Aug 12 13:56:20 2010 -0500
+++ b/core/com.nokia.carbide.discovery.ui/src/com/nokia/carbide/internal/discovery/ui/wizard/ImportPage.java Thu Aug 12 15:22:11 2010 -0500
@@ -18,20 +18,30 @@
import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.text.MessageFormat;
import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.ui.progress.UIJob;
+import com.nokia.carbide.discovery.ui.Activator;
import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
/**
@@ -39,8 +49,6 @@
*/
class ImportPage extends AbstractImportExportPage {
- private boolean importOriginalVersion;
-
// the following two arrays need to correspond
static final String[] FILTER_EXTS = {
"*.xml", //$NON-NLS-1$
@@ -50,8 +58,11 @@
"XML Files",
"All Files"
};
+
+ private String currentPath;
+ private ImportExportData readData;
+ protected boolean wantsOriginalVersions;
-
protected ImportPage() {
super("ImportPage"); //$NON-NLS-1$
setTitle("Import Feature Configuration and Install");
@@ -62,8 +73,23 @@
super.createControl(parent);
Composite composite = (Composite) getControl();
- createBrowseGroup(composite, "Feature configuration file:");
- browseButton.addSelectionListener(new SelectionAdapter() {
+ createBrowseGroup(composite, "Import file:");
+ createViewerGroup(composite, "Import Features:");
+
+ setPageComplete(validatePage());
+ }
+
+ @Override
+ protected void createBrowseGroup(Composite parent, String labelText) {
+ super.createBrowseGroup(parent, labelText);
+ pathText.addModifyListener(new ModifyListener() {
+ @Override
+ public void modifyText(ModifyEvent e) {
+ handlePathChanged();
+ }
+ });
+
+ browseButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
FileDialog fileDialog = new FileDialog(getShell(), SWT.OPEN);
@@ -74,19 +100,45 @@
String pathstr = fileDialog.open();
if (pathstr != null) {
pathText.setText(pathstr);
+// handlePathChanged();
}
}
- });
- createViewerGroup(composite, "Import Features:");
+ });
+ }
+
+ @Override
+ protected void createViewerGroup(Composite parent, String labelText) {
+ super.createViewerGroup(parent, labelText);
+
viewer.addCheckStateListener(new ICheckStateListener() {
public void checkStateChanged(CheckStateChangedEvent event) {
setPageComplete(validatePage());
}
});
-
- setPageComplete(validatePage());
+ updateViewer();
}
+ private void startGetInputJob(final String path) {
+ UIJob j = new UIJob("Reading Feature Configuration File") {
+ @Override
+ public IStatus runInUIThread(IProgressMonitor monitor) {
+ try {
+ FileInputStream is = new FileInputStream(path);
+ readData = Streamer.readFromXML(is);
+ viewer.setInput(readData.getFeatureInfos());
+ updateViewer();
+ monitor.done();
+ } catch (IOException e) {
+ // may have bad/incomplete path, so don't log this
+ } catch (Exception e) {
+ Activator.logError(MessageFormat.format("Could not read data from file: {0}", path), e);
+ }
+ return Status.OK_STATUS;
+ }
+ };
+ j.schedule();
+ }
+
protected void createVersionRadioGroup(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
GridLayoutFactory.fillDefaults().applyTo(composite);
@@ -97,23 +149,23 @@
originalVersionCheck.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
- importOriginalVersion = originalVersionCheck.getSelection();
+ wantsOriginalVersions = originalVersionCheck.getSelection();
}
});
}
-
+
protected boolean validatePage() {
setErrorMessage(null);
IPath path = new Path(pathText.getText());
- File file = path.toFile();
- if (file.exists()) {
- FeatureInfo[] featureInfos = getFeaturesFromFile(file);
- if (featureInfos.length == 0) {
- setErrorMessage("The file has no valid features");
+ if (isFilePath(path.toOSString())) {
+ if (readData == null || readData.getFeatureInfos().isEmpty()) {
+ setErrorMessage("No valid features found in configurations file");
return false;
}
- viewer.setInput(featureInfos);
- updateViewer();
+ if (readData == null || readData.getURIs().isEmpty()) {
+ setErrorMessage("No valid repositories found in configurations file");
+ return false;
+ }
}
else {
setErrorMessage("A valid exported feature configuration file must be selected");
@@ -128,9 +180,19 @@
return true;
}
- private FeatureInfo[] getFeaturesFromFile(File file) {
- // TODO
- return new FeatureInfo[0];
+ private boolean isFilePath(String path) {
+ File file = new File(path);
+ return file.exists() && !file.isDirectory();
}
+ private void handlePathChanged() {
+ String path = pathText.getText();
+ if (!path.equals(currentPath) && isFilePath(path)) {
+ startGetInputJob(currentPath = path);
+ }
+ }
+
+ public ImportExportData getData() {
+ return readData;
+ }
}