import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.simantics.db.Statement;
import org.simantics.db.WriteGraph;
import org.simantics.db.common.request.WriteRequest;
import org.simantics.db.exception.DatabaseException;
import org.simantics.db.Statement;
import org.simantics.db.WriteGraph;
import org.simantics.db.common.request.WriteRequest;
import org.simantics.db.exception.DatabaseException;
-import org.simantics.db.exception.DoesNotContainValueException;
-import org.simantics.db.exception.ManyObjectsForFunctionalRelationException;
-import org.simantics.db.exception.NoSingleResultException;
-import org.simantics.db.exception.ServiceException;
+import org.simantics.db.layer0.util.Layer0Utils;
import org.simantics.db.request.Read;
import org.simantics.interop.test.GraphChanges;
import org.simantics.interop.test.GraphComparator;
import org.simantics.db.request.Read;
import org.simantics.interop.test.GraphChanges;
import org.simantics.interop.test.GraphComparator;
import org.simantics.interop.update.model.UpdateNode;
import org.simantics.interop.update.model.UpdateNode.Status;
import org.simantics.interop.update.model.UpdateNode;
import org.simantics.interop.update.model.UpdateNode.Status;
import org.simantics.utils.datastructures.Callback;
import org.simantics.utils.datastructures.Pair;
import org.simantics.utils.ui.ExceptionUtils;
import org.simantics.utils.datastructures.Callback;
import org.simantics.utils.datastructures.Pair;
import org.simantics.utils.ui.ExceptionUtils;
checked = manager.createImage(Activator.imageDescriptorFromPlugin("com.famfamfam.silk", "icons/tick.png"));
unchecked = manager.createImage(Activator.imageDescriptorFromPlugin("com.famfamfam.silk", "icons/cross.png"));
warning = manager.createImage(Activator.imageDescriptorFromPlugin("com.famfamfam.silk", "icons/error.png"));
checked = manager.createImage(Activator.imageDescriptorFromPlugin("com.famfamfam.silk", "icons/tick.png"));
unchecked = manager.createImage(Activator.imageDescriptorFromPlugin("com.famfamfam.silk", "icons/cross.png"));
warning = manager.createImage(Activator.imageDescriptorFromPlugin("com.famfamfam.silk", "icons/error.png"));
containsColor = new Color(parent.getDisplay(), new RGB(255,255,220));
deletedColor = new Color(parent.getDisplay(), new RGB(255,220,220));
addedColor = new Color(parent.getDisplay(), new RGB(220,255,220));
containsColor = new Color(parent.getDisplay(), new RGB(255,255,220));
deletedColor = new Color(parent.getDisplay(), new RGB(255,220,220));
addedColor = new Color(parent.getDisplay(), new RGB(220,255,220));
- composite = new Composite(parent, SWT.NONE);
- composite.setLayout(new GridLayout(1,false));
+ this.setLayout(new GridLayout(1,false));
GridData data = new GridData();
data.grabExcessHorizontalSpace = true;
data.grabExcessVerticalSpace = false;
GridData data = new GridData();
data.grabExcessHorizontalSpace = true;
data.grabExcessVerticalSpace = false;
- IEditorInput input = getEditorInput();
- if (!(input instanceof UpdateEditorInput)) {
- Label label = new Label(composite, SWT.NONE);
- label.setText("Unknown input.");
- return;
- }
-
- Composite fillComposite = new Composite(composite, SWT.NONE);
+// IEditorInput input = getEditorInput();
+// if (!(input instanceof UpdateEditorInput)) {
+// Label label = new Label(composite, SWT.NONE);
+// label.setText("Unknown input.");
+// return;
+// }
+
+ Composite fillComposite = new Composite(this, SWT.NONE);
TreeViewerColumn dataColumn = TableUtils.addColumn(changeBrowser, "Data", true, 600);
TreeViewerColumn dataColumn = TableUtils.addColumn(changeBrowser, "Data", true, 600);
selection.getColumn().addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
selection.getColumn().addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
- if (changes.getModifications().size() > 0) {
- if (selected.contains(changes.getModifications().get(0))) {
- for (Pair<Statement, Statement> nr : changes.getModifications())
+ if (updateList.getChanges().size() > 0) {
+ if (selected.contains(updateList.getChanges().iterator().next())) {
+ for (Pair<Statement, Statement> nr : updateList.getChanges())
updateAllButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
updateAllButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
updateSelectedButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
updateSelectedButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
protected abstract ColumnLabelProvider getLabelProvider(int i);
protected abstract Pair<GraphComparator,Boolean> getChanges(Resource r1, Resource r2) throws DatabaseException;
protected abstract UpdateTree getUpdateTree(GraphChanges changes) throws DatabaseException;
protected abstract ColumnLabelProvider getLabelProvider(int i);
protected abstract Pair<GraphComparator,Boolean> getChanges(Resource r1, Resource r2) throws DatabaseException;
protected abstract UpdateTree getUpdateTree(GraphChanges changes) throws DatabaseException;
label = new Label(errorComposite, SWT.NONE);
label.setText(text);
//this.setStatusMessage("Update contains structural changes (new or deleted symbols), please create a new model.");
label = new Label(errorComposite, SWT.NONE);
label.setText(text);
//this.setStatusMessage("Update contains structural changes (new or deleted symbols), please create a new model.");
- composite.layout(true);
+ this.layout(true);
+ }
+
+
+ private List<ICheckStateListener> checkStateListeners = new ArrayList<>();
+
+
+ public void addCheckStateListener(ICheckStateListener listener) {
+ checkStateListeners.add(listener);
+ }
Stack<UpdateNode> nodeStack = new Stack<UpdateNode>();
nodeStack.push((UpdateNode)updateTree.getRootNode());
while (!nodeStack.isEmpty()) {
UpdateNode n = nodeStack.pop();
if (n.getOp() != null) {
Stack<UpdateNode> nodeStack = new Stack<UpdateNode>();
nodeStack.push((UpdateNode)updateTree.getRootNode());
while (!nodeStack.isEmpty()) {
UpdateNode n = nodeStack.pop();
if (n.getOp() != null) {
- boolean applied = n.getOp().applied();
- if (applied) {
- changeBrowser.setChecked(n, true);
+ UpdateOp op = n.getOp();
+ if (!op.isAdd() && !op.isDelete()) {
- boolean sel = n.getOp().selected();
- if (sel) {
- selectedStructure.add(n);
-
- } else {
+ boolean applied = op.applied();
+ if (applied) {
+ changeBrowser.setChecked(n, true);
+ changeBrowser.setGrayed(n, true);
+ } else {
+ boolean sel = op.selected();
+ if (sel) {
+ selectedStructure.add(n);
+
+ } else {
+ selectedStructure.remove(n);
+ }
+ changeBrowser.setChecked(n, sel);
+ changeBrowser.setGrayed(n, false);
changes = comparator.getChanges();
changes = getSession().syncRequest(new FilterChangesRead(changes));
updateTree = getUpdateTree(changes);
changes = comparator.getChanges();
changes = getSession().syncRequest(new FilterChangesRead(changes));
updateTree = getUpdateTree(changes);
updateAllButton.setEnabled(false);
updateSelectedButton.setEnabled(false);
getSession().asyncRequest(new WriteRequest(){
@Override
public void perform(WriteGraph graph) throws DatabaseException {
updateAllButton.setEnabled(false);
updateSelectedButton.setEnabled(false);
getSession().asyncRequest(new WriteRequest(){
@Override
public void perform(WriteGraph graph) throws DatabaseException {
- for (Pair<Statement, Statement> mod : changes.getModifications()) {
+ Layer0Utils.addCommentMetadata(graph, "Apply all model updates");
+ graph.markUndoPoint();
+ for (Pair<Statement, Statement> mod : updateList.getChanges()) {
- private void applyLiteralChange(WriteGraph graph, Pair<Statement, Statement> mod) throws DoesNotContainValueException, ServiceException, ManyObjectsForFunctionalRelationException {
-
+ protected void applyLiteralChange(WriteGraph graph, Pair<Statement, Statement> mod) throws DatabaseException {
+ if (mod.second == null) {
+ graph.deny(mod.first);
+ return;
+ }
if (graph.hasValue(mod.second.getObject())) {
Object value = graph.getValue(mod.second.getObject());
graph.claimLiteral(s, pred, value);
if (graph.hasValue(mod.second.getObject())) {
Object value = graph.getValue(mod.second.getObject());
graph.claimLiteral(s, pred, value);
updateAllButton.setEnabled(false);
updateSelectedButton.setEnabled(false);
getSession().asyncRequest(new WriteRequest(){
@Override
public void perform(WriteGraph graph) throws DatabaseException {
updateAllButton.setEnabled(false);
updateSelectedButton.setEnabled(false);
getSession().asyncRequest(new WriteRequest(){
@Override
public void perform(WriteGraph graph) throws DatabaseException {
- try {
- return getSession().syncRequest(new Read<String>() {
- @Override
- public String perform(ReadGraph graph) throws DatabaseException {
- return node.getLabel(graph);
- }
- });
- } catch (Exception e) {
- return e.getMessage();
- }
+ return node.getLabel();