]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.team.ui/src/org/simantics/team/ui/StageInitPage.java
Removed contact application support prints
[simantics/platform.git] / bundles / org.simantics.team.ui / src / org / simantics / team / ui / StageInitPage.java
1 package org.simantics.team.ui;
2
3 import java.io.File;
4 import java.util.Collections;
5 import java.util.List;
6
7 import org.eclipse.jface.layout.GridDataFactory;
8 import org.eclipse.jface.wizard.WizardPage;
9 import org.eclipse.swt.SWT;
10 import org.eclipse.swt.custom.CCombo;
11 import org.eclipse.swt.events.ModifyEvent;
12 import org.eclipse.swt.events.ModifyListener;
13 import org.eclipse.swt.events.SelectionAdapter;
14 import org.eclipse.swt.events.SelectionEvent;
15 import org.eclipse.swt.layout.GridData;
16 import org.eclipse.swt.layout.GridLayout;
17 import org.eclipse.swt.widgets.Button;
18 import org.eclipse.swt.widgets.Composite;
19 import org.eclipse.swt.widgets.DirectoryDialog;
20 import org.eclipse.swt.widgets.Label;
21 import org.eclipse.swt.widgets.Text;
22 import org.simantics.db.common.NamedResource;
23 import org.simantics.db.exception.DatabaseException;
24 import org.simantics.team.ui.StageInitWizard.Data;
25 import org.simantics.utils.ui.ErrorLogger;
26
27 public class StageInitPage extends WizardPage {
28     public static class Model implements Comparable<Model> {
29         NamedResource model;
30         public Model(NamedResource model) {
31             this.model = model;
32         }
33         @Override
34         public int compareTo(Model o) {
35             return model.compareTo(o.model);
36         }
37         public NamedResource get() {
38             return model;
39         }
40     }
41     final Data data;
42     Text stagingFolder;
43     CCombo teamFolder;
44     List<Model> models = Collections.emptyList();
45     Button overwrite;
46     protected StageInitPage(Data data) {
47         super("Staging", "Initialize", null);
48         this.data = data;
49     }
50     @Override
51     public void createControl(Composite parent) {
52         Composite container = new Composite(parent, SWT.NONE);
53         {
54             GridLayout layout = new GridLayout();
55             layout.horizontalSpacing = 20;
56             layout.verticalSpacing = 10;
57             layout.numColumns = 3;
58             container.setLayout(layout);
59         }
60         new Label(container, SWT.NONE).setText("Workbench folder:");
61         stagingFolder = new Text(container, SWT.BORDER);
62         {
63             stagingFolder.setEditable(false);
64             stagingFolder.setText(data.stagingFolder.getAbsolutePath());
65             stagingFolder.setToolTipText("Shows the folder of the staging workbench.");
66             GridDataFactory.fillDefaults().grab(true, false).span(2, 1).applyTo(stagingFolder);
67         }
68         new Label(container, SWT.NONE).setText("&Team folder:");
69         teamFolder = new CCombo(container, SWT.BORDER);
70         {
71             if (null != data.teamFolder)
72                 teamFolder.setText(data.teamFolder.getAbsolutePath());
73             GridDataFactory.fillDefaults().grab(true, false).span(1, 1).applyTo(teamFolder);
74             teamFolder.addModifyListener(new ModifyListener(){
75                 @Override
76                 public void modifyText(ModifyEvent e) {
77                     validatePage();
78                 }
79             });
80         }
81         Button browseFileButton = new Button(container, SWT.PUSH);
82         {
83             browseFileButton.setText("B&rowse...");
84             browseFileButton.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));
85             browseFileButton.addSelectionListener(new SelectionAdapter() {
86                 @Override
87                 public void widgetSelected(SelectionEvent e) {
88                     DirectoryDialog dd = new DirectoryDialog(getShell(), SWT.OPEN);
89                     dd.setText("Choose team folder");
90                     File folder = new File(teamFolder.getText());
91                     if (folder.isDirectory())
92                         dd.setFilterPath(folder.getAbsolutePath());
93                     else {
94                         folder = folder.getParentFile();
95                         if (null != folder && folder.isDirectory())
96                             dd.setFilterPath(folder.getParent());
97                         else if (null != data.teamFolder && data.teamFolder.isDirectory())
98                             dd.setFilterPath(data.teamFolder.getAbsolutePath());
99                         else {
100                             String temp = System.getProperty("java.io.tmpdir");
101                             if (null != temp && !temp.equals(""))
102                                 dd.setFilterPath(temp);
103                         }
104                     }
105                     String dir = dd.open();
106                     if (dir == null)
107                         return;
108                     teamFolder.setText(dir);
109                     validatePage();
110                 }
111             });
112         }
113         try {
114             initializeData();
115         } catch (DatabaseException e) {
116             ErrorLogger.defaultLogError(e);
117         }
118         setControl(container);
119         validatePage();
120     }
121
122     private void initializeData() throws DatabaseException {
123         for (String path : data.recentLocations) {
124             teamFolder.add(path);
125         }
126         if (teamFolder.getItemCount() > 0)
127             teamFolder.select(0);
128     }
129
130     void validatePage() {
131         String importLoc = teamFolder.getText();
132         if (importLoc.isEmpty()) {
133             setMessage("Select folder for team data.");
134             setErrorMessage(null);
135             setPageComplete(false);
136             return;
137         }
138         File folder = new File(importLoc);
139         if (!folder.exists() || !folder.isDirectory()) {
140             setErrorMessage("Selected folder is invalid.");
141             setPageComplete(false);
142             return;
143         }
144         int count = folder.list().length;
145         if (!data.requireExisting) {
146             if (count > 0) {
147                 setErrorMessage("Selected folder is not empty.");
148                 setPageComplete(false);
149                 return;
150             }
151         } else
152             if (count == 0) {
153                 setErrorMessage("Selected folder is not team folder.");
154                 setPageComplete(false);
155                 return;
156             }
157         data.teamFolder = folder;
158         data.comment = "Initial commit."; // TODO: get comment from user.
159         setErrorMessage(null);
160         setMessage("Stage " + folder.getAbsolutePath() + ".");
161         setPageComplete(true);
162     }
163 }