/******************************************************************************* * Copyright (c) 2007 VTT Technical Research Centre of Finland and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ package org.simantics.proconf.g3d.actions; import org.simantics.db.Graph; import org.simantics.db.GraphRequest; import org.simantics.db.GraphRequestAdapter; import org.simantics.db.GraphRequestStatus; import org.simantics.db.Session; import org.simantics.proconf.g3d.base.ThreeDimensionalEditorBase; public abstract class WriteAction extends ContextAction { boolean sync; public WriteAction(ThreeDimensionalEditorBase parent, boolean sync) { super(parent); this.sync = sync; } @Override public final void run() { Session session = parent.getSession(); if(!canActivate()) { return; } GraphRequest r = new GraphRequestAdapter() { @Override public GraphRequestStatus perform(Graph g) throws Exception { return doChanges(g); } @Override public void requestCompleted(GraphRequestStatus status) { afterChanges(status); } }; if (sync) { session.syncWrite(r); } else { session.asyncWrite(r); } } public abstract GraphRequestStatus doChanges(Graph graph) throws Exception; public void afterChanges(GraphRequestStatus status) { } public boolean canActivate() { return true; } }