EdgeColorIndexFilter.java revision 8346:d3413c4fee16
1/*
2 * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24package com.sun.hotspot.igv.filter;
25
26import com.sun.hotspot.igv.graph.*;
27import java.awt.Color;
28import java.util.List;
29
30public class EdgeColorIndexFilter extends AbstractFilter {
31
32    public static final String INPUTS = "INPUTS";
33    public static final String OUTPUTS = "OUTPUTS";
34    private final String applyTo;
35    private final Color[] colors;
36
37    public EdgeColorIndexFilter(String applyTo, Color... color) {
38        if (!applyTo.equals(INPUTS) && !applyTo.equals(OUTPUTS)) {
39            throw new IllegalArgumentException("applyTo");
40        }
41
42        this.applyTo = applyTo;
43        this.colors = color;
44    }
45
46    @Override
47    public String getName() {
48        return "Edge Color Index Filter";
49    }
50
51    @Override
52    public void apply(Diagram d) {
53        List<Figure> figures = d.getFigures();
54        for (Figure f : figures) {
55            Slot[] slots;
56            if (applyTo.equals(INPUTS)) {
57                List<InputSlot> inputSlots = f.getInputSlots();
58                slots = inputSlots.toArray(new Slot[inputSlots.size()]);
59            } else {
60                List<OutputSlot> outputSlots = f.getOutputSlots();
61                slots = outputSlots.toArray(new Slot[outputSlots.size()]);
62            }
63            int index = 0;
64            for (Slot slot : slots) {
65                if (index < colors.length && colors[index] != null) {
66                    slot.setColor(colors[index]);
67                    for (Connection c : slot.getConnections()) {
68
69                        c.setColor(colors[index]);
70                    }
71                }
72                index++;
73            }
74
75        }
76    }
77}
78