/******************************************************************************* * 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.shapeeditor.common; import java.util.Collection; import org.simantics.db.Builtins; import org.simantics.db.Resource; import org.simantics.layer0.utils.Statement; import org.simantics.layer0.utils.IEntity; import org.simantics.layer0.utils.viewpoints.AcceptDecision; import org.simantics.layer0.utils.viewpoints.AcceptRule; import org.simantics.layer0.utils.viewpoints.PlainStateFactory; import org.simantics.layer0.utils.viewpoints.ResourceViewpoint; import org.simantics.layer0.utils.viewpoints.State; import org.simantics.layer0.utils.viewpoints.StateFactory; import org.simantics.layer0.utils.viewpoints.TraversalDecision; import org.simantics.layer0.utils.viewpoints.TraversalRule; import org.simantics.layer0.utils.viewpoints.rules.AcceptAllResourceAcceptRule; import org.simantics.proconf.g3d.shapeeditor.ShapeEditorResources; public class ViewpointGenerator { public static ResourceViewpoint createStuctureViewpoint() { StateFactory f = new PlainStateFactory(); final State rootState = f.newState(); final State projectState = f.newState(); final State libraryState = f.newState(); return new ResourceViewpoint(new TraversalRule() { @Override public TraversalDecision makeTraversalDecision(State state, Statement statement) { Builtins b = statement.getGraph().getBuiltins(); if (state.equals(rootState)) { if (!statement.getPredicate().equals(b.ConsistsOf)) return TraversalDecision.stopTraversal; //if (!statement.getObject().isInstanceOf(b.Project)) // return TraversalDecision.stopTraversal; return TraversalDecision.continueTraversal(projectState); } else if (state.equals(projectState)) { if (!statement.getPredicate().equals(b.ConsistsOf)) return TraversalDecision.stopTraversal; //if (!statement.getObject().isInstanceOf(b.Library)) // return TraversalDecision.stopTraversal; return TraversalDecision.continueTraversal(libraryState); } else if (state.equals(libraryState)) { if (!statement.getPredicate().equals(b.ConsistsOf) && !statement.getPredicate().isSubrelationOf( ShapeEditorResources.g3dResource.HasChild)) return TraversalDecision.stopTraversal; return TraversalDecision.continueTraversal(libraryState); } return TraversalDecision.stopTraversal; } @Override public boolean areAllStatesRelevant() { return true; } @Override public Collection relevantStates() { return null; } }, new AcceptAllResourceAcceptRule(), rootState); } public static ResourceViewpoint createObjectStructureViewpoint() { StateFactory f = new PlainStateFactory(); final State rootState = f.newState(); return new ResourceViewpoint(new TraversalRule() { @Override public TraversalDecision makeTraversalDecision(State state, Statement statement) { if (state.equals(rootState)) { if (!statement.getPredicate().isSubrelationOf( ShapeEditorResources.g3dResource.HasChild)) return TraversalDecision.stopTraversal; return TraversalDecision.continueTraversal(rootState); } return TraversalDecision.stopTraversal; } @Override public boolean areAllStatesRelevant() { return true; } @Override public Collection relevantStates() { return null; } }, new AcceptAllResourceAcceptRule(), rootState); } public static ResourceViewpoint createObjectSizingParameterViewpoint(Resource modelToParameterRelation) { StateFactory f = new PlainStateFactory(); final State rootState = f.newState(); final State endState = f.newState(); final Resource relation = modelToParameterRelation; return new ResourceViewpoint(new TraversalRule() { @Override public TraversalDecision makeTraversalDecision(State state, Statement statement) { if (state.equals(rootState)) { if (!statement.getPredicate().isSubrelationOf(relation)) return TraversalDecision.stopTraversal; return TraversalDecision.continueTraversal(endState); } return TraversalDecision.stopTraversal; } @Override public boolean areAllStatesRelevant() { return true; } @Override public Collection relevantStates() { return null; } }, new AcceptAllResourceAcceptRule(), rootState); } public static ResourceViewpoint createViewpoint() { StateFactory f = new PlainStateFactory(); final State rootState = f.newState(); final State projectState = f.newState(); final State libraryState = f.newState(); return new ResourceViewpoint(new TraversalRule() { @Override public TraversalDecision makeTraversalDecision(State state, Statement statement) { Builtins b = statement.getGraph().getBuiltins(); if (state.equals(rootState)) { if (statement.getObject().isInstanceOf(b.Ontology)) return TraversalDecision.stopTraversal; if(!statement.getPredicate().equals(b.ConsistsOf)) return TraversalDecision.stopTraversal; return TraversalDecision.continueTraversal(projectState); } else if (state.equals(projectState)) { if(!statement.getPredicate().equals(b.ConsistsOf)) return TraversalDecision.stopTraversal; return TraversalDecision.continueTraversal(libraryState); } else if (state.equals(libraryState)) { if(!statement.getPredicate().equals(b.ConsistsOf)) return TraversalDecision.stopTraversal; return TraversalDecision.continueTraversal(libraryState); } return TraversalDecision.stopTraversal; } @Override public boolean areAllStatesRelevant() { return true; } @Override public Collection relevantStates() { return null; } }, new AcceptRule() { @Override public AcceptDecision makeAcceptDecision(State state, IEntity obj) { Builtins b = obj.getGraph().getBuiltins(); //NOSEResource nr = NOSEResource.getInstance(obj.getGraph()); if(obj.isInstanceOf(b.Project)) return AcceptDecision.REJECT; else if (obj.isInstanceOf(b.Ontology)) return AcceptDecision.REJECT; else return AcceptDecision.ACCEPT; } @Override public boolean areAllStatesRelevant() { return true; } @Override public Collection relevantStates() { return null; } }, rootState); } }