]> gerrit.simantics Code Review - simantics/interop.git/blob - org.simantics.xml.sax.ui/src/org/simantics/xml/sax/ui/wizard/SchemaCombinationPage.java
1539f508c3fb1d808d3a601d45658d32f3d5bd8f
[simantics/interop.git] / org.simantics.xml.sax.ui / src / org / simantics / xml / sax / ui / wizard / SchemaCombinationPage.java
1 package org.simantics.xml.sax.ui.wizard;\r
2 \r
3 import java.io.File;\r
4 import java.io.FilenameFilter;\r
5 import java.io.IOException;\r
6 import java.util.Arrays;\r
7 \r
8 import org.eclipse.jface.layout.GridDataFactory;\r
9 import org.eclipse.jface.viewers.CheckboxTableViewer;\r
10 import org.eclipse.jface.viewers.IStructuredContentProvider;\r
11 import org.eclipse.jface.viewers.ITableLabelProvider;\r
12 import org.eclipse.jface.viewers.LabelProvider;\r
13 import org.eclipse.jface.viewers.Viewer;\r
14 import org.eclipse.jface.wizard.WizardPage;\r
15 import org.eclipse.swt.SWT;\r
16 import org.eclipse.swt.events.SelectionAdapter;\r
17 import org.eclipse.swt.events.SelectionEvent;\r
18 import org.eclipse.swt.graphics.Image;\r
19 import org.eclipse.swt.layout.GridLayout;\r
20 import org.eclipse.swt.widgets.Button;\r
21 import org.eclipse.swt.widgets.Composite;\r
22 import org.eclipse.swt.widgets.Label;\r
23 import org.eclipse.swt.widgets.Text;\r
24 import org.simantics.xml.sax.OntologyCombinator;\r
25 \r
26 public class SchemaCombinationPage extends WizardPage {\r
27         private Composite composite;\r
28         \r
29         File outputPlugin;\r
30         File srcDir;\r
31         \r
32         CheckboxTableViewer fileSelector;\r
33         Text outputText;\r
34         \r
35         public SchemaCombinationPage() {\r
36                 super("XML Schema conversion","Combining schema versions", null);\r
37                 setPageComplete(false);\r
38         }\r
39         \r
40         @Override\r
41         public void setVisible(boolean visible) {\r
42                 super.setVisible(visible);\r
43                 if (visible) {\r
44                         if (outputPlugin == null) {\r
45                                 Label label = new Label(composite, SWT.NONE);\r
46                                 label.setText("Output plug-in has not been set, cannot create combination resources");\r
47                                 return;\r
48                         }\r
49                         String name = outputPlugin.getName();\r
50                         name = name.replaceAll("\\.", "/");\r
51                         srcDir = new File(outputPlugin.getAbsolutePath() +"/src/" + name);\r
52                         fileSelector.setInput(srcDir);\r
53                 }\r
54         }\r
55         \r
56         \r
57         @Override\r
58         public void createControl(Composite parent) {\r
59                 composite = new Composite(parent, SWT.NONE);\r
60                 composite.setLayout(new GridLayout(1,true));\r
61                 setControl(composite);  \r
62 \r
63                 Label label = new Label(composite, SWT.NONE);\r
64                 label.setText("Ontology resource files");\r
65                 fileSelector = CheckboxTableViewer.newCheckList(composite, SWT.BORDER);\r
66                 fileSelector.setContentProvider(new FileContentProvider());\r
67                 fileSelector.setLabelProvider(new FileLabelProvider());\r
68 \r
69                 label = new Label(composite, SWT.NONE);\r
70                 label.setText("Output file");\r
71                 outputText = new Text(composite, SWT.BORDER|SWT.SINGLE);\r
72                 Button button = new Button(composite, SWT.PUSH);\r
73                 button.setText("Combine");\r
74                 button.addSelectionListener(new SelectionAdapter() {\r
75                         @Override\r
76                         public void widgetSelected(SelectionEvent e) {\r
77                                 doCombination();\r
78                         }\r
79                 });\r
80                 \r
81                 GridDataFactory.fillDefaults().grab(true, true).align(SWT.FILL, SWT.FILL).applyTo(fileSelector.getControl());\r
82                 GridDataFactory.fillDefaults().grab(true, false).align(SWT.FILL, SWT.CENTER).applyTo(outputText);\r
83                 GridDataFactory.fillDefaults().align(SWT.RIGHT, SWT.CENTER).applyTo(button);\r
84         }\r
85         \r
86         public void setOutputPlugin(File outputPlugin) {\r
87                 this.outputPlugin = outputPlugin;\r
88         }\r
89         \r
90         private void doCombination() {\r
91                 String outputName = outputText.getText();\r
92                 if (outputName == null || outputName.length() < 2)\r
93                         return;\r
94                 if (!outputName.endsWith(".java"))\r
95                         outputName+=".java";\r
96                 \r
97                 File outputFile = new File(srcDir.getAbsolutePath()+"/"+outputName);\r
98                 \r
99                 Object sel[] = fileSelector.getCheckedElements();\r
100                 File inputFiles[] = new File[sel.length];\r
101                 for (int i = 0; i < sel.length; i++) {\r
102                         inputFiles[i] = (File)sel[i];\r
103                 }\r
104                 \r
105                 try {\r
106                         OntologyCombinator.combine(inputFiles, outputFile);\r
107                         setPageComplete(true);\r
108                 } catch (IOException e) {\r
109                         setErrorMessage(e.getMessage());\r
110                         e.printStackTrace();\r
111                 }\r
112                 \r
113         }\r
114         \r
115         private static class FileContentProvider implements IStructuredContentProvider {\r
116                 @Override\r
117                 public Object[] getElements(Object inputElement) {\r
118                         File directory = (File)inputElement;\r
119                         if (!directory.isDirectory())\r
120                                 return new Object[0];\r
121                         File[] files = directory.listFiles(new FilenameFilter() {\r
122                                 \r
123                                 @Override\r
124                                 public boolean accept(File dir, String name) {\r
125                                         return name.endsWith("java");\r
126                                 }\r
127                         });\r
128                         return files;\r
129                 }\r
130                 \r
131                 @Override\r
132                 public void dispose() {\r
133                         \r
134                 }\r
135                 \r
136                 @Override\r
137                 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {\r
138                         \r
139                 }\r
140         }\r
141         \r
142         private static class FileLabelProvider extends LabelProvider implements ITableLabelProvider {\r
143                 @Override\r
144                 public Image getColumnImage(Object element, int columnIndex) {\r
145                         return null;\r
146                 }\r
147                 \r
148                 @Override\r
149                 public String getColumnText(Object element, int columnIndex) {\r
150                         File file = (File)element;\r
151                         if (columnIndex == 0)\r
152                                 return file.getName();\r
153                         else\r
154                                 return null;\r
155                 }\r
156         }\r
157 \r
158 }\r