package com.laex.cg2d.core.popup.actions; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import org.apache.commons.lang.StringUtils; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.TitleAreaDialog; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; 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.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.FillLayout; 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.Control; import org.eclipse.swt.widgets.DirectoryDialog; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.TabFolder; import org.eclipse.swt.widgets.TabItem; import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeColumn; import com.laex.cg2d.core.Activator; import com.laex.cg2d.core.popup.actions.UploadToSpritesProjectProvider.SlootProjectProvider; public class UploadToSpritesSlootDialog extends TitleAreaDialog { private class TreeContentProvider implements ITreeContentProvider { public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } public void dispose() { } public Object[] getElements(Object inputElement) { return new Object[] { "Entities", "Screens", "Textures" }; } public Object[] getChildren(Object parentElement) { if (parentElement.equals("Entities")) { return slootProjectProvider.entities.toArray(); } if (parentElement.equals("Screens")) { return slootProjectProvider.screens.toArray(); } if (parentElement.equals("Textures")) { return slootProjectProvider.textures.toArray(); } return new Object[] {}; } public Object getParent(Object element) { return null; } public boolean hasChildren(Object element) { return getChildren(element).length > 0; } } private static class ViewerLabelProvider extends LabelProvider { public Image getImage(Object element) { return super.getImage(element); } public String getText(Object element) { if (element instanceof IResource) { return ((IResource) element).getName(); } return element.toString(); } } private Text txtTargetLocalExport; private IResource toExport; private UploadToSpritesSlootController controller; private SlootProjectProvider slootProjectProvider; private Text txtDeveloperID; private Text txtCollectionTitle; private Text txtServer; /** * Create the dialog. * * @param parentShell * @wbp.parser.constructor */ public UploadToSpritesSlootDialog(Shell parentShell) { super(parentShell); } public UploadToSpritesSlootDialog(Shell parentShell, IResource toExport) { super(parentShell); this.toExport = toExport; } /** * Create contents of the dialog. * * @param parent */ @Override protected Control createDialogArea(Composite parent) { setMessage("This dialog allows you to upload the selected project to SpritesSloot. To export the project locally, just select the \"Export Locally\" tab."); setTitle("Upload project to SpritesSloot [Experimental]"); Composite area = (Composite) super.createDialogArea(parent); Composite composite_2 = new Composite(area, SWT.NONE); composite_2.setLayout(new GridLayout(2, false)); composite_2.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1)); Label lblServerAddress = new Label(composite_2, SWT.NONE); lblServerAddress.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); lblServerAddress.setText("Server Address"); txtServer = new Text(composite_2, SWT.BORDER); txtServer.setText("localhost:3000"); txtServer.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); Label lblNewLabel = new Label(composite_2, SWT.NONE); lblNewLabel.setText("Developer ID"); txtDeveloperID = new Text(composite_2, SWT.BORDER); txtDeveloperID.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { validate(); } }); txtDeveloperID.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); Label lblCollectionTitle = new Label(composite_2, SWT.NONE); lblCollectionTitle.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); lblCollectionTitle.setText("Collection Title"); txtCollectionTitle = new Text(composite_2, SWT.BORDER); txtCollectionTitle.setEditable(false); txtCollectionTitle.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); Composite container = new Composite(area, SWT.NONE); container.setLayout(new FillLayout(SWT.HORIZONTAL)); container.setLayoutData(new GridData(GridData.FILL_BOTH)); TabFolder tabFolder = new TabFolder(container, SWT.NONE); TabItem tbtmExportLocally = new TabItem(tabFolder, SWT.NONE); tbtmExportLocally.setText("Upload"); Composite composite = new Composite(tabFolder, SWT.NONE); tbtmExportLocally.setControl(composite); composite.setLayout(new GridLayout(3, false)); Label lblTargetDirectory = new Label(composite, SWT.NONE); lblTargetDirectory.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); lblTargetDirectory.setText("Local Target Directory"); txtTargetLocalExport = new Text(composite, SWT.BORDER); txtTargetLocalExport.setEditable(false); txtTargetLocalExport.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { validate(); } }); txtTargetLocalExport.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); Button btnBrowse = new Button(composite, SWT.NONE); btnBrowse.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { DirectoryDialog dd = new DirectoryDialog(getParentShell()); String targetDirectory = dd.open(); if (targetDirectory != null) { txtTargetLocalExport.setText(targetDirectory); } } }); btnBrowse.setText("Browse"); Composite composite_1 = new Composite(composite, SWT.NONE); composite_1.setLayout(new FillLayout(SWT.HORIZONTAL)); GridData gd_composite_1 = new GridData(SWT.FILL, SWT.FILL, false, false, 3, 1); gd_composite_1.heightHint = 253; gd_composite_1.widthHint = 66; composite_1.setLayoutData(gd_composite_1); TreeViewer treeViewer = new TreeViewer(composite_1, SWT.BORDER); Tree tree = treeViewer.getTree(); tree.setHeaderVisible(true); TreeColumn trclmnResources = new TreeColumn(tree, SWT.NONE); trclmnResources.setWidth(464); trclmnResources.setText("Resources"); treeViewer.setContentProvider(new TreeContentProvider()); treeViewer.setLabelProvider(new ViewerLabelProvider()); String exportPath = this.toExport.getLocation().append("tmp").toOSString(); txtTargetLocalExport.setText(exportPath); /* generate sloot project provider */ try { slootProjectProvider = UploadToSpritesProjectProvider.slootProjectProvider("laex.pearl@gmail.com", (IProject) toExport); txtCollectionTitle.setText(slootProjectProvider.collectionTitle); txtDeveloperID.setText(slootProjectProvider.developerID); treeViewer.setInput(slootProjectProvider); treeViewer.expandAll(); } catch (CoreException e1) { Activator.log(e1); } return area; } private void validate() { setOKButtonStatus(false); if (StringUtils.isEmpty(txtDeveloperID.getText())) { setErrorMessage("Developer ID cannot be empty"); } else if (StringUtils.isEmpty(txtTargetLocalExport.getText())) { setErrorMessage("Target directory cannot be empty"); } else { setErrorMessage(null); setOKButtonStatus(true); } } private void setOKButtonStatus(boolean status) { if (getButton(OK) != null) { getButton(OK).setEnabled(status); } } /** * Create contents of the button bar. * * @param parent */ @Override protected void createButtonsForButtonBar(Composite parent) { createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); } /** * Return the initial size of the dialog. */ @Override protected Point getInitialSize() { return new Point(571, 473); } @Override protected void okPressed() { try { controller = new UploadToSpritesSlootController(toExport, txtTargetLocalExport.getText(), slootProjectProvider); controller.exportLocally(txtServer.getText().trim(), getParentShell()); } catch (CoreException e) { Activator.log(e); } catch (InvocationTargetException e) { Activator.log(e); } catch (InterruptedException e) { Activator.log(e); } catch (IOException e) { Activator.log(e); } super.okPressed(); } }