/deprecated/org.eclipse.zest.core/src/org/eclipse/zest/core/viewers/internal/GraphModelEntityRelationshipFactory.java
https://github.com/uci-sdcl/lighthouse · Java · 137 lines · 67 code · 14 blank · 56 comment · 10 complexity · eafcbb83280fe22885a626dc6607df4c MD5 · raw file
- /*******************************************************************************
- * Copyright 2005-2006, CHISEL Group, University of Victoria, Victoria, BC,
- * Canada. 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: The Chisel Group, University of Victoria
- ******************************************************************************/
- package org.eclipse.zest.core.viewers.internal;
- import java.util.ArrayList;
- import java.util.List;
- import org.eclipse.zest.core.viewers.IGraphEntityRelationshipContentProvider;
- import org.eclipse.zest.core.widgets.Graph;
- import org.eclipse.zest.core.widgets.GraphContainer;
- import org.eclipse.zest.core.widgets.GraphNode;
- /*
- * A factory for the IGraphEntityRelationshipContentProvider.
- *
- * @author Del Myers
- */
- // @tag bug.154580-Content.fix
- // @tag bug.160367-Refreshing.fix : updated to use new
- // AbstractStylingModelFactory
- public class GraphModelEntityRelationshipFactory extends AbstractStylingModelFactory {
- public GraphModelEntityRelationshipFactory(AbstractStructuredGraphViewer viewer) {
- super(viewer);
- if (!(viewer.getContentProvider() instanceof IGraphEntityRelationshipContentProvider)) {
- throw new IllegalArgumentException("Expected IGraphEntityRelationshipContentProvider");
- }
- }
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.zest.core.internal.graphmodel.AbstractStylingModelFactory#createGraphModel()
- */
- public Graph createGraphModel(Graph model) {
- doBuildGraph(model);
- return model;
- }
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.zest.core.internal.graphmodel.AbstractStylingModelFactory#doBuildGraph(org.eclipse.zest.core.internal.graphmodel.GraphModel)
- */
- protected void doBuildGraph(Graph model) {
- super.doBuildGraph(model);
- Object[] nodes = getContentProvider().getElements(getViewer().getInput());
- nodes = filter(getViewer().getInput(), nodes);
- createModelNodes(model, nodes);
- createModelRelationships(model);
- }
- /**
- * Creates all the model relationships. Assumes that all of the model nodes
- * have been created in the graph model already. Runtime O(n^2) + O(r).
- *
- * @param model
- * the model to create the relationship on.
- */
- private void createModelRelationships(Graph model) {
- GraphNode[] modelNodes = getNodesArray(model);
- List listOfNodes = new ArrayList();
- for (int i = 0; i < modelNodes.length; i++) {
- listOfNodes.add(modelNodes[i]);
- }
- for (int i = 0; i < listOfNodes.size(); i++) {
- GraphNode node = (GraphNode) listOfNodes.get(i);
- if (node instanceof GraphContainer) {
- List childNodes = ((GraphContainer) node).getNodes();
- listOfNodes.addAll(childNodes);
- }
- }
- modelNodes = (GraphNode[]) listOfNodes.toArray(new GraphNode[listOfNodes.size()]);
- IGraphEntityRelationshipContentProvider content = getCastedContent();
- for (int i = 0; i < modelNodes.length; i++) {
- for (int j = 0; j < modelNodes.length; j++) {
- Object[] rels = content.getRelationships(modelNodes[i].getData(), modelNodes[j].getData());
- if (rels != null) {
- rels = filter(getViewer().getInput(), rels);
- for (int r = 0; r < rels.length; r++) {
- createConnection(model, rels[r], modelNodes[i].getData(), modelNodes[j].getData());
- }
- }
- }
- }
- }
- /**
- * Creates the model nodes for the given external nodes.
- *
- * @param model
- * the graph model.
- * @param nodes
- * the external nodes.
- */
- private void createModelNodes(Graph model, Object[] nodes) {
- for (int i = 0; i < nodes.length; i++) {
- createNode(model, nodes[i]);
- }
- }
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.zest.core.internal.graphmodel.IStylingGraphModelFactory#refresh(org.eclipse.zest.core.internal.graphmodel.GraphModel,
- * java.lang.Object)
- */
- public void refresh(Graph graph, Object element) {
- refresh(graph, element, false);
- }
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.zest.core.internal.graphmodel.IStylingGraphModelFactory#refresh(org.eclipse.zest.core.internal.graphmodel.GraphModel,
- * java.lang.Object, boolean)
- */
- public void refresh(Graph graph, Object element, boolean updateLabels) {
- // with this kind of graph, it is just as easy and cost-effective to
- // rebuild the whole thing.
- refreshGraph(graph);
- }
- private IGraphEntityRelationshipContentProvider getCastedContent() {
- return (IGraphEntityRelationshipContentProvider) getContentProvider();
- }
- }