This file is indexed.

/usr/share/doc/libjgraph-java-doc/examples/com/jgraph/example/fastgraph/FastGraphModel.java is in libjgraph-java-doc 5.12.4.2+dfsg-2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
/*
 * Copyright (c) 2001-2005, Gaudenz Alder
 * Copyright (c) 2005, David Benson
 * 
 * See LICENSE file in distribution for licensing details of this source file
 */
package com.jgraph.example.fastgraph;

import java.util.Iterator;
import java.util.Map;

import javax.swing.undo.UndoableEdit;

import org.jgraph.graph.AttributeMap;
import org.jgraph.graph.ConnectionSet;
import org.jgraph.graph.DefaultGraphModel;
import org.jgraph.graph.Edge;
import org.jgraph.graph.GraphConstants;
import org.jgraph.graph.GraphLayoutCache;
import org.jgraph.graph.ParentMap;

// A Custom Model that does not allow Self-References
public class FastGraphModel extends DefaultGraphModel {
	
	/**
	 * A flag indicating whether or not undos are currently disabled
	 */
	protected boolean undoDisabled = true;
	
	// Override Superclass Method
	public boolean acceptsSource(Object edge, Object port) {
		// Source only Valid if not Equal Target
		return (((Edge) edge).getTarget() != port);
	}

	// Override Superclass Method
	public boolean acceptsTarget(Object edge, Object port) {
		// Target only Valid if not Equal Source
		return (((Edge) edge).getSource() != port);
	}

	/**
	 * Extends DefaultGraphModel insert method to check for large changes and
	 * sets the <code>undoDisabled</code> flag to true. Disabling the undo
	 * provides large performance and memory footprint advantages on huge
	 * inserts.
	 */
	public void insert(Object[] roots, Map attributes, ConnectionSet cs,
			ParentMap pm, UndoableEdit[] edits) {
//		System.out.println("Model insert starting, timestamp="
//				+ System.currentTimeMillis() + "ms");
		GraphModelEdit edit = createEdit(roots, null, attributes, cs, pm, edits);
		if (edit != null) {
			edit.execute(); // fires graphChangeEvent
			if (edits != null) {
				for (int i = 0; i < edits.length; i++)
					if (edits[i] instanceof GraphLayoutCache.GraphLayoutCacheEdit)
						((GraphLayoutCache.GraphLayoutCacheEdit) edits[i])
								.execute();
			}
			if (!undoDisabled) {
				postEdit(edit); // fires undoableedithappened
			}
		}
//		System.out.println("Model insert finished, timestamp="
//				+ System.currentTimeMillis() + "ms");
	}

	public void edit(Map attributes, ConnectionSet cs, ParentMap pm,
			UndoableEdit[] edits) {
//		System.out.println("Model edit starting, timestamp="
//				+ System.currentTimeMillis() + "ms");
		super.edit(attributes, cs, pm, edits);
//		System.out.println("Model edit finished, timestamp="
//				+ System.currentTimeMillis() + "ms");
	}

	/**
	 * Applies <code>attributes</code> to the cells specified as keys. Returns
	 * the <code>attributes</code> to undo the change.
	 */
	protected Map handleAttributes(Map attributes) {
		if (!undoDisabled) {
			return super.handleAttributes(attributes);
		}
		if (attributes != null) {
			Iterator it = attributes.entrySet().iterator();
			while (it.hasNext()) {
				Map.Entry entry = (Map.Entry) it.next();
				Object cell = entry.getKey();
				Map deltaNew = (Map) entry.getValue();
				AttributeMap attr = getAttributes(cell);
				
				if (attr != null) {
					attr.applyMap(deltaNew);
				}
				// Handle new values
				Object newValue = deltaNew.get(GraphConstants.VALUE);
				if (newValue != null) {
					valueForCellChanged(cell, newValue);
				}
			}
		}
		return null;
	}
}