-package org.simantics.document.linking.wizard;\r
-\r
-import java.util.Collection;\r
-import java.util.LinkedHashMap;\r
-import java.util.List;\r
-import java.util.Map;\r
-\r
-import org.eclipse.jface.dialogs.InputDialog;\r
-import org.eclipse.jface.layout.GridDataFactory;\r
-import org.eclipse.jface.resource.LocalResourceManager;\r
-import org.eclipse.jface.viewers.IStructuredContentProvider;\r
-import org.eclipse.jface.viewers.LabelProvider;\r
-import org.eclipse.jface.viewers.Viewer;\r
-import org.eclipse.jface.wizard.WizardPage;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.events.SelectionAdapter;\r
-import org.eclipse.swt.events.SelectionEvent;\r
-import org.eclipse.swt.layout.GridLayout;\r
-import org.eclipse.swt.widgets.Button;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.TabFolder;\r
-import org.eclipse.swt.widgets.TabItem;\r
-import org.eclipse.ui.dialogs.ListDialog;\r
-import org.simantics.Simantics;\r
-import org.simantics.db.ReadGraph;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.common.NamedResource;\r
-import org.simantics.db.common.request.PossibleObjectWithName;\r
-import org.simantics.db.common.request.ReadRequest;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.db.request.Read;\r
-import org.simantics.document.linking.report.evaluator.DBUtil;\r
-import org.simantics.document.linking.report.templates.CustomizableContentProvider;\r
-import org.simantics.document.linking.report.templates.ReportWriter;\r
-import org.simantics.document.linking.report.templates.custom.CustomizableContent;\r
-import org.simantics.document.linking.report.templates.custom.EvaluatorCustomizableContent;\r
-import org.simantics.document.linking.report.templates.custom.SCLCustomizableContent;\r
-import org.simantics.layer0.Layer0;\r
-import org.simantics.utils.ui.validators.NotNullValidator;\r
-\r
-\r
-/**\r
- * \r
- * \r
- * @author Marko Luukkainen <marko.luukkainen@vtt.fi>\r
- *\r
- */\r
-public class ReportCustomizationPage extends WizardPage{\r
- \r
- ReportWriter<?> reportWriter;\r
- Resource model;\r
-\r
- private Map<String,Composite> widgets = new LinkedHashMap<String, Composite>();\r
- private TabFolder tabFolder;\r
- private Map<String,TabItem> tabs = new LinkedHashMap<String, TabItem>();\r
- \r
- private Button loadButton;\r
- private Button saveButton;\r
- private Button resetButton;\r
- private Resource library;\r
- \r
- protected ReportCustomizationPage(String pageName) {\r
- super(pageName,pageName,null);\r
- }\r
-\r
- @Override\r
- public void createControl(Composite parent) {\r
- Composite composite = new Composite(parent, SWT.NONE);\r
- composite.setLayout(new GridLayout(1,false));\r
- setControl(composite);\r
- tabFolder = new TabFolder(composite, SWT.NONE);\r
- tabFolder.setLayout(new GridLayout());\r
- GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(true, true).applyTo(tabFolder);\r
- Composite buttonComposite = new Composite(composite, SWT.NONE);\r
- GridDataFactory.fillDefaults().align(SWT.FILL, SWT.BOTTOM).grab(true, false).applyTo(buttonComposite);\r
- buttonComposite.setLayout(new GridLayout(3, true));\r
- loadButton = new Button(buttonComposite, SWT.PUSH);\r
- saveButton = new Button(buttonComposite, SWT.PUSH);\r
- resetButton = new Button(buttonComposite, SWT.PUSH);\r
- GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(loadButton);\r
- GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(saveButton);\r
- GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(resetButton);\r
- loadButton.setText("Load");\r
- saveButton.setText("Save");\r
- resetButton.setText("Defaults");\r
- \r
- loadButton.addSelectionListener(new SelectionAdapter() {\r
- @Override\r
- public void widgetSelected(SelectionEvent e) {\r
- load();\r
- }\r
- \r
- });\r
- saveButton.addSelectionListener(new SelectionAdapter() {\r
- public void widgetSelected(SelectionEvent e) {\r
- save();\r
- };\r
- });\r
- resetButton.addSelectionListener(new SelectionAdapter() {\r
- public void widgetSelected(SelectionEvent e) {\r
- reset();\r
- };\r
- });\r
- updateContent();\r
- }\r
- \r
- public void setReportWriter(ReportWriter<?> reportWriter) {\r
- this.reportWriter = reportWriter;\r
- updateContentProviders();\r
- updateContent();\r
- }\r
- \r
- public void setModel(final Resource model) {\r
- this.model = model;\r
- \r
- \r
- try {\r
- // TODO : this code retrieves a proper location for storing the template configurations in a model. \r
- // this should be changed so that model resource somehow tells where to store the configurations.\r
- // Note: in other models, the location of templates is the model resource itself.\r
- this.library = Simantics.getSession().syncRequest(new Read<Resource>() {\r
- @Override\r
- public Resource perform(ReadGraph graph) throws DatabaseException {\r
- Layer0 l0 = Layer0.getInstance(graph);\r
- Resource lib = graph.syncRequest(new PossibleObjectWithName(model, l0.ConsistsOf,"Library"));\r
- if (lib != null)\r
- return lib;\r
- \r
- return model;\r
- }\r
- });\r
- } catch (DatabaseException e) {\r
- this.library = model;\r
- }\r
- }\r
- \r
- private void updateContentProviders() {\r
- if (reportWriter instanceof CustomizableContentProvider) {\r
- LocalResourceManager manager = ((ReportWizard)getWizard()).manager;\r
- CustomizableContentProvider provider = (CustomizableContentProvider)reportWriter;\r
- Collection<String> ids = provider.getContentIds();\r
- for (String id : tabs.keySet()) {\r
- if (!ids.contains(id)) {\r
- tabs.remove(id).dispose();\r
- Composite c = widgets.get(id);\r
- if (c != null && !c.isDisposed())\r
- c.dispose();\r
- }\r
- }\r
- for (String id : ids) {\r
- CustomizableContent content = provider.getContent(id);\r
- if (content instanceof EvaluatorCustomizableContent) {\r
- TabItem item = tabs.get(id);\r
- if (item == null) {\r
- item = new TabItem(tabFolder, SWT.NONE);\r
- tabs.put(id, item);\r
- }\r
- item.setText(content.getCustomizationDescription());\r
- EvaluatorConfigurationWidget w = new EvaluatorConfigurationWidget(tabFolder,manager, SWT.NONE);\r
- w.setInput((EvaluatorCustomizableContent)content);\r
- GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(true, true).applyTo(w);\r
- Composite c = widgets.put(id, w);\r
- if (c != null)\r
- c.dispose();\r
- item.setControl(w);\r
- } else if (content instanceof SCLCustomizableContent) {\r
- \r
- }\r
- }\r
- }\r
- }\r
-\r
- \r
- @Override\r
- public void setVisible(boolean visible) {\r
- super.setVisible(visible);\r
- updateContent();\r
- }\r
- \r
- \r
- private void updateContent() {\r
- for (Composite c : widgets.values()) {\r
- if (c instanceof EvaluatorConfigurationWidget)\r
- ((EvaluatorConfigurationWidget)c).updateContent();\r
- }\r
- ((Composite)getControl()).layout(true);\r
- }\r
- \r
- private void load() {\r
- try {\r
- List<NamedResource> templates = DBUtil.getTemplates(library);\r
- \r
- ListDialog dialog = new ListDialog(getShell());\r
- dialog.setContentProvider(new IStructuredContentProvider() {\r
- \r
- @Override\r
- public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {\r
- \r
- }\r
- \r
- @Override\r
- public void dispose() {\r
- \r
- }\r
- \r
- @SuppressWarnings("unchecked")\r
- @Override\r
- public Object[] getElements(Object inputElement) {\r
- List<NamedResource> list = (List<NamedResource>)inputElement;\r
- return list.toArray();\r
- }\r
- });\r
- dialog.setLabelProvider(new LabelProvider());\r
- dialog.setInput(templates);\r
- if (dialog.open() != ListDialog.OK)\r
- return;\r
- Object result[] = dialog.getResult();\r
- if (result == null || result.length != 1)\r
- return;\r
- final NamedResource selectedTemplate = (NamedResource)result[0];\r
- Simantics.getSession().syncRequest(new ReadRequest() {\r
- \r
- @Override\r
- public void run(ReadGraph graph) throws DatabaseException {\r
- DBUtil.load(graph, selectedTemplate.getResource(), (CustomizableContentProvider)reportWriter);\r
- \r
- }\r
- });\r
- updateContentProviders();\r
- updateContent();\r
- \r
- } catch (DatabaseException e) {\r
- // TODO Auto-generated catch block\r
- e.printStackTrace();\r
- }\r
- \r
- }\r
- \r
- private void save() {\r
- try {\r
- \r
- InputDialog dialog = new InputDialog(getShell(), "Save report customization", "Give template name", "Name", new NotNullValidator("Name cannot be empty"));\r
- if (dialog.open() != InputDialog.OK)\r
- return;\r
- final String name = dialog.getValue();\r
- if (name == null || name.length() == 0)\r
- return;\r
- DBUtil.save(library, name, (CustomizableContentProvider)reportWriter);\r
- } catch (DatabaseException e) {\r
- // TODO Auto-generated catch block\r
- e.printStackTrace();\r
- }\r
- \r
- }\r
- \r
- private void reset() {\r
- if (reportWriter instanceof CustomizableContentProvider) {\r
- CustomizableContentProvider ccp = (CustomizableContentProvider)reportWriter;\r
- for (String id : ccp.getContentIds()) {\r
- ccp.setDefaultContent(id);\r
- }\r
- updateContentProviders();\r
- updateContent();\r
- }\r
- }\r
- \r
- \r
-\r
-}\r
+package org.simantics.document.linking.wizard;
+
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.jface.resource.LocalResourceManager;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+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.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.TabFolder;
+import org.eclipse.swt.widgets.TabItem;
+import org.eclipse.ui.dialogs.ListDialog;
+import org.simantics.Simantics;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.common.NamedResource;
+import org.simantics.db.common.request.PossibleObjectWithName;
+import org.simantics.db.common.request.ReadRequest;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.request.Read;
+import org.simantics.document.linking.report.evaluator.DBUtil;
+import org.simantics.document.linking.report.templates.CustomizableContentProvider;
+import org.simantics.document.linking.report.templates.ReportWriter;
+import org.simantics.document.linking.report.templates.custom.CustomizableContent;
+import org.simantics.document.linking.report.templates.custom.EvaluatorCustomizableContent;
+import org.simantics.document.linking.report.templates.custom.SCLCustomizableContent;
+import org.simantics.layer0.Layer0;
+import org.simantics.utils.ui.validators.NotNullValidator;
+
+
+/**
+ *
+ *
+ * @author Marko Luukkainen <marko.luukkainen@vtt.fi>
+ *
+ */
+public class ReportCustomizationPage extends WizardPage{
+
+ ReportWriter<?> reportWriter;
+ Resource model;
+
+ private Map<String,Composite> widgets = new LinkedHashMap<String, Composite>();
+ private TabFolder tabFolder;
+ private Map<String,TabItem> tabs = new LinkedHashMap<String, TabItem>();
+
+ private Button loadButton;
+ private Button saveButton;
+ private Button resetButton;
+ private Resource library;
+
+ protected ReportCustomizationPage(String pageName) {
+ super(pageName,pageName,null);
+ }
+
+ @Override
+ public void createControl(Composite parent) {
+ Composite composite = new Composite(parent, SWT.NONE);
+ composite.setLayout(new GridLayout(1,false));
+ setControl(composite);
+ tabFolder = new TabFolder(composite, SWT.NONE);
+ tabFolder.setLayout(new GridLayout());
+ GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(true, true).applyTo(tabFolder);
+ Composite buttonComposite = new Composite(composite, SWT.NONE);
+ GridDataFactory.fillDefaults().align(SWT.FILL, SWT.BOTTOM).grab(true, false).applyTo(buttonComposite);
+ buttonComposite.setLayout(new GridLayout(3, true));
+ loadButton = new Button(buttonComposite, SWT.PUSH);
+ saveButton = new Button(buttonComposite, SWT.PUSH);
+ resetButton = new Button(buttonComposite, SWT.PUSH);
+ GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(loadButton);
+ GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(saveButton);
+ GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(resetButton);
+ loadButton.setText(Messages.ReportCustomizationPage_Load);
+ saveButton.setText(Messages.ReportCustomizationPage_Save);
+ resetButton.setText(Messages.ReportCustomizationPage_Defaults);
+
+ loadButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ load();
+ }
+
+ });
+ saveButton.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ save();
+ };
+ });
+ resetButton.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ reset();
+ };
+ });
+ updateContent();
+ }
+
+ public void setReportWriter(ReportWriter<?> reportWriter) {
+ this.reportWriter = reportWriter;
+ updateContentProviders();
+ updateContent();
+ }
+
+ public void setModel(final Resource model) {
+ this.model = model;
+
+
+ try {
+ // TODO : this code retrieves a proper location for storing the template configurations in a model.
+ // this should be changed so that model resource somehow tells where to store the configurations.
+ // Note: in other models, the location of templates is the model resource itself.
+ this.library = Simantics.getSession().syncRequest(new Read<Resource>() {
+ @Override
+ public Resource perform(ReadGraph graph) throws DatabaseException {
+ Layer0 l0 = Layer0.getInstance(graph);
+ Resource lib = graph.syncRequest(new PossibleObjectWithName(model, l0.ConsistsOf,Messages.ReportCustomizationPage_Library));
+ if (lib != null)
+ return lib;
+
+ return model;
+ }
+ });
+ } catch (DatabaseException e) {
+ this.library = model;
+ }
+ }
+
+ private void updateContentProviders() {
+ if (reportWriter instanceof CustomizableContentProvider) {
+ LocalResourceManager manager = ((ReportWizard)getWizard()).manager;
+ CustomizableContentProvider provider = (CustomizableContentProvider)reportWriter;
+ Collection<String> ids = provider.getContentIds();
+ for (String id : tabs.keySet()) {
+ if (!ids.contains(id)) {
+ tabs.remove(id).dispose();
+ Composite c = widgets.get(id);
+ if (c != null && !c.isDisposed())
+ c.dispose();
+ }
+ }
+ for (String id : ids) {
+ CustomizableContent content = provider.getContent(id);
+ if (content instanceof EvaluatorCustomizableContent) {
+ TabItem item = tabs.get(id);
+ if (item == null) {
+ item = new TabItem(tabFolder, SWT.NONE);
+ tabs.put(id, item);
+ }
+ item.setText(content.getCustomizationDescription());
+ EvaluatorConfigurationWidget w = new EvaluatorConfigurationWidget(tabFolder,manager, SWT.NONE);
+ w.setInput((EvaluatorCustomizableContent)content);
+ GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(true, true).applyTo(w);
+ Composite c = widgets.put(id, w);
+ if (c != null)
+ c.dispose();
+ item.setControl(w);
+ } else if (content instanceof SCLCustomizableContent) {
+
+ }
+ }
+ }
+ }
+
+
+ @Override
+ public void setVisible(boolean visible) {
+ super.setVisible(visible);
+ updateContent();
+ }
+
+
+ private void updateContent() {
+ for (Composite c : widgets.values()) {
+ if (c instanceof EvaluatorConfigurationWidget)
+ ((EvaluatorConfigurationWidget)c).updateContent();
+ }
+ ((Composite)getControl()).layout(true);
+ }
+
+ private void load() {
+ try {
+ List<NamedResource> templates = DBUtil.getTemplates(library);
+
+ ListDialog dialog = new ListDialog(getShell());
+ dialog.setContentProvider(new IStructuredContentProvider() {
+
+ @Override
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+
+ }
+
+ @Override
+ public void dispose() {
+
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Object[] getElements(Object inputElement) {
+ List<NamedResource> list = (List<NamedResource>)inputElement;
+ return list.toArray();
+ }
+ });
+ dialog.setLabelProvider(new LabelProvider());
+ dialog.setInput(templates);
+ if (dialog.open() != ListDialog.OK)
+ return;
+ Object result[] = dialog.getResult();
+ if (result == null || result.length != 1)
+ return;
+ final NamedResource selectedTemplate = (NamedResource)result[0];
+ Simantics.getSession().syncRequest(new ReadRequest() {
+
+ @Override
+ public void run(ReadGraph graph) throws DatabaseException {
+ DBUtil.load(graph, selectedTemplate.getResource(), (CustomizableContentProvider)reportWriter);
+
+ }
+ });
+ updateContentProviders();
+ updateContent();
+
+ } catch (DatabaseException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ }
+
+ private void save() {
+ try {
+
+ InputDialog dialog = new InputDialog(getShell(), Messages.ReportCustomizationPage_SaveReportCustomizations, Messages.ReportCustomizationPage_GiveTemplateName, Messages.ReportCustomizationPage_Name, new NotNullValidator(Messages.ReportCustomizationPage_NameCannotBeEmpty));
+ if (dialog.open() != InputDialog.OK)
+ return;
+ final String name = dialog.getValue();
+ if (name == null || name.length() == 0)
+ return;
+ DBUtil.save(library, name, (CustomizableContentProvider)reportWriter);
+ } catch (DatabaseException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ }
+
+ private void reset() {
+ if (reportWriter instanceof CustomizableContentProvider) {
+ CustomizableContentProvider ccp = (CustomizableContentProvider)reportWriter;
+ for (String id : ccp.getContentIds()) {
+ ccp.setDefaultContent(id);
+ }
+ updateContentProviders();
+ updateContent();
+ }
+ }
+
+
+
+}