/* Copyright (C) 2009 Mobile Sorcery AB
This program is free software; you can redistribute it and/or modify it
under the terms of the Eclipse Public License v1.0.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the Eclipse Public License v1.0 for
more details.
You should have received a copy of the Eclipse Public License v1.0 along
with this program. It is also available at http://www.eclipse.org/legal/epl-v10.html
*/
package com.mobilesorcery.sdk.importproject;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.viewers.CheckboxTreeViewer;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.DirectoryDialog;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.statushandlers.StatusManager;
import com.mobilesorcery.sdk.core.MoSyncTool;
import com.mobilesorcery.sdk.core.Util;
import com.mobilesorcery.sdk.ui.ImportProjectsRunnable;
/**
*
* @author Mattias Bybro
* @deprecated Use MoSyncExternalProjectImportWizard instead - .mopro files are no longer used.
* This file is kept until we've migrated those pieces of functionality that we'll need
* for the non-.mopro solution
*/
public class WizardOldMobuildProjectsImportPage extends WizardPage implements PropertyChangeListener {
private final class ProjectContentProvider implements ITreeContentProvider {
public Object[] getChildren(Object parentElement) {
return new Object[0];
}
public Object getParent(Object element) {
return null;
}
public boolean hasChildren(Object element) {
return false;
}
public Object[] getElements(Object inputElement) {
return (Object[]) inputElement;
}
public void dispose() {
// TODO Auto-generated method stub
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
// TODO Auto-generated method stub
}
}
public class ProjectLabelProvider extends LabelProvider {
public String getText(Object element) {
if (element instanceof File) {
return (Util.getNameWithoutExtension((File)element));
}
return super.getText(element);
}
}
private CheckboxTreeViewer projects;
protected boolean scanUponFocusOut = true;
private Button importResources;
private Button donotCopyProject;
protected WizardOldMobuildProjectsImportPage() {
super("wizardoldproject", Messages.WizardOldMobuildProjectsImportPage_ImportExisting, Activator.getImageDescriptor(Activator.IMPORT_PAGE_IMAGE)); //$NON-NLS-1$
}
public void createControl(Composite parent) {
Composite main = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout(3, false);
layout.marginWidth = 0;
main.setLayout(layout);
setControl(main);
Label directoryLabel = new Label(main, SWT.NONE);
directoryLabel.setText(Messages.WizardOldMobuildProjectsImportPage_ScanDirectory);
final Text directoryText = new Text(main, SWT.BORDER | SWT.SINGLE);
directoryText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
if (MoSyncTool.getDefault().isValid()) {
directoryText.setText(MoSyncTool.getDefault().getMoSyncHome().append("projects").toOSString()); //$NON-NLS-1$
}
Button browse = new Button(main, SWT.PUSH);
browse.setText(Messages.WizardOldMobuildProjectsImportPage_Browse);
setButtonLayoutData(browse);
browse.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
DirectoryDialog dialog = new DirectoryDialog(getShell());
if (new File(directoryText.getText()).exists()) {
dialog.setFilterPath(directoryText.getText());
}
dialog.setMessage(Messages.WizardOldMobuildProjectsImportPage_SelectScanPaths);
dialog.setText(Messages.WizardOldMobuildProjectsImportPage_SelectRootPath);
String dir = dialog.open();
if (dir != null) {
directoryText.setText(dir);
scanDirectoryToFindProjects(new File(dir.trim()));
}
}
});
directoryText.addListener(SWT.Modify, new Listener() {
public void handleEvent(Event event) {
scanUponFocusOut = true;
}
});
directoryText.addListener(SWT.FocusOut, new Listener() {
public void handleEvent(Event event) {
if (scanUponFocusOut) {
scanDirectoryToFindProjects(new File(directoryText.getText()));
}
}
});
Label projectsLabel = new Label(main, SWT.NONE);
projectsLabel.setText(Messages.WizardOldMobuildProjectsImportPage_ImportProjects);
projectsLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false, 3, 1));
projects = new CheckboxTreeViewer(main, SWT.BORDER);
projects.setLabelProvider(new ProjectLabelProvider());
projects.setContentProvider(new ProjectContentProvider());
GridData projectsData = new GridData(GridData.FILL_BOTH);
projectsData.horizontalSpan = 2;
projectsData.verticalSpan = 2;
projects.getControl().setLayoutData(projectsData);
Button selectAll = new Button(main, SWT.PUSH);
selectAll.setText(Messages.WizardOldMobuildProjectsImportPage_SelectAll);
setButtonLayoutData(selectAll);
selectAll.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
projects.setAllChecked(true);
}
});
Button deselectAll = new Button(main, SWT.PUSH);
deselectAll.setText(Messages.WizardOldMobuildProjectsImportPage_DeselectAll);
GridData deselectAllData = setButtonLayoutData(deselectAll);
deselectAllData.verticalAlignment = SWT.BEGINNING;
deselectAll.setLayoutData(deselectAllData);
deselectAll.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
projects.setAllChecked(false);
}
});
importResources = new Button(main, SWT.RADIO);
importResources.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, true, false, 3, 1));
importResources.setText(Messages.WizardOldMobuildProjectsImportPage_CopyAllFiles);
importResources.setSelection(true);
Button importOnlyProjectResources = new Button(main, SWT.RADIO);
importOnlyProjectResources.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, true, false, 3, 1));
importOnlyProjectResources.setText(Messages.WizardOldMobuildProjectsImportPage_CopyProjectFiles);
importOnlyProjectResources.setSelection(false);
donotCopyProject = new Button(main, SWT.RADIO);
donotCopyProject.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, true, false, 3, 1));
donotCopyProject.setText(Messages.WizardOldMobuildProjectsImportPage_DoNotCopy);
donotCopyProject.setSelection(false);
}
private void scanDirectoryToFindProjects(File root) {
try {
scanUponFocusOut = false;
FindProjectsRunnable findProjects = new FindProjectsRunnable(root);
findProjects.addFinishedListener(this);
getContainer().run(true, true, findProjects);
} catch (Exception e) {
StatusManager.getManager().handle(new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e));
}
}
public void propertyChange(final PropertyChangeEvent event) {
if (FindProjectsRunnable.FINISHED == event.getPropertyName()) {
projects.getControl().getDisplay().asyncExec(new Runnable() {
public void run() {
Object input = event.getNewValue();
if (input != null) {
projects.setInput(input);
}
}
});
}
}
public File[] getProjectDescriptionFiles() {
Object[] checked = projects.getCheckedElements();
File[] result = new File[checked.length];
for (int i = 0; i < checked.length; i++) {
result[i] = (File) checked[i];
}
return result;
}
public int getCopyStrategy() {
if (importResources.getSelection()) {
return ImportProjectsRunnable.COPY_ALL_FILES;
} else if (donotCopyProject.getSelection()) {
return ImportProjectsRunnable.DO_NOT_COPY;
} else {
return ImportProjectsRunnable.COPY_ONLY_FILES_IN_PROJECT_DESC;
}
}
}